yolov4(darknet)本地训练自己的数据集

    科技2022-08-18  107

    一探YOLOV4(darknet)的神秘面纱–面向小白

    文章目录

    一探YOLOV4(darknet)的神秘面纱--面向小白概览1. 本地环境的配置2.克隆git仓库3.本地CMake编译4.测试demo5. 创建自己的数据集6.训练自己的数据集7. 训练自己的数据集8.测试9.一些坑

    概览

    YOLO目标检测系列的鼎鼎大名谁人不知,还记得当初YOLOv4横空出世的时候,各大公众号层出不穷的推送,质量与速度兼备的优秀算法,当真是赚足眼球。

    作为一个向往许久的少年,在这个偶然的机会下,纯粹为了偷懒而尝试了YOLOv4的darknet版本,不成想,贫穷给我造成的阻碍却使我异常勤奋了三两天。

    废话不多说,本文包含整个单机运行YOLOv4的全部过程,包括:环境配置、仓库克隆、编译可执行文件、测试demo等等……

    1. 本地环境的配置

    本人所用环境如下:

    CUDA10.1cudnn对应版本(记得是7.65)opencv4.4CMake3.18visual studio2017

    我写过一个配置CUDA10.2的博客。有需求可自行查找,其实就是下载安装包,选择地址傻瓜式安装,注册nVidia账号下载对应版本的cudnn,解压后移动对应文件夹的文件到CUDA即可。需要将cudnn的一个文件copy到darknet-master\build\darknet\x64,文件在解压的bin文件夹

    opencv4.4自行官网搜索,选择目录解压即可。注意:

    安装完成后,需要添加一个环境变量指向到你的opencv的build文件夹

    copy两个文件到darknet-master\build\darknet\x64文件夹,文件在opencv\build\x64\vc14\bin

    CMake3.18一键傻瓜式安装

    visual studio2017,现在官网上是2019版本,下载之前的版本需要登陆Microsoft账号,并订阅。(在这里谴责微软的流氓行为),安装时只需勾选c/c++开发即可。

    2.克隆git仓库

    ok,环境配置完成。去官方仓库下载zip包,并解压到你想要的位置即可。

    3.本地CMake编译

    虽然官网给出了不同的编译方式,本人也尝试过不同的编译方式,但是相对来说,CMake编译操作较少,比较简单。

    打开CMakeGUI,两个地址都选择你刚刚解压的官方仓库文件夹,

    点击configure,选择2017,x64

    点击finish。

    注意:蓝色一行只有找到你的cuda才会出现,如果没有,请自行检查你的环境配置。

    无报错点击generate,并点击open Project。

    打开vs2017后选择:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9LYPrFc-1601887913547)(I:\note\知识小积累\yolov4(darknet)本地训练自己的数据集.assets\image-20201005155952334.png)]直接右键ALL_BUILD点击生成即可。我这里生成过了就不重新弄了,会显示5个成功,0个跳过,0个失败。

    4.测试demo

    当完成上述步骤后,需要将仓库文件夹的Release文件夹下的darknet.exe文件copy到darknet-master\build\darknet\x64文件夹下,yolov4.weights文件自行下载后并放入x64文件夹。

    打开darknet-master\build\darknet\x64文件夹,在上方搜索框输入cmd回车,进入命令行。

    输入如下命令进行测试:

    darknet.exe detector test cfg\coco.data cfg\yolov4.cfg .\weights\yolov4.weights .\data\dog.jpg

    结果:

    dog测试成功!开心进行下一步~~~~~~~~~~~~~~~~

    5. 创建自己的数据集

    准备好自己的照片,建议重命名文件为6位数字编号.jpg.

    这里有一个重命名脚本可供借鉴:

    #!/usr/bin/env python # -*- coding:utf-8 -*- # author:li # datetime:2020/9/26 19:36 # software:PyCharm # project:检测石子 # file:重命名图片 import os import cv2 import time import matplotlib.pyplot as plt #原图路径和保存图片的路径 imgPath="F:\\datasets\\" savePath="F:\\wait label\\" imgList=os.listdir(imgPath) for i in range(0,len(imgList)): if i == 0: img = cv2.imread(imgPath + imgList[i]) str_tmp = "000000" + str(len(imgList)) else: img=cv2.imread(imgPath+imgList[i]) str_tmp="000000"+str(i) final = str_tmp[-6:] + str('_moresparse') cv2.imwrite(savePath+ final + ".jpg",img) #后六位命名 print("done!!")

    下载labelimg软件进行标注,会在相应文件夹下生成.xml文件,储存的是你的标注信息。

    将标注好的文件夹上传到roboflow网站,该网站可以导出你需要的数据集格式,还可以进行图片预处理,并经过旋转、光照改变等措施扩充你的数据集,十分方便,省去了代码的debug。

    6.训练自己的数据集

    将导出的带有txt与图片的文件夹放进data(可以新建一个文件夹存放,例如obj)在data文件夹添加: obj.names,每一行写一个你标注的类,例如: cat dog pig ... 新建 obj.data文件,并写入如下内容: classes = 4 # 你的类数 train = data/train.txt valid = data/test.txt names = data/obj.names backup = backup/ 更改cfg文件

    在cfg文件夹下新建yolo-obj.cfg文件,并将yolov4-custom.cfg文件内容copy到新建文件中,ctrl+f寻找“yolo”

    修改你的classes数目:

    并修改yolo块上方的filters,数值为:(你的类数 + 5) × \times × 3.

    一共三处修改,若是tiny版本是两处。

    更改你的训练次数不低于6000,推荐为:你的类数 × \times × 2

    两个重要参数:

    batch=64 #一次处理的图片数量 subdivisions=1 #分多少批,可以缓解显存压力

    根据你的电脑性能进行配置。

    7. 训练自己的数据集

    自行下载yolov4.conv.137文件,放进x64文件夹。

    打开darknet-master\build\darknet\x64文件夹,在上方搜索框输入cmd回车,进入命令行。

    输入命令:

    darknet.exe detector train data/obj.data cfg/yolo-obj.cfg yolov4.conv.137 -dont_show

    已经开始训练:

    8.测试

    输入命令:

    darknet.exe detector test data/obj.data cfg/yolo-obj.cfg backup/yolo-obj_8000.weights

    输入要测试的图片地址,例如:data/obj/test/xxx.jpg 权重文件自行选择,权重文件保存在backup文件夹。

    9.一些坑

    测试不调用opencv显示图片

    ​ 尝试更换版本

    CMake编译不成功(找不到opencv、cuda等)

    ​ 尝试添加环境变量

    预估时间过长

    ​ 请尝试两个重要参数的不同组合

    权重文件自行选择,权重文件保存在backup文件夹。

    暂时这么多。

    Processed: 0.015, SQL: 9