第一次目标检测及遇到的问题

一,环境

本文作者环境:python3.6.8、Windows10、tensorflow1.9.0、Anaconda

遇到的问题:
①安装tensorflow时,不知具体步骤
②运行代码时,发现tensorflow版本与代码不符合
解决过程:
①作者通过查询及实验,总结出较为便捷的安装方式:先安装Anaconda,然后通过Anaconda安装tensorflow
作者已将Anaconda上传百度网盘,有兴趣的可以自行下载:链接:https://pan.baidu.com/s/1WPjGi63SvY535uMUHZuhTA 提取码:al3d (由于文件较大,也可以在网上自行下载)
②在Anaconda中修改已安装的Anaconda版本(一般为当前最新版本)

1.1修改tensorflow版本

如图点击红色箭头标记处

tensorflow训练目标检测模型 基于tensorflow的目标检测_tensorflow训练目标检测模型


再点击如图点击红色箭头标记处

tensorflow训练目标检测模型 基于tensorflow的目标检测_tensorflow_02


选择Not installed,在右侧搜索框中输入tensorflow,勾选后,进行下载。

1.2更改tensorflow版本

点击上一步红色箭头标记处,点击进入installed,搜索tensorflow并点击,然后点击下图所示红色箭头处,选择tensorflow版本

tensorflow训练目标检测模型 基于tensorflow的目标检测_tensorflow训练目标检测模型_03

二,具体过程

1.下载图片

本文作者第一次进行目标检测,选定目标为人(hunman)和鱼(fish)的识别,因为是新手,所以选定目标较为简单。从网上下载了图片之后,进行下一步。

2.选择图片

在数据集中,选择的图片应该清晰,有极少数图片像素点少,不清晰的,需要剔除。因为像素点少的图片不利于模型训练或模型测试,所以用python代码选出部分图片文件。

遇到的问题:代码报错,没有找到相应文件夹 。报错代码:get_some_qualified_images(‘n01440764’, 100, ‘selected_images’)
解决方法:get_some_qualified_images(‘n01440764’, 100, ‘selected_images’)这句代码中第一个元素为获取原图片文件夹名称,第二个元素为筛选图片的数量,第三个元素为筛选后图片存放文件夹名称

3.缩小图片

在jupyter notebook中新建代码文件,运行后图片经过PIL库打开再保存,保持图片质量的情况下,能够缩小图片文件大小3倍左右。

4.给图片打标签

使用打标签工具LabelImg。链接:https://pan.baidu.com/s/1-XemcsCgydZ0ixh1u0dslA 提取码:fy8k
把压缩文件放到目标文件中,选择解压到当前文件夹。
LabelImg程序在文件夹中。选择labelImg.py以python运行(pycharm等IDE中运行也可以)。
在打开的软件界面,点击Open Dir按钮,选中缩小图片文件夹,进行打标签
遇到的问题:不会使用代码打标签
解决方法:“W”为打标签快捷方式

5.xml转csv

xml转csv的意思是,将xml文件中的信息整合到csv文件中。本文作者将函数train_test_split的参数random_state的值设为1,这样每次划分的训练集和测试集总是相同。如果不设置此参数,则每次划分的训练集和测试集不同。
在目标文件夹中启动cmd,输入jupyter notebook,新建代码文件xml_to_csv.ipynb,输入相应代码并运行。

6.csv转tfrecord

csv转tfrecord的意思是,将csv文件中的信息和图片数据整合到tfrecord文件中。

6.1 配置环境

下载文件object_detection.zip

链接:https://pan.baidu.com/s/1JSpLmf7j-6ZG_wNBiBTaaw 提取码:tpna 。将其移动到目标文件夹,选择提取到"object_detection"

如下图所示

tensorflow训练目标检测模型 基于tensorflow的目标检测_tensorflow_04


遇到的问题:在运行代码时没有找到相应文件,如object_detection

解决方法:在目标文件夹中打开cmd,即在路径中输入cmd后按Enter键运行。在cmd中输入以下代码并运行

python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr

运行结果会报错。

进入windows的环境变量编辑界面,新建一个系统变量,变量名为:PYTHONPATH;变量值为:目标文件路径。如下图

tensorflow训练目标检测模型 基于tensorflow的目标检测_目标检测_05


图中两处红色方框内容一致即可

6.2 编辑和运行代码

