Yolo v4系列学习(三)采用Yolo v4代码训练自己的数据

        在上一篇博客中(这里),介绍了如何获取自己的训练数据集及其标记的过程,本篇博客介绍一下Yolo v4训练自己数据集的过程。

1、下载预训练权重yolov4.conv.137,放到darknet目录下,该预训练权重下载地址

2、进入darknet/cfg目录下,复制yolov4-custom.cfg,名字改为yolov4-cat.cfg,并打开该文件,进行下面的6处修改:

(1)yolov4-cat.cfg文件第1-7行如下:
        ----------------------------------------------------------------
        [net]
        # Testing
        #batch=1
        #subdivisions=1
        # Training
        batch=64
        subdivisions=16
        ----------------------------------------------------------------
        注意:由于是进行训练,这里不需要修改。训练过程中可能出现CUDA out of memory的提示,可将这里的subdivisions增大,如32或64,但是数值越大耗时越长,因此需要权衡一下;

(2)yolov4-cat.cfg文件第8-9行将608修改为416:
        ----------------------------------------------------------------
        width=416
        height=416
        ----------------------------------------------------------------
        注意:这里也可不改,如果原始的数值608可能会导致CUDA out of memory的提示,而且这里的数值必须是32的倍数,这里也是数值越大耗时越长;

(3)第20行的参数max_batches也要修改,原始值为500500,max_batches = classes*2000,但是max_batches不要低于训练的图片张数,这里只训练1类,因此max_batches = 2000;

(4)第22行的参数steps=1600,1800,这两个数值分别为max_batches的80%和90%;

(5)继续修改yolov4-cat.cfg文件,按Ctrl+F键,搜索“classes”,一共有3处,先定位到第一处,将classes=80改为classes=1,并将classes前面最近的filters修改为18,计算由来(classes+5)*3=18;

(6)继续修改yolov4-cat.cfg文件,按照上面的步骤同样修改第二处和第三处的classes;

3、进入darknet/data文件夹下,创建名称为cat.names的文件(参考该文件夹voc.names文件的写法),在cat.names文件中添加类别名称,本次实验只需添加cat即可;

4、进入darknet/cfg文件夹下,创建名称为cat.data的文件,在该文件中添加相关内容,一共5行,参考示例voc.data文件,类别改为1;
        ----------------------------------------------------------------    
            classes= 1
            train  = ~/darknet/data/cat_data/train.txt
            valid  = ~/darknet/data/cat_data/test.txt
            names = data/cat.names
            backup = backup
        ----------------------------------------------------------------
        (1)其中第二行和第三行分别为train.txt和test.txt所在的路径,第5行改为前面新建的cat.names;

        (2)这里的train.txt和test.txt前一篇博客中第1步生成的文件;

        (3)第5行backup = backup不能写成其它路径,否则会报错;

5、进入darknet目录下,右键点击Open in Terminal,并输入以下指令:

./darknet detector train cfg/cat.data cfg/yolov4-cat.cfg yolov4.conv.137

6、训练的过程中,生成的权重文件会存放在/darknet/backup文件夹下,训练过程每隔一段时间会生成一个.weights文件;

7、生成.weights文件后,便可以进行测试了(此时训练仍在继续,另外开一个终端进入darknet路径下)。也可以等待全部训练完成后再进行测试。测试指令如下:

./darknet detect cfg/yolov4-cat.cfg backup/yolov4-cat_final.weights data/cat_10.jpg

        注意,Yolo v4版本添加了训练时候训练误差随着迭代次数的增加而变化的图,可以方便看误差的变化情况,如下图所示:可以看到darknetAB代码细节做得很到位。

8、训练时我们可以再开一个终端,通过nvidia-smi命令来查看cuda和显存的使用情况。

参考资料

https://github.com/AlexeyAB/darknet

https://pjreddie.com/darknet/yolo/

猜你喜欢

转载自blog.csdn.net/JIEJINQUANIL/article/details/106459950