基于Tensorflow用Yolov3训练自己的数据集

时间:2024-04-03 14:14:59

背景说明:本次训练的模型分五类,分别为['whiteboard','chair','diningtable','sofa','tvmonitor']。训练数据集大约1000张。

环境:Window 10 系统,python=3.6,tensorflow=1.15

 

一、数据准备

1.用Labelimg标注好图像训练集,放在D:/AI\yolov3_whiteboard/data/dataset_whiteboard/Annotations, 里面是已经标注好的XML文件。还没安装Labelimg图像标注工具的请点击安装。原始图像放在D:/AI/yolov3_whiteboard/data/dataset_whiteboard/JPEGImages/train文件中。

2.把XML文件的内容转为txt文本并保存。运行D:/AI/yolov3_whiteboard/scripts/take_xml_to_train.py即可,这里说明一下几个参数:

基于Tensorflow用Yolov3训练自己的数据集

基于Tensorflow用Yolov3训练自己的数据集

16行的classes为训练的类名,27行的anotation为原始图像的绝对路径,30行的label_path为图像标注文件的绝对路径,58行的data_name_file为训练图像的名称集合文件txt,格式为单纯的名称,没有前后缀的。这里是已打乱训练图像顺序的。源码在D:/AI/yolov3_whiteboard/scripts/read_name.py中,有兴趣的可以去查看。59行的train_annotation_file就是存放训练集图像信息的文件txt,记录了图像的绝对路径、标注目标框的位置信息和类别。

二、训练模型

运行D:/AI/yolov3_whiteboard/train.py,该脚本中小编做了一些注释,方便理解训练模型的思路。

基于Tensorflow用Yolov3训练自己的数据集

还有一个重要的脚本,那就是做参数配置的,放在D:/AI/yolov3_whiteboard/core/config.py中,里面内容也做了注释。

基于Tensorflow用Yolov3训练自己的数据集

框出来的几个参数,这里说明一下。20行是训练的类别名称文件。21行是锚定尺度,及Yolov3的目标检测滑动窗口尺度。33行是训练的图像内容文件,前面也说明了,42行是训练初始化的权重参数,如果没有的话系统重新初始化权重值,有的话相当于接着训练权重的样子。49行的是测试数据路径,我这里是使用训练集来测试,原因是我收集的数据不够,这里只是跑一遍程序,并不是模型的真实评估。54行的是测试时目标检测的效果图存放文件。56行是测试的权重参数文件。

三、测试模型

运行D:/AI/yolov3_whiteboard/core/evaluate.py。一些参数也做了注释,这里留意一个地方。

基于Tensorflow用Yolov3训练自己的数据集

80行是存放预测结果的文件,82行是存放真实标签的文件。所以运行之后预测的结果和真实结果会保存起来。还有保存的效果图在D:/AI/yolov3_whiteboard/data/detection中。这里的效果图我只展示whiteboard类的,因为这是我的目标类。需要修改的话到代码中对应的更改即可。

接着再运行D:/AI/yolov3_whiteboard/mAP/main.py。运行之后结果保存在D:/AI/yolov3_whiteboard/mAP/results文件下。来看一下mAP吧。

基于Tensorflow用Yolov3训练自己的数据集

基于Tensorflow用Yolov3训练自己的数据集

结果太完美了,因为测试的是训练图像,当然会好的,这是在自欺欺人,给别人看的,哈哈哈哈哈。

最后来几张检测的效果图吧。

基于Tensorflow用Yolov3训练自己的数据集

基于Tensorflow用Yolov3训练自己的数据集

基于Tensorflow用Yolov3训练自己的数据集

赶紧开始自己的图像集训练吧。