使用Yolov4训练自己的数据集(20240415版)

yolov4训练自己的数据集 YOLOv4训练自己的数据集1、电脑配置2、下载并配置 1、电脑配置 win10、OpenCV4.1、VS2019、cuda10.2 2、下载并配置 (1)YOLOv4网址:https://github.com/AlexeyAB/darknet 克隆到本地后,开始配置 (2)打开:D:\darknet\build\darknet(我下载在D盘,路径按照自己的打开) (3)在文件夹C:\Program Files (x86)\opencv\build\x64\vc15\bin的两个dll文件: opencv 阅读详情
AI摘要

本文介绍使用Yolov4算法训练自定义数据集的方法。先准备飞桨AI Studio星河社区的水果分类目标检测VOC数据集,进行划分和处理;接着完成环境准备,包括软硬件配置、安装依赖;然后运行相关代码训练数据;最后展示训练成果,如图片测试、损失曲线、平均精度曲线等。

一、什么是Yolov4?

(本思维导图使用360AI浏览器制作)

因个人对Yolov4的理解不够清晰和深刻,如果片面的来说明会导致读者产生误解,所以理论部分建议大家看一些更权威的论文或者博客,知乎文章等,比如:

睿智的目标检测30——Pytorch搭建YoloV4目标检测平台-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_44791964/article/details/106214657本实验基于代码Github开源代码:bubbliiiing/yolov4-pytorch: 这是一个YoloV4-pytorch的源码,可以用于训练自己的模型。 (github.com)icon-default.png?t=N7T8https://github.com/bubbliiiing/yolov4-pytorch

二、数据准备

实践是检验真理的唯一标准,话不多说,上手实操,首先我们选用的是飞桨AI Studio星河社区的水果分类目标检测VOC数据集(说白了就是手机摄像头坏了人也懒)

水果分类目标检测VOC数据集_数据集-飞桨AI Studio星河社区 (baidu.com)icon-default.png?t=N7T8https://aistudio.baidu.com/datasetdetail/92360

这个数据集主要有dragon fruit,snake fruit,pineapple(火龙果、蛇果、菠萝)三种水果的图片共计200张,数据集图片和标签是分开的,比较方便(懒就是懒,你还方便上了)

1.划分数据集

项目的主干结构如上图,数据集的命名其实已经很清楚了,就是Annotations文件夹放标签,ImageSets文件夹放图片,如果是自己找的标注的图片,标注完成后最好一个Annotations文件夹放标签,一个ImageSets文件夹放图片(便于后期对应),然后统一格式命名(用Python实现即可),示例如下(只是结构示例,并非真实可靠数据集,娱乐所作):

                                 

如果都是png格式的图片,建议都转换成jpg格式的图片,这里提供简单的png转jpg格式图片的Python脚本:

from PIL import Image
import os

# 设置源文件夹和目标文件夹
source_folder = '这里是需要转换的文件夹路径'
target_folder = '这里是转换输出的文件夹路径'

# 检查目标文件夹是否存在,如果不存在则创建
if not os.path.exists(target_folder):
    os.makedirs(target_folder)

# 遍历源文件夹中的所有文件
for file_name in os.listdir(source_folder):
    if file_name.endswith('.png'):
        # 读取PNG图片
        img_path = os.path.join(source_folder, file_name)
        img = Image.open(img_path)

        # 转换为JPEG
        rgb_im = img.convert('RGB')

        # 保存JPEG图片
        target_file_name = file_name[:-4] + '.jpg'
        target_img_path = os.path.join(target_folder, target_file_name)
        rgb_im.save(target_img_path, 'JPEG')

        # 删除原始PNG图片
        os.remove(img_path)

print("转换并删除原始PNG图片完成!")


 

2.处理数据集

如果是自己找的图片,并使用labelImg标注的话,这里有一些小tips,绿框框住的部分选择PascalVOC,这样标签文件会是xml格式,如果选择yolo标签文件是txt格式,不方便后续项目的进行。

这一步简单来说就是把训练自己的数据集时xml标签文件放入VOCdevkit文件夹下的VOC2007文件夹下的Annotation文件夹中,jpg图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages文件夹中即可,如图所示:

voc_annotation.py里面有一些参数需要设置,分别是annotation_mode、classes_path、trainval_percent、train_percent、VOCdevkit_path,第一次训练可以仅修改classes_path。

classes_path        = 'model_data/cls_classes.txt'

classes_path用于指向检测类别所对应的txt,训练自己的数据集时,可以自己建立一个cls_classes.txt(或者你想要的名字都可),里面写自己所需要区分的类别。以我的数据集为例,我用的cls_classes.txt为:

就是想要检测的类别是什么就写什么,但要和数据集的类别一致,比如数据集的类别是苹果和椰子,cls_classes.txt里写类别是榴莲和菠萝,这样肯定是不合理的。

三、环境准备

1.环境内容

电脑硬件配置:

