手把手教你使用yolov3训练自己的数据集


1. 给数据集打标签

(1)添加自定义类别

修改文件labelImg/data/predefined_classes.txtpredefined_classes.txt中修改为自己要检测的类别

aeroplane
bicycle
bird

(2)使用labelImg进行图像标注

labelImg标注生成PASCAL VOC格式的xml标记文件

2. 整理数据集

(1)相关文件的准备

  • visualization.zip
  • gen_files.py
  • gen_anchors.py
  • reval_voc.py
  • voc_eval.py
  • draw_pr.py

(2)生成训练文件和测试文件

在当前目录下打开cmd窗口,执行以下命令

python gen_files.py

执行完毕以后,我们可以看到在VOCdevkit / VOC2007目录下生成了labels文件夹,在darknet文件夹下生成了两个文件2007_train.txt2007_test.txt2007_train.txt2007_test.txt分别给出了训练图片文件和测试图片文件的列表,含有每个图片的路径和文件名。同时,在VOCdevkit / VOC2007/ImageSets/Main目录下也生产了两个文件test.txttrain.txt,分别给出了训练图片文件和测试图片文件的列表,但只含有每个图片的文件名(不含路径和扩展名)。

labels下的文件是images文件夹下每一个图像的yolo格式的标注文件,这是由annotations目录下的xml标注文件转换来的。

我们最终训练只需要:2007_train.txt2007_test.txt,labels下的标注文件和 VOCdevkit / VOC2007/JPEGImages下的图片文件

3. 修改配置文件

(1)新建data/voc.names文件

复制voc.names,根据自己情况的修改

(2)新建 cfg/voc.data文件

复制voc.data,根据自己情况的修改

(3)新建cfg/yolov3-voc.cfg文件

可以复制cfg/yolov3-voc.cfg再根据自己情况的修改,在cfg/yolov3-voc.cfg文件中,三个yolo层和各自前面的conv层的参数需要修改:三个yolo层都要改:yolo层中的class为类别数,每一个yolo层前的conv层中的filters =(类别+5)* 3,yolo层 classes=1; conv层 filters=18

4. 训练自己的数据集

(1)在darknet目录下下载权值文件

https://pjreddie.com/media/files/darknet53.conv.74

这里的训练使用迁移学习,所以下载的yolo预训练的权重文件,它不含全连接层的

(2)训练命令

darknet detector train data/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

如果需要日志文件,就用如下命令

darknet detector train data/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 2>1 | tee visualization/train_yolov3_messi.log

执行命令前应建立visualization目录

(3)训练日志文件分析

打开visualization目录,在该目录下修改 extract_log.py文件,修改为
extract_log('train.log','train_loss.txt','images')
extract_log('train.log','train_iou.txt','IOU')

然后执行该python脚本

python extract_log.py

得到两个文件: train_log_loss.txt和train_log_iou.txt

改变其中的lines的值,继续执行命令

python train_loss_visualization.py
python train_iou'_visualization.py

得到avg_loss.png和Region Avg IOU.png

(4)训练经验建议

如果训练集中图片较少,训练时batch的图片数目可适当减少。

  • batch=32
  • subdivisions=8
  • width=608
  • height=608
  • max_batches = 4000
  • policy=steps
  • steps=3200,3600

5. 训练网络模型

训练好后可以在backup目录下看到权重文件,测试前要修改cfg文件,切换到test模式。可以重新建立一个测试cfg文件, 如yolov3-voc-test.cfg

darknet detector test cfg/voc-messi.data cfg/yolov3-voc-test.cfg backup/yolov3-voc-messi_final.weights testfiles/test_img.jpg

测试视频时执行命令:

darknet detector demo cfg/voc-messi.data cfg/yolov3-voc-test.cfg backup/yolov3-voc-messi_final.weights testfiles/test_video.mp4

6. 性能统计

(1)计算mAP

首先执行

darknet detector valid cfg/voc.data cfg/yolov3-voc-test.cfg backup/yolov3-voc_final.weights

生成results/comp4_det_test.txt文件

然后执行

python reval_voc.py --voc_dir VOCdevkit --year 2007 --image_set test --classes data/voc.names test

生成test/pr.pkl文件

(2)画PR曲线

修改文件draw_pr.py

fr = open('test/pr.pkl','rb')

执行

python draw_pr.py

7. 修改默认先验框的大小

1) 使用k-means聚类获得自己数据集的先验框大小

修改gen_anchors.py文件

width_in_cfg_file = 416
height_in_cfg_file = 416

执行

python gen_anchors.py

得到的anchor大小

anchorbox.w*32
anchorbox.h*32

(2) 修改cfg文件中的先验框大小

(3)重新训练和测试

 

百度未收录
  • 分享:
评论
还没有评论
    发表评论 说点什么