美文网首页
关于简单目标识别与意图分析的机器学习实战研究(第九节 神经网络目

关于简单目标识别与意图分析的机器学习实战研究(第九节 神经网络目

作者: LMN_e67a | 来源:发表于2019-06-22 12:13 被阅读0次

        这一节主要讲怎样判断意图,我们的思路是这样的:首先以意图命名文件夹(这里我们还是以最初定下的attack、combat和march),而后在各文件夹下对应放置各简图,然后用分类器分类并计算这些样本与测试图片间的相似度。

        刚开始我们想着直接各图之间作比较,在网上查了一下,有灰度的、cos的、均值hash和感知hash算法的(可以忽视图像的旋转角度)比较,按比较的方向不同,计算出来的相似度也不同,但数值不具有普遍性,同一张图片多次比较得到的结果不同。下面我选用了均值hash和感知hash的平均和来作为相似度,得到的结果分别是91.40625%和87.5%:

均值hash和感知hash测试简图1 均值hash和感知hash测试简图2

        为了得到更局普遍意义上的结果,这里还是选用深度学习框架来对大量训练数据进行分析,用整个训练集来与实验图片比较相似度,得到的结果才能让同学老师满意。下面是使用inception v3模型,将原先的softmax输出抛弃,自定义分类的种类,训练参数,得到自己的分类模型,顺便打印出相似度。

        按照这个思路,首先还是制作特定的文件夹存放数据:

bottleneck(空文件夹)

data(存放要训练的图片数据)

images(用来测试的图片数据)

        将我们之前准备好的attack、combat和march文件夹放在data下面:

小部分训练集

        image文件夹下放一张准备测试的图片:

测试用图片

        而后下载retrain.py 程序,它是用于下载inception v3模型以及训练后面的分类器,我们会在inception模型的基础上进行自己图片分类的代码。附上retrain.py的链接:https://github.com/tensorflow/hub/blob/master/examples/image_retraining/retrain.py

        下载完成后,运行retrain.py,下载inception v3模型并训练分类器,它的命令格式具体如下:

# 1.模型和样本路径的设置

bottleneck_dir                      #训练数据存放

how_many_training_steps            #训练次数

MODEL_DIR = 'inception_model'      # inception模型位置

output_graph                      #输出标签的pb文件

output_labels                      #输出检测标签,这里为attackcombatmarch

image_dir                         #测试用图片位置

# 2. 神经网络参数的设置(默认)

LEARNING_RATE = 0.01

STEPS = 4000

BATCH = 100

        这里我的运行命令如下,运行后会生成output_graph.pb和output_labels.txt两个文件,我们的分类效果就是靠这两个文件内的训练数据,bottleneck_dir文件夹中会对应每张图片生成一个txt文档,计算的是训练参数:

执行命令 训练数据

        好的,我们的训练很快就完成了,下面就可以进行坦克军团的意图识别了,首先写一个数据接收并调用模型的脚本:

import tensorflow as tf

import os 

import numpy as np 

import re 

from PIL import Image 

import matplotlib.pyplot as plt 

lines = tf.gfile.GFile('retrained_labels.txt').readlines() 

uid_to_human ={} 

#读取参数中的数据 

for uid,line in enumerate(lines): 

    line=line.strip('\n') 

    uid_to_human[uid]=line 

def id_to_string(node_id): 

    if node_id not in uid_to_human: 

        return '' 

    return uid_to_human[node_id] 

#创建图来存放训练好的模型参数 

with tf.gfile.FastGFile('retrained_graph.pb','rb') as f: 

    graph_def = tf.GraphDef() 

    graph_def.ParseFromString(f.read()) 

    tf.import_graph_def(graph_def,name='') 

#测试图片分类 

with tf.Session() as sess: 

    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') 

    #遍历目录 

    for root,dirs,files in os.walk('images/'): 

        for file in files: 

            #载入图片 

            image_data = tf.gfile.FastGFile(os.path.join(root,file),'rb').read() 

            #jpeg格式的图片 

            predictions = sess.run(softmax_tensor,{'DecodeJpeg/contents:0':image_data}) 

            #结果转为1维度 

            predictions = np.squeeze(predictions) 

            #打印图片信息 

            image_path = os.path.join(root,file) 

            print (image_path) 

            #显示图片 

            img=Image.open(image_path) 

            plt.imshow(img) 

            plt.axis("off") 

            plt.show() 

            #排序 

            top_k = predictions.argsort()[::-1] 

            print(top_k) 

            for node_id in top_k: 

                human_string =id_to_string(node_id) 

                #置信度 

                score = predictions[node_id] 

                print ('%s (score = %.5f)' % (human_string, score)) 

            print() 

        我们传入一张坦克军团图片(attack意图),然后将它转成连线简图放在images文件夹中,然后运行命令:

运行命令

分类器输出结果如下:

输入图片读取 相似度评分

        正如输出打印所示,分类器将三种意图的可能性打印了出来,其中attack占0.81665,combat占0.12556,march占0.05779,效果极其明显。

        以上便是对图片内目标进行识别和意图分析的主要过程,同学的汇报也受到了老师的表扬,看来是时候让他准备请客啦。最后一节,将会继续改良脚本,将整个项目的过程关联在一起。

代码已上传至GitHub及Gitee,欢迎star,欢迎讨论:

GitHub:https://github.com/wangwei39120157028/Machine_Learning_research_on_simple_target_recognition_and_intention_analysis

Gitee:https://gitee.com/wwy2018/Machine_Learning_research_on_simple_target_recognition_and_intention_analysis/settings

相关文章

网友评论

      本文标题:关于简单目标识别与意图分析的机器学习实战研究(第九节 神经网络目

      本文链接:https://www.haomeiwen.com/subject/vfbmqctx.html