yolov4训练自己的数据集

参考:

主要参考博客
辅助参考博客
评价参考博客

环境:

本人电脑ubuntu系统,2080ti,cuda10.0,cudnn7.6,python3.6

最开始电脑的cuda是9.0,cudnn7.6,参考博客:主要参考博客的时候在测试预训练好的模型的时候发生错误:cuDNN status Error in: file: ./src/convolutional_kernels.cu : () : line: 544 :这个博客的作者也是cuda9.0没有遇到我的错误,但是作者的电脑是1080ti的,我自己百度以后说是2080ti最好用cuda10.0,所以我参考博客将cuda9.0改为了cuda10.0.不在报错。

代码:

项目代码

开始训练自己的数据集

1. 编译

如果需要使用GPU加速,那么得打开项目里面的makefile文件修改一些参数的值。

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
OPENMP=1
LIBSO=1
DEBUG=1

修改之后,cd darknet-master目录下,直接make

但是,我报错了,是opencv有问题,可能是版本问题。解决办法就是将opencv修改一下:OPENCV=0

2. 测试已经训练好的开源的权重
  • 下载已经训练好的权重:有墙直接下载链接
  • 也可以去百度云下载:就很慢
    链接:https://pan.baidu.com/s/1LTht8e3CD7q6v5_v-PC2dQ
    提取码:ahou

测试代码:./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg结果会保存在darknet-master目录下的predictions.jpg。

3. 准备自己的数据集
  • 首先自己的数据集应该是voc格式的,按照如下的目录存储:
    在这里插入图片描述
    Annotations中存放的是所有的xml文件。
    ImageSets中又Main文件,Main文件下是,train.txt;val.txt;test.txt。
    JPEGImages中存放的是所有的图片。
  • 制作yolov4需要的label以及txt
    首先打开路径下 build/darknet/x64/data/voc/voc_label.py,修改voc_label.py里面的内容:
    先把7行的关于2012的去掉,再把第9行改成自己的类别。
sets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]
classes = ["normal", "defect", "norbolt", "debolt"]

接着给每个路径前面加个data,一共7处
26行27行:

in_file = open('data/VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
out_file = open('data/VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')

48行到53行:

    if not os.path.exists('data/VOCdevkit/VOC%s/labels/'%(year)):
        os.makedirs('data/VOCdevkit/VOC%s/labels/'%(year))
    image_ids = open('data/VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
    list_file = open('%s_%s.txt'%(year, image_set), 'w')
    for image_id in image_ids:
        list_file.write('%s/data/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))

修改之后,回到主目录,cd darknet-master执行命令:
python ./build/darknet/x64/data/voc/voc_label.py运行代码。
然后发现darknet-master/data/VOCdevkit/VOC2007目录下多了一个labels文件夹,里面存的是所有图片的txt文件。同时darknet-master目录下,多了三个txt文件:train_2007.txt;test_2007.txt;val_2007.txt。将这三个文件放到data目录下。
在这里插入图片描述

4. 修改配置文件
  • cfg/目录下复制coco.data,并且重命名为obj.data。然后使用修改下面以下内容:
classes= 4  # 自己的类别数
train  = ./data/2007_train.txt #训练数据集文件路径
valid  =./data/2007_val.txt
#valid = data/coco_val_5k.list
names = cfg/obj.names #自己类别的名字文件
backup = backup/    # 训练好的网络权重保存路径
eval=coco
  • cfg/目录下新建文件obj.names。写入自己类别的名称:
normal
defect
norbolt
debolt
  • 复制cfg/yolov4-custom.cfg,并且重命名为yolo-obj.cfg,同时修改一下内容:
    8行9行:
width=416  # 608
height=416 # 608

20行22行:

max_batches = 6000  # 500500
steps=4800,5400  ## 400000,450000

上图中修改width和height为416,修改最大batch迭代多少个数max_batches = 6000,修改steps多久学习率下降一次,一般设置为batch个数的80%和90%。

然后三个classes的地方要修改:

classes = 4 ##80   # 970 1058  1146行附近

还有三个filters=255的地方要修改成自己的。

filters=27 # 255  # (类别数+5)*3
# 963  1051  1139行附近
5. 开始训练自己的数据集

下载预训练权重:

  • 有墙:https://drive.google.com/open?id=1JKF-bdIklxOOVy-2Cr5qdvjgGpmGfcbp
  • 或者百度元,同上面的链接一样:
    链接:https://pan.baidu.com/s/1LTht8e3CD7q6v5_v-PC2dQ
    提取码:ahou

如若报错关于mosaic这个错误,则将cfg/yolo-obj.cfg 里面26行mosaic=1改成mosaic=0或者注释掉。没报错就忽略。

评价:

代码:主目录下进行评价:./darknet detector map cfg/obj.data cfg/yolo-obj.cfg backup/yolo-obj_last.weights对训练好的权重进行评价。权重在backup下,可以自己查看评价哪一个权重。

预测:

目前只会单张测试:
./darknet detector test cfg/obj.data cfg/yolo-obj.cfg yolo-obj_xxxx.weights
然后会让你输入图片路径,可以随便测试一张输入:./data/VOCdevkit/VOC2007/JPEGImages/000001.jpg,回车,结果会显示在predictions.jpg中。

如果会批量测试可以告诉我一下,感谢!

代码只是跑通,任何细节都没有看呢。。。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值