type
status
date
slug
summary
tags
category
icon
password
YOLO-V5 – You Only Look Once version 5
YOLO-V5 的模型介绍
- 目标检测
- 目标检测的任务是识别图像中的物体,并确定它们的位置(通常用边界框表示)。例如,在一张街道照片中,你不仅要识别出“汽车”、“行人”和“交通灯”,还要标出它们在图像中的具体位置
- YOLO
- 就如同YOLO的名字一样 - “只看一次”,区别传统的目标检测方法(如 R-CNN)要多次处理图像,YOLO 通过单次前向传播即可生成所有检测结果(边界框 + 类别),相比两阶段检测模型(如 Faster R-CNN),速度提升显著,适用于实时场景(如摄像头监控、自动驾驶)
YOLO-V5 中常见的专业术语
我们用一张图在介绍常见的术语⬇️
边界框 (Bounding Box)
边界框是一个矩形框,用来标出物体在图像中的位置和大小。在这里我们标注了猕猴桃的位置和大小,蓝色的框就是边界框
类别预测 (Class Prediction)
除了检测物体的位置,YOLOv5 还会预测每个物体的类别(如“汽车”、“行人”等)。就像你在街上看到一辆车,不仅要标出它的位置,还要知道它是汽车而不是自行车。 YOLOv5 的预训练模型基于 COCO 数据集(80 类通用物体),但针对特定任务(如猕猴桃检测),需要重新训练以适配自定义类别。
置信度 (Confidence Score)
置信度表示模型对检测结果的信心。例如,模型可能会认为某个框内有 90% 的可能性是汽车,10% 的可能性是其他物体。置信度越高,模型的预测越可信。比如在这张图片中物体kiwi的置信度就是68% (因为我是用cpu跑的模型,所以模型参数比较小,置信度自然不高)
模型的部署
这里我用Windows11作为展示,别的操作系统可以去B站搜
- 安装Anaconda
- Anaconda是一个管理Python环境和库的工具
- 下载地址:
- 输入自己的邮箱就可以下载了
- 直接点Download就可以了
- 在CMD中查看是否安装成功,如果版本号就是成功了

- 创建并激活Python环境 这里使用Python 3.9,因为最新的pytorch需要3.9及以上的py版本
- 创建虚拟环境:打开命令提示符,运行以下命令创建一个新的虚拟环境(例如命名为yolov5_test)
- conda会自动帮你下载一些包,键入y就行了
- 激活虚拟环境:运行以下命令激活虚拟环境:
- 到这里就算Python环境创建和激活成功
- 安装Pytorch
- Pytorch是一个开源的Python的机器学习框架
- 下载地址:
- 选择对应的指令在命令行运行
- ❗️值得注意的是,默认的下载源都是在国外的,下载速度很慢甚至连不上;我们在下载的时候要指定清华的下载源
- 使用 pip 指定清华源安装 PyTorch
- 在命令行中运行以下命令来安装 PyTorch,并指定清华源作为下载源:
- pip永久使用清华源
- 验证Pytorch是否安装成功,进入Python交互
如果没有报错,并且输出了 PyTorch 的版本号,说明安装成功
- YOLO-v5 的下载
有两种下载源代码的方式: 1. 直接登录githup的仓库下载 2. 用git来clone仓库 ❗️这两种方法都需要科学上网❗️
- 通过git下载(这个要先下载git,具体操作上网搜一下就ok了)
- 直接仓库下载
- 下载解压到对应的文件夹就能用了
- 之后我们还需要下载yolov5依赖的包
- YOLO模型的使用 我们通过pycharm打开刚才我们下载解压的yolov5的文件夹
- 编译器配置刚才我们所创建的环境
那我们现在前期的所有环境配置就都ok了,我们还需要在官网下载发行的模型即可是否yolo模型
- 下载 .pt 模型
- 这里我们在yolov5这个文件夹下再创建一个文件夹,取名为weights,并且把模型都下载到这个文件夹中
模型的使用
在pycharm中打开终端
输入以下指令
- 运行过后的结果在runs/detect/exp

