欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用tensorflow搭建图像识别模型SSD之训练自己模型

程序员文章站 2022-06-02 14:30:13
...

前言

结合上一篇csdn,本此模型使用上一篇博客生成的数据集合。其中包括四个文件labemap.pbtxt,train.tfrecord,test.tfrecord,如有不了解的,请看本人上一篇博客。
https://blog.csdn.net/weixin_43670245/article/details/103896783
搭建环境
cuda 10 +cudnn7.4.2.24+tensorflow 1.14-gpu+ python 3.7.5

搭建流程

下载所用训练模型

下载训练模型地址: https://github.com/tensorflow/models
然后将 models文件拷贝到tensorflow下,此处本人使用Win 10,python pip 安装,故而目录在:python安装路径、Python37\Lib\site-packages\tensorflow下,本人一般使用git,直接clone 一份,会比较快,结果如图
使用tensorflow搭建图像识别模型SSD之训练自己模型
下载编译工具:https://github.com/protocolbuffers/protobuf/releases?after=v3.3.2
下载完,解压后将protoc.exe放入C:\Windows下。
打开cmd并运行 protoc object_detection/protos/.proto --python_out=.
其中 object_detection/protos/
.proto 是指向训练模型地址的:python安装路径\Python37\Lib\site-packages\tensorflow\models\research\object_detection\protos这个地址根据自己情况而定,如图
使用tensorflow搭建图像识别模型SSD之训练自己模型
下载算法模型https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md自己任选一个模型,为了更好适应检测效果,本人使用ssd,该注意的是,有些算法模型不适用本人的开发环境,所以有些算法模型跑不了。多换几个试试。这个模型和上面的训练模型是不同的,不要混为一谈。然后解压,地址随意。
使用tensorflow搭建图像识别模型SSD之训练自己模型

修改必要配置

修改上述解压后的算法模型的部分配置 记事本或notepad打开 pipeline.config
修改 num_class:1,本人只使用了一个识别模型,故而只有一个分类。使用tensorflow搭建图像识别模型SSD之训练自己模型
此处介绍一下其他配置,文件的起始位置有这一句话,这话不是摆设的。看不懂,自觉关闭博客。
这句话的意思是我们要自行配置的参数有哪些。并让我们搜索 PATH_TO_BE_CONFIGURED进行修改。其中一共有这四个参数:train_input_reader的label_map_path and input_path fields与eval_input_reader 的 label_map_path and input_path fields。(一般都在文末)
使用tensorflow搭建图像识别模型SSD之训练自己模型
配置参数如下
使用tensorflow搭建图像识别模型SSD之训练自己模型
其中 这四个路径的文件是什么,从哪来,请看我上一篇博客,图像数据集合处理。https://blog.csdn.net/weixin_43670245/article/details/103896783

另外,由于本案例只是一个demo,所以,训练步骤不需要那么多,故而我修改训练步骤如下。真正应用,至少训练上十万次。
使用tensorflow搭建图像识别模型SSD之训练自己模型

模型训练

打开cmd 运行
python object_detection/train.py ^
–logtostderr ^
–pipeline_config_path=上一步修改的pipeline.cofig ^
–train_dir=生产的模型路径 ^

其中 object_detection/train.py为训练模型下的文件,不是算法模型下的文件。本人路径是:python安装路径\Python37\Lib\site-packages\tensorflow\models\research\object_detection
然后出现如下即表示成功:
使用tensorflow搭建图像识别模型SSD之训练自己模型
最后再模型生成的路径中,可查看到文件
model.ckpt-xxxx.yyyy文件,其中xxxx表示第几步训练得出结果,而yyyy则是生成的不同文件。
我们期望只要其中某一个结点的信息即可,故而我们期望能有个工具能拼合摸一个结点的信息。所以cmd运行如下命令

python object_detection/export_inference_graph.py ^
–input_type image_tensor ^
–pipeline_config_path=上面修改过的pipeline.config文件 ^
–trained_checkpoint_prefix=上面训练完生成的model.ckpt-xx ^ xx是几自己选择,后面的.yy不用处理
–output_directory=最终生成自己训练的模型文件路径

模型加载

上面最终生成的自己训练的模型的路径我这里默认为 output_directory,这个是拼合完训练模型后的一个数据。其中saved_model包含.pb文件
使用tensorflow搭建图像识别模型SSD之训练自己模型
我们期望,能够使用该模型,测试一下训练的结果。
是用如下脚本:

import tensorflow as tf
import numpy as np
from PIL import Image

signature_key = tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY

input_key = 'inputs'
output_key = 'detection_boxes'

graph = tf.Graph()
export_dir = "output_directory/saved_model"   # output_directory 自定,上面提到过

image_content = []

img = Image.open('指定一个图片路径')  #指定自己的一个图片路径
image_np = np.array(img)
image = np.asarray(image_np)

with tf.Session(graph=graph) as sess:
    model = tf.saved_model.loader.load(sess, ['serve'], export_dir)
    signature = model.signature_def
    x_tensor_name = signature['serving_default'].inputs[input_key].name
    y_tensor_name = signature['serving_default'].outputs[output_key].name

    x = sess.graph.get_tensor_by_name(x_tensor_name)
    y = sess.graph.get_tensor_by_name(y_tensor_name)

    y_out = sess.run(y, feed_dict={x: [image]})  # 输出的数据是归一化后的数据

    print('-------------- inference results ----------------')
    print(y_out)

最终输出结果如下:
使用tensorflow搭建图像识别模型SSD之训练自己模型
此处需要提醒的是,有的时候我们不知道pb文件的储存信息,但又要用到它的时候该怎么办?我们可以使用如下cmd命令:

saved_model_cli show --dir ./xxxxxxxx --all  

xxxxx是pb文件路径,可以对比一下上面代码,输入输出要啥都可以自己改。
使用tensorflow搭建图像识别模型SSD之训练自己模型

此文章为个第三篇文章,到现在从模型识别到搭建,都用只是讲讲过程,偏实践,没有多少讲解,往后,本人会出一些篇章,介绍一些图像处理,机器学习和深度学习的文章,敬请期待。