设备名称    BBBQL
处理器    11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz   2.50 GHz
机带 RAM    16.0 GB (15.9 GB 可用)
显卡 NVIDIA GeForce RTX 2060 6G(如果用Cuda跑得用N卡,也就是大家说的英伟达的显卡)

电脑软件配置:

PyCharm 2024.1 (Professional Edition)(喜欢vscode用vscode,喜欢命令行用命令行,看个人喜好,此处仅提供具体环境作为参照)

Anaconda3-2024.02-1-Windows-x86_64 (有Conda不用挨个找不同Python安装了)

2.环境配置

python 3.9

Package                 Version
----------------------- ------------
absl-py                 2.1.0
bigtree                 0.17.0
chardet                 5.2.0
colorama                0.4.6
contourpy               1.2.1
cycler                  0.12.1
filelock                3.13.4
fonttools               4.51.0
fsspec                  2024.3.1
graphviz                0.20.3
grpcio                  1.62.1
h5py                    3.11.0
importlib_metadata      7.1.0
importlib_resources     6.4.0
install                 1.3.5
Jinja2                  3.1.3
kiwisolver              1.4.5
Markdown                3.6
MarkupSafe              2.1.5
matplotlib              3.8.4
mpmath                  1.3.0
networkx                3.2.1
numpy                   1.26.4
opencv-python           4.9.0.80
packaging               24.0
Pillow                  9.5.0
pip                     23.3.1
protobuf                5.26.1
pydot                   2.0.0
pyparsing               3.1.2
python-dateutil         2.9.0.post0
scipy                   1.13.0
setuptools              68.2.2
six                     1.16.0
sympy                   1.12
tensorboard             2.16.2
tensorboard-data-server 0.7.2
torch                   2.2.1+cu121
torchaudio              2.2.1+cu121
torchvision             0.17.1+cu121
tqdm                    4.66.2
typing_extensions       4.11.0
Werkzeug                3.0.2
wheel                   0.41.2
zipp                    3.18.1

同样,此处仅提供具体环境作为参照,便于训练自己数据集时复现。

下面以Pycharm专业版(社区版也一样)为例,手把手复现环境搭建(个人习惯,习惯性环境隔离,每个项目一个解释器):

第一步,打开设置,点击“项目”下的“Python解释器”选项(英文差用了中文插件,见谅);

第二步,点击“添加解释器”然后选择“添加本地解释器”;

第三步,点击“Conda环境”,“创造新环境”,环境名称喜欢什么用什么(用中文会伤心的OK),Python版本我选择的3.9,因为很多教程都是3.6版本的感觉麻烦还是用稍微新一点的版本了。

中场休息,如果上一步,没有安装Anaconda的同学就不一定能到Conda环境这一步了,如果说没有安装的可以参考下面的Anaconda安装教程,conda国内镜像源可加可不加,因为不少conda国内镜像源不能正常工作了,安装的时候记得勾选“Add Anaconda3 to the system PATH environment variable",这样就直接添加到系统环境变量了,不用手动配置环境变量。

2023年最新版Anaconda3的安装配置及使用教程(非常详细),从零基础入门到精通,看完这一篇就够了(附安装包)_anaconda3安装-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/Innocence_0/article/details/132352785

第四步,成功创建完新的虚拟环境之后,设置里就会直接显示并使用新的环境了,这时候点击“应用”,然后点“确定”,正常会自动切换虚拟环境。

第五步,点击左下角“终端”图标,打开就是新环境,如果创建环境之前是之前的虚拟环境的话需要手动激活,或者重启终端,也可以在终端手动创建conda环境并激活,来去自如,激活命令示例:

conda activate 环境名

3.安装依赖

养成好习惯,有requirements.txt先看requirements.txt,这里是把所需要的包都罗列出来了,如果只想用CPU训练数据集和预测,可以直接安装,如果是想要GPU和Cuda训练和预测数据集,记得删除torch和torchvision那两行,不然后面会搞事情,具体是什么事情的后面会提到。

第一步,既然有了requirements.txt,在终端直接无脑输入,

pip install -r requirements.txt

这里如果真无脑输入了,会不会发现少点什么,当然是我们老生常谈的Pip换源

常用Pip国内镜像源:

清华:https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学:http://pypi.hustunique.com/simple/
上海交通大学:https://mirror.sjtu.edu.cn/pypi/web/simple/
豆瓣:http://pypi.douban.com/simple/

国内开源镜像网站集合汇总(最全,可用) - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/609597886注: 新版ubuntu系统要求使用https源。

一般来说,镜像源没有最快,只有更快(相对而言)用法示例如下:

pip install <安装包> -i <镜像源>

pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/

然后其余的库缺啥补啥,方法跟上面一样,比如我下了tqdm,h5py等库,用了镜像都很快,如果要用CUDA,这一步先不要下载下面这三个库。

torch 
torchaudio
torchvision 

如果真的相信自己的CPU足够强大可以直接用cpu版本的PyTorch(自行配置镜像源)