训练YOLO-V5模型
- 首先我们要标注数据 -> 图片中什么东西在什么位置
- 使用labelimg进行数据标记
- 在命令行输入
pip install labelimg
下载 - 在命令行输入 labelimg 启用

在目标检测任务中,
LabelImg
是一个常用的图像标注工具,支持多种标注格式,包括 YOLO 格式。以下是对 LabelImg
中标记 YOLO 格式的详细讲解,包括标记结果、注意事项以及操作步骤。1. YOLO 格式的标记结果
YOLO 格式的标注文件是一个
.txt
文件,每个标注文件对应一张图像,文件名与图像文件名相同。文件内容如下:<class_id>
:目标类别的索引(从 0 开始)。例如,0
表示第一个类别,1
表示第二个类别,依此类推。
<x_center>
:目标边界框中心点的 x 坐标,归一化到图像宽度(范围是[0, 1]
)。
<y_center>
:目标边界框中心点的 y 坐标,归一化到图像高度(范围是[0, 1]
)。
<width>
:目标边界框的宽度,归一化到图像宽度(范围是[0, 1]
)。
<height>
:目标边界框的高度,归一化到图像高度(范围是[0, 1]
)。
示例
假设有一张图像
image.jpg
,尺寸为 800x600
,标注了一个类别为 dog
(class_id=0
)的目标,边界框的左上角坐标为 (200, 100)
,右下角坐标为 (600, 400)
。那么 YOLO 格式的标注文件 image.txt
内容如下:计算过程:
-
x_center = (200 + 600) / 2 / 800 = 0.5
- y_center = (100 + 400) / 2 / 600 = 0.4166666666666667
- width = (600 - 200) / 800 = 0.5
- height = (400 - 100) / 600 = 0.5
2. 在 LabelImg 中标记 YOLO 格式的步骤
步骤 1:安装 LabelImg
如果尚未安装
LabelImg
,可以通过以下命令安装:安装完成后,运行
labelImg
启动工具:步骤 2:设置标注格式
- 打开
LabelImg
后,点击菜单栏的Format
。
- 选择
YOLO
格式。
步骤 3:加载图像
- 点击
Open Dir
按钮,选择包含待标注图像的文件夹。
- 图像会显示在主界面中。
步骤 4:创建类别文件
- 点击
Change Save Dir
按钮,选择保存标注文件的文件夹。
- 软件会自动创建一个类别文件(
classes.txt
),列出所有类别名称,每行一个类别。例如:
步骤 5:标注目标
- 点击
Create RectBox
按钮(或按快捷键W
),在图像中绘制目标边界框。
- 在弹出的对话框中输入目标类别名称(如
dog
)。
- 标注完成后,
LabelImg
会自动生成一个.txt
文件,保存 YOLO 格式的标注信息。
步骤 6:保存并切换图像
- 点击
Save
按钮(或按快捷键Ctrl + S
)保存当前标注。
- 点击
Next Image
按钮(或按快捷键D
)切换到下一张图像。
3. 注意事项
(1)图像和标注文件的对应关系
- 每张图像对应一个
.txt
文件,文件名与图像文件名相同。
- 确保图像和标注文件放在同一文件夹中,或者按照 YOLO 数据集的目录结构组织。
(2)类别文件(classes.txt
)
- 类别文件必须包含所有类别名称,且顺序与
class_id
对应。
- 类别名称不能包含空格或特殊字符。
(3)边界框的绘制
- 边界框应紧密贴合目标,避免包含过多背景。
- 对于部分遮挡的目标,尽量根据可见部分绘制边界框。
(4)归一化坐标
- YOLO 格式的坐标是归一化的,范围是
[0, 1]
。
- 如果手动修改标注文件,确保坐标值正确归一化。
(5)标注一致性
- 对于同一类别的目标,标注风格应保持一致。
- 避免遗漏目标或重复标注。
(6)图像尺寸
- 标注时确保图像尺寸与训练时使用的尺寸一致。
- 如果图像尺寸发生变化,需要重新计算归一化坐标。
YOLO 数据集的目录结构
YOLO 数据集通常按以下目录结构组织:
images/
:存放图像文件。
labels/
:存放标注文件。
classes.txt
:类别,会自动放在labels/train或者val 中
train
表示训练集,val
表示验证集(Validation Set)- 一般按照7:3进行划分
训练模型
- 在数据集都准备好之后我们就可以开始训练模型了
- 首先我们要在data文件夹下创建一个
.yaml
的文件,名字都可以 - 创建
kiwi_train.yaml
文件中这样填写

