YOLOv5初步认识
一、关于yolov5的10个问题
1. YOLOv5 的核心架构由哪几个主要部分组成?
YOLOv5 的架构就像一个 “流水线工厂”,主要由 4 个部分 组成:
-
输入端 (Input):
1)作用:接收原始图片,并进行预处理(比如调整图片大小、归一化像素值)。
2)类比:就像工厂的 “原材料入口”,先把食材(图片)洗干净、切好,方便后续加工。 -
骨干网络 (Backbone):
1)作用:负责提取图片中的关键特征(比如边缘、纹理、形状)。
2)类比:这是工厂的 “核心加工车间”,使用 CSPDarknet53 结构,像人的眼睛一样,把图片里的重要信息(比如 “这是一个圆形”、“这有四条腿”)都提取出来。 -
颈部网络 (Neck):
1)作用:融合不同尺度的特征信息。
2)类比:这是 “信息整合车间”,使用 FPN(特征金字塔)+ PAN(路径聚合)结构。它把刚才提取的 “大特征”(比如大象的身体)和 “小特征”(比如蚂蚁的触须)混合在一起,让模型既能看到大目标,也能看到小目标。 -
检测头 (Head):
1)作用:输出最终的检测结果(物体在哪里、是什么物体、置信度有多高)。
2)类比:这是 “最终质检和包装车间”,它把整合好的信息拿过来,在图上画框框(边界框),并贴上标签(比如 “猫”、“狗”)。
2. YOLOv5 是如何进行目标检测的,它的检测流程是怎样的?
YOLOv5 的检测流程非常快,是 “一眼看全图” 的模式,具体步骤如下:
-
图片输入与缩放:不管你输入的图片是大是小,YOLOv5 会先把它缩放到一个固定尺寸(比如 640x640 像素)。
-
网格划分 (Grid):
1)YOLOv5 会把这张图片在逻辑上划分成 S x S 个小格子(比如 20x20)。
2)关键点:如果一个物体的中心落在了某个格子里,就由这个格子负责预测这个物体。 -
特征提取与融合:图片经过 Backbone 和 Neck,提取并融合特征。
-
预测 (Head):
-
每个格子会预测几个 “候选框”(锚框),并对每个框预测三件事:
1)边界框 (Bounding Box):框的位置(x, y, w, h)。
2)置信度 (Confidence):这个框里 “有物体” 的概率。
3)类别概率 (Class Probability):如果有物体,它是 “猫” 还是 “狗” 的概率。
-
-
非极大值抑制 (NMS):
这是最后一步 “去重”。因为可能有好几个格子都框住了同一个物体,NMS 会把重复的框去掉,只保留最准的那一个。
总结:YOLOv5 把图片分成格子,每个格子负责预测自己区域内的东西,最后筛选出最优结果。
3. 在 YOLOv5 中,如何准备自己的数据集进行训练?
要让 YOLOv5 认识你想检测的东西(比如 “外卖餐盒”),你需要教它,这就是 “数据集”。步骤如下:
-
第一步:收集图片 (Data Collection)
你需要拍很多张包含目标的照片(比如 1000 张不同角度、不同光线的外卖餐盒)。 -
第二步:标注图片 (Labeling) —— 最累但最重要的一步
1)你需要使用标注工具(比如 LabelImg、Labelme 或 CVAT)。
2)操作:打开图片,用鼠标在你的目标(餐盒)上画一个矩形框,然后给它起个名字(类别名,比如 "food_box")。
3)输出:标注完成后,每张图片会生成一个对应的.txt文件,里面记录了框的坐标和类别。 -
第三步:数据集划分 (Split)
-
把你的图片和标注文件分成三个文件夹:
1)train (训练集):约 70% 的图片,用来让模型学习。
2)val (验证集):约 20% 的图片,用来在训练过程中检查模型学得怎么样。
3)test (测试集):约 10% 的图片,用来最后考试,看模型到底行不行。
-
-
第四步:配置文件 (Config)
-
你需要写一个
.yaml文件,告诉 YOLOv5:
1)你的图片文件夹在哪里。
2)你要检测的物体有几个类别(nc: 1)。
3)类别名字叫什么(names: ['food_box'])。
-
准备好这些,就可以开始训练了!
4. 怎样调整 YOLOv5 的超参数来优化检测效果?
“超参数” 就是你在训练前需要手动设置的 “旋钮”,用来控制模型的学习过程。最关键的几个旋钮如下:
-
学习率 (Learning Rate, lr):
(1)作用:控制模型学习的 “步子大小”。
(2)调整:-
技巧:YOLOv5 有自动学习率衰减(Cosine LR),通常默认的就不错,如果你觉得训练不动,可以稍微调大一点点初始 lr。
-
太小会导致模型 “学太慢”,像蜗牛爬,很久都学不会。
-
太大会导致模型 “学疯了”,来回震荡,不收敛。
-
-
批次大小 (Batch Size):
(1)作用:控制模型一次看几张图片。
(2)调整:-
技巧:在显存不爆的前提下,尽量设大一点(比如 16 或 32)。
-
越大,训练越稳定,但也越吃显存(GPU 内存)。
-
-
迭代次数 (Epochs):
1)作用:模型把整个数据集完整看多少遍。
2)调整:通常设 100-300 轮。如果看到验证集损失(val loss)不再下降了,就可以提前停止。 -
输入图片尺寸 (Img Size):
1)作用:图片分辨率。
2)调整:-
设得小(如 320):速度飞快,但可能看不清小东西。
-
设得大(如 1280):小目标检测更准,但速度变慢。
-
-
数据增强 (Augmentation):
YOLOv5 自带很强的数据增强(Mosaic、MixUp)。如果你的数据集很少,千万不要关掉它们;如果你的数据很多且模型过拟合了,可以适当调低增强的概率。
5. YOLOv5 中的损失函数是如何计算的,有什么作用?
损失函数 (Loss Function) 就是模型的 “考试成绩单”。
模型每预测一次,我们就计算一下 “它预测的框和真实的框差了多少”,这个差值就是 Loss。Loss 越小,说明模型考得越好。
YOLOv5 的 Loss 由 3 部分 组成:
-
边框位置损失 (Box Loss):
1)计算:使用 GIoU(Generalized Intersection over Union)。
2)作用:衡量 “模型画的框” 和 “人工标注的真实框” 离得有多远,重叠得够不够多。 -
置信度损失 (Objectness Loss):
1)计算:二元交叉熵。
2)作用:衡量模型 “有没有把握”。如果这个格子里有物体,置信度要接近 1;如果没物体,置信度要接近 0。 -
分类损失 (Class Loss):
1)计算:二元交叉熵。
2)作用:衡量模型 “认不认得”。如果框里是猫,模型预测 “猫” 的概率要最高。
总损失 = 边框损失 + 置信度损失 + 分类损失
模型通过反向传播,根据这个总损失来调整内部的参数,一点点变得更聪明。
6. 如何评估 YOLOv5 模型的性能,有哪些常用的评估指标?
训练完了,怎么知道模型好不好用?我们需要用以下几个指标来打分:
-
精确率 (Precision):
1)含义:“查准率”。
2)解释:模型说 “我找到 100 个餐盒”,其中真的有多少个是餐盒?
3)场景:如果你不想误报(比如把一个纸团当成餐盒),就要看这个指标。 -
召回率 (Recall):
1)含义:“查全率”。
2)解释:图片里实际上有 100 个餐盒,模型找到了多少个?
3)场景:如果你不想漏检(比如必须把所有餐盒都找出来),就要看这个指标。 -
AP (Average Precision):
1)含义:平均精度。
2)解释:它是 Precision 和 Recall 综合起来的一个分数。 -
mAP (mean Average Precision):
1)含义:各类别 AP 的平均值。
2)解释:如果你检测 20 个类别的物体,mAP 就是这 20 个类别的平均分。
3)行业标准:通常说的 mAP@0.5,意思是当 IoU(交并比)大于 0.5 时就算检测正确。这是最常用的评估指标。
7. 怎样在 YOLOv5 中处理小目标检测的问题?
小目标(比如远处的一只鸟,或者图片里的一个螺丝)一直是检测难题,因为它们像素少,特征不明显。YOLOv5 可以通过以下方法优化:
-
提高输入分辨率 (--img-size):
把 640 改成 1280 或更高。图片变大了,小目标在图上也就变大了,特征更清楚。 -
多尺度训练 (Multi-scale Training):
YOLOv5 默认开启了这个功能。它会在训练时随机改变图片大小,强迫模型学习如何看清不同大小的物体。 -
调整锚框 (Anchors):
YOLOv5 会根据你的数据集自动聚类生成锚框。如果你的目标特别小,可以手动把默认的锚框尺寸改小一点,或者重新运行聚类命令。 -
使用更多的检测层 (P3, P4, P5):
1)YOLOv5 的 Head 输出 3 个不同尺度的特征图。
2)P2 层(如果有的话):专门用来检测最小的目标(浅层特征,分辨率高)。
3)你可以修改配置文件,让模型输出更小的特征层。 -
数据增强 (Tiling):
把一张大图切成好几张小图来训练和推理,这样小目标在小图里就变成了 “大目标”。 -
关注损失函数:
有时候小目标在总 Loss 里占比太小,模型不重视。可以适当增加小目标 Loss 的权重。
8. YOLOv5 中的多尺度训练是如何实现的,有什么好处?
实现原理:在 YOLOv5 训练过程中,并不是每一轮都用同样大小的图片。
-
它会设定一个范围(比如 320 到 640)。
-
每隔一定的迭代次数(比如 10 个 batch),它就会随机在这个范围内选一个新的尺寸(比如 416、512),把图片 resize 成这个尺寸再喂给模型。
好处:
-
鲁棒性强:模型不会只认 “特定大小” 的物体。比如它既认得镜头前的大狗,也认得远处的小狗。
-
泛化能力好:在实际应用中,用户拍的照片有远有近,多尺度训练能让模型适应各种真实场景。
9. 如何将训练好的 YOLOv5 模型部署到实际应用场景中?
训练好的模型是一个 .pt 文件(PyTorch 格式),要把它放到手机、摄像头或服务器上跑,需要以下几步:
-
第一步:模型导出 (Export)
(1)你需要把.pt转换成不同格式,以适应不同的设备:-
OpenVINO:英特尔 CPU 专用。
-
NCNN / MNN:手机端(安卓 /iOS)专用,轻量级。
-
TensorRT:英伟达 GPU 专用,速度最快(用于服务器)。
-
ONNX:通用格式,大多数平台都支持。
-
-
第二步:选择部署平台
1)云端 / 服务器:如果是视频监控分析,建议用 TensorRT 加速,通过 Python 或 C++ 调用。
2)边缘设备 (树莓派 / Jetson Nano):如果是放在外卖柜上,建议用 ONNX Runtime 或 TensorRT Lite。
3)手机 APP:如果是做手机扫码,导出成 NCNN 或 TFLite,集成到 Android/iOS 代码里。 -
第三步:编写推理代码
写一段简单的代码:读取摄像头画面 -> 喂给模型 -> 拿到框框 -> 画在屏幕上显示。
10. YOLOv5 相比之前的 YOLO 版本有哪些改进之处?
YOLOv5 并不是官方 YOLOv4 的直系后代(它是 Ultralytics 公司用 PyTorch 重写的),但它非常受欢迎,因为它做了以下关键改进:
-
工程化极强,极易上手:
1)YOLOv3/v4:用 Darknet 框架写的,配置复杂,编译麻烦,新手很容易劝退。
2)YOLOv5:用 PyTorch 写的,代码结构清晰,pip install就能用,文档友好。 -
灵活的模型缩放 (Scalability):
1)YOLOv5 提供了 s, m, l, x 四个版本(小、中、大、超大)。
2)你要速度快,就用 YOLOv5s;你要精度高,就用 YOLOv5x。不用改网络结构,直接换配置文件就行。 -
强大的数据增强 (Data Augmentation):引入了 Mosaic(四张图拼在一起)和 MixUp(两张图混合)增强,极大地丰富了数据集,即使你图片少也能训得不错。
-
更优秀的 Backbone 和 Neck:
1)使用了 CSP (Cross Stage Partial) 结构,让特征提取更高效,计算量更小。
2)使用了 PANet 加强特征融合,比 YOLOv3 的 FPN 更能打。 -
自动锚框聚类 (Auto Anchors):你只要把数据集准备好,YOLOv5 会自动分析你的目标大小,帮你生成最合适的锚框,非常贴心。
总结:YOLOv5 不是在理论上有惊天动地的突破,而是在工程化体验上做到了极致,让 “目标检测” 从一个博士课题变成了普通人也能玩的工具。
二、YOLOv5 训练结果图全解析

