关于简单目标识别与意图分析的机器学习实战研究(第九节 神经网络目标识别——基于inception v3模型的分类器)

        这一节主要讲怎样判断意图,我们的思路是这样的:首先以意图命名文件夹(这里我们还是以最初定下的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容