目录
第一步,下载pytorch 源码
第二步,下载预训练模型
第三步,生成数据文件
第四步,训练
pytorch版本yolov4源码地址,感谢源码作者:
https://github.com/Tianxiaomo/pytorch-YOLOv4
源码作者提出两种方法:
1、下载darknet提供的weights文件,然后用他的代码进行转换(test成功,train的时候失败,不建议使用);
这种方法经过尝试之后,发现,根据作者提供的源码,权重文件可以成功转换并使用,但是无法利用转换好的权重文件进行训练;原因是各个层的名称与作者定义网络的名称不一致;
demo.py 使用darknet的weights;
用darknet2pytorch.py 转为pth的模型;
用程序models.py来测试转化好的模型;
2、下载作者训练好的权重文件(推荐):
作者给出了百度网盘的地址:
baidu
作者给出的:
For coco dataset,you can use tool/coco_annotatin.py.
# train.txt
image_path1 x1,y1,x2,y2,id x1,y1,x2,y2,id x1,y1,x2,y2,id ...
image_path2 x1,y1,x2,y2,id x1,y1,x2,y2,id x1,y1,x2,y2,id ...
生成的数据文件是作者给出的格式,第一列是图像路径,最好为绝对路径,后面是空格接,目标的左上角横坐标x1,左上角纵坐标y1,右下角横坐标x2,右下角纵坐标y2,区域类别标号,接空格,。。。。
无论用何种方法,能够生成该文件即可,由于我的标记数据是VOC格式的,所以我自己写代码把标记转为VOC格式;
如何生成数据以及相应的代码在:https://blog.csdn.net/h649070/article/details/107556454
首先需要修改cfg.py文件的以下几个地方:
1、加入:
Cfg.gpu = '0'
Cfg.pretrained = 'path to yolov4.conv.137.pth'
Cfg.dataset_dir = ''
2、Cfg.batch = 16 修改为合适的值
3、Cfg.classes = 80 修改为实际值
4、修改为第三步中生成文件的路径;
Cfg.train_label = 'data/train.txt'
Cfg.val_label = 'data/val.txt'
5、修改中间结果路径,checkpoints 和 log的;
Cfg.checkpoints = 'checkpoints'
Cfg.TRAIN_TENSORBOARD_DIR = 'log'
开始训练即可;
这里有个坑,当pytorch版本不合适的时候,会出现一些错误,根据错误类型去修改版本
第五步:测试
用程序models.py来测试转化好的模型;
如有侵权,联系作者删除谢谢。