图 1:混淆矩阵(Confusion Matrix)
对应问题:问题 6(模型性能评估 & 常用指标)、问题 2(检测结果判断)
这张图是模型在验证集上的「对错统计表」,是评估分类准确性的核心工具,和你之前学的精确率、召回率直接相关。
-
坐标轴规则:
1)横轴True:人工标注的真实类别(标准答案)
2)纵轴Predicted:模型预测的类别(模型的答案)
3)最右侧 / 最下侧的background:代表「背景」,对应漏检(把目标当成背景)和误检(把背景当成目标)
4)颜色越深、数值越接近 1,代表该情况的占比越高 -
核心解读:
1)对角线的数值:模型预测正确的比例。比如pw类对角线数值 1.00,代表所有真实是 pw 的目标,模型 100% 预测正确;st、ac、tr类也接近 1,表现极佳。
2)非对角线的数值:模型认错 / 漏检的情况。比如right类,真实是 right 的目标,模型仅 40% 预测正确,42% 认错成了 left,还有 20% 漏检成了背景,说明left和right是模型最容易混淆的短板类别。 -
知识点关联:这张图直接帮你定位模型的缺陷,对应问题 3 的数据集优化(补充混淆类别的样本)、问题 4 的超参数调整(给短板类别增加损失权重)。

