文章目录

  • 一、个人申明
  • 二、电脑配置
  • 三、构建数据集
  • 步骤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系列博客,感谢此博主。

二、电脑配置

  1. 笔记本,win10,8G RAM,AMD A8-6410 APU垃圾处理器
  2. 已安装pyhton==3.5.2
  3. 已安装tensorflow==1.14.0
  4. 已安装numpy等相关库。建议安装numpy==1.16.4,我电脑装的1.18.1版本,训练过程中会有警告提示。
  5. 安装有pycocotools库。此库在windows上安装相当复杂,我的电脑以前已安装过,本文不再叙述安装过程。【非常重要】

三、构建数据集

本文将bicycle、motorbike和bus作为训练对象。选取了110张带有bicycle、motorbike和bus的图片作为训练集。
【数据集及标签可能有点少,暂时不知道会训练成什么程度,这里仅仅是作为示例。】

步骤1:准备数据集

  1. 在桌面新建一个文件夹,命名为train_data。在train_data文件夹下新建一个images文件夹,将图片放入到images文件夹中。一共110张图片。
  2. 将train_data文件路径添加到系统环境变量中。 我的路径为C:\Users\Lenovo\Desktop\train_data

步骤2:labelimg标注图片

在images同级目录下新建annotations文件夹,然后对images文件夹中的图片进行标注。生成xml文件,保存在annotations文件夹中。对应的也是110个xml文件。

【具体标注过程不再叙述】

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_人工智能


点击下载数据集(提取码:9enn)

步骤3:图片标签统计

统计xml文件中识别类别,以及有多少个标签。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_python_02


tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_tensorflow_03


点击下载class_num.py脚本及本文数据集 (提取码:oh5o)

步骤4:将XML文件转化成CSV文件

将annotations文件夹中的xml文件转化成CSV文件。分别为训练集和测试集,train.csv和test.csv,共两个csv文件。xml_to_csv.py放在annotations同级目录下。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_人工智能_04


点击下载xml_to_csv.py脚本(提取码:2g9l )

步骤5:将CSV文件转化成tfrecord文件

将csv文件转化成tensorflow训练可用的tfrecord文件。train_data文件夹下新建一个training文件夹,并将csv_to_tfrecord.py放在annotations同级目录下,与xml_to_csv.py等文件也是同级目录。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_python_05


点击下载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文件夹同级目录)。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_tensorflow_06


object_detection这个文件夹中需要修改两处内容,不然训练的时候可能会报错。

修改1: 找到object_detection/model_lib.py文件,找到第418行,将category_index.values()修改为list(category_index.values())

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_tensorflow_07


修改2: 找到object_detection文件夹下的protos文件夹。将里面的proto文件转化成py文件。具体做法如下:

首先,下载protoc-3.6.1-win32,将里面的bin文件夹下的protoc.exe拷贝到C:\Windows路径下。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_人工智能_08


然后,在train_data文件夹下新建一个convert.py文件。打开Powershell运行程序。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_深度学习_09


tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_tensorflow_10


点击下载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\configsssdlite_mobilenet_v2_coco.config拷贝到training文件夹中。然后,修改里面的参数。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_深度学习_11

配置文件中的需要修改的部分:
第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文件夹下有已经配置好的四个文件。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_tensorflow_12


点击下载配置好的ssdlite_mobilenet_v2_coco.config文件(提取码:pxu5)

步骤9:配置nets文件

models-master\research\slim文件夹中的nets文件拷贝到train_data文件夹中,即文件夹object_detection同级目录。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_深度学习_13

本章小结:
至此,配置训练文件过程已完成。主要配置了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次出现以下内容,证明模型训练很顺利。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_机器学习_14


训练生成的文件都保存在training文件夹中。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_深度学习_15

六、测试验证训练结果

步骤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文件夹。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_机器学习_16

步骤12:开始模型验证

新建一个test_picture文件夹,里面下载一些关于训练对象的图片。在train_data下新建一个test_mydata.py。打开PowerShell运行。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_机器学习_17


点击下载test_mydata.py脚本(提取码:jthe)测试结果:测试结果并不太好,可能是训练的次数太少,样本太少,标签太多。

tensorflow训练自己的数据集bp tensorflow hub训练自己的样本_深度学习_18

特别注意:
有可能运行test_mydata.py代码没有反应,显示的图片没有class,也没有框,没有置信度。这可能是object_detection\utils\visualization_utils.py里面的def visualize_boxes_and_labels_on_image_array()函数中的min_score_thresh设置太大。改小一些就可以显示了。


个人总结:

  1. 训练自己的数据集包括四部分:构建数据集、配置训练文件、训练过程以及模型验证。每一步严格按照步骤来做。
  2. 本文训练所有文件打包汇总,点我下载(提取码:4d75)
  3. 用tensorflow训练自己的数据集的过程还是很复杂的,本文涉及的内容并不全面,例如tensorflow下载、图片标注、安装pycocotools库等等均没有详细步骤。
  4. 实际上自己摸索的过程中,可能因为电脑配置不同、安装环境不同、安装包的版本不同、路径不同等等等等,肯定还会遇到各种各样的奇葩问题。见山开山,遇水搭桥,问题总会解决的!