pip install torch==2.2.1 torchvision==0.17.1 torchaudio==2.2.1 --index-url https://download.pytorch.org/whl/cpu

其他CPU版本的Pytorch下载命令:

Previous PyTorch Versions | PyTorchicon-default.png?t=N7T8https://pytorch.org/get-started/previous-versions/

第二步,既然都用上PyTorch了,那么CUDA肯定是要用的咯,那么安装CUDA是必不可少的一步

先看自己的电脑支持什么最高版本的CUDA,右键打开“NVIDIA设置”(红框部分)->选择“NVIDIA控制面板”->选择左下角的系统信息->组件

比如我的电脑最高是可以支持12.4版本的CUDA的,知道最高支持版本之后,我们就可以在小于等于该版本的CUDA中选择了。

如果觉得上述步骤麻烦不好操作,在显卡驱动正确安装的前提下可以直接用命令行(Win+R召唤运行,然后输入CMD),然后在命令行输入:

nvidia-smi.exe

这里会直接显示显卡支持的最高的CUDA版本,同样知道最高支持版本之后,我们就可以在小于等于该版本的CUDA中选择了。

Windows安装CUDA ,还需要下载一些其他的东西:

(1)CUDA toolkit(toolkit就是指工具包)

 官方教程:(可能需要魔法)
Installation Guide Windows :: CUDA Toolkit Documentationicon-default.png?t=N7T8https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html

(2)cuDNN

 官方教程:(可能需要魔法)

Installation Guide :: NVIDIA Deep Learning cuDNN Documentationicon-default.png?t=N7T8https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindows

(3)Visual Studio2022(使用C++的桌面开发,这里我已经安装过了,为了截张图重新走了遍安装流程)


这里由于CUDA安装教程过长,占用太多篇幅可能会比较枯燥乏味(实在是懒得写了哈哈哈哈哈哈哈哈哈),建议直接搜索相关教程,或者参考一些比较详细的博客,例如:

win11下安装Cuda和Cudnn(pytorch+GPU环境安装),保姆级教程!!!_cudnn-windows-x86_64-8.7.0.84_cuda11-archive-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/qq_36623004/article/details/127228147

Pytorch、CUDA和cuDNN的安装图文详解win11(解决版本匹配问题) - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/641832733

CUDA安装及环境配置——最新详细版-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/chen565884393/article/details/127905428第三步,检查CUDA是否安装成功,老办法(Win+R召唤运行,然后输入CMD),然后在命令行输入:

nvcc -V

出现了你的CUDA版本信息,说明安装成功了。要是还想测试一下能不能用,CUDA也有测试工具测着玩,我的安装路径是:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\demo_suite

具体路径看用的人安装的路径,在demo_suite文件夹执行CMD,或者也可以在命令行跳到这个文件夹都可,查询一下本机的gpu设备,输入:

deviceQuery

再来测试一下带宽,输入

bandwidthTest

能看出结果都是PASS,说明一切运行正常

第四步,安装CUDA版本的torch,torchaudio,torchvision三个库

命令如下(如果网速尚可不要用镜像,因为镜像源总是下成CPU版本的Pytorch):

这里以Windows,CUDA 12.1,PyTorch 2.2.1版为例:

# CUDA 12.1
pip install torch==2.2.1 torchvision==0.17.1 torchaudio==2.2.1 --index-url https://download.pytorch.org/whl/cu121

找到适合自己CUDA版本的PyTorch版本下载即可,可选版本很多:

再贴一遍PyTorch下载命令链接:Previous PyTorch Versions | PyTorchicon-default.png?t=N7T8https://pytorch.org/get-started/previous-versions/

第五步,在Python里测试下载好的CUDA版本的PyTorch是否可用

一个简单的测试代码,瞎写的:

import torch
import torchaudio
import torchvision
print(torch.__version__) #输出torch版本
print(torchaudio.__version__) #输出torchaudio版本
print(torchvision.__version__) #输出torchvision版本
print(torch.cuda.is_available())  # 如果这个命令返回True,那么PyTorch可以使用CUDA

正确的CUDA版本PyTorch输出结果:

错误的CPU版本PyTorch输出结果:(仅为打印出来的示例,具体是否输出内容是这些我也忘了)

也有PyTorch不完全是CUDA版本的情况:(torchvision明显是cpu版本,总之是坑,谨记避雷!)

到此为止,我们前期的环境准备流程基本结束。

四、训练数据

1.运行voc_annotation.py

处理数据集修改了classes_path并对应自己的类别文件就可以直接运行,输出结果示例如下:

 

