基于tensorflow版SSD目标检测(linux系统)

基于tensorflow版SSD目标检测(linux系统)

致谢声明

本文在学习《目标检测实践_tensorflow版SSD数据准备》的基础上优化并总结,此博客链接:https://www.jianshu.com/p/3d9436b4cb66,感谢此博客作者。
1、前言
在进行本文操作之前,需要先安装好tensorflow,anaconda。
本文作者的环境:python3.7.5、linux、tensorflow1.13.1。
2、下载图片
本文作者将进行猫(cat)和狗(dog)的识别,同学们可从网上下载,本文作者将提供python爬虫下载图片。链接: https://pan.baidu.com/s/1PHsnL9OH8ABgutP8Ze_GaA 提取码: rdpr
在桌面新建文件夹 目标识别 ,在该文件下放下载好的图片的文件夹 photos
3、给图片打标签
本文作者打标签将使用 labelImg-master 工具。在 labelImg-master文件下,打开终端,输入 python labelImg.py,打开后的界面如下图所示:基于tensorflow版SSD目标检测(linux系统)_第1张图片
点击Open Dir,首先打开桌面的目标检测文件夹,在选中文件夹photos的情况下,点击选择文件夹按钮。
注意:只需要鼠标选中文件夹photos,不需要进入文件夹photos中。
在输入法为英文输入的情况下,按键盘上的w键则可以开始绘制方框,方框会框住图片中的物体。完成绘制方框后,还需要为方框标上类别,如下图所示。基于tensorflow版SSD目标检测(linux系统)_第2张图片
注意:每完成一张图的打标签,一定要记得保存。
标签打完之后,在photos文件夹下会出现 .xml 文件。
4、数据准备
在 目标检测 文件夹下打开终端,输入 jupyter notebook ,会打开一个新的标签页,如下图:基于tensorflow版SSD目标检测(linux系统)_第3张图片
点击 新建——python3,将出现一个新的未命名标签页,如下图:基于tensorflow版SSD目标检测(linux系统)_第4张图片
点击 未命名 进行重命名。为了同学们方便对照学习,建议同学们与本文作者的重命名一样。
<1>、xml文件转csv文件。新建文件xml_to_csv.ipynb。
注意:xml转csv的意思是,将xml文件中的信息整合到csv文件中。
代码链接: https://pan.baidu.com/s/1mJQmBTd0RsVHiZm4L4lnPQ 提取码: e7pi
如下图 :基于tensorflow版SSD目标检测(linux系统)_第5张图片
运行代码后会显示 成功产生文件train.csv,训练集共有多少张图片
成功产生文件test.csv,测试集共有多少张图片。
<2>、csv 文件转 tfrecord 文件。新建文件csv_to_tfrecord.ipynb。
注意:csv转tfrecord的意思是,将csv文件中的信息和图片数据整合到tfrecord文件中。
代码链接: https://pan.baidu.com/s/1jtE2fEFu2BVL4oFNuM3Sog 提取码: s4z2
如下图:基于tensorflow版SSD目标检测(linux系统)_第6张图片
运行代码后会显示 成功产生tfrecord文件,保存在路径:training/train.tfrecord
成功产生tfrecord文件,保存在路径:training/test.tfrecord。
5、配置环境
下载文件object_detection
链接: https://pan.baidu.com/s/1wIwipa-HVyf9amQrSFJuzw 提取码: gu8w
下载文件nets
链接: https://pan.baidu.com/s/1Z-Fy5oKQwOfki-n4sbidsA 提取码: ngdf
6、编写pbtxt文件
在桌面文件夹目标检测的文件夹training中,创建文本文件my_label_map.pbtxt。
复制下面一段内容到文本文件my_label_map.pbtxt中。

item {
    name : "cat"
    id : 1
}
item {
    name : "dog"
    id : 2
}

注意:此处的"cat" "dog"应该与打的标签名称一致。如果同学们以后自己练习时,可根据自己的标签名称和数量修改my_label_map.pbtxt文件。
7、编写tensorflow_model.pth文件
在桌面文件夹目标检测的文件夹中,创建文本文件tensorflow_model.pth。内容为:
目标检测文件夹的路径
目标检测文件夹的路径/silm

