YOLOv4代码下载:https://github.com/AlexeyAB/darknet或者终端输入

git clone https://github.com/AlexeyAB/darknet.git

 其实怎么训练自己的模型在上面的网址中已经介绍的很清楚了,认真的一步步下来是肯定没问题的,下面的内容是其中的一部分,还有很多相关工作我没有去尝试,可以按照作者的介绍去试一试。我使用的数据集,链接: https://pan.baidu.com/s/1t-W8xC8xF4hxdYlm4R_HKw 提取码: hkty

 

运行YOLOv4需要安装一些库和工具,我装了opencv3.4.10及对应的contirb,cuda10.1,cudnn7.6。

 

下载后是一个darknet文件夹,找到Makefile文件,打开后先将前四行都置1,即GPU=1,CUDNN=1,CUDNN_HALF=1,OPENCV=1,然后修改ARCH后的参数和你的GPU有关,修改后的结果:

 

在android上部署yolov8 安装yolov4_权重

还有第64行NVCC的路径,需要根据实际路径填写,我改成NVCC=/usr/local/cuda-10.1/bin/nvcc ,不知道的直接ctrl+f查找nvcc,

然后修改第100行的cuda版本及位置,我修改为COMMON+= -DGPU -I/usr/local/cuda-10.1/include/

 

完成Makefile的修改后在终端输入以下命令:

cd darknet  //进入目录
make -j8

然后在浏览器输入网址https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights,下载的yolov4的预训练权重,放在darknet目录下,可以用这个权重来检验之前的操作是否成功。

在终端输入:

./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights

然后输入图片路径,比如说

data/dog.jpg

如果之前都正确的话会输出检测结果图,按键盘上任意按键关闭图片。

 

接下来开始训练自己的模型,首先下载预训练权重,地址:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137

然后在cfg文件夹里找到yolov4-custom.cfg文件,将其复制到darknet目录下,重命名为yolov4-obg.cfg,然后打开,开始修改参数,主要修改四个参数+2x3个参数。

分别是batch表示每训练几个样本后修改权重,subdivisions将batch再细分,避免内存不够大出现out of memory错误,max_batches权重改变的最大次数,一般是类别数乘2000(最少6000),step用于指定学习率调整时机,当max_batch等于step时调整学习率,filters输出特征图数量及classes类别数量。更详细的配置文件说明可以看这个

由于我训练的螺栓螺母,仅两个类别,而且训练集一共100张图片,所以我的参数设置分别为batch=1,subdivisions=64,max_batches=6000,step=4800,5400。

filters和classes需要用ctrl+f搜索,直接搜yolo即可,总共要修改三个遍,filters=21,classes=2。filters的值等于(类别数+5)*3。

训练集可以放在data文件下,如果自己标定的话推荐使用作者提供的yolo_mark,这里不再多说,训练集的格式相当重要,一定要弄准确。需要注意,使用他的工具标定完后生成的train.txt文件路径包含x64,在训练的时候要注意其他文件的路径,不想新建x64文件夹的可以在将Yolo_mark中的x64目录下Release中的三个文件复制到Yolo_mark目录下,然后修改linux_mark.sh,第二行改为./yolo_mark data/img data/train.txt data/obj.names。这样训练集相关数据的都在data目录下,然后在终端输入./linux_mark.sh开始标定。

标定结束后将data文件夹放到darknet目录下,然后终端输入:

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

训练时的截图:

在android上部署yolov8 安装yolov4_linux_02

基本上等loss降到0.5左右训练就差不多结束了,也可以等训练完6000次后自动结束。最终的权重保存在backup文件夹中,可以使用以下命令检测:

./darknet detector test data/obj.data yolov4-obj.cfg backup/yolov4-obj_final.weights 图片名.jpg//单张图片
./darknet detector demo data/obj.data yolov4-obj.cfg backup/yolov4-obj_final.weights 视频名.mp4 //检测视频

 

然后输入相应图片名称即可,我的检测结果如下,左上角的计数和标签置信度是我自己加进去:

在android上部署yolov8 安装yolov4_权重_03