在桌面的目标检测文件夹中新建代码文件csv_to_tfrecord.ipynb,上面一段代码运行完成后,目标文件夹中会产生一个文件夹training,其中有两个文件,如下图

tensorflow训练目标检测模型 基于tensorflow的目标检测_目标文件_06

7.编写pbtxt文件

在目标文件夹中的training文件夹中,创建文本文件my_label.pbtxt。
复制下面一段内容到文本文件my_label.pbtxt中。

item {
    name : "fish"
    id : 1
}
item {
    name : "human"
    id : 2
}

每一个item为一个标签,name为标签内容,id为标签序列。
保存后,training文件夹中有三个文件。

8.编写配置文件

方法:修改原生配置文件

可以在object_detection文件夹中的samples/config路径下,找到原生配置文件ssdlite_mobilenet_v2_coco.config,如下图红色箭头标记处所示。

tensorflow训练目标检测模型 基于tensorflow的目标检测_目标检测_07


原生配置文件ssdlite_mobilenet_v2_coco.config先复制1份到桌面文件目标检测的文件夹training中。

原生配置文件中的需要修改的部分:

  1. 第9行的num_classes,对于本文来说,此数设置为2。
  2. 第143行的batch_size,对于本文来说,此数设置为5,读者根据自己的电脑配置,可以调高或者调低。
  3. 第177行input_path设置成"training/train.tfrecord"。
  4. 第179行label_map_path设置成"training/my_label.pbtxt"。
  5. 第191行input_path设置成"training/test.tfrecord"。
  6. 第193行label_map_path设置成"training/my_label.pbtxt"。
  7. 第158、159这2行需要删除。

修改配置文件ssdlite_mobilenet_v2_coco.config并保存后,此时文件夹training中有4个文件。

遇到的问题:在按步骤完成后,cmd中运行时报错。
解决方法:次错误在于没有删除159、159这两行代码,导致冲突。同时希望读者在寻找目标文件时看清名称,避免出错。

三、其他问题

3.1.成功添加环境变量后,需要在目标文件夹中重新打开cmd。在cmd中运行命令:python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr,运行结果如下图:

tensorflow训练目标检测模型 基于tensorflow的目标检测_tensorflow_08

解决方法(适用于windows):首先下载Microsoft C++ build 14.0

链接:https://pan.baidu.com/s/1INlWLq28MgFWvCiuy_b0zg 提取码:r759

读者也可自行下载(文件较小,大概只有3、4M)

打开安装文件visualcppbuildtools.exe,初始化安装程序,安装类型选择自定义,然后点击下一步,如下图红色箭头标记处所示

tensorflow训练目标检测模型 基于tensorflow的目标检测_目标检测_09


选择功能只勾选Windows 10 SDK 10.0.10240,然后点击下一步。点击安装按钮,则开始安装。完成安装后,关闭即可。

3.2下载并安装pycocotools

链接:https://pan.baidu.com/s/1Fdqj0NHKIYLd-qpPJzInew 提取码:m1lg

或者打开git页面,链接:https://github.com/philferriere/cocoapi 下载按钮的位置如下图所示,点击Download ZIP即可开始下载。如下图

tensorflow训练目标检测模型 基于tensorflow的目标检测_目标文件_10

对压缩文件cocoapi-master.zip选择解压到当前文件夹。进入文件夹cocoapi-master中的文件夹PythonAPI,在此文件夹下打开cmd,在cmd中运行命令:python setup.py build_ext install

3.3查看训练情况(显卡版本)

遇到的问题:本文作者推荐如果要进行目标检测, 最少也需要配备版本为GTX 1060_显存6G的显卡,否则会出现显存不足。模型成功调用显卡后会开始训练,但是训练经过一段时间后会报错。

解决方法:修改工程文件夹object_detection中的代码文件model_lib.py
如下图所示,找到第418行,将category_index.values()修改为list(category_index.values())
修改代码文件model_lib.py完成后,则可以在cmd中重新输入命令开启模型训练。

四、说明

作者第一次目标检测是基于《目标检测实践_tensorflow版SSD数据准备》,链接:https://www.jianshu.com/p/3d9436b4cb66 以及《目标检测实践_tensorflow版SSD训练自己的数据》
链接:https://www.jianshu.com/p/0e5f9df4686a 完成,中间自己遇到很多的问题解,都已解决,希望对大家有所帮助。第一次写博客,不足之处望谅解,谢谢。