YOLOV3的基础训练方法

1.整理数据集

1.1 建立目录格式

建立文件夹层次为darknet/VOCdevkit/VOC2007

VOC2007下面建立两个文件夹:Annotations和JPEGImages

JPEGImages放所有的训练和测试图片,Annotations放所有的xml标记文件

1.2生成训练和测试文件

切换conda虚拟环境至pytorch,darknet目录下的gen_file.py中classes=["Bird_nest"],这个参数是和xml文件中标出的对象的名字对应。

在darknet目录下执行

python gen_file.py

在VOCdevkit/VOC2007目录下可以看到生成了文件夹labels ,同时在darknet下生成了两个文件

2007_train.txt和2007_test.txt。2007_train.txt和2007_test.txt分别给出了训练图片文件和测试图片文

件的列表,含有每个图片的路径和文件名。另外,在VOCdevkit/VOC2007/ImageSets/Main目录下生

成了两个文件test.txt和train.txt,分别给出了训练图片文件和测试图片文件的列表,但只含有每个图片

的文件名(不含路径和扩展名)。

labels下的文件是JPEGImages文件夹下每一个图像的yolo格式的标注文件,这是由Annotations的xml

标注文件转换来的。

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

2.修改配置文件

2.1 voc.names文件

复制data/voc.names文件,重新命名如:data/voc-bird.names (名字自己可以任意定义)

在文件中填入检测目标的名字,和上面的classes=["Bird_nest"]对应,一行只填一个名称

2.2 voc.data文件

复制cfg/voc.data文件,重新命名cfg/voc-bird.data ,修改参数如下

classes= 1 目标类别数目
train = /root/darknet/2007_train.txt valid = /root/darknet/2007_test.txt
names = data/voc-bird.names
backup = backup

2.3 yolov3-voc.cfg文件

复制cfg/yolov3-voc.cfg文件,重新命名cfg/yolov3-voc-bird.cfg

1[net]
2#Testing
3#batch=1
4#subdivisions=1
5#Training
6batch=8
7subdivisions=4
8width=864
9height=864

按照上面格式把文件的前9行换成如上所示。

在cfg/yolov3-voc-bird.cfg文件中,三个yolo层和各自前面的conv层的参数需要修改:

三个yolo层都要改:yolo层中的classes为类别数,每一个yolo层前的conv层中的fifilters =(类别+5)* 3

例如:

yolo层 classes=1, conv层 fifilters=18

修改文件中605、611、689、695、773、779这些行的参数。

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

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

修改gen_anchors.py文件中

width_in_cfg_file = 864.

height_in_cfg_file = 864.

执行

python gen_anchors.py

得到的anchor的大小都要乘以32

anchorbox.w * 32

anchorbox.h * 32

3.2 修改cfg/yolov3-voc-bird.cfg文件中的先验框

修改文件在610、694、778行的先验框

4.训练数据集

4.1 训练

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

训练时的输出信息: Region 106 Avg IOU: 0.794182, Class: 0.999382, Obj: 0.966953, No Obj:

0.000240, .5R: 1.000000, .75R: 0.750000, count: 4

Region 106 :网络层的索引为106

Region Avg IOU: 0.794182: 表示在当前l.batch(batch /= subdivs )内的图片的平均IOU

Class: 0.0.999382: 标注目标分类的正确率,期望该值趋近于1。

Obj: 0.966953: 检测目标的平均目标置信度,越接近1越好。

No Obj: 0.000793: 检测目标的平均目标性得分。

.5R: 1.0:模型检测出的正样本(iou>0.5)与实际的正样本的比值。

.75R: 0.75 模型检测出的正样本(iou>0.75)与实际的正样本的比值。

count: 4:count后的值是当前l.batch(batch /= subdivs )内图片中包含正样本的图片的数量。

4.2 训练log文件分析

在visualization文件夹下,修改最后两行,训练的时候会新建log文件,把最后两行的第一个参数修改为log文件的名称

执行:

python extract_log.py

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

改变train_loss_visualization.py和train_iou_visualization.py中的lines值,lines值与train_log_loss.txt和train_log_iou.txt的行数对应。

然后,执行:

python train_loss_visualization.py

python train_iou_visualization.py

得到avg_loss.png和Region Avg IOU.png

5.测试训练出的网络模型

训练好后可以在backup看到权重文件

尝试test前要修改cfg文件,切换到test模式。

可以重新建立一个测试cfg文件, 如yolov3-voc-bird-test.cfg

1[net]
2#Testing
3#batch=1
4#subdivisions=1
5#Training
6batch=1
7subdivisions=1
8width=864
9height=864

按照上面格式把文件的前9行换成如上所示

测试图片:

./darknet detector test cfg/voc-bird.data cfg/yolov3-voc-bird-test.cfg backup/yolov3-voc-bird-final.weight ***.jpg

6.计算mAP

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

生成results/comp4_det_test_ball.txt文件
切换py2.7的环境,此文件是py2.7版本的
然后执行

python reval_voc.py --voc_dir /root/darknet/VOCdevkit --year 2007 --

image_set test --classes /root/darknet/data/voc-bird.names testBird

执行完后会出现准确度。VOL

posted @ 2020-06-05 00:33  Decisive-V  阅读(793)  评论(0编辑  收藏  举报