这个代码的主要作用如下:

  1. 设置处理模式 (annotation_mode):

    • 根据设定的模式,可以只生成数据集的划分文件(例如训练集、验证集),或者同时生成这些划分并且创建包含具体标注信息的文本文件。
  2. 设定类别信息 (classes_path):

    • 指定一个文件,该文件包含了数据集中所有目标的类别名称,用于区分不同的物体。
  3. 数据集划分比例 (trainval_percent 和 train_percent):

    • 设定训练集和验证集的数量比例,以及它们两者与测试集的数量比例。
  4. 处理VOC数据集:

    • 从标注文件(XML文件)中提取出目标的类别和对应的边界框(bounding box)坐标。
    • 根据提供的类别信息和标注,包括目标的难易程度(difficult),生成特定于训练的文本文件,这些文件包含了用于训练目标检测模型的必要信息。
    • 输出的文件格式通常是一个图片文件的路径,后面跟着该图片中所有标注对象的类别索引和边界框坐标。
  5. 自动化标注文件创建与数据集划分:

    • 自动生成用于训练、验证和测试的数据划分文件(如train.txt, val.txt, test.txt)。
    • 这样可以简化后续模型训练时的数据准备工作,因为模型可以直接读取这些划分文件来获取必要的训练和验证数据。
  6. 统计信息输出:

    • 在处理完毕后,代码还会输出一些统计信息,比如每个类别的目标数量,以及提醒信息,例如如果训练集的数量较小或者某些类别没有目标。

总而言之,这段代码的主要作用是从标注的XML文件中提取出目标检测任务所需的信息,并自动创建相应的训练、验证和测试划分文件,方便进行后续的模型训练和评估工作。

2.运行train.py

这个train.py代码可以改的参数很多,第一次训练咱们化繁为简,成功了再谈改进,如果CUDA成功安装了并安装了CUDA版本的PyTorch就把Cuda参数设置为True,用cpu可以不管,然后classes_path参数修改为自己定义好类别的txt文件;

yolo.py也需要修改相关函数:

注意,train.py文件中有个重要参数,mode_path主干权值文件,一般是使用现成的训练好的权值文件yolo4_weights.pth和yolo4_voc_weights.pth;

我第一次训练(批次(epoch)=100)的时候使用的主干权值文件是yolo4_weights.pth,

第二次训练进(批次(epoch)=100),用了我自己训练的权值文件(fruit_weights)作为主干权值,

第三次训练(批次(epoch)=300),用了我自己训练的权值文件(fruitv2_weights)作为主干权值,可以看到,性能提升非常大。

总之其实可以老老实实用yolo4_weights.pth等现成的权值文件多训练几百个批次(epoch),主干权值文件能不动尽量不动。(注:不改变原代码函数的情况下200张图片100个批次2060显卡跑满的话一个小时左右就跑完了)

UnFreeze_Epoch模型总共训练的批次(epoch)数参数的话,如果对数据集没什么信心可以设置个20-30批次左右看输出内容,如果输出各项指标一直是0就可以直接结束,改进数据集了。

训练期间会输出模型性能的统计数据,包括不同类别(dragon fruit 和 snake fruit)的平均精度(AP)和平均精度均值(mAP),以及它们对应的分数阈值、F1-分数、召回率和精确率。

这个代码主要作用如下:

  1. 准备阶段:

    • 设置是否使用GPU。
    • 初始化随机种子以确保结果可复现。
    • 设置是否使用分布式训练。
    • 定义模型需要检测的类别。
    • 加载预定义的YOLO模型的锚点(anchors),用于指导模型预测目标大小。
    • 加载图像数据和标签数据的路径。
  2. 模型配置:

    • 加载模型架构,可以选择加载预训练权重以此来初始化模型,或者从头开始训练。
    • 设置输入图像的尺寸。
    • 根据是否进行冻结训练(只训练模型的部分层,其他层保持不变),设置不同的训练策略,例如学习率和训练轮次(Epoch)。
  3. 数据增强:

    • 使用了Mosaic和Mixup等数据增强技术,可以在训练中生成更多样化的训练样本。
  4. 编译模型:

    • 根据设置的学习率、优化器类型(如SGD或Adam)、以及是否使用Focal Loss或iou损失等选项,配置模型的优化器。
    • 设置学习率衰减策略。
  5. 训练流程:

    • 分两个阶段进行训练:冻结训练(只训练模型顶层,主干网络被冻结)和解冻训练(训练所有层)。
    • 在每个阶段,会根据实际数据集的大小动态调整训练时的批量大小(Batch Size)和学习率。
    • 逐轮次(Epoch)进行训练,每轮次结束后可能保存模型权重,并可以选择性地对验证集进行评估,以监控模型性能。
  6. 记录和评估:

    • 将训练过程中的损失值和经过验证集评估得到的性能指标记录下来。

总结来说,这段代码用于训练Yolo目标检测模型,涉及到了数据准备、数据增强、模型配置、训练流程以及性能评估等关键步骤。

训练完的权值文件默认保存在log文件夹下,log文件夹下的best_epoch_weights.pth就是我们训练好的权值文件,示例如下:

3.运行predict.py

训练好我们要用的权值文件以后,先修改yolo.py代码,model_path换成自己训练好的权值文件;

yolo.py还有个不明显但是训练自己数据集后必须要更改的地方,onnx_path同样改成训练好的权值文件,classes_path应该不用多说,改成自己设置好的类别txt文件。

