Darknet (检测自定义对象)安装并使用自己的数据集进行训练完整步骤

一、安装darknet
1、执行以下命令安装:

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

2、根据官网步骤,进行相关参数的修改即可(以下步骤是参考官网步骤),官网连接:https://pjreddie.com/darknet/install/
使用CUDA编译,修改Makefile文件,将GPU=0和CUDNN=0改为1:

cd darknet
vim Makefile

在这里插入图片描述
在这里插入图片描述

按“i”键进行插入修改,“Esc”键退出插入,输入“:wq” 后按“回车键”保存并退出就行了。(下图是我修改后的Makefile,在这我还修改了OPENCV,如果你安装了opencv的话,也可以使用这个编译),修改完之后,再make一次

3、安装opencv
安装方法写在之前的文章中:https://blog.csdn.net/baidu_41906969/article/details/116001511
详细训练步骤,参考作者的git:https://github.com/AlexeyAB/darknet

二、将自己的数据集转换成darknet需要的数据格式

三、下载预训练模型
我使用的是yolov4预训练模型yolov4.conv.137

四、配置训练要使用的cfg文件
1、建议将 darknet/cfg/yolov4.cfg,copy一份,重命名(可自命名),我取为yolo-obj.cfg
2、建议修改新建的cfg文件中的 subdivisions=64(原文件subdivisions=8,运行的时候会报错,这是根据自己的电脑的配置进行修改的);
如果想要训练的时候GPU使用率高一点的话,可以相应的改小subdivisions;
根据以下指令显示出当前GPU的所有基础信息

nvidia-smi

在这里插入图片描述
各个参数解析

我一般训练将subdivisions=4,GPU使用率基本在80%以上,显存使用量为4G左右。

3、根据需要,修改heightwidth和第一个max_batches(因为我训练的是两个类,一般一个类2000次,我这设的4000,同时修改steps=0.8max_batches,0.9max_batches),learning_rate开始训练前一般设置在0.001~0.01;

[net]
# Testing
#batch=1
#subdivisions=1
# Training
batch=64
subdivisions=64
width=416
height=416
channels=3
momentum=0.949
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.009
burn_in=1000
max_batches = 4000
policy=steps
steps=3200,3600

4、修改[yolo]前一个[convolutional]的filters以及[yolo]下的classes,分别有三处需要修改:filters = (classes + 5)* 3,我是2个类,所以是21,3是yolo层的个数,大模型是3个yolo层。

[convolutional]
size=1
stride=1
pad=1
filters=2
activation=linear


[yolo]
mask = 0,1,2
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=2

五、配置相关文件
1 在 darknet/build/darknet/x64/data 中创建以下文件:
1)obj.name:
存放训练的类别名
在这里插入图片描述
2)weights(文件夹):
存放权重文件

3)train(文件夹):
文件夹里的内容为JPEGImages(将需要训练的图片放该文件夹)、labels(生成的darknet格式的.txt文件)。
在这里插入图片描述
如果没有改darknet的src/utils.c文件的话,需要将labels的.txt文件与图片放到一个文件夹(JPEGImages)下,不然训练的时候会can’t open file。

修改darknet的src/utils.c之后就可以分开放,修改275行,将注释去掉:
在这里插入图片描述
修改后:
在这里插入图片描述

5)test(文件夹):
文件夹里存放测试用的图片。

6)train.list、test.list
在 darknet/build/darknet/x64/data 文件夹下打开终端,执行以下命令,会在 该文件夹下生成train.list、test.list文件。如果图片格式是png,可将命令中的.jpg改为.png,:

find `pwd`/train -name \*.jpg > train.list
find `pwd`/test -name \*.jpg > test.list

7)obj.data:
存放需要读取的文件的地址
在这里插入图片描述
六、开始训练模型
1、在darknet文件夹下打开终端,执行以下命令开始训练:
根据自己的存放地址修改obj.data、yolo-obj.cfg、yolov4.conv.137的路径。
2、如果是多GPU训练,可多加-gpus 0,1,2…单GPU则不需要
3、如果想保存训练日志:在命令后加2>&1 |tee build/darknet/x64/log/yolo.logs

./darknet detector train build/darknet/x64/data/obj.data cfg/yolo-obj.cfg build/darknet/x64/yolov4.conv.137 -gpus 0,1

开始训练后,会显示以下两张图(这里上传的是训练的别的类别9000次的截图)。
在这里插入图片描述
Region xx: cfg文件中yolo-layer的索引;
Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;
Class: 标注物体的分类准确率,越大越好,期望数值为1;
obj: 越大越好,期望数值为1;
No obj: 越小越好;
.5R: 以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本
0.75R: 以IOU=0.75为阈值时候的recall;
count:正样本数目。

在这里插入图片描述

2、在darknet文件夹下打开终端,执行以下命令开始预测:
上一步训练好后,会在weights 文件夹中生成权重文件,根据训练时显示的loss图,选择一个loss值最低的权重文件进行预测(同样修改相关文件的地址)。
如果想设置阈值可加 -thresh 0.6(0.6是显示预测值大于60%的标签)

./darknet detector test build/darknet/x64/data/obj.data cfg/yolo-obj.cfg /home/wst/darknet/build/darknet/x64/data/weights/yolo-obj_final.weights /home/Pictures/0d2f72e8-3c81-463e-8d1a-b0a4da940b23.jpg -thresh 0.6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值