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

概览

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

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

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

1. 本地环境的配置

本人所用环境如下:

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

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

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

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

在这里插入图片描述

  1. 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.训练自己的数据集

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

  1. 测试不调用opencv显示图片

    ​ 尝试更换版本

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

    ​ 尝试添加环境变量

  3. 预估时间过长

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

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

暂时这么多。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