每一步超详细!制作自己的voc数据集并通过yolov3训练

    xiaoxiao2022-07-05  175

     

    1 把自己的数据集打标记

    用labelImg生成的是xml格式标记文件

    https://blog.csdn.net/qq_34806812/article/details/81670310

    https://blog.csdn.net/qq_34806812/article/details/81394646

    这里建议大家用VOC和ILSVRC比赛的数据集,因为xml文件都是现成的,省去很多功夫。

    或者可以去下载现成的数据集

      ILSVRC2015比赛的地址是: http://image-net.org/challenges/LSVRC/2015/download-images-3j16.php

                        VOC 比赛地址是: http://host.robots.ox.ac.uk/pascal/VOC/index.html

    标记文本的解释:https://blog.csdn.net/qq_34806812/article/details/82355614

    2 整理数据集路径格式:

    2.1 建立文件夹层次为 darknet / VOCdevkit / VOC2018,voc2018下面有三个文件夹:

    2.2 JPEGImages放所有的训练图片,annotation放所有的xml标记文件。

    2.3 Imagesets包含两个文件夹:

    3 生成txt标签和list文件

    3.1 Main包下新建3个txt:

    里面的txt内容格式为图片名(不带后缀):

    (生成train.txt的教程:

    把一个文件夹中的所有文件名统计到一个txt中   https://blog.csdn.net/qq_34806812/article/details/81674290)

    3.2 修改voc_label.py(根据自己情况修改):

    3.3 运行voc_label.py

    运行后发现label文件夹下面已经生成了对应的txt标签

    同时发现在vocdevkit同目录下也生成了5个list文件

    打开发现路径也自动写好了:

    4 修改需要的各种配置文件

    4.1 新建 cfg/voc_birds.data:(可以复制cfg/voc.data进行根据自己情况的修改)

    4.2 新建data / voc_birds.names:(可以复制data/voc.names 进行根据自己情况的修改)

    4.3 新建cfg / yolov3-voc-birds.cfg:(可以复制cfg/yolov3-voc.cfg 进行根据自己情况的修改)

    修改如下:

    4.3.1 注释掉testing,打开train

    4.3.2 subdivisions=8

    4.3.3 共三个yolo层都要改,yolo层中的class为类别数,每一个yolo层前的conv层中的filters =(类别+5)* 3

    5 在darknet目录下载权重文件:

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

    6 训练

    nohup ./darknet detector train cfg/voc_birds.data cfg/yolov3-voc-birds.cfg darknet53.conv.74 2>1 | tee visualization/train_yolov3_birds.log &

    nohup $ 是防止因为ssh断开而中断服务器的进程(如果出现“找不到nohup文件”的错误,去掉命令中的“nohup ... &”)

    2>1 | tee visualization/train_yolov3_birds.log 是为了保留训练中的log,为了后续绘制loss曲线。

    训练开始:

    训练直到loss下降到0.0X之后,不再下降了,就可以停止训练了:

    7.测试

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

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

    开始测试:

    ./darknet detector test cfg/voc_birds.data cfg/yolov3-voc-birds.cfg backup/birds/yolov3-voc-birds.weights

    测试结果:

    绘制训练中的loss、IOU等变化曲线的教程:https://blog.csdn.net/qq_34806812/article/details/81459982

    8.问题集锦

    8.1 问题:CUDA Error: out of memory

    解决:增大cfg文件中subdivisions,16、32或者64(最多为batch值)

    subdivision:这个参数很有意思的,它会让你的每一个batch不是一下子都丢到网络里。而是分成subdivision对应数字的份数,一份一份的跑完后,在一起打包算作完成一次iteration。这样会降低对显存的占用情况。如果设置这个参数为1的话就是一次性把所有batch的图片都丢到网络里,如果为2的话就是一次丢一半。

    最新回复(0)