使用tensorflow搭建图像识别模型SSD之训练自己模型
前言
结合上一篇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 一份,会比较快,结果如图
下载编译工具: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这个地址根据自己情况而定,如图
下载算法模型:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md自己任选一个模型,为了更好适应检测效果,本人使用ssd,该注意的是,有些算法模型不适用本人的开发环境,所以有些算法模型跑不了。多换几个试试。这个模型和上面的训练模型是不同的,不要混为一谈。然后解压,地址随意。
修改必要配置
修改上述解压后的算法模型的部分配置 记事本或notepad打开 pipeline.config
修改 num_class:1,本人只使用了一个识别模型,故而只有一个分类。
此处介绍一下其他配置,文件的起始位置有这一句话,这话不是摆设的。看不懂,自觉关闭博客。
这句话的意思是我们要自行配置的参数有哪些。并让我们搜索 PATH_TO_BE_CONFIGURED进行修改。其中一共有这四个参数:train_input_reader的label_map_path and input_path fields与eval_input_reader 的 label_map_path and input_path fields。(一般都在文末)
配置参数如下
其中 这四个路径的文件是什么,从哪来,请看我上一篇博客,图像数据集合处理。https://blog.csdn.net/weixin_43670245/article/details/103896783
另外,由于本案例只是一个demo,所以,训练步骤不需要那么多,故而我修改训练步骤如下。真正应用,至少训练上十万次。
模型训练
打开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
然后出现如下即表示成功:
最后再模型生成的路径中,可查看到文件
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文件
我们期望,能够使用该模型,测试一下训练的结果。
是用如下脚本:
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)
最终输出结果如下:
此处需要提醒的是,有的时候我们不知道pb文件的储存信息,但又要用到它的时候该怎么办?我们可以使用如下cmd命令:
saved_model_cli show --dir ./xxxxxxxx --all
xxxxx是pb文件路径,可以对比一下上面代码,输入输出要啥都可以自己改。
此文章为个第三篇文章,到现在从模型识别到搭建,都用只是讲讲过程,偏实践,没有多少讲解,往后,本人会出一些篇章,介绍一些图像处理,机器学习和深度学习的文章,敬请期待。
上一篇: struts2小结(3)
下一篇: 模型训练技巧——**函数mish