- 然后就可以开始训练了
- 在命令行运行
- 参数详解
--data
:指定数据集的配置文件路径(如data/coco.yaml
)。--cfg
:指定模型的配置文件路径(如models/yolov5s.yaml
)。--weights
:指定预训练权重文件的路径(如yolov5s.pt
)。如果从头开始训练,可以设置为空。--epochs
:指定训练的轮次(如100
)。--batch-size
:指定每个批次的图像数量(如16
)。--device
:指定训练设备,cpu
或0
(表示使用第一个 GPU)。

之后就是等电脑运行完毕查看训练效果
在
runs/train/exp
中能看到训练生成的模型和各种图片检查训练结果

训练结果的各种参数解析
在
runs/train/exp
目录下,关键结果图像及参数说明如下:1. results.png
(综合训练指标)

- 左上:训练损失(Train Loss)
-
box_loss
:边界框定位损失(越小说明位置预测越准) obj_loss
:目标存在性置信度损失(越小说明检测遗漏越少)cls_loss
:类别分类损失(越小说明类别预测越准)
- 左下:验证损失(Val Loss)- validation loss
- 泛化能力是指机器学习模型在 从未见过的数据(测试集或真实场景数据) 上表现良好的能力。简单来说,就是模型是否“死记硬背”了训练数据,还是真正“学会”了规律
- 为什么重要?
- 过拟合(Overfitting):模型在训练集上表现极好,但在新数据上表现差(考试前只背答案,但不会举一反三)
- 欠拟合(Underfitting):模型在训练集和新数据上都表现差(没学懂知识点)
与训练损失对应,用于检测过拟合(若验证损失远高于训练损失,说明模型泛化能力差)。
这里我们讲解一下什么是“泛化能力”
- 右下:mAP(Mean Average Precision)- 平均精度均值
- 这里我们重点讲一下mAP这个指标:
- mAP 是目标检测任务中最核心的评估指标,综合衡量模型的检测精度和召回能力
- 计算过程:对每个类别计算平均精度(AP),再对所有类别的 AP 取平均,得到 mAP
-
[email protected]
:IoU 阈值为 0.5 时的平均精度(常用核心指标)、 [email protected]:0.95
:IoU 阈值从 0.5 到 0.95 的平均精度(更严格)
- 右上:精准率(Precision)与召回率(Recall)
- 高精准率:检测结果中误报少(False Positive 低)
- 高召回率:真实目标被遗漏少(False Negative 低)
2. F1_curve.png
(F1 分数曲线)

横轴:置信度阈值(从 0 到 1)。
纵轴:F1 分数(精准率与召回率的调和平均)。
用途:选择最佳置信度阈值(通常取 F1 峰值点,如 0.4-0.6)。
3. PR_curve.png
(P-R 曲线)

横轴 :召回率(Recall)
纵轴:精准率(Precision)
曲线下面积(AUC)— 积分 :越大表示模型综合性能越好
4. confusion_matrix.png
(混淆矩阵)

对角线:正确预测的类别比例。
非对角线:类别间的误检情况(如猕猴桃被误判为橙子)。
5. val_batch0_labels.jpg
和 val_batch0_pred.jpg
labels.jpg
:验证集真实标注的可视化。
pred.jpg
:模型预测结果的可视化。
- 对比要点:
- 边界框是否紧密贴合目标。
- 是否遗漏小目标(如远处的猕猴桃)。
- 误检的背景区域(如将树叶误判为猕猴桃)。
有错误欢迎指正👌
25/2/23
廖朝正
- 作者:PanDa
- 链接:Panda_Clog | 代码Vlog (c.pandaclog.xyz)/article/1a30312b-e533-8085-88d1-dd0e4f9f4125
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。