ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

YOLOv5学习路径:从基础概念到模型部署的完整指南

YOLOv5学习路径:从基础概念到模型部署的完整指南 别急着训练先理清这条 YOLOv5 学习链每年毕业季都有大量做目标检测课题的同学来找我聊同一个问题YOLOv5 的资料铺天盖地教程一个比一个全可自己照着敲完代码、跑通训练之后依然觉得心里没底。导师问“你为什么选这个 backbone”“mAP 和 Recall 有什么关系”“你的模型部署到实际环境能不能跑”一个都答不利索。这不是你笨也不是教程不够多而是你掉进了一个典型的“假学习”陷阱用行动上的勤奋掩盖顺序上的混乱。你东看一个环境配置西看一个源码解析今天调个超参数明天试个注意力模块三个月下来代码跑得很溜但知识体系一团浆糊。等开题、中期、答辩一到才发现自己连最基础的“目标检测评价指标”都讲不清楚。这篇文章就是想帮你解决这个问题。我会基于做课题的实际需求把 YOLOv5 的学习路径拆成四个阶段入门 → 拓展 → 进阶 → 部署。每个阶段告诉你学什么、学到什么程度、怎么验证自己学会了以及最容易在哪里卡住。这套顺序的核心判断是做课题和做项目不一样做课题的终点不是“模型训出来了”而是“你能把技术原理、实验过程和结果评价讲清楚”。所以你不仅要会用 YOLOv5还要理解它背后的目标检测基础概念、训练过程中的评价标准、超参数调优逻辑以及模型导出部署的完整链路。1. 这篇文章真正要解决的问题先给读者算一笔时间账。如果你是零基础开始做 YOLOv5 课题常规的盲目学习路径是这样的第一步百度“YOLOv5 环境配置”花 2~5 天装好环境可能踩无数次 CUDA、cuDNN、PyTorch 版本匹配的坑。第二步找到官方仓库按 README 跑通 detect 和 train觉得“我会用 YOLOv5 了”。第三步开始各种魔改今天换注意力机制明天改 loss后天试数据增强。第四步训练结果不理想开始盲目调参试了无数个 batch size 和学习率mAP 就是上不去。第五步终于训出一个不错的结果开始写论文却发现不知道如何解释实验中的现象不知道评价指标背后的含义不知道消融实验该如何设计。这一套下来少说 4~5 个月。而且关键问题是很多步骤你是在低效重复。比如环境配置明明有更稳妥的路径比如超参数调整明明有基本逻辑你却靠穷举比如评价指标你早该在跑第一个模型时就理解清楚。按照本文的顺序你可以把无效摸索时间至少压缩一半。因为你先建立了全局认知再动手实践。这就像考驾照你先知道科目一考什么、科目二考什么、科目三考什么再按顺序去练效率远高于今天摸车、明天上路、后天考理论。具体来说读完本文你会掌握YOLOv5 课题学习各阶段的划分标准和学习目标。每个阶段需要吃透的核心概念例如 IoU、mAP、anchor、NMS、超参数等。训练自己数据集时最容易被忽视的配置文件细节。从 PyTorch 模型导出到 ONNX再做嵌入式部署的基本链路。课题答辩和论文写作中评价指标背后的深层含义。2. 基础概念目标检测到底在解决什么问题在进入学习顺序之前先把最底层的概念清一遍。很多同学一上来就抓 YOLOv5 源码结果被 CSPDarknet、PANet、Focus 这些名词劝退。其实你不需要一开始就啃透网络结构但你必须先清楚目标检测的任务定义。目标检测 (Object Detection) 要解决的问题是图片里有什么物体分别在哪里。它和图像分类的区别在于分类只回答“有什么”而检测还要回答“在哪里”。这里的“在哪里”通过边界框 (Bounding Box) 表达通常用四个坐标值表示框的位置例如x_center, y_center, width, height或x1, y1, x2, y2。YOLO 系列的网络设计思路是“单阶段检测”一次前向传播同时输出目标的类别和位置。它的核心思想是把检测问题建模成回归问题输入图片直接输出边界框坐标和类别概率。相比两阶段检测器如 Faster R-CNNYOLO 的优点是速度快适合实时场景这也是它在工业界和课题中流行的核心原因。讲到 YOLOv5 的原理有几个关键术语必须吃透Backbone骨干网络负责从输入图片中提取特征。YOLOv5 用的是 CSPDarknet借鉴了 CSPNet 的设计把梯度流拆成两条路径减少重复梯度信息从而在保持精度的同时减小计算量。Neck颈部网络负责融合不同尺度的特征。YOLOv5 使用 PANet 结构通过自顶向下和自底向上的路径把高层语义信息和低层细节信息融合起来这样既能检测大目标也能检测小目标。Head检测头负责最终输出。YOLOv5 在不同特征层上设置 anchor输出目标的类别概率、置信度和边界框偏移量。还有一个关键机制是NMS非极大值抑制, Non-Maximum Suppression。模型在预测时同一个目标周围会产生大量重叠的候选框NMS 的作用就是过滤掉冗余框只保留置信度最高的那个。这些概念不需要你在一开始全部手动实现但你要能用自己的话讲清楚。做课题答辩时老师最常问的就是“你的模型为什么能检测出目标”“YOLOv5 相比老版本改进在哪里”。如果你连 backbone、neck、head 都讲不清实验做得再漂亮也扣分。3. 第一阶段入门跑通官方仓库建立整体感知入门阶段的目标不是“理解每一行代码”而是建立一条可运行、可复现的完整链路。你要能够做到准备数据 → 修改配置 → 开始训练 → 查看结果 → 推理测试。如果你已经完成了环境配置那很好如果还没有先看一下下面的环境建议。很多同学在环境配置上卡了很久其实核心就两件事Python 版本、PyTorch 版本与 CUDA 版本的匹配。YOLOv5 官方仓库对 PyTorch 的版本要求并不是特别苛刻关键是 CUDA 和 cuDNN 要跟 PyTorch 匹配。# 建议使用 conda 创建独立环境 conda create -n yolov5 python3.8 -y conda activate yolov5 # 安装 PyTorch其中 cu118 表示 CUDA 11.8按自己的显卡驱动选择 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 克隆 YOLOv5 仓库 git clone https://github.com/ultralytics/yolov5 cd yolov5 # 安装依赖 pip install -r requirements.txt环境配置阶段真正容易踩的坑有三个。第一个坑是显卡驱动版本和 CUDA 版本对不上。你可以先用nvidia-smi查看显卡驱动支持的 CUDA 版本再选择对应的 PyTorch 版本。如果显卡驱动版本过低即使装了高版本 CUDA 也无法使用 GPU。第二个坑是没装 GPU 版本的 PyTorch。有些同学用 pip 默认安装结果装的是 CPU 版本训练速度慢到怀疑人生还以为是自己代码写错了。装完后用下面的代码验证一下 GPU 是否可用。import torch print(torch.cuda.is_available()) # 输出 True 才说明 GPU 可用 print(torch.cuda.get_device_name(0)) # 查看 GPU 名称如果torch.cuda.is_available()返回 False说明 PyTorch 版本和 CUDA 不匹配。很多人卡在这一步可以优先确认 PyTorch 是不是 CPU 版本用pip list | grep torch查看安装的版本号。第三个坑是数据集格式。YOLOv5 训练需要的数据格式是每张图片对应一个同名的.txt标注文件每行代表一个目标格式为class x_center y_center width height坐标是归一化后的值。如果你拿到的数据集是 COCO 格式或 VOC 格式需要先做转换。跑通官方仓库最快的方式是先下载一个小型公开数据集比如coco128这是 COCO 数据集的 128 张图片子集专门用来验证训练流程是否正常。# 使用官方脚本下载 coco128 数据集 bash data/scripts/get_coco128.sh # 启动训练这里只训练少量轮次目的是验证流程 python train.py --data coco128.yaml --epochs 30 --weights yolov5s.pt --batch-size 16如果你的 GPU 显存不大可以调小 batch-size比如改成 8 或 4。这时候的目标不是追求精度而是跑通流程。训练结束后会在runs/train/exp目录下生成结果包括results.png损失和指标曲线、confusion_matrix.png混淆矩阵、val_batch0_pred.jpg验证集预测结果等。入门阶段建议花 5~7 天验证标准是你能不看教程独立完成从数据集准备到训练再到测试的完整流程并且能解释results.png里每一条曲线的意义。4. 第二阶段拓展吃透训练配置与评价指标这是整套学习顺序里最容易被跳过、但价值最高的阶段。很多同学的课题做到一半就卡住原因不是代码能力不行而是看不懂训练日志不知道怎么评价训练结果的好坏。我们先来看 YOLOv5 的训练配置。在data目录下你需要建一个自己的数据集配置文件格式大致如下。这个文件的作用是告诉 YOLOv5训练集在哪里、验证集在哪里、一共有几类、类别名字是什么。# 文件路径data/mydataset.yaml # 训练集和验证集的图片路径 train: ./datasets/mydataset/images/train val: ./datasets/mydataset/images/val # 类别数量 nc: 2 # 类别名称 names: [person, car]这个文件里的坑主要有两个。第一个坑是路径写错。YOLOv5 加载数据时会读取train和val下的图片然后根据图片路径自动寻找同名的.txt标注文件。很多同学图片路径写的是相对路径换了工作目录就找不到数据。建议写绝对路径或者在项目根目录下统一管理数据集。第二个坑是nc和names与标注文件对不上。比如你的类别名是[person, car]那么标注文件中类别0代表 person1代表 car。如果顺序搞反模型训练出来的结果会互相混在一起。配置好数据集之后训练时还会涉及 YOLOv5 提供的超参数文件data/hyps/hyp.scratch-low.yaml里面定义了学习率、动量、权重衰减、数据增强参数等。很多同学误以为超参数越多越好于是在网上复制各种“调参秘籍”却忽略了一个事实默认超参数在大多数公开数据集上表现已经不错优先改数据质量和训练策略而不是盲目动超参数。训练过程中你应该密切关注这些输出指标Box Loss边界框损失衡量预测框和真实框之间的位置差异包括中心点坐标、宽高误差。训练过程中它应该是逐步下降的。如果下降缓慢可能是学习率太小如果剧烈波动可能是学习率太大或 batch size 不合适。Cls Loss分类损失衡量类别预测错误的程度。如果这个值下不去说明模型难以区分不同类别可能是类别不平衡问题。mAPMean Average Precision这是目标检测领域最重要的评价指标也是论文和答辩中必讲的内容。mAP 的计算需要结合 Precision精确率和 Recall召回率。简单来说精确率回答的是“你预测出来的目标里有多少是对的”召回率回答的是“真实存在的目标里你找出来了多少”。mAP 则是设置不同的置信度阈值计算出多组 Precision-Recall 值绘制 PR 曲线然后求曲线下的面积。很多同学写论文时直接贴一张results.png然后写“mAP 达到 0.85”这远远不够。做课题你一定要能解释清楚你的任务更看重 Precision 还是 Recall比如工厂质检漏检一个次品的代价极高这时候 Recall 更重要比如安防监控的嫌疑目标识别误报过多会浪费人力这时候 Precision 更重要。mAP0.5 和 mAP0.5:0.95 的区别。前者是 IoU 阈值固定为 0.5 时的 mAP后者是在 0.5 到 0.95 之间取多个 IoU 阈值计算平均。后者对边界框定位精度要求更高。论文里如果只用 mAP0.5 一个指标容易被质疑。Precision-Recall 曲线的解读训练结束后可以单独查看 PR 曲线图。如果曲线整体靠近右上角说明模型精度和召回率都好如果曲线很扁说明模型可能过拟合或者类别不均衡。这里要特别提醒做课题的同学不要只盯 mAP 一个数字。mAP 是一个汇总统计量它会把不同类别的表现平均在一起。如果你的数据集有类别不平衡问题比如 90% 的目标是 person只有 10% 是 car整体 mAP 可能看着还行但 car 这一类的 AP 会很低。论文里应该分别报告每一类的 AP这样更容易发现模型真正的瓶颈。5. 第三阶段进阶训练自己的数据集与超参数调优做课题和跟着教程跑的区别在于你最终必须面对自己的数据集。这个阶段的目标是用 YOLOv5 在自己的数据上训练出可用的模型并能够解释训练过程中的现象。如果你有自己的数据集建议按这样的顺序推进。先做数据集检查。很多人拿到标注好的数据集直接就开训结果发现训练效果极差最后排查了半天发现是标注文件出了问题。你可以先写一个脚本把标注框画在图片上肉眼检查一遍。这个操作虽然简单却能避免后面所有无效训练。import cv2 # 读取图片和对应的 YOLO 标注文件 image_path datasets/mydataset/images/train/0001.jpg label_path datasets/mydataset/labels/train/0001.txt image cv2.imread(image_path) height, width image.shape[:2] with open(label_path, r) as f: lines f.readlines() for line in lines: class_id, x_center, y_center, w, h map(float, line.split()) # 将归一化坐标转换为像素坐标 x1 int((x_center - w / 2) * width) y1 int((y_center - h / 2) * height) x2 int((x_center w / 2) * width) y2 int((y_center h / 2) * height) cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(image, str(int(class_id)), (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) cv2.imwrite(check_0001.jpg, image)如果标注框和真实目标贴合良好再进行下一步。然后是数据集划分。建议按照 8:1:1 或 7:2:1 划分训练集、验证集和测试集。注意划分时要以图片为单位不要以标注框为单位否则同一张图片可能同时出现在训练集和验证集中导致验证结果虚高。训练时有几个关键参数需要说清楚。imgsz输入图片尺寸YOLOv5 默认是 640。如果数据集里的图片比较大你可以适当增大到 960 或 1280这通常能提升小目标检测效果但显存占用也会明显增加。小目标检测是课题的热门方向如果你的数据里小目标比较多这部分值得深入研究。batch-size显存允许范围内尽量设大。在目标检测中较大的 batch size 可以让梯度的估计更稳定训练收敛更平滑。如果显存不够可以开启梯度累积。epochs不是越多越好。要观察训练曲线在验证集 mAP 开始下降或不再上升时应考虑提前停止。YOLOv5 自带早停机制通过在训练命令中加入patience参数控制。weights预训练权重这是很多人忽略的关键点。做课题时除非你有特殊理由否则强烈建议使用 COCO 预训练权重yolov5s.pt作为起点。迁移学习在当前这个时代已经是被广泛验证的做法在 COCO 上预训练过的模型已经学会了丰富的特征表达拿到自己的数据上做微调不仅收敛更快精度通常也更高。# 从头训练 vs 迁移学习的一个重要对比 # 从头训练随机初始化权重 python train.py --data mydataset.yaml --cfg yolov5s.yaml --weights --epochs 100 # 迁移学习加载 COCO 预训练权重 python train.py --data mydataset.yaml --weights yolov5s.pt --epochs 100这里有一个进阶知识点冻结训练。如果你的数据集很小比如千张以内可以先用默认配置训练前 10 个 epoch然后再解冻 backbone 继续训练。--freeze 10参数代表冻结前 10 层。冻结 backbone 相当于只微调后面检测头的参数可以显著防止过拟合。关于超参数调优真心建议不要一开始就手动调参。YOLOv5 提供了遗传算法自动搜索超参数的入口它会基于一组初始超参数通过变异和选择的方式迭代寻找更好的组合。python train.py --data mydataset.yaml --weights yolov5s.pt --epochs 50 --hyp data/hyps/hyp.scratch-low.yaml --evolve这个命令会运行多轮实验但是耗时很长。在课题时间有限的情况下你可以先在默认超参数上跑出基线结果然后在基线附近做小范围手动调整。需要先尝试的参数优先级是学习率lr0、批量大小batch-size、输入尺寸imgsz、数据增强参数如mosaic、mixup开关。其他参数保持默认即可。6. 第四阶段部署模型导出与推理加速很多课题做完训练就停了这是一个很大的遗憾。部署环节在课题中越来越重要因为无论是做实际系统还是写毕业论文中的“应用验证”章节你都需要回答一个问题训练好的模型到底能不能跑起来跑得有多快。YOLOv5 的部署链路可以简单分为三步权重导出 → 推理测试 → 部署到目标环境。首先是权重导出。PyTorch 训练的模型文件是.pt格式它携带了完整的网络结构和训练信息。但在实际部署时我们往往需要转换成更轻量、更通用的格式。ONNX 是最常见的中间格式它不依赖 PyTorch 环境可以在多种推理框架上运行。# 导出 ONNX 格式注意 opset 版本要和你的推理环境匹配 python export.py --weights runs/train/exp/weights/best.pt --include onnx --opset 12导出之后你可以验证一下 ONNX 模型的输出是否和 PyTorch 原模型一致。这个步骤叫“精度对齐验证”是部署中最容易踩的坑。模型转换过程中可能因为算子不支持、精度截断等原因导致推理结果与训练时有差异。稳妥的方法是准备几张测试图片分别用 PyTorch 模型和 ONNX 模型推理对比检测框和置信度。如果没有用 ONNX Runtime 跑过推理可以参考下面的最小推理示例。import onnxruntime as ort import numpy as np import cv2 # 加载 ONNX 模型 session ort.InferenceSession(best.onnx) # 读取并预处理图片注意 YOLOv5 的输入格式 image cv2.imread(test.jpg) img cv2.cvtColor(image, cv2.COLOR_BGR2RGB) img cv2.resize(img, (640, 640)) img img.astype(np.float32) / 255.0 img np.transpose(img, (2, 0, 1)) img np.expand_dims(img, axis0).astype(np.float32) # 推理 outputs session.run(None, {session.get_inputs()[0].name: img})[0] print(outputs.shape) # 通常是 [1, 25200, 85]outputs的形状是[1, 25200, 85]其中25200是 YOLOv5 在不同特征图上的候选框数量总和85的含义是4 个边界框坐标 1 个置信度 80 个类别概率如果使用 COCO 预训练权重。如果你在自有数据集上训练最后的维度是5 nc。接下来要做的是解码这些原始输出应用置信度阈值和 NMS得到最终的检测框。ONNX 只是中间步骤。在课题中如果你涉及嵌入式部署比如树莓派需要进一步把模型转换成推理框架所需的格式。树莓派上的目标检测部署是近期的热门方向但由于树莓派的算力有限通常需要做量化处理把 FP32 模型转换成 INT8 模型。量化能显著减少模型体积和推理耗时但会有 1%~3% 的精度损失这是实际部署中必须接受的权衡。部署阶段最容易踩的坑有三个。第一个是版本不匹配。PyTorch 导出的 ONNX 算子版本过高而你的推理框架如 ONNX Runtime 或 OpenVINO版本较老无法解析。此时要么降低导出时的--opset值要么升级推理框架。第二个是预处理不一致。训练时的图片预处理顺序是 resize → 归一化 → 通道转置推理时必须保持一致。很多同学部署后检测效果大幅下降首先检查预处理代码和训练时是否一致。第三个是 NMS 后处理遗漏。初学者往往只关注模型前向推理却忽略了 YOLOv5 后处理中包含的 NMS 步骤。ONNX 模型输出的是原始预测框如果不做后处理会看到大量重叠的框误以为模型坏了。7. 常见问题与排查方法问题现象可能原因排查方式解决方案训练时torch.cuda.is_available()返回 FalsePyTorch 安装成了 CPU 版本pip list | grep torch查看版本号重新安装对应 CUDA 版本的 PyTorch训练时显存不足CUDA out of memorybatch size 过大或输入图片尺寸过大查看报错日志中的显存占用调小 batch-size或使用梯度累积--accumulate损失值下降很慢学习率过低或数据增强过强观察 loss 曲线斜率适当提高lr0或检查数据增强参数mAP 很低但训练集 loss 很低模型过拟合查看验证集 loss 是否翘尾增加数据量、使用更大规模的数据增强、冻结 backbone 微调验证集 mAP 正常但测试图片检测不到目标测试图片与训练集图片分布差异大检查图片分辨率、目标尺寸和光照对测试图片做与训练一致的预处理或补充相似场景数据导出 ONNX 后推理结果和 PyTorch 不一致预处理不一致或算子精度差异对比两张测试图的输出统一预处理流程降低--opset版本树莓派或嵌入式设备推理太慢模型未量化或设备算力不足查看单张推理耗时转换 INT8 量化模型或换用更小的yolov5s/yolov5n模型8. 最佳实践与工程建议在带课题的过程中我总结了几条对 YOLOv5 学习非常有用的实践建议。一定要把实验记录养成习惯。这是老生常谈但确实是最多学生做不到的事。你改了什么配置、跑了什么参数、mAP 变化了多少全部记录在案。否则过了两周你看着一个.pt文件完全想不起来它是用什么参数训出来的。建议记录的内容包括数据集版本、图片数量、类别分布、训练轮次、batch size、输入尺寸、学习率、损失曲线截图、mAP 指标、模型大小、推理速度。写论文时你会发现这些记录直接变成实验章节的素材。小数据集先从 yolov5s 开始而不是一上来用 yolov5x。很多同学追求高精度直接用最大的模型训练自己的小数据集结果不是过拟合就是训练时间过长。模型规模应该和数据规模匹配。数据量小先用小模型跑出基线数据量大再逐步升级模型。另外yolov5s 也方便后续做部署实验因为它的参数量和计算量更适合实际落地。阅读源码要带着问题读。到了进阶阶段你会不可避免地接触 YOLOv5 源码但不要从头到尾一行行读。正确的方式是带着问题定位关键代码。比如“训练时的 loss 是怎么计算的”就去loss.py找比如“数据增强是怎么做的”就去datasets.py找。这种阅读方式效率极高因为源码是为你服务的而不是你要服务的对象。要在课题早期确定是否做部署。如果你的课题方向包含“系统设计”“应用实现”“嵌入式部署”这些关键词那么在项目启动时就要确定部署目标。因为部署方案会影响模型选型。如果最终目标是树莓派或移动端你可能从一开始就要选择较小的模型并在训练时引入量化感知训练否则到最后再去适配会非常痛苦。关于 GPU 的重要提醒。很多同学问“做 YOLOv5 需要 GPU 吗”。我的回答是如果你是真正的零基础入门只用 CPU 跑通 coco128 训练流程是可以的代价只是等待时间长一些但一旦开始正式训练自己的数据集强烈建议使用 GPU。如果没有本机 GPU可以考虑云 GPU 服务。如果你只有 CPU建议使用yolov5n这种最小模型并调小输入尺寸和 batch size否则一个训练周期等上几天做课题的节奏会被彻底打乱。学术诚信提醒。做课题时如果参考了别人的代码、模型、数据或思想务必在论文中明确引用。在使用公开数据集时要确认数据集的许可协议尤其是涉及商用或二次发布时。这篇文章教你高效地学习和做实验但不代表可以为了效率走所谓“捷径”成果和引用都应当经得起检验。9. 总结与后续学习方向回顾一下这条学习链的完整逻辑。入门阶段目标是跑通 YOLOv5 的官方仓库建立端到端的概念。拓展阶段重点是吃透训练配置和评价指标这直接决定了你能不能读懂训练结果、能不能写实验分析。进阶阶段要训练自己的数据集理解超参数背后的逻辑学会用预训练权重做迁移学习并能够解释训练中的现象。部署阶段把模型导出为 ONNX 或其他格式在目标环境上验证推理速度和精度让课题从“模型训练”走向“可用系统”。这四个阶段不是彼此独立的而是层层递进。入门让你“会用”拓展让你“能懂”进阶让你“会调”部署让你“能用”。每一阶段都建议有明确的产出物入门阶段的产出是跑通的训练日志拓展阶段的产出是对评价指标的清晰解释进阶阶段的产出是稳定的模型权重和可视化的检测效果部署阶段的产出是可运行的推理脚本和性能报告。做完这些你的课题骨架基本就完整了。你可以按照这个体系写文献综述、实验设计、结果分析和应用验证。相比那些东一榔头西一棒子、训了三个月模型但什么原理都讲不清楚的同学你的知识体系已经是“树状结构”而不是“散沙”。后续往哪个方向深入取决于课题目标。如果对模型结构感兴趣可以继续学习 YOLOv5 的源码实现理解 CSPDarknet 的梯度流设计、PANet 的多尺度融合逻辑甚至可以尝试改进网络结构。如果对部署感兴趣可以进一步研究模型量化Quantization、剪枝Pruning、知识蒸馏Knowledge Distillation这些是让模型在资源受限设备上运行的核心技术。如果对数据感兴趣可以研究数据增强策略对检测效果的影响比如 Mosaic、MixUp、Copy-Paste 等这是提升模型泛化能力的有效手段。另外一个值得关注的方向是小目标检测。从热搜词来看对 YOLOv5 小目标检测头的关注度非常高。小目标检测的难点在于特征图下采样后小目标信息容易丢失常用的改进思路包括添加更浅层的检测头、更高分辨率的输入、以及利用注意力机制增强小目标特征。如果你的课题数据集里恰好有大量小目标可以在完成基础学习后向这个方向深入。最后建议一句无论你看到多少新模型、新算法YOLOv5 这条学习链的价值在于它帮你建立了一个完整的目标检测知识框架。这个框架不会因模型更新而过时。等你理解了检测任务的本质、评价指标的含义、训练部署的全流程再去学 YOLOv6、YOLOv8、YOLOv9 甚至更新的模型都只是在这个框架上做增量更新而已。这也是为什么这篇文章推荐你先按这条顺序把 YOLOv5 学透而不是每次出新模型就换赛道。
返回列表