使用C版YOLOv4在自己的数据集上训练测试
Posted zillyrex
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C版YOLOv4在自己的数据集上训练测试相关的知识,希望对你有一定的参考价值。
本文记录了如何在Ubuntu/Docker中使用Alexey实现的C版YOLOv4在自己的数据集上进行训练与测试。
论文 :
YOLOv4: Optimal Speed and Accuracy of Object Detection
代码 :
https://github.com/AlexeyAB/darknet
环境配置
建议使用docker容器配置环境,docker的安装不在此赘述,docker安装好后拉取一个nvidia/cuda镜像,docker的一些用法可以看这里。如果你不使用docker的话可以跳过docker相关部分。
首先把我们的docker跑起来
$docker?run?-itdp?0.0.0.0:32774:22 --gpus ‘"device=1,2"‘?--name?yolo?-v?/home/usr/:/home?-v?/data0:/data0 nvidia/cuda-10.0-cudnn7-devel-ubuntu16.04:v1?/bin/bash
"-itdp 0.0.0.0:32774:22"
表示在后台运行一个交互式容器并将主机的32774
端口映射到docker容器的22/tcp
端口,如果不需要指定端口可以将其改为"-itdP"
,这表示我们不指定tcp端口映射而是随机映射。
"--gpus ‘"device=1,2"
表示我们使用主机的1、2号GPU。docker的gpu命令用法可以看这里。
"--name?yolo"
表示容器名称,可自定义。
"-v?/home/usr/:/home?-v?/data0:/data0"
表示将物理机的/home/usr/
目录挂载在docker容器的/home
路径下,后面同理,需要挂载几个目录就写几个-v
参数。
"nvidia/cuda-10.0-cudnn7-devel-ubuntu16.04:v1"
表示要运行的容器名称:容器标签
。
"/bin/bash"
表示容器内使用的命令程序。
docker的一些常用命令用法可以看这里。
接着我们安装依赖
CUDA : 需要CUDA 10.0,安装看这里。
cuDNN : 需要和CUDA 10.0对应的cuDNN,cuDNN在这里获取,选择最新的cuDNN for CUDA 10.0并下载cuDNN Library for Linux
,安装看这里。
CMake : 需要CMake>=3.8,CMake在这里获取,选择"Unix/Linux Source (has
line feeds)"
后对应的文件下载,使用如下命令编译安装
$tar xvzf cmake-3.17.1.tar.gz # 注意替换你下载的版本号,下同
$cd cmake-3.17.1
$./configure
$make -j
$make install
OpenCV : 需要OpenCV>=2.4,OpenCV在这里获取,选择Sources
下载,使用如下命令编译安装
$unzip opencv-4.2.0.zip # 注意替换成你下载的文件名,下同
$cd opencv-4.2.0.zip
$mkdir build
$cd build
$cmake ..
$make -j
$make install
上述各项依赖安装期间有权限问题则使用sudo
;各项安装完成后应查看版本号;必要时通过修改~/.bashrc
添加相关的环境变量并使用source ~/.bashrc
激活,此处不再赘述。
然后我们编译YOLOv4的darknet
将项目克隆至本地
$git clone https://github.com/AlexeyAB/darknet
$cd darknet
使用下列方式之一进行编译
- 使用CMake
$mkdir build-release
$cd build-release
$cmake ..
$make -j
$make install
如果期间报错,可能是之前的依赖安装有问题,按错误提示Google
解决,然后再次编译,注意再次编译前使用make clean
清除之前编译失败后遗留的中间文件。
- 使用make
在make
前可修改darknet/Makefile
文件前几行的相关参数,参数含义在这里,一般至少将GPU
和CUDNN
设置为1,以使用GPU加速。
$make -j
如果有报错,解决后报错后同样记得make clean
。
编译完成后执行
$./darknet
usage: ./darknet <function>
有如上结果说明编译成功。
最后我们简单测试一下编译好的darknet
将yolov4.weights下载到darknet
目录中,可能需要机智上网。
Google Drive 地址 :
https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT
GitHub 地址 :
https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
然后执行
$./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
CUDA-version: 10000 (10010), cuDNN: 7.6.5, GPU count: 2
OpenCV version: 4.2.0
compute_capability = 750, cudnn_half = 0
net.optimized_memory = 0
mini_batch = 1, batch = 8, time_steps = 1, train = 0
...
...
[yolo] params: iou loss: ciou (4), iou_norm: 0.07, cls_norm: 1.00, scale_x_y: 1.05
nms_kind: greedynms (1), beta = 0.600000
Total BFLOPS 128.459
avg_outputs = 1068395
Allocate additional workspace_size = 52.43 MB
Loading weights from yolov4.weights...
seen 64, trained: 32032 K-images (500 Kilo-batches_64)
Done! Loaded 162 layers from weights-file
data/dog.jpg: Predicted in 103.595000 milli-seconds.
bicycle: 92%
dog: 98%
truck: 92%
pottedplant: 33%
...
可以看到最后输出的检测结果等,目录下会生成预测结果。
训练
# TODO: Train
测试
# TODO: Test
以上是关于使用C版YOLOv4在自己的数据集上训练测试的主要内容,如果未能解决你的问题,请参考以下文章
在自定义数据集上使用 roboflow 对象检测 Yolov4 pytorch 模型时出现值错误
[软件工具]yolov3 yolov4 yolov7训练自己的数据集windows上超简单全程不写代码
YOLOv4团队最新开源!YOLOv4改进版!!!Scaled-YOLOv4解读
YOLOv4解析 | 第二篇:用YOLOv4训练自己的数据集(超级详细完整版)