图 2:F1-Confidence Curve(F1 分数 - 置信度曲线)
对应问题:问题 6(评估指标)、问题 2(检测流程的置信度 & NMS 环节)、问题 4(推理超参数优化)、问题 9(模型部署)
F1 分数是精确率和召回率的调和平均数,是综合衡量模型「准不准」和「全不全」的核心指标,越接近 1 越好。
-
坐标轴规则:
1)横轴Confidence:置信度阈值(模型预测时,「我有多确定这个框里有目标」的最低标准,对应问题 2 里的置信度预测、问题 5 里的置信度损失)
2)纵轴F1:对应阈值下的 F1 分数
3)彩色细线:每个类别的单独曲线,最粗的蓝色线:所有类别的平均表现 -
核心解读:蓝色线标注
all classes 0.91 at 0.490,意思是当你把推理时的置信度阈值设为 0.49 时,模型的综合 F1 分数最高,能达到 0.91,这是你部署模型时的最优通用阈值。同时能看到left、right的 F1 峰值远低于其他类别,和混淆矩阵的结论完全一致,再次印证这两个类是模型短板。 -
知识点关联:这张图直接决定你部署模型时的核心参数,对应问题 9 的落地应用;同时能帮你定位表现差的类别,反向优化数据集和训练超参数。
图 3:数据集统计分析图(labels.jpg)
对应问题:问题 3(自定义数据集准备)、问题 7(小目标检测优化)、问题 8(多尺度训练)、问题 10(YOLOv5 自动锚框改进)
这是你训练前数据集的「全貌体检报告」,是决定模型上限的核心,完全对应数据集准备的全流程知识点。
-
四个子图拆解:
1)左上角:类别样本数量柱状图。横轴是你的 11 个检测类别,纵轴是标注的样本数量。能看到st类样本最多(近 700 个),red、gree类样本最少(仅 200 个左右),存在明显的样本不均衡问题。
2)右上角:标注框形状分布。所有标注框叠加展示,能看到你的目标全是「高瘦的竖长方形」,宽极窄、高很长,是典型的长条状目标。
3)左下角:目标中心点位置分布。x/y 是归一化的图片宽高,能看到目标中心点在整张图里分布均匀,没有集中在某个区域,数据集位置分布很健康。
4)右下角:目标宽高分布。能看到目标宽度集中在 0.05-0.2 之间,高度集中在 0.2-0.5 之间,属于窄长型小目标。 -
知识点关联:
1)样本不均衡对应问题 3 的数据集优化,需要给少样本类别补充数据;
2)目标的宽高形状对应问题 10 里 YOLOv5 的自动锚框聚类改进,模型会根据这个形状生成适配的锚框;
3)小目标属性对应问题 7 的小目标检测优化、问题 8 的多尺度训练(多尺度训练能帮模型更好适配小尺寸目标)。
图 4:数据集标注相关系数图(labels_correlogram.jpg)
对应问题:问题 3(自定义数据集准备 & 质量把控)
这是数据集标注的「深度质检图」,用来分析标注数据的分布合理性,排查标注错误。
-
核心规则:这是相关系数矩阵的可视化,四个变量分别是
x(目标中心点 x 坐标)、y(目标中心点 y 坐标)、width(目标宽度)、height(目标高度)。
1)对角线:每个变量的分布直方图,和上一张图的结论一致,x/y 分布均匀,宽高集中在窄长区间;
2)非对角线:两个变量的相关性散点图,比如width和height的散点图,能看到宽高呈明显正相关,符合长条目标的特点;x/y 和宽高无明显相关性,说明目标位置和大小无关,数据集分布健康,无明显标注错误。 -
知识点关联:这张图是问题 3 里数据集准备的最后一步质检,帮你排查异常标注、分布偏差,确保数据集质量,避免模型学错特征。
图 5:Precision-Confidence Curve(精确率 - 置信度曲线)
对应问题:问题 6(评估指标)、问题 9(模型部署)
精确率就是你之前学的「查准率」:模型说 “这是目标” 的结果里,到底有多少是真的目标,核心是不误检。
-
核心解读:横轴是置信度阈值,纵轴是精确率。蓝色线标注
all classes 1.00 at 0.877,意思是当置信度阈值设为 0.877 时,模型的整体精确率能达到 100%—— 这个阈值下,模型预测的所有目标全是对的,零误检。同时能看到right类的精确率曲线掉得极快,置信度到 0.6 时就跌到 0.2,说明这个类极易出现误检,和之前的结论一致。 -
知识点关联:这张图直接服务于落地部署:如果你的应用场景不能接受误检(比如工业质检、交通标志识别),就把置信度阈值设高,牺牲少量召回率,保证零误检。
图 6:Precision-Recall Curve(PR 曲线,精确率 - 召回率曲线)
对应问题:问题 6(模型性能评估核心指标)、问题 4(超参数优化)
这是 YOLOv5最核心的性能评估图,你之前学的 AP、mAP 指标,就是从这张图里计算出来的。
-
核心规则:
1)横轴Recall:召回率(查全率),所有真实目标里,模型找到了多少,核心是不漏检;
2)纵轴Precision:精确率(查准率);
3)曲线越贴紧右上角,代表模型越好;曲线围起来的面积,就是该类别的AP 值;所有类别 AP 的平均值,就是mAP@0.5。 -
核心解读:蓝色线标注
all classes 0.932 mAP@0.5,说明你的模型整体 mAP@0.5 达到 0.932,属于非常优秀的水平。单类别表现:st(0.995)、pw(0.994)、ac(0.994) 表现接近完美;right类 AP 仅 0.532,是绝对的短板,PR 曲线几乎平直,说明召回率提升时,精确率直接暴跌,模型对这个类的特征学习严重不足。 -
知识点关联:mAP 是 YOLO 系列最核心的评估指标,对应问题 6 的知识点;同时这张图能帮你定位短板类别,反向优化数据集和训练超参数,对应问题 3、问题 4 的知识点。
图 7:Recall-Confidence Curve(召回率 - 置信度曲线)
对应问题:问题 6(评估指标)、问题 9(模型部署)
召回率就是你之前学的「查全率」:所有真实的目标里,模型能找到多少,核心是不漏检。
-
核心解读:横轴是置信度阈值,纵轴是召回率。标注
all classes 1.00 at 0.000,意思是当置信度阈值设为 0 时,模型召回率能达到 100%—— 所有目标都能被找到,但此时误检会非常多,模型会把所有疑似目标都报出来。随着置信度升高,召回率持续下降,因为模型会越来越 “谨慎”,只报自己非常确定的目标。同样,left、right的召回率掉得最快,表现最差。 -
知识点关联:这张图服务于特殊场景的部署:如果你的场景不能接受漏检(比如安防监控、违禁品检测),就把置信度阈值设低,牺牲少量精确率,保证高召回率。
图 8:训练过程损失 & 指标曲线(results.png)
对应问题:问题 4(超参数调整优化)、问题 5(损失函数计算)、问题 6(性能评估)
这是整个训练过程的完整日志图,能完整看到模型从 0 到收敛的全过程,判断模型是否训好、有没有过拟合、超参数是否合理。整张图分为两大模块,和你之前学的知识点完全对应:
第一部分:损失函数曲线(左侧 6 个图,对应问题 5)
YOLOv5 的损失函数分为 3 部分,和你之前学的完全一致,每个损失都有训练集(train)和验证集(val)的曲线:
-
box_loss(边框位置损失):衡量模型画的框和真实框的重合度,曲线持续下降并平稳,说明模型不断学会把框画准; -
obj_loss(置信度损失):衡量模型判断 “框里有没有目标” 的能力,曲线持续下降收敛,说明模型学会了区分目标和背景; -
cls_loss(分类损失):衡量模型区分类别的能力,曲线持续下降收敛,说明模型学会了识别不同的目标。
关键结论:训练集和验证集的损失曲线同步下降,最终平稳,没有出现「训练集损失一直降,验证集损失先降后升」的情况,说明模型没有过拟合,训练过程非常健康,学习率、训练轮数、批次大小等超参数设置合理,对应问题 4 的超参数优化知识点。
第二部分:性能指标曲线(右侧 4 个图,对应问题 6)
-
precision/recall:精确率、召回率,随训练轮数持续上升,最终分别稳定在 0.85+、0.9+; -
mAP_0.5:核心评估指标,最终稳定在 0.93 左右,和 PR 曲线的结果完全一致; -
mAP_0.5:0.95:更严格的评估指标(IoU 阈值从 0.5 到 0.95 取平均),最终稳定在 0.7 左右,对于窄长型小目标来说,这个成绩非常优秀。
图 9:验证集检测效果图(test_batch0_pred.jpg)
对应问题:问题 2(YOLOv5 目标检测流程)、问题 7(小目标检测)、问题 9(模型部署)
这是模型在验证集上的实际检测效果可视化,是最直观的结果展示,完美对应 YOLOv5 的完整检测流程。
-
核心解读:每张图里的框就是模型的预测结果,框上的文字是「类别 置信度」,比如
st 0.9,就是模型预测这个目标是 st 类,置信度 90%。
1)优秀表现:大部分目标都被准确框出,st、sl、pw等类别的置信度都在 0.9 左右,远处的小目标也能被准确识别,对应问题 7 的小目标检测,你的模型小目标检测能力合格;
2)现存问题:能看到left和right互相混淆、小目标重复检测、少量背景误检,和之前所有图的短板结论完全一致。 -
知识点关联:这张图完整还原了问题 2 里的检测流程:图片输入→特征提取→预测框输出→NMS 去重→最终结果展示;同时能帮你找到具体的错误案例,反向优化数据集,为后续问题 9 的模型落地部署做准备。
整体总结 & 优化建议
-
模型整体表现:你的 YOLOv5 模型训练非常健康,整体 mAP@0.5 达到 0.932,属于优秀水平,超参数设置合理,无过拟合问题,大部分类别检测效果极佳。
-
核心短板:
left和right两个类别是模型的最大缺陷,极易混淆、误检、漏检,其次是样本量较少的red、gree类。 -
优化方向(对应之前的 10 个问题):
1)对应问题 3:补充left、right类的样本,增加不同角度、光线、背景的标注数据,缓解样本不均衡;
2)对应问题 4:给left、right类增加分类损失的权重,让模型更关注这两个类的学习;
3)对应问题 7:针对窄长小目标,适当提高训练输入分辨率,开启更适配的多尺度训练;
4)对应问题 9:通用场景部署用 0.49 的置信度阈值,零误检场景用 0.877 的阈值,零漏检场景用更低的阈值。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)