前言:
yolo系列的论文阅读
论文阅读 || 深度学习之目标检测 重磅出击YOLOv3
论文阅读 || 深度学习之目标检测yolov2
论文阅读 || 深度学习之目标检测yolov1
该篇讲解的工程连接是:
tensorflow的yolov3:https://github.com/YunYang1994/tensorflow-yolov3
自己对该工程的解析博客:
YOLOv3 || 1. 使用自己的数据集训练yolov3
YOLOv3 || 2. dataset.py解析
YOLOv3 || 3. dataset.py的多进程改造
YOLOv3 || 4. yolov3.py 网络结构的搭建和loss的定义
YOLOv3 || 5. train.py
YOLOv3 || 6. anchorboxes的获取 kmeans.py
YOLOv3 || 7. yolov3的pb文件的测试
该篇博客介绍了tensorflow实现yolov3工程的如何训练自己的数据。
链接中的Quick start,只需要照其操作,即可正确的运行demo。
原工程使用的是COCO数据集训练的神经网络。这里主要记录说明的是如何训练自己的数据集。
1 训练VOC训练集
1.1 下载数据集并解压
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
.
将3个压缩文件下载,并按照一定的文件顺序放置:
VOC # path: /home/gg/Mount/2020/DL/VOC(自己电脑上设置的路径)
── test
└──VOCdevkit
└──VOC2007 (from VOCtest_06-Nov-2007.tar)
── train
└──VOCdevkit
└──VOC2007 (from VOCtrainval_06-Nov-2007.tar)
└──VOC2012 (from VOCtrainval_11-May-2012.tar)
1.2 生成训练所需文件
打开终端运行:python scripts/voc_annotation.py --data_path /home/gg/Mount/2020/DL/VOC
会生成3个文件:voc.names、voc_train.txt、voc_test.txt
tensorflow-yolov3-master
── data
└──classes
└──voc.names
└──dataset
└──voc_train.txt
└──voc_test.txt
.
- voc.name文件保存的内容是类别:
aeroplane
bicycle
boat
… …
tvmonitor- voc_train.txt:
image_path x_min, y_min, x_max, y_max, class_id x_min, y_min ,…, class_id
例:
xxx/xxx.jpg 18.19,6.32,424.13,421.83,20 323.86,2.65,640.0,421.94,20
xxx/xxx.jpg 48,240,195,371,11 8,12,352,498,14- voc_test.txt: 与voc_train.txt格式一样
1.3 进行训练
修改config.py的配置
__C.YOLO.CLASSES = “./data/classes/voc.names”
__C.TRAIN.ANNOT_PATH = “./data/dataset/voc_train.txt”
__C.TEST.ANNOT_PATH = “./data/dataset/voc_test.txt”开始训练
- 方式1:直接训练。打开终端并运行
python train.py
tensorboard --logdir ./data- 方式2:在工程提供的预训练模型上微调
cd checkpoint
wget https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz
tar -xvf yolov3_coco.tar.gz
cd …
python convert_weight.py --train_from_coco
python train.py
注意
脚本convert_weight.py,当终端命令为
- python convert_weight.py:将训练好的神经网络(使用coco数据集训练的模型)的全部结构,进行convert。可以进行图片的目标检测的测试
- python conver_weight.py --train_from_coco:将训练好的神经网络,除去每个输出模块的最后一层的结构和参数,进行convert。用于自己数据集的训练
COCO数据集有80类;自己数据集的分类,有自己的类别数量。两种不同的数据集,搭建的网络结构的最后一层不同。所以,无法将COCO数据集训练的神经网络模型,直接加载到自己数据集训练的神经网络。"–train_from_coco"参数,就是去除输出模块的最后一层结构,这样转化的模型,就不会受到最后一层网络的参数的影响。
1.4 测试
- 修改config.py的配置
__C.TEST.WEIGHT_FILE = "./checkpoint/*** "- 打开终端,运行测试代码
python evaluate.py
cd mAP
python main.py -na
在路径【./data/detaction/】下保存这测试图的预测结果。
VOC数据集的mAP展示效果为:
2 训练自己的数据集
训练自己的数据集,与上述训练VOC数据集的区别之处在于:数据集的准备,voc.names、voc_train.txt、voc_test.txt的生成
2.1 对图片进行数据标注
标注软件推荐【精灵标注助手】http://www.jinglingbiaozhu.com/,下载并安装。该软件简单易使用。
避免数据存放路径中存在中文,否则python中导入会报错:‘gbk’ codec can’t decode byte 0xa2…
标注界面:
导出的格式支持多种选择,这里选择【pascal-voc】。文件内容为... ... <size> <width>500</width> <height>320</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>二哈</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>108</xmin> <ymin>40</ymin> <xmax>294</xmax> <ymax>292</ymax> </bndbox> </object> <object> <name>二哈</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>254</xmin> <ymin>32</ymin> <xmax>491</xmax> <ymax>317</ymax> </bndbox> </object> </annotation>
1.2 其余工作
- 对脚本 voc_annotation.py 进行改造,运行生成voc.names、voc_train.txt、voc_test.txt
- 修改config.py 内的 相关路径和文件名。
- 训练和预测部分与【voc数据集的训练】通流程。
啊发发