yolo.py总会报两个错误,但我没明白原因,反正不影响预测啥的,直接无视:

然后修改predict.py里的图片输入路径,不改也不甚要紧,然后用找来的图片来测试训练好的数据集权值文件效果。

如果PyTorch版本比较新,在predict.py运行时可能会弹出警告:

D:\Python\yolov4\utils\utils_bbox.py:88: UserWarning: The torch.cuda.*DtypeTensor constructors are no longer recommended. It's best to use methods such as torch.tensor(data, dtype=*, device='cuda') to create tensors. (Triggered internally at C:\actionsrunner\_work\pytorch\pytorch\builder\windows\pytorch\torch\csrc\tensor\python_tensor.cpp:85.) anchor_w = FloatTensor(scaled_anchors).index_select(1, LongTensor([0])) Traceback (most recent call last): File "D:\Python\yolov4\predict.py", line 95, in <module> r_image = yolo.detect_image(image, crop = crop, count=count) File "D:\Python\yolov4\yolo.py", line 207, in detect_image label_size = draw.textsize(label, font) AttributeError: 'ImageDraw' object has no attribute 'textsize'

 我的解决办法是直接修改了utils_bbox.py这个代码中的几行问题代码,修改如下(注释掉了原代码):

            #----------------------------------------------------------#
            #   按照网格格式生成先验框的宽高
            #   batch_size,3,13,13
            #----------------------------------------------------------#
            # anchor_w = FloatTensor(scaled_anchors).index_select(1, LongTensor([0]))
            anchor_w = torch.tensor(scaled_anchors, dtype=torch.float, device='cuda').index_select(1, torch.tensor([0],
                                                                                                                   dtype=torch.long,
                                                                                                                   device='cuda'))
            # anchor_h = FloatTensor(scaled_anchors).index_select(1, LongTensor([1]))
            anchor_h = torch.tensor(scaled_anchors, dtype=torch.float, device='cuda').index_select(1, torch.tensor([1],
                                                                                                                   dtype=torch.long,
                                                                                                                   device='cuda'))

            anchor_w = anchor_w.repeat(batch_size, 1).repeat(1, 1, input_height * input_width).view(w.shape)
            anchor_h = anchor_h.repeat(batch_size, 1).repeat(1, 1, input_height * input_width).view(h.shape)

            #----------------------------------------------------------#
            #   利用预测结果对先验框进行调整
            #   首先调整先验框的中心,从先验框中心向右下角偏移
            #   再调整先验框的宽高。
            #----------------------------------------------------------#
            # pred_boxes          = FloatTensor(prediction[..., :4].shape)
            pred_boxes = torch.zeros(prediction[..., :4].shape, dtype=torch.float, device='cuda')
            pred_boxes[..., 0]  = x.data + grid_x
            pred_boxes[..., 1]  = y.data + grid_y
            pred_boxes[..., 2]  = torch.exp(w.data) * anchor_w
            pred_boxes[..., 3]  = torch.exp(h.data) * anchor_h

在使用CPU的情况下,如果Pillow库是直接安装的,没有指定版本,也会报类似的错误:

Traceback (most recent call last):   File "D:\py\yolov4-pytorch-master\predict.py", line 96, in <module>     r_image = yolo.detect_image(image, crop=crop, count=count)   File "D:\py\yolov4-pytorch-master\yolo.py", line 212, in detect_image     label_size = draw.textsize(label, font) AttributeError: 'ImageDraw' object has no attribute 'textsize'

解决方法也很简单,卸载新版Pillow库 ,

pip uninstall pillow

 然后按照要求指定安装老版本的Pillow==8.2.0即可。

pip install Pillow==8.2.0

五、成果展示

最后给你们看一下我训练好的权值文件的成果吧,哈哈,快要0点了,1500流量券马上拿不到了,不写了。

1.图片测试

第一张菠萝图片:

第二张菠萝图片:

2.epoch_loss 损失曲线图

图中有四条线,分别用不同颜色标识:

红色实线表示训练损失(train loss)。

橙色实线表示验证损失(val loss)。

绿色虚线表示平滑后的训练损失(smooth train loss)。

蓝色虚线表示平滑后的验证损失(smooth val loss)。

横轴标记为“Epoch”,范围从0到300。

纵轴标记为“Loss”,范围从0.04到0.12左右。

3.epoch_map 平均精度曲线图

红色曲线代表“train_map”随“Epoch”变化的趋势。

横轴标记为“Epoch”,范围从0延伸至300。

纵轴标记为“mAP”,范围从0到1.0。

4.不同类别“精确度-召回率曲线”下的平均精度(mAP)图

还有其他可视化图表可自行研究,本文仅对使用Yolov4算法训练自己的数据集提供一个简单的方法参考,思路及内容的错误还需要各位大佬批评指正,如果在文中提到的数据集,安装包,权值文件等文件上面遇到困难,可在评论区留言,我将尽最大努力一起学习,一起进步!

