文章目录
- 一、个人申明
- 二、电脑配置
- 三、构建数据集
- 步骤1:准备数据集
- 步骤2:labelimg标注图片
- 步骤3:图片标签统计
- 步骤4:将XML文件转化成CSV文件
- 步骤5:将CSV文件转化成tfrecord文件
- 四、配置训练文件
- 步骤6:配置my_label_map.pbtxt文件
- 步骤7:配置object_detection文件
- 步骤8:配置ssdlite_mobilenet_v2_coco.config模型
- 步骤9:配置nets文件
- 五、训练过程
- 步骤10:开始训练
- 六、测试验证训练结果
- 步骤11:导出训练模型
- 步骤12:开始模型验证
一、个人申明
1.本文为个人学习笔记,个人学习心得,仅供学习使用。
2.本文主要参考学习https://www.jianshu.com/p/0e5f9df4686a
系列博客,感谢此博主。
二、电脑配置
- 笔记本,win10,8G RAM,AMD A8-6410 APU垃圾处理器
- 已安装pyhton==3.5.2
- 已安装tensorflow==1.14.0
- 已安装numpy等相关库。建议安装numpy==1.16.4,我电脑装的1.18.1版本,训练过程中会有警告提示。
- 安装有pycocotools库。此库在windows上安装相当复杂,我的电脑以前已安装过,本文不再叙述安装过程。【非常重要】
三、构建数据集
本文将bicycle、motorbike和bus作为训练对象。选取了110张带有bicycle、motorbike和bus的图片作为训练集。
【数据集及标签可能有点少,暂时不知道会训练成什么程度,这里仅仅是作为示例。】
步骤1:准备数据集
- 在桌面新建一个文件夹,命名为train_data。在train_data文件夹下新建一个images文件夹,将图片放入到images文件夹中。一共110张图片。
- 将train_data文件路径添加到系统环境变量中。 我的路径为
C:\Users\Lenovo\Desktop\train_data
步骤2:labelimg标注图片
在images同级目录下新建annotations文件夹,然后对images文件夹中的图片进行标注。生成xml文件,保存在annotations文件夹中。对应的也是110个xml文件。
【具体标注过程不再叙述】
点击下载数据集(提取码:9enn)
步骤3:图片标签统计
统计xml文件中识别类别,以及有多少个标签。
点击下载class_num.py脚本及本文数据集 (提取码:oh5o)
步骤4:将XML文件转化成CSV文件
将annotations文件夹中的xml文件转化成CSV文件。分别为训练集和测试集,train.csv和test.csv,共两个csv文件。xml_to_csv.py
放在annotations同级目录下。
点击下载xml_to_csv.py脚本(提取码:2g9l )
步骤5:将CSV文件转化成tfrecord文件
将csv文件转化成tensorflow训练可用的tfrecord文件。train_data文件夹下新建一个training文件夹,并将csv_to_tfrecord.py
放在annotations同级目录下,与xml_to_csv.py
等文件也是同级目录。
点击下载csv_to_tfrecord.py脚本(提取码:cq71)
本章小结:
至此,构建数据集部分已经完成。主要将原始图片通过标注以及转化,最终得到training文件夹下的tfrecord训练文件。
此部分文件已汇总,点我下载(提取码:zc45)
四、配置训练文件
构建数据集完成后,开始配置训练的相关文件。
步骤6:配置my_label_map.pbtxt文件
首先在training文件夹下新建一个my_label_map.pbtxt
文件;文件内容如下:
name : "bicycle"
id : 1
}
item {
name : "motorbike"
id : 2
}
item {
name : "bus"
id : 3
}
此时training文件夹下有三个文件,train.tfrecord、test.tfrecord、my_label_map.pbtxt
步骤7:配置object_detection文件
下载models-master文件。解压,找到里面的research,将research文件夹中的object_detection拷贝到train_data文件夹下(与training文件夹同级目录)。
object_detection这个文件夹中需要修改两处内容,不然训练的时候可能会报错。
修改1: 找到object_detection/model_lib.py
文件,找到第418行,将category_index.values()修改为list(category_index.values())
修改2: 找到object_detection文件夹下的protos文件夹。将里面的proto文件转化成py文件。具体做法如下:
首先,下载protoc-3.6.1-win32
,将里面的bin文件夹下的protoc.exe拷贝到C:\Windows
路径下。
然后,在train_data文件夹下新建一个convert.py
文件。打开Powershell运行程序。
点击下载protoc-3.6.1-win32和convert.py脚本(提取码:671x)
步骤8:配置ssdlite_mobilenet_v2_coco.config模型
本文使用ssdlite_mobilenet_v2_coco.config
训练模型。首先,将C:\Users\Lenovo\Desktop\train_data\object_detection\samples\configs
的ssdlite_mobilenet_v2_coco.config
拷贝到training文件夹中。然后,修改里面的参数。
配置文件中的需要修改的部分:
第9行的num_classes,对于本文来说,此数设置为3。
第143行的batch_size,对于本文来说,此数设置为1。
第164行的 num_steps,对于本文来说,此数设置为1000。电脑垃圾,只训练1000次。
第177行input_path设置成"training/train.tfrecord"。
第179行label_map_path设置成"training/my_label_map.pbtxt"。
第191行input_path设置成"training/test.tfrecord"。
第193行label_map_path设置成"training/my_label_map.pbtxt"。
第158、159这2行需要删除。
至此,training文件夹下有已经配置好的四个文件。
点击下载配置好的ssdlite_mobilenet_v2_coco.config文件(提取码:pxu5)
步骤9:配置nets文件
将models-master\research\slim
文件夹中的nets文件拷贝到train_data文件夹中,即文件夹object_detection同级目录。
本章小结:
至此,配置训练文件过程已完成。主要配置了4个部分。my_label_map.pbtxt文件、object_detection文件(修改两处内容)、ssdlite_mobilenet_v2_coco.config模型、nets文件
此部分文件已汇总(包含构建数据集部分)点我下载(提取码:gotl)
五、训练过程
步骤10:开始训练
万事俱备,只欠东风。开始训练:在train_data文件夹下打开PowerShell,运行下面命令:
python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr
电脑很垃圾,每迭代100大概需要四五分钟,1000次大概一个小时。
训练一段时间后,迭代200次出现以下内容,证明模型训练很顺利。
训练生成的文件都保存在training文件夹中。
六、测试验证训练结果
步骤11:导出训练模型
在train_data文件夹下打开Powershell,运行以下命令:
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-1000 --output_directory=my_train_graph
运行结果:在train_data文件夹下生成my_train_graph文件夹。
步骤12:开始模型验证
新建一个test_picture文件夹,里面下载一些关于训练对象的图片。在train_data下新建一个test_mydata.py
。打开PowerShell运行。
点击下载test_mydata.py脚本(提取码:jthe)测试结果:测试结果并不太好,可能是训练的次数太少,样本太少,标签太多。
特别注意:
有可能运行test_mydata.py
代码没有反应,显示的图片没有class,也没有框,没有置信度。这可能是object_detection\utils\visualization_utils.py
里面的def visualize_boxes_and_labels_on_image_array()
函数中的min_score_thresh
设置太大。改小一些就可以显示了。
个人总结:
- 训练自己的数据集包括四部分:构建数据集、配置训练文件、训练过程以及模型验证。每一步严格按照步骤来做。
- 本文训练所有文件打包汇总,点我下载(提取码:4d75)
- 用tensorflow训练自己的数据集的过程还是很复杂的,本文涉及的内容并不全面,例如tensorflow下载、图片标注、安装pycocotools库等等均没有详细步骤。
- 实际上自己摸索的过程中,可能因为电脑配置不同、安装环境不同、安装包的版本不同、路径不同等等等等,肯定还会遇到各种各样的奇葩问题。见山开山,遇水搭桥,问题总会解决的!