使用c版yolov4在自己的数据集上训练测试(代码片段)

zillyrex zillyrex     2023-03-21     152

关键词:

本文记录了如何在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

使用下列方式之一进行编译

  1. 使用CMake
$mkdir build-release
$cd build-release
$cmake ..
$make -j
$make install

如果期间报错,可能是之前的依赖安装有问题,按错误提示Google解决,然后再次编译,注意再次编译前使用make clean清除之前编译失败后遗留的中间文件。

  1. 使用make

make前可修改darknet/Makefile文件前几行的相关参数,参数含义在这里,一般至少将GPUCUDNN设置为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

在自定义数据集上使用 roboflow 对象检测 Yolov4 pytorch 模型时出现值错误

】在自定义数据集上使用roboflow对象检测Yolov4pytorch模型时出现值错误【英文标题】:ValueerrorwhileusingroboflowobjectdetectionYolov4pytorchmodeloncustomdataset【发布时间】:2021-12-1319:43:48【问题描述】:我们使用Roboflow进行对象检测,使用Yolov4... 查看详情

在自己的数据集上训练 TensorFlow 对象检测

...任务后,我想分享一下我如何回答这个问题的经验:如何使用TSObjectDetection来使用我自己的数据集进行训练?【问题讨论】:你是老板,谢谢!【参考方案1】:这假定模块已经安装。如果没有请参考他们 查看详情

使用 dplyr 和 broom 在训练和测试集上计算 kmeans

】使用dplyr和broom在训练和测试集上计算kmeans【英文标题】:Usingdplyrandbroomtocomputekmeansonatrainingandtestset【发布时间】:2017-02-2705:15:11【问题描述】:我正在使用dplyr和broom为我的数据计算kmeans。我的数据包含X和Y坐标的测试和训练... 查看详情

我可以在整个数据集上使用 StandardScaler(),还是应该分别在训练集和测试集上计算?

】我可以在整个数据集上使用StandardScaler(),还是应该分别在训练集和测试集上计算?【英文标题】:CanIuseStandardScaler()onwholedataset,orshouldIcalculateontrainandtestsetsseparately?【发布时间】:2021-06-0323:33:49【问题描述】:我正在为大约100... 查看详情

如何评估不同模型在一个数据集上的性能?

...此,我将数据集拆分为训练集和测试集,并在该数据集上使用训练数据训练不同的模型,并使用测试数据集进行测试。我的问题:我能否仅 查看详情

yolov4解析|第二篇:用yolov4训练自己的数据集(超级详细完整版)(代码片段)

文章目录第一部分:训练模型第1步:将数据放到指定位置第2步:修改voc_classes.txt文件第3步:运行voc_annotation.py文件第4步:添加权重文件第5步:运行train.py文件第二部分:评估模型第1步:修改权重... 查看详情

python:在验证集上调整模型的参数

...dSearchCV对训练集进行交叉验证以找到最佳参数。但是如何使用自己的验证集来调整参数?我有10个类,对于训练数据,每个 查看详情

在使用 k 折交叉验证训练训练数据后如何测试数据?

】在使用k折交叉验证训练训练数据后如何测试数据?【英文标题】:howtotestthedataaftertrainingthetraindatawithk-foldcrossvalidation?【发布时间】:2020-09-1412:42:45【问题描述】:在代码中,我有:将数据集分成两部分:训练集和测试集(7:3)... 查看详情

caffeexample在cifar-10数据集上训练与测试

本文主要来自Caffe作者YangqingJia网站给出的examples。@article{jia2014caffe,Author={Jia,YangqingandShelhamer,EvanandDonahue,JeffandKarayev,SergeyandLong,JonathanandGirshick,RossandGuadarrama,SergioandDarrell,Trevor}, 查看详情

Keras:使用批量标准化在同一数据集上的不同训练和验证结果

】Keras:使用批量标准化在同一数据集上的不同训练和验证结果【英文标题】:Keras:Differenttrainingandvalidationresultsonsamedatasetusingbatchnormalization【发布时间】:2017-11-1806:29:56【问题描述】:即使我使用相同的数据集,我的训练分类也... 查看详情

pytorch应用:构建分类器(代码片段)

...学习目标1.分类器任务和数据介绍2.训练分类器的步骤2.1使用torchvision下载CIFAR10数据集2.2定义卷积神经网络2.3定义损失函数2.4在训练集上训练模型2.5保存模型3.在测试集上测试模型3.1展示测试集中的若干图片3.2加载模型并对测试图... 查看详情

[软件工具]yolov3yolov4yolov7训练自己的数据集windows上超简单全程不写代码

darknet训练自己的数据集一般要写代码自己转化数据集,还要修改配置文件,数据集也不保证都是正确标注的,这个流程一般对初学者或者不熟悉的人经常弄错,只要一个配置参数改错就会导致训练出现问题,... 查看详情

交叉验证

...个统计分析模型在独立数据集上的概括能力。主要用于在使用ML模型进行预测时,准确衡量一个模型在实际数据集上的效果。具体来说就是将整个数据集划分为若干部分,一部分用以训练模型、一部分用以测试最终模型的优劣、... 查看详情

零基础玩转yolov5yolov5训练自己的数据集(最新最全版)(代码片段)

文章目录一、写在前面二、使用labelimg标记图片1.准备工作2.标记图片三、划分数据集以及配置文件修改1.划分训练集、验证集、测试集2.XML格式转yolo_txt格式3.配置文件4.聚类获得先验框四、使用CPU训练五、使用GPU训练1.开始训练2.... 查看详情

[课程][原创]paddleocr训练自己数据集windows版

...ws上安装anaconda3(4)学会在windows安装PPOCRLabel以及使用PPOCRLabel标注自己的数据集(5)学会使用paddleocr训练文本检测模型(6)学会使用paddleocr训练文本识别模型(7)学会使用paddle 查看详情

组合两个预训练模型的输出(在不同数据集上训练)并使用某种形式的二元分类器来预测图像(代码片段)

...型(Model_1和My_Model)的输出结合在一个新层中。新图层应使用一些二元分类器来判断是否使用Model_1或My_ 查看详情

如何使用yolov3训练自己的数据集(代码片段)

...et./darknet你将会看到以下输出结果usage:./darknet<function>使用GPU编译(可选)如果想让yolo运行的更快的话,可以使用GPU加速。你的电脑中应该有NvidiaGPU并安装cud 查看详情

求生之路每一关都跳出

...了几个内标法一般指的是基于标签的算法,它可以将一个数据集分割成训练集和测试集。它的主要步骤是:1.对数据集中的每个样本分配一个唯一的标签;2.随机地将样本按照一定的比例分为训练集和测试集;3.利用训练集训练模... 查看详情