从零构建高质量自定义数据集:YOLO训练全流程与工程化实践 在计算机视觉领域,数据集是模型训练的基石,其质量直接决定了深度学习项目的成败。公开数据集虽易获取,但常面临领域不匹配、数据分布差异等局限,难以满足工业质检、农业识别等垂直场景的特定需求。因此,掌握构建自定义数据集的核心原理与工程化方法,成为从算法应用到解决方案构建的关键跃迁。本文聚焦于目标检测任务,深入剖析数据采集、清洗、标注、格式转换与质量控制的完整技术链路,并结合YOLO、LabelImg等热门工具,手把手演示如何打造可直接用于模型训练的专属数据集。通过系统化的工程实践,开发者能够构建如“低对比度划伤数 阅读详情

相关推荐

Edge AI实战早报:面向工程师的边缘智能战术情报系统

Edge AI(边缘人工智能)是指在资源受限终端设备上完成模型推理与闭环控制的关键技术,其核心挑战在于功耗、内存与离线环境约束下的稳定性与实时性。理解其底层原理需结合硬件特性(如NPU调度、固件微调)、软件栈兼容性(OpenVINO量化、MediaPipe传感器融合)及运行时可观测性(CPU/GPU利用率、温度漂移、延迟抖动)。该技术价值在于缩短AI从实验室到产线的落地周期,支撑工业视觉、AGV定位、智能电表等高可靠性场景。本文聚焦可操作的边缘AI日更情报机制,覆盖RK3588S硬件适配、MediaPipe

376

YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Ubuntu需要学习Windows系统YOLOv4的同学请前往《Windows版YOLOv4目标检测实战:训练自己的数据集》,课程链接https://edu.youkuaiyun.com/course/detail/28748YOLOv4来了!速度和精度双提升!   与 YOLOv3 相比,新版本的 AP(精度) 和 FPS (每秒帧率)分别提高了 10% 和 12%。   YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。   本课程的YOLOv4使用AlexAB/darknet,在Ubuntu系统上做项目演示。包括:安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类分析。还将介绍改善YOLOv4目标训练性能的技巧。   除本课程《YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《YOLOv4目标检测实战:人脸口罩佩戴识别》《YOLOv4目标检测实战:中国交通标志识别》《YOLOv4目标检测:原理与源码解析》

yolov4 训练自己的数据集

基于yolov4算法训练自己的数据集,从实操入手

reset2021的博客 1572

YOLOv4-tiny目标检测实战:训练自己的数据集

课程演示环境:Ubuntu   需要学习Windows系统YOLOv4-tiny的同学请前往《Windows版YOLOv4-tiny目标检测实战:训练自己的数据集》   YOLOv4-tiny来了!速度大幅提升!   YOLOv4-tiny在COCO上的性能可达到:40.2% AP50, 371 FPS (GTX 1080 Ti)。相较于YOLOv3-tiny,AP和FPS的性能有巨大提升。并且,YOLOv4-tiny的权重文件只有23MB,适合在移动端、嵌入式设备、边缘计算等设备上部署。   本课程将手把手地教大家使用labelImg标注和使用YOLOv4-tiny训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。   本课程的YOLOv4-tiny使用AlexAB/darknet,在Ubuntu系统上做项目演示。包括:YOLOv4-tiny的网络结构、安装YOLOv4-tiny、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类分析。     除本课程《YOLOv4-tiny目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《YOLOv4目标检测实战:训练自己的数据集》 《YOLOv4目标检测实战:人脸口罩佩戴识别》 《YOLOv4目标检测实战:中国交通标志识别》 《YOLOv4目标检测:原理与源码解析》

YOLOv4训练自定义数据集

目录1.环境配置2.权重下载3.数据集处理4.修改配置文件4.1 修改data/voc.names4.2 修改data/voc.data4.3 修改cfg/yolov4.cfg4.4 修改Makefile文件5.开始训练 文献地址:https://arxiv.org/pdf/2004.10934.pdf 源码地址:https://github.com/AlexeyAB/darknet 1.环境配置 https://blog.youkuaiyun.com/weixin_50008473/article/details/1

weixin_50008473的博客 4750

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 408

YOLO模型训练资源申请流程:企业级GPU管理规范

现代AI研发中,YOLO模型高效训练依赖科学的GPU资源管理体系。通过容器化镜像、Kubernetes/Slurm调度与自动化资源配置,实现从“抢卡”到按需分配的转变。结合分层构建、弹性调度与智能监控,不仅提升资源利用率,还保障了训练稳定性与可复现性,让算法团队在精度、速度与成本间找到最优平衡。

weixin_31185473的博客 655

基于STM32F407的立创球形六足双形态机器人:从Morphex复刻到毕业设计的完整开发指南

本文详细介绍了基于STM32F407主控芯片,从零开始复刻Morphex球形六足双形态机器人的完整开发过程。内容涵盖硬件选型(如总线舵机)、机械结构设计(阿基米德螺旋底盘)、软件控制(逆运动学与步态算法)以及多控制方式集成,为嵌入式系统与机器人开发的毕业设计或爱好者提供了全面的实战指南。