例如本文作者:/home/lmj/桌面/目标检测2
/home/lmj/桌面/目标检测2/slim

注意:将文本文件tensorflow_model.pth编辑好之后,复制到/anaconda3/lib/python3.7/site-packages路径下
如果没有编写配置tensorflow_model.pth,训练模型时会报错:

Traceback (most recent call last):
  File "object_detection/model_main.py", line 25, in 
    from object_detection import model_hparams
ModuleNotFoundError: No module named 'object_detection'

在这里插入图片描述
8、编写配置文件
<1>、下载配置文件
在桌面文件夹目标检测的文件夹training中,创建配置文件ssdlite_mobilenet_v2_coco.config。
链接: https://pan.baidu.com/s/1ERp0zJ4cpI5VHHeHcyI_Rg 提取码: ud28
<2>、修改配置文件
原生配置文件中的需要修改的部分:
a、第9行的num_classes,对于本文来说,此数设置为2。因为只有两类标签“cat” “dog”
b、第143行的batch_size,对于本文来说,此数设置为5,读者根据自己的电脑配置,可以调高或者调低。
c、第177行input_path设置成"training/train.tfrecord"。
d、第179行label_map_path设置成"training/my_label_map.pbtxt"。
e、第191行input_path设置成"training/test.tfrecord"。
f、第193行label_map_path设置成"training/my_label_map.pbtxt"。
g、第158、159这2行需要删除。

9、训练数据
在桌面目标检测文件夹下打开终端,输入代码:
python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr按下回车开始训练。训练时不可关闭这个终端,否则训练终止。训练次数可在目标检测文件夹下的training文件中查看。当终端显示 Use tf.data.Dataset.batch(..., drop_remainder=True).时说明没有出现错误。
10、查看模型训练情况
模型训练稳定地进行后,在桌面的目标检测文件夹中新打开一个终端,终端中运行命令:tensorboard --logdir=training。运行结束后,终端中会有一个链接(例如本文作者http://lmj-Inspiron-3442:6006 ),将此链接复制到浏览器中,可查看模型训练情况(建议使用谷歌浏览器)。如果训练次数较少,模型训练会不太理想,识别度较低或者识别错误等等,建议训练20000次。本文作者当训练8000次左右时可查看到模型,训练次数较少时输入的链接打不开。
11、模型测试
<1>、在目标检测文件夹下打开终端,输入代码:

python object_detection/export_inference_graph.py --input_type=image_tensor --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --trained_checkpoint_prefix=training/model.ckpt-35549 --output_directory=cat_35549_graph

注意:这里的 cat_35549_graph名称是导出的模型的名称,可自行修改,但数字 35549 是自己训练模型的次数,训练了N次,这里的数字就是N。
<2>、将导出的模型文件放到object_detection文件夹下。
<3>、复制my_label_map.pbtxt文件到object_detection文件夹下的data文件夹中。
<4>、在object_detection文件下的test_images文件夹中放入我们要测试的图片。
<5>在object_detection文件下打开终端,输入jupyter notebook,回车,此时将打开jupyter notebook。
<6>打开object_detection_tutorial.ipynb。需要修改一下地方:基于tensorflow版SSD目标检测(linux系统)_第7张图片
MODEL_NAME = 后面的名称根据导出的模型名称修改。基于tensorflow版SSD目标检测(linux系统)_第8张图片
{}.jpg根据自己的测试图片的名称修改,(1, 2)为测试图片的数量。
<7>、每个模块挨个运行,否则会出现/home/lmj/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:22: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.这样的错误。若没有错误将会显示图片

基于tensorflow版SSD目标检测(linux系统)_第9张图片
此时,猫和狗的目标检测已经基本结束。时间仓促,文章肯定有不足的地方和错误的地方,希望大家多多指教。如果同学们在练习时有啥问题可以留言评论,大家多多交流。

你可能感兴趣的:(目标检测,python,tensorflow,ssd,目标检测,目标检测linux系统,Traceback,(most,recent,call,last):,UserWarning:,Matplotlib,is,currentl)