我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

YOLOv5学习路线全梳理:从入门到部署,快速搞定目标检测课题

YOLOv5学习路线全梳理:从入门到部署,快速搞定目标检测课题 【目标检测课题救星】YOLOv5 系统学习顺序入门→拓展→进阶→部署一次理清做课题就按这个顺序来省下3个月无效摸索很多刚接触目标检测的同学第一次听到“YOLOv5”时往往会被两件事劝退一是满屏的环境配置教程CUDA、cuDNN、PyTorch、conda 来回折腾还没跑通第一个模型就已经想放弃二是资料太多太杂B 站视频、GitHub 仓库、公众号文章各说各话今天让你改 anchor明天让你调损失函数最后发现时间全花在“试错”而不是“学习”上。如果你正在做毕业设计、课程项目、竞赛或者实验室课题这篇文章就是来帮你把整个 YOLOv5 的学习路线理清楚的。我不会上来就贴一堆代码而是先用一个全局视角告诉你从零开始做目标检测课题到底应该先学什么、后学什么、哪些东西可以暂时不学、哪些坑可以提前避开。然后逐步进入环境搭建、数据集制作、模型训练、评估指标解读、模型部署这些核心环节每一部分都给你可操作的步骤和判断标准。按照这条路线走正常来说两周到一个月就能把主线跑通而不是花费两三个月去零散地查资料。这篇文章适合的目标读者很明确正在做目标检测相关课题、需要训练自己的数据集、并且最终希望把模型用起来部署到本地或服务器的同学。如果你是纯算法研究、打算从零手写检测器那 YOLOv5 对你更多是 baseline 参考路线会有所不同。1. 这篇文章真正要解决的问题先说实话YOLOv5 的学习难点从来不在模型本身。它的代码结构清晰、文档齐全、社区资料丰富真正难的是“不知道按什么顺序学”以及“不知道学到什么程度算够用”。拿最常见的课题场景来说比如你要做一个“基于 YOLOv5 的交通标志检测系统”表面上看任务是训练一个模型识别红绿灯、限速牌、行人标志。但实际做起来你会发现要经历这些环节准备环境Python、PyTorch、CUDA、显卡驱动版本一不对就报错准备数据标注工具选哪个标注格式怎么转成 YOLO 格式数据集怎么划分训练模型超参数怎么设训练到多少个 epoch 合适怎么判断过拟合评估模型mAP、Precision、Recall、F1 这些指标到底代表什么怎么根据指标反推模型哪里出了问题部署模型训练好的 .pt 权重怎么转成 ONNX、TensorRT怎么在 CPU 或边缘设备上跑起来。这五个环节每一个单独拎出来都能写好几篇博客。但作为课题执行者你不需要把每个点都挖到极致而是需要一条“主线路径”。只要主线清楚任何环节出现报错你都能知道问题出在哪个模块、该去哪里查。这篇文章要解决的核心问题就是把 YOLOv5 做课题从入门到部署的完整顺序梳理清楚并且给出每个阶段的学习重点、判断标准和常见坑。文章不会做以下事情不会贴完整源码逐行解释源码解析是另一篇长文的量不会帮你决定用 YOLOv5 还是 YOLOv8、YOLOv11这个最后会给出判断方法不会教你从零实现反向传播或 YOLO 损失函数细节。文章会做的事情画出学习路线框架教你搭建一个最简可运行环境带你制作并管理自己的数据集跑通一次完整训练并理解关键指标介绍最稳妥的部署思路给出每个阶段最值得避开的坑。2. 认识 YOLOv5它到底是什么解决什么问题2.1 从目标检测说起目标检测的任务对一张图片不仅要回答“图里有什么”分类还要回答“这些东西分别在哪”定位。传统做法是滑动窗口加手工特征效率低、泛化差。深度学习时代R-CNN 系列开启了 two-stage 路线先产生候选区域再分类YOLO 系列则把检测当作回归问题一次前向传播同时输出类别和边界框所以叫 one-stage。YOLOv5 是 Ultralytics 公司在 2020 年 6 月开源的虽然名字里有 v5但它并不是官方 YOLO 系列的延续而是基于 YOLOv3/v4 思想的重写实现。它的优势非常明显工程化程度高训练、验证、推理、导出都通过一条命令行完成对新手友好推理速度快相比 two-stage 模型在保证精度的前提下速度优势很大社区资料丰富中文教程、常见问题解决方案几乎全覆盖可扩展性强支持自定义数据集、多种模型规模n/s/m/l/x、多种导出格式。很多学校课题和工业落地项目选择 YOLOv5不是因为它在每个公开数据集上都刷新 SOTA而是因为它在“效果、速度、易用性”之间取得了很好的平衡。你不需要成为深度学习专家也能用它训练出一个可用的检测模型。2.2 YOLOv5 的学习难点不在算法而在工程链路如果你去看 YOLOv5 的源码会发现核心检测部分的代码并不算多大多数代码都在处理数据加载、增强、训练循环、日志、导出等工程问题。这意味着真正的难点是“串联整个流程”的能力而不是读懂某个公式。比如训练一个自定义数据集你需要经历graph LR A[原始图片] -- B[标注] B -- C[YOLO格式txt] C -- D[数据集配置yaml] D -- E[训练] E -- F[评估] F -- G[导出/部署]注本博客不支持 mermaid 渲染这里用文字表示即可原始图片→标注→YOLO格式txt→数据集配置yaml→训练→评估→导出/部署这个流程中任何一步出错都可能导致训练失败或模型效果差。很多同学卡在“标注完数据集训练时报错 class 数不匹配”“loss 降了但 mAP 很低”“导出 ONNX 后推理结果不对”这类问题本质都是链路没打通。所以这篇文章会将这条链路按“入门→拓展→进阶→部署”拆成四个阶段每个阶段都有明确的任务和验收标准。3. 学习路线总览四个阶段一张图理清先给你一个全局地图后面每一节都会详细展开。阶段学习重点可交付成果时间参考入门阶段环境搭建、跑通官方推理能用官方权重对图片/视频/摄像头进行检测2~3天拓展阶段制作自己的数据集、训练自定义模型能训练并评估一个属于自己的检测模型5~7天进阶阶段理解训练细节、参数调优、解决效果差问题模型指标改善掌握常见调参手段1~2周部署阶段模型导出、推理加速、简单应用集成将模型部署到服务器或本地程序3~5天注意时间参考并不是绝对的。如果你对 Python 和 PyTorch 比较熟悉入门阶段半天就可以搞定如果你是纯新手光环境配置就可能卡两三天。关键在于每个阶段要明确“做完什么可以进入下一阶段”而不是漫无目的地刷资料。4. 入门阶段跑通官方推理建立自信4.1 环境准备显卡不是必须但强烈建议有YOLOv5 推理和训练都支持 CPU但速度差异巨大。如果你只是验证一下官方模型效果CPU 也能跑一张图片推理大约需要几百毫秒到几秒如果是训练自己的模型CPU 训练一个中等规模数据集可能要几天而一张入门级显卡比如 GTX 1660、RTX 3050可能几小时就能完成。所以如果有条件尽量使用 NVIDIA 显卡并安装 CUDA 和 cuDNN。没有显卡的同学也不要放弃可以先在 CPU 上跑通流程训练部分可以使用小模型yolov5n/yolov5s搭配小数据集来验证后面再租云 GPU。环境配置的核心点Python 版本推荐 3.8~3.10太新的版本可能遇到依赖兼容问题PyTorch根据你的 CUDA 版本安装建议用 PyTorch 官方命令安装不要直接pip install torch装 CPU 版显卡驱动确保nvidia-smi能正常显示 GPU 信息YOLOv5 源码使用官方 GitHub 仓库。这里必须强调一个版本问题YOLOv5 的代码一直在更新不同 commit 对应的依赖不同。建议直接使用官方最新版仓库不要找第三方魔改版。如果后面出现报错优先考虑换一个较新的稳定 commit而不是去搜索“YOLOv5 报错”随便改代码。4.2 安装步骤参考以 Windows/Linux 为例假设已经安装好 Anaconda 和 NVIDIA 驱动步骤如下# 1. 创建虚拟环境 conda create -n yolov5 python3.9 -y conda activate yolov5 # 2. 安装 PyTorch以 CUDA 11.8 为例 # 具体命令请参考 PyTorch 官网根据你的 CUDA 版本选择 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 3. 克隆 YOLOv5 仓库 git clone https://github.com/ultralytics/yolov5.git cd yolov5 # 4. 安装依赖 pip install -r requirements.txt如果你的 CUDA 版本是 12.xPyTorch 请选择 cu121 或 cu124 的 index-url。建议先查看nvidia-smi输出的 CUDA 版本但注意这只是驱动支持的最高版本实际使用 PyTorch 时可以安装低于这个版本的 CUDA 运行库比如驱动支持 12.4但 PyTorch 用 cu121 通常没问题。安装完成后先下载官方权重然后运行一次推理验证# 下载权重并从官方图片测试 python detect.py --weights yolov5s.pt --source data/images/bus.jpg首次运行会自动下载yolov5s.pt权重文件。运行成功后在runs/detect/exp目录下会生成标注了检测框的bus.jpg。看到图片上的检测框说明你的环境已经通了。4.3 入门阶段验收标准不要急着看训练代码先学会用 YOLOv5 做推理。尝试对一张自己拍的图片、一个视频文件或摄像头视频流进行检测# 对视频检测 python detect.py --weights yolov5s.pt --source test.mp4 # 对摄像头检测 python detect.py --weights yolov5s.pt --source 0如果这些都跑通了你对 YOLOv5 的“输入-处理-输出”就会有一个直观认识输入任意图片或视频经过 YOLOv5 模型输出每个目标的类别、置信度和边界框坐标。入门阶段的目标不是理解内部原理而是熟悉工具的基本使用方式。另外建议做一个动作打开detect.py文件粗略看一下主要参数--weights、--source、--conf-thres、--iou-thres不用看懂代码逻辑只需要知道这些参数控制什么。这能为后面拓展阶段打下基础。5. 拓展阶段训练自己的数据集阶段入门后你已经会“用别人训好的模型”了。但做课题核心任务是训练一个属于你自己数据集的模型。这一阶段分四步数据采集、数据标注、数据集格式转换、执行训练。5.1 数据采集与标注数据采集有几个原则尽量真实场景如果做交通标志就去拍实际的交通标志而不是网图类别数量一开始不宜过多先做 5 类以内跑通后再扩展图片数量每类至少 200 张以上多角度、多光照、多背景训练集:验证集:测试集 按 8:1:1 或 9:1 划分。标注工具推荐 LabelImg 或 Labelme。LabelImg 比较老牌输出 PASCAL VOC 格式xmlLabelme 输出 JSON 格式。实际用 LabelImg 的人更多一些因为 YOLOv5 官方支持xml转txt的脚本。标注的核心是每个目标都要画矩形框并给一个类别标签。矩形框要尽量贴合目标边缘不要留太多背景也不要裁剪掉目标的一部分。5.2 标注格式转换YOLOv5 训练需要的是每个图片对应一个同名.txt文件文件每行格式为class x_center y_center width height其中x_center、y_center、width、height都归一化到 0~1 之间基于图片宽高计算。LabelImg 默认保存为 VOC xml 格式需要转换。YOLOv5 仓库自带转换脚本utils/下没有直接的 GUI 工具但你可以参考labelme2yolo.py或自己写一个脚本。最省事的办法是使用labelImg时在保存格式里直接选择 YOLO 格式这样标注时就直接生成.txt不需要转换。如果你已经有 VOC 格式的 xml可以用下面的简单脚本转换# 文件路径voc2yolo.py import os import xml.etree.ElementTree as ET from pathlib import Path def convert_voc_to_yolo(xml_file, class_names, output_dir): tree ET.parse(xml_file) root tree.getroot() width int(root.find(size/width).text) height int(root.find(size/height).text) txt_name Path(xml_file).stem .txt with open(os.path.join(output_dir, txt_name), w) as f: for obj in root.iter(object): cls obj.find(name).text if cls not in class_names: continue cls_id class_names.index(cls) bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) x_center (xmin xmax) / 2 / width y_center (ymin ymax) / 2 / height w (xmax - xmin) / width h (ymax - ymin) / height f.write(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}\n) # 使用示例 if __name__ __main__: class_names [helmet, person] # 改为你的类别 xml_dir annotations yolo_dir labels os.makedirs(yolo_dir, exist_okTrue) for xml_file in Path(xml_dir).glob(*.xml): convert_voc_to_yolo(str(xml_file), class_names, yolo_dir)运行后每个 xml 会在 labels 目录下生成对应 yolo 格式 txt。5.3 数据集目录结构与配置文件YOLOv5 要求数据集目录结构如下datasets/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/图片和标签的名字必须一一对应不含扩展名。推荐使用官方提供的coco128作为模板先复制一份再修改。然后创建一个数据集配置文件mydata.yaml放在项目根目录或任意位置。内容示例# 文件路径mydata.yaml train: D:/yolov5/datasets/images/train val: D:/yolov5/datasets/images/val nc: 2 names: [helmet, person]注意train和val路径必须是绝对路径或相对 YOLOv5 项目的相对路径。nc是类别数names列表的顺序必须和标注 txt 中的 class id 对应。这一步做错训练很可能报错或类别识别错乱。5.4 训练自己的模型数据集准备好之后执行训练命令python train.py --data mydata.yaml --weights yolov5s.pt --epochs 100 --batch-size 8 --imgsz 640参数含义--data指定数据集配置文件--weights预训练权重一般用yolov5s.pt它是在 COCO 上预训练的作为迁移学习起点--epochs训练轮数新手可以先设 100实际根据学习曲线调整--batch-size根据显卡显存调整显存不够就调小--imgsz输入图片尺寸默认 640一般不需要改。训练过程会输出类似下面的日志Epoch gpu_mem box_loss obj_loss cls_loss Instances Size 1/100 2.34G 0.098 0.072 0.012 6 640同时会保存每个 epoch 的权重到runs/train/exp/weights/。训练结束后可以用best.pt验证集上指标最优和last.pt最后一轮。5.5 训练后验证与推理测试训练完成后先对训练时划分的验证集做一次验证python val.py --data mydata.yaml --weights runs/train/exp/weights/best.pt会输出 mAP50、mAP50-95、Precision、Recall 等指标。然后用一批之前没见过的图片测试python detect.py --weights runs/train/exp/weights/best.pt --source test_images/肉眼检查检测效果有没有漏检、误检、框的贴合度如何。如果效果很差进入下一阶段调优。5.6 拓展阶段验收标准你用自己的数据集训练出了模型并且在验证集上 mAP50 达到一个可以接受的水平具体数值因任务难度而异一般 0.5 以上是底线常见任务 0.8 左右算可用。同时你能说清楚自己的数据集类别、数量、划分方式以及模型指标含义。6. 进阶阶段理解训练细节与常见调优手段很多课题做到训练出模型发现效果“能用但不够好”比如误检很多、小目标老是漏掉、边界框偏移。这时候需要进入进阶阶段学会分析问题来源并制定调优策略。6.1 理解关键指标Precision、Recall、mAPYOLOv5 训练日志里有两个最重要的指标mAP50和mAP50-95。Precision精确率预测为正样本中真正正确的比例。高 Precision 意味着模型预测出的框很少是错的。Recall召回率所有真实目标中被正确检出的比例。高 Recall 意味着模型很少漏检。mAP50IoU 阈值为 0.5 时所有类别 AP 的平均值。这是最常用的指标。mAP50-95IoU 阈值从 0.5 到 0.95步长 0.05 的平均 AP更严格更关注边界框定位精度。实际课题评审中如果任务不是特别高精度一般看 mAP50 和 mAP50-95 两个值。如果 mAP50 高但 mAP50-95 低说明你的框定位不够精确可能需要调整回归分支或使用更高分辨率输入。6.2 训练曲线怎么看在runs/train/exp/目录下会生成results.png包含损失曲线和指标曲线。你需要关注train/box_loss、train/obj_loss、train/cls_loss是否平稳下降val/box_loss等验证损失是否下降metrics/mAP50是否逐步上升并趋于平缓。如果train loss持续下降但val loss后期回升说明过拟合了。解决方法是增加数据增强、减少 epoch、使用早停或降低模型复杂度。6.3 提高模型效果的手段按优先级排序在实际课题中提高效果最有效的手段通常不是调整网络结构而是增加数据量和多样性最有效没有之一。同类目标多拍不同角度、不同尺度、不同光照的图片使用更好的预训练权重用yolov5m或yolov5l当预训练权重比从yolov5s开始效果更强但显存和速度消耗也更大选择更大的模型同样数据下yolov5s换到yolov5m通常能提升几个点 mAP调整输入分辨率--imgsz 640换成--imgsz 1280能明显提升小目标检测效果但显存占用急剧上升优化超参数YOLOv5 提供了--hyp参数指定超参数文件新手不建议手动大改可以先用默认值数据增强微调在hyp.scratch-low.yaml中调整hsv_h、hsv_s、degrees、translate、scale等参数比如小目标数据适合增加scale范围。6.4 经典问题为什么我训练完 loss 降了但指标很低这种情况很常见尤其是自己做数据集的同学。原因通常是标注错误太多框不贴合、漏标、类别标错类别不平衡某些类别图片太多某些太少数据划分不一致训练集和验证集有重复或分布差异太大学习率不合适默认学习率一般没问题但如果你调整了 batch-size学习率可能需要同步调整。遇到 issue 时不要急着改模型或调参数第一件事是抽样检查训练集和验证集的标注质量。你可以用下面这行代码快速可视化标注python detect.py --weights runs/train/exp/weights/best.pt --source val_images/ --save-txt如果检测出的框位置和实际标注差距大检查原始标注是否准确。6.5 训练阶段的工程建议每次训练前备份mydata.yaml和模型参数方便复现使用固定随机种子python train.py --seed 42便于结果对比多利用--cache参数缓存图片到内存能加速训练显存不足时要关闭训练过程监控 GPU 利用率nvidia-smi -l 1如果 GPU 利用率很低可能数据读取成为瓶颈此时增大--workers。7. 部署阶段从权重到可用的检测服务训练出满意的模型之后课题往往需要一个“应用”来体现成果比如桌面软件、Web 服务或嵌入式端。这就涉及模型部署。YOLOv5 部署有别于训练它的核心是把 PyTorch 的.pt权重转换为更轻量、更适合推理的格式。7.1 模型导出ONNX 与 TensorRTYOLOv5 官方支持多种导出格式最常用的是 ONNX 和 TensorRT。ONNX 是一种中间格式方便跨框架推理TensorRT 是 NVIDIA 的高性能推理引擎能极大提升 GPU 推理速度。PYTORCH 模型转换为 ONNXpython export.py --weights runs/train/exp/weights/best.pt --include onnx --opset 12导出后得到best.onnx可以用 ONNX Runtime 或 TensorRT 加载。如果要在 GPU 上使用 TensorRT 加速python export.py --weights runs/train/exp/weights/best.pt --include engine --device 0但 TensorRT 在 Windows 下的安装比较麻烦且依赖 CUDA 和 TensorRT 版本匹配建议新手先尝试 ONNX ONNX Runtime速度已经比纯 PyTorch 快不少。如果课题要求实时检测再考虑 TensorRT。7.2 用 ONNX Runtime 部署推理ONNX Runtime 是微软开源的推理引擎安装简单pip install onnxruntime-gpu推理代码需要自己处理预处理和数据转换这里给出一个最小可运行的 Python 示例# 文件路径onnx_infer.py import cv2 import numpy as np import onnxruntime as ort # 加载 ONNX 模型 session ort.InferenceSession(best.onnx, providers[CUDAExecutionProvider, CPUExecutionProvider]) def preprocess(img, size640): h, w img.shape[:2] r min(size / h, size / w) new_h, new_w int(round(h * r)), int(round(w * r)) img_resized cv2.resize(img, (new_w, new_h), interpolationcv2.INTER_LINEAR) canvas np.full((size, size, 3), 114, dtypenp.float32) canvas[:new_h, :new_w] img_resized canvas canvas[:, :, ::-1].transpose(2, 0, 1) # BGR2RGB and HWC2CHW canvas np.ascontiguousarray(canvas) canvas canvas.astype(np.float32) / 255.0 return canvas, r, new_w, new_h def postprocess(outputs, r, new_w, new_h): # outputs shape: (1, 25200, 6) 或 (1, 25200, 5num_classes) preds outputs[0][0] conf preds[:, 4] mask conf 0.25 preds preds[mask] if len(preds) 0: return [] boxes preds[:, :4] boxes[:, 0] - (640 - new_w) / 2 boxes[:, 2] - (640 - new_w) / 2 boxes[:, 1] - (640 - new_h) / 2 boxes[:, 3] - (640 - new_h) / 2 boxes / r return boxes img cv2.imread(test.jpg) tensor, r, new_w, new_h preprocess(img) outputs session.run(None, {session.get_inputs()[0].name: tensor[None]}) boxes postprocess(outputs, r, new_w, new_h) print(检测到目标数量, len(boxes))这个示例在代码层面可能因 ONNX 输出的顺序而异但思路是通用的预处理、推理、后处理解码框、置信度过滤、NMS。如果对后处理不熟悉更简单的办法是直接使用 YOLOv5 自带的detect.py加载 ONNX 格式python detect.py --weights best.onnx --source test.jpg这样虽然不算“部署应用”但验证了 ONNX 模型可以正常工作。7.3 部署到 Web 服务的简单方案如果课题需要做成 Web 系统例如上传一张图片返回检测结果可以使用 Flask/FastAPI 封装。这里以 FastAPI 为例给出最小接口思路# 文件路径app.py from fastapi import FastAPI, UploadFile import cv2 import numpy as np import onnxruntime as ort app FastAPI() session ort.InferenceSession(best.onnx) app.post(/detect) async def detect(file: UploadFile): content await file.read() img cv2.imdecode(np.frombuffer(content, np.uint8), cv2.IMREAD_COLOR) # 这里可以复用上面示例中的 preprocess / session.run / postprocess # 由于代码较长省略实际实现时接线即可 return {message: detect ok, num: 0}部署到云端时注意开放端口和安全访问控制不要在没有鉴权的公网端口上随意暴露推理接口。7.4 部署阶段验收标准你能把训练好的best.pt成功导出为 ONNX 或 TensorRT并能在脱离 PyTorch 的环境中使用 ONNX Runtime 对单张图片进行推理得到和 PyTorch 相近的结果。同时你理解导出后模型输出的形状和含义。8. 常见问题与排查思路下面这些是初学者在 YOLOv5 学习过程中最高频踩到的问题整理成表格方便你直接定位排查。问题现象可能原因排查方式解决方案运行 detect.py 报 ModuleNotFoundError没有安装 requirements.txt 或激活环境检查pip list确认在 conda 环境中重新激活环境并安装依赖训练时报CUDA out of memorybatch-size 太大或显卡显存不足查看nvidia-smi显存占用调小 batch-size 或使用更小的模型如 yolov5n训练后 mAP 接近 0数据格式错误、标注类别和配置不一致打开一张训练图片和对应 txt可视化检查修正标注或配置文件验证集指标好但实际检测差过拟合或训练/验证集分布不一致收集更多多样化的测试数据增加数据增强或重新划分数据集导出 ONNX 后推理不出框后处理不对或输入尺寸不匹配查看 ONNX 输出的 shape用 python 打印 preds按输出格式调整后处理代码训练 loss 为 NaN学习率过大或数据集存在异常图片降低学习率检查图片是否损坏使用默认学习率清理坏图摄像头检测卡顿推理速度慢或设备性能不足统计单帧推理时间换用 TensorRT 或降低输入分辨率除了这些还有一个容易忽略的问题训练路径中的中文名。Windows 环境下如果数据集路径包含中文或者用户名是中文可能会导致读取文件编码错误。建议把所有路径设置为纯英文。9. 最佳实践与工程建议9.1 学习路径上的优先级建议如果你是做课题做系统而不是研究算法请克制住“把源码每一行读懂”的冲动。YOLOv5 源码接近 200 个文件逐行读完既不现实也没必要。建议的学习优先级是跑通官方推理做自己的数据集并训练会看指标并做简单调优会部署成一种可调用服务。读源码、改结构、自己实现损失函数都放到后面。优先把主线走通再考虑加深理解。9.2 数据管理的工程习惯图片和标签统一命名建议用时间戳或序号不要用中文和特殊字符每次数据集修改后备份一份并标注版本保留一个独立的验证集只在最后模型评估时使用避免反复污染训练前做一次标签可视化将标注框画到图片上检查这一步能避免很多低级错误。9.3 训练过程的资源控制使用--cache可以加快读取但显存不足时不要用在训练前设置--workersWindows 上建议设为 0 或 4 以内避免 dataloader 报错使用--patience参数实现提前停止例如--patience 50当 50 轮没有改善时自动停止及时备份best.pt后续部署和对比都靠它。9.4 部署的安全与性能部署到公网前做好接口鉴权至少使用简单的 Token对于实时性要求高的场景尽可能使用 TensorRT 或 INT8 量化如果模型类别很少只有一两类可以裁剪模型输出分支提升速度建议记录推理耗时和峰值显存作为课题验收材料。10. 到底选择 YOLOv5 还是 YOLOv8/YOLOv11这个问题很容易让初学者纠结。我的判断是如果你的课题周期短、重点是完成一个检测系统并展示效果YOLOv5 依然是稳妥选择。理由有三点资料存量最多。网上绝大部分中文教程和踩坑记录都基于 YOLOv5遇到问题更容易找到答案代码稳定部署生态成熟。ONNX/TensorRT 转换方案丰富遇到兼容性问题的概率更低你的课题评审不会因为模型版本新就加分更多看任务复杂度、数据质量和系统完整性。如果课题明确要求使用最新模型或者你想在算法层面做改进可以直接看 YOLOv8 或 YOLOv11它们也是 Ultralytics 维护的API 风格接近。但从零开始学YOLOv5 的“低摩擦系数”优势很大。11. 总结与后续学习方向这篇文章给你分了一条清晰的路线入门时先跑通官方推理拓展时制作自己的数据集并训练模型进阶时理解指标和进行调优部署时把模型导出到 ONNX 或 TensorRT 并封装应用。按这个顺序走你其实不用经历“东学一点、西看一篇”的无序状态。下一步你可以选择一个具体小任务立刻实践比如找 300 张“猫和狗”的图片标注后训练一个检测模型。把这个流程从头跑到尾你就能完全理解 YOLOv5 做课题的完整链路。之后如果时间充裕再去看数据增强、模型剪枝、知识蒸馏、NMS 优化等进阶话题如果想深入嵌入式部署可以从树莓派或 Jetson Nano 开始。最后提醒一点做目标检测课题数据永远比模型更重要。与其花时间去调一个复杂网络结构不如认真做一份干净、丰富、标注可靠的数据集。这条经验在 YOLOv5 上适用在 YOLOv8、YOLOv11、甚至未来的新模型上依然适用。把这套方法沉淀下来你的课题才能顺利结题自己的工程能力也会上一个台阶。
返回列表