weixin_35414260的博客 322

YOLOv9模型版本管理:权重文件存储最佳实践

本文介绍了在星图GPU平台上自动化部署YOLOv9官方版训练与推理镜像,并探讨了该镜像在目标检测任务中的核心应用。通过该平台,用户可以便捷地管理模型权重文件,并利用YOLOv9高效完成如实时视频流分析、自动驾驶环境感知等典型计算机视觉任务。

weixin_42590539的博客 332

C#报表,使用微软rdlc模板,生成Excel, PDF, Word, Image文件,使用自定义对象做数据集不连接数据库

我项目是用vs2017 建的,.NET farmwork 4.7.2 这种报表可以用于任何模式的应用,web,桌面,因为这只是生成一个文件或者文件流 步骤比较详细啰嗦,其中有讲到rdlc怎么新建设计,如果已经会设计rdlc了的可以直接跳到底部看代码的执行结果, 底部还有源码下载链接,百度盘 首先控制台安装报表包 新建rdlc 报表 建立rdlc里要用的数据模型 模型建完,或者修改都要重新...

qq_35955916的博客 5203

Golang内存管理:GC调优实战案例

在Golang编程中,内存管理是一个非常重要的方面。良好的内存管理可以提高程序的性能和稳定性,而GC(垃圾回收)调优则是优化内存管理的关键手段。本文的目的就是通过实际案例,深入讲解Golang中GC调优的方法和技巧,让读者能够在实际项目中更好地进行内存管理和性能优化。范围涵盖了从核心概念的解释到具体代码实现和调优过程的详细分析。本文首先会介绍一些相关的术语和核心概念,让读者对Golang内存管理和GC有一个基本的认识。然后通过故事引入的方式,更加形象地解释核心概念及其相互关系。

AI Agent Harness Engineering 1118

AI模型管理与部署实战:从YOLO训练到产线稳定运行

AI模型部署不是训练结束后的简单收尾,而是将算法能力转化为可交付、可运维、可集成的工程能力的关键环节。其核心涉及模型版本管理、跨平台推理优化、硬件适配(如CUDA/ARM/CPU)、服务化封装及业务系统集成等技术链条。尤其在工业视觉、边缘智能等场景中,ONNX Runtime、TensorRT、OpenVINO等推理引擎的选择需匹配实际硬件约束与实时性要求;而MLflow等模型注册表则解决了多版本共存、元数据追溯与生产环境回滚等工程痛点。本文聚焦YOLO类CV模型在真实产线中的落地挑战,覆盖模型导出避坑、轻

weixin_29483277的博客 185

互联网人提高效率必备软件合集

很多的时候我们解决不了问题,只是因为没有找到对的工具,实际上,很多好的工具就在那里,只是你不用而已。这点上,信息壁垒是一个很大的原因,因此我希望兄伙伴们多出去走走,不要只是局限在一个圈层;

zhonglunshun的专栏 3484

AI模型部署与管理实战:从训练完成到生产就绪的七道防线

AI模型部署不是简单运行一个脚本,而是涵盖模型封装、环境一致性、API语义化、可观测性、滚动更新与反馈闭环的系统工程。其核心在于解决环境错配、接口失焦和可观测性真空三大痛点,确保模型在生产中‘稳、准、快、可管、可扩、可溯’。关键技术包括ONNX模型部署流程、vLLM部署模型等高效推理方案,以及模型元数据管理、不可变模型包、多维版本图谱等AI工程化实践。本文聚焦真实落地场景,提供可立即执行的部署检查清单、Docker最佳实践与四维监控体系,助力工程师将训练好的模型真正嵌入业务流水线。

weixin_29039773的博客 58

如何使用Python爬取并保存网页上的所有附件

爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。

2201_76125261的博客 967

用 SNC 和 SAP Single Sign-On Secure Login 把 SAP 登录这件小事,变成一件安全又不用输密码的事

在传统的 SAP 系统里,登录这件事看起来很朴素:用户打开 SAP GUI,输入一个 SAP 用户名,再输入一个 SAP 密码,点回车,进系统,开始干活。表面上没毛病,但从安全角度看,这种老办法问题很大。默认情况下,这些用户名和密码在网络上传输时是明文,也就是不加密传输。攻击者如果在公司网络里做监听,理论上可以直接截取到口令信息,这种风险对今天任何一家合规要求高、审计严格的企业来说,基本是不可接受的。(SAP Help Portal)SAP 给出的答案叫做 ,全称是 。SNC 做的事情可以概括成两类:一类是

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 376

环保监测实践:YOLOE识别野生动物影像记录

本文介绍了如何在星图GPU平台上自动化部署YOLOE官版镜像,实现野生动物影像的实时识别与监测。该镜像支持文本、视觉及无提示三种模式,可快速定位红外相机或无人机拍摄中的雪豹、朱鹮等物种,广泛应用于自然保护区的自动巡检与生态热力图生成。

weixin_26805451的博客 298

从零开始学习AI人工智能本体论:概念与实战

本文旨在为初学者提供一个全面而易于理解的人工智能本体论入门指南。我们将覆盖从基本概念到实际应用的全过程,帮助读者理解本体论在AI系统中的核心作用。核心概念与联系:介绍本体论的基本概念和原理核心算法与操作步骤:详细讲解本体构建和推理方法项目实战:通过实际案例展示本体论的应用实际应用场景:探讨本体论在不同领域的应用未来发展趋势:展望本体论在AI领域的前景本体论(Ontology): 在AI中,指对特定领域概念及其关系的明确形式化描述。

AI智能探索者的博客 868

豆包电脑版:大学生高效学习的AI生产力工具

AI辅助学习工具正成为高校学生应对课业压力的关键支撑。其核心原理在于通过自然语言理解与多模态文件解析,实现对PDF、PPT、代码等学习材料的语义级处理,从而提升信息萃取、结构化表达与跨文档推理能力。技术价值体现在‘零学习成本’的交互设计与桌面端深度集成——支持拖拽上传、本地环境调用及长文本精读,显著降低认知负荷。典型应用场景覆盖文献综述撰写、课程报告生成、编程调试辅助与答辩PPT优化,尤其适配大学生高频使用的桌面工作流。豆包电脑版正是这一趋势下的代表性实践,兼顾免费性、功能完整性与教育场景适配性。

weixin_34082695的博客 419

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Windows版YOLOv4-tiny目标检测实战:训练自己的数据集

课程演示环境:Windows10 需要学习Ubuntus系统YOLOv4-tiny的同学请前往《YOLOv4-tiny目标检测实战:训练自己的数据集》   YOLOv4-tiny来了!速度大幅提升!   YOLOv4-tiny在COCO上的性能可达到:40.2% AP50, 371 FPS (GTX 1080 Ti)。相较于YOLOv3-tiny,AP和FPS的性能有巨大提升。并且,YOLOv4-tiny的权重文件只有23MB,适合在移动端、嵌入式设备、边缘计算设备上部署。   本课程将手把手地教大家使用labelImg标注和使用YOLOv4-tiny训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。   本课程的YOLOv4-tiny使用AlexAB/darknet,在Windows10系统上做项目演示。包括:YOLOv4-tiny的网络结构、安装YOLOv4-tiny、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。     除本课程《Windows版YOLOv4-tiny目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:训练自己的数据集》 《Windows版YOLOv4目标检测实战:人脸口罩佩戴识别》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》  

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【YOLO】YOLOv4训练自己的数据集

虽然在笔者写这篇博客的时候,YOLOv5已经问世,但是看到许多博客都说YOLOv4效果更佳,具体如何,笔者得亲测才能认同。 YOLOv4论文链接 YOLOv4代码链接 环境搭建 1. 创建虚拟环境并激活 conda create -n yolo4 pip python=3.6 conda activate yolo4 2. Requirements 安装必要的依赖项 根据github: conda install cudatoolkit=10.0 conda install cudnn=7.6.5

qq_44703886的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Yolo V4训练自己的数据

Yolo v4在自己的数据集上的训练 目标检测一大堆,yolo系列真香。 不写代码,只是代码的搬运工。 一、Yolo v4的安装 官方代码库的更新太频繁了,索性直接克隆一版,地址: https://github.com/AlexeyAB/darknet.git 整个过程不要太简单,依次安装 CUDA=10.0、CuDNN>7.0、OpenCV,最后克隆代码,make -j8一键搞定。 实在不...

蜗牛、Gray 6547

深度学习:数据集损失的衡量标准

train_loss是训练集的损失值,test_loss是测试集的损失值 train_loss不断下降,test_loss不断下降,说明模型仍有训练空间; train_loss不断下降,test_loss趋于不变,说明模型过拟合; train_loss趋于不变,test_loss不断下降,说明数据集有问题; train_loss趋于不变,test_loss趋于不变,说明需要减小学习率或调整步长; ———————————————— 原文链接:https://blog.youkuaiyun.com/Yxh666/arti

weixin_44575717的博客 3995

yolov4训练自己的数据集,基于darknet框架

一:安装darknet git clone https://github.com/AlexeyAB/darknet/ 修改makefile里面的值, GPU=1 CUDNN=1 CUDNN_HALF=1 OPENCV=1 OPENMP=1 LIBSO=1 DEBUG=1 然后进行编译 cd darknet make 二:首先以VOC的数据格式准备好自己的数据 VOCdevkit VOC2007 Annotations ImageSets ...

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 2667

YoloV4训练自己的数据集

YoloV4训练自己的数据集

LK007CX的博客 1万+
上一篇: 微软联合领英和讯飞联合Datawhale的AI证书获取教程
下一篇: 华中科技大学开源镜像站正式对外开放
冰万森
博客等级 码龄5年 1万+粉丝 36原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值