YOLOv3、YOLOv4训练自己数据集
YOLOv3、YOLOv4训练自己数据集
1.darknet下载及编译
2.数据集标注
3.配置文件修改
4.开始训练
###================================
1.darknet下载及编译
①请查看官方下载链接:darknet-master,获取 darknet-gray 的安装包。
②在Ubuntu系统中编译完成后,请访问GitHub中的darknet-gray仓库,并按照提示完成编译步骤。随后,在终端界面输入‘make’命令即可生成可执行程序。
③若选择加速模式(GPU模式),则需编辑 makefile 文件以配置加速所需的资源。
GPU=1 #使用 CUDA 构建以使用 GPU 加速
CUDNN=1 #使用 cuDNN 构建以使用 GPU 加速训练
OPENCV=1 # 使用 OpenCV 4.x/3.x/2.4.x 构建 - 允许检测来自网络摄像机或网络摄像头的视频文件和视频流
但是,在使用GPU之前需要先安装相应的CUDA和CUDNN库以及OpenCV库。需要注意的是,在安装完成后,在编译时可能会出现nvcc not found错误。解决方法就是在Makefile中配置_NVCC_EXECUTABLE_DIR变量并指定可执行文件NVCC的路径。例如,在Makefile中设置如下:
NVCC=/usr/local/cuda-10.2/bin/nvcc
具体要看自己安装cuda的版本和路径
2.数据集标注
数据集标注的具体内容可查阅我的博客文章LabelImg标注数据集. 请通过将获取到的txt文件进行保存来完成操作。
3.配置文件修改
①在cfg/coco.data中修改即可
classes= 24 #识别对象总数量
train = data/train.txt #训练集路径
valid = data/test.txt #测试集路径
names = data/coco.names #识别对象类名
backup = backup/ #训练结果保存路径
②在data新建train.txt文本,train.txt文本主要写所有训练图片的路径

test.txt也同理
位于data目录中创建了gesture_traindata文件夹,并将其用于放置训练图片以及通过labelimg标注得到的txt文件
③在data中找到coco.names并修改为你所要的类名

④对yolov3.cfg文件进行配置调整(yolov4同样采用yolov4-custom.cfg的方式进行配置)
-batch=16
-subdivisions=16
每次计算所处理的图片数量等于batch大小除以subdivisions的数量。
当电脑性能较弱时,请将batch大小和subdivisions均设置为8;当性能依然不足时,请将两者均调整为1。
max_batches被修改为(classesx2, 但至少不低于训练图像的数量,并且最少为6)
将行步数更改为 max_batches的80%和90%,如max_batches=6000,则steps=4800,5400;
类别的数量被设置为24。
类别数量即为分类的数量,在实际应用中可以根据不同的类别数量进行调整。
因此被设定为24个。
在文件中一共有三处地方需要对类别的数量进行修改,
每个YOLO层中均存在一处这样的地方。
这些修改通常集中在文件中的第610、689和776行附近。
在模型训练过程中(filters=87),其计算公式基于(classes + 5)乘以3进行推导。在当前配置中我们有24个类别可供选择,在这种情况下计算得出(24+5)*3=87。因此等于87。修改的位置包括三个Yolo层在其上一层设置所需的滤镜数量。
在本文件中存在多个filter实例,在本项目中我们主要关注的是yolo层之前的所有卷积层下方的滤镜设置优化工作
4.开始训练
①yolov3训练指令如下
sudo ./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74
可访问位置为 darknet53.conv.74 的下载链接: darknet53.conv.74.

②yolov4训练指令如下
sudo ./darknet detector train cfg/coco.data cfg/yolov4-custom.cfg yolov4.conv.137
yolov4.conv.137下载链接: 该YOLoV4卷积层的访问地址: 该YOLoV4卷积层.
