资讯动态

YOLOv5源代码压缩包从解压到训练部署完整实战指南

发布时间:2026/9/8 3:21:18 来源:尧图企业网站定制
简介YOLOv5目标检测源码包是一套面向目标检测任务的开源实现覆盖从模型训练、验证到推理部署的完整流程适合具有一定Python基础的研究人员、计算机视觉学习者以及希望快速接入检测能力的产品开发者使用。包内共215个文件压缩后大小为226.67MB文件类型以yaml/yml配置、py核心代码、pt预训练权重、sh脚本和md文档为主其中yaml定义模型与数据路径py提供各环节执行逻辑pt可直接加载已有模型sh辅助自动化环境配置和运行结构清晰便于按需查阅。除常规目录外压缩包还包含容器化部署所需文件及学术引用信息能够支持不同平台的快速环境搭建与合规引用。目前已有778人学习下载尤其适合需要研读YOLOv5工程实现、基于自定义数据集进行微调、或将其作为开发基础进行二次修改的实践者借助其中的示例图片和结果文件能够快速验证效果并降低入门门槛。 很多人在搜索“YOLOv5源代码压缩包”的时候其实并不是真正缺这份代码——GitHub上官方仓库一直公开着随便一搜就能下载。大家真正缺的是拿到这份压缩包之后怎么把它变成自己能驾驭的东西。我见过太多人解压完代码盯着目录发了一会儿呆然后跑来问“下一步点哪个文件”。这篇就把这条路完整走一遍从解压、看懂结构、配置环境到训练自己的数据集和落地推理每一步该干什么、为什么这么干一次说清楚。1. 拿到压缩包后我建议你先做这三件事1.1 校验压缩包完整性避免带着坏文件跑三天如果你是从第三方渠道下载的压缩包不是从官网仓库直接克隆的第一件事永远是校验完整性。GitHub官方仓库的每次release都会附带SHA256校验值Windows下用PowerShell执行Get-FileHashLinux或macOS下用sha256sum把算出来的值和官方公布的对一下。不一致的直接删掉重新下载别在这上面赌运气。有人觉得这是小题大做但YOLOv5这个项目依赖关系挺重很多文件互相引用。如果models目录或者utils目录里某个文件在传输过程中损坏了你后面训练到一半才会报错排查起来非常痛苦。先花十秒钟校验省的是后面几天的事。1.2 锁定代码版本别被“latest”坑了解压之后第一眼看git log或者目录里有没有.git。如果是克隆下来的直接git checkout到某个稳定tag比如v6.0、v7.0。如果是下载的zip包页面上也会标注对应的版本号。为什么强调版本YOLOv5迭代很快不同版本之间的配置文件格式、命令行参数甚至网络结构都有变动。很多网上的老教程是配v5.0或v6.0写的你手里拿的是v7.0照着敲大概率踩坑。而且v7.0之后项目维护节奏放缓社区讨论最多、教程最全的反而是v6.0这个时期的内容。所以如果你是第一次接触这个项目我建议直接用v6.0起步等摸熟了再换新版。这跟学框架先学稳定版一个道理。1.3 用目录树快速建立全局印象解压之后别急着点开某个文件先在项目根目录下敲一句tree /FWindows或者tree -L 2Linux把整个目录结构打印出来看一眼。YOLOv5的代码量不算大核心文件就那么十来个看一遍目录树你就知道这个项目大概分了几个模块后面查问题的时候也能快速定位文件位置。2. 项目内部分层每个目录是干什么的和你有什么关系2.1 核心文件与执行入口YOLOv5根目录下最显眼的几个Python文件就是你日常最常用的入口train.py训练脚本整个项目的心脏。detect.py推理脚本拿训练好的模型去检测图片、视频或者摄像头画面。val.py验证脚本在验证集上评估模型指标输出mAP、precision、recall这些数据。export.py模型导出脚本把PyTorch权重转成ONNX、TensorRT、CoreML这些部署格式。test.py老版本里的测试脚本新版本统一归到val.py里了。剩下还有requirements.txt依赖清单、hubconf.pyPyTorch Hub入口这两个后面会用到。2.2 真正要读的三个子目录models目录放的是网络结构定义。yolov5s.yaml、yolov5m.yaml、yolov5l.yaml、yolov5x.yaml是不同尺寸的模型配置文件common.py是网络组件的实现yolo.py是检测头Detect Head和整个模型的组装逻辑。你想改网络结构的时候主要就在这三个文件之间来回切。utils目录是工具函数集。里面包含损失函数loss.py、数据增强augmentations.py、评价指标metrics.py、日志和绘图plots.py等。平时不太需要一个个读但真到自己想改损失函数、加数据增强策略时入口全在这里。data目录放数据集配置。里面会有coco128.yaml这种内嵌的小型示例配置直接指向一个内置的示例数据集。第一次跑通流程基本靠它。2.3 配置文件的读取顺序参数是怎么流动的新手最容易懵的就是这些yaml文件到底谁在读取、谁在生效。我画个简单的数据流你敲下python train.py --data coco128.yaml --cfg yolov5s.yaml的时候train.py会同时读三套配置——--data指向的数据集配置数据路径、类别数、类别名、--cfg指向的模型结构配置网络深度、宽度、Anchor、以及命令行里没写但走默认值的那一堆超参数学习率、批次大小、训练轮数等。三套配置在一个线程里汇合经过utils里的解析逻辑最终组合成一份完整的训练配置。这三套配置各管一摊data yaml回答“拿什么数据练”model yaml回答“用什么网络练”命令行参数回答“怎么练”。搞清楚谁负责什么后面改任何需求都知道该动哪个文件而不是一顿乱搜。3. 环境配置最容易被卡住的三个环节3.1 PyTorch和CUDA版本匹配这是万坑之源YOLOv5的requirements.txt里会写PyTorch的最低版本要求但这只是“能跑”的门槛。真正要紧的是PyTorch、CUDA Toolkit、显卡驱动三者之间的配套关系。我的建议是先确定你的显卡驱动支持的最高CUDA版本再据此选PyTorch的安装命令不要先装了PyTorch再回头折腾驱动。具体操作上推荐用Anaconda建独立环境conda create -n yolov5 python3.8 conda activate yolov5 pip install torch1.13.1cu117 torchvision0.14.1cu117 --extra-index-url https://download.pytorch.org/whl/cu117这里cu117表示CUDA 11.7版本。怎么判断自己该用哪个先跑nvidia-smi看右上角的CUDA Version那是你的驱动支持的最高版本只要等于或高于PyTorch编译时的CUDA版本就能用。装完之后第一件事是验证GPU是否真的可用python -c import torch; print(torch.cuda.is_available()); print(torch.__version__)如果torch.cuda.is_available()返回的是False别继续往下走了先排查驱动和PyTorch的匹配置问题。这一步通过之前去跑训练后面出了问题你根本分不清是代码问题还是环境问题。3.2 requirements.txt不是无脑pip install -r就行YOLOv5的依赖清单里大部分包能一把装完但有三个经常出幺蛾子pycocotools在Windows上经常需要预编译的wheel包直接装会出现Microsoft Visual C 14.0 is required之类的报错onnx和onnx-simplifier如果你暂时不需要导出模型可以先不装省得到时候版本冲突pillow版本太新反而可能和torchvision的图像处理逻辑不兼容。我实际踩坑后的做法是分段安装pip install -r requirements.txt如果报错就单独处理问题包。pycocotools在Windows上装不上时去Gohlke的预编译wheel仓库下载对应Python版本的whl文件再本地安装。装完记得pip check确认依赖关系没有冲突。3.3 权重文件缺失的另类解决方案很多人不知道YOLOv5的权重文件在训练或推理时是会“自动下载”的。但国内网络环境下经常卡在下载那一步半天没反应然后报一个连接超时。我第一次跑detect.py就卡在这还以为是模型结构写错了。解决办法很简单提前到模型仓库的releases页面把yolov5s.pt、yolov5m.pt这些权重文件手动下载好放到项目根目录下它默认查找的位置。这样脚本检测到本地已经有权重文件就会跳过自动下载直接加载。这个细节节省的时间非常可观。4. 从跑通Demo到训练自己的数据集中间隔着这几个坎4.1 先跑通官方示例建立“预期”我不建议一上来就直接用自己的数据集。先用官方配套的COCO128示例数据集跑一次完整训练epoch可以设小一点比如--epochs 20。这一步的目的不是训练出多好的模型而是让你建立“训练一套完整流程本身大概要多久、日志怎么读、输出文件长什么样”的基础认知。python train.py --data coco128.yaml --cfg yolov5s.yaml --weights yolov5s.pt --epochs 20 --batch-size 8训练完成之后去runs/train/目录下看生成的文件里面有权重文件、训练曲线图、验证结果图。注意看results.png里那条loss曲线的下降趋势这个图像会一直伴随你后面的每次训练是判断训练是否正常的关键依据。4.2 数据集目录结构LabelImg标注只是第一步假设你要训练自己的目标检测模型比如识别生产线上的零部件。先用LabelImg或CVAT这类工具把图片标注成YOLO格式的txt文件这一步大家基本都知道。但标注完之后怎么摆放文件很多人凭直觉乱放结果训练时报AssertionError: train: No labels in ...。YOLOv5的标准目录结构是images和labels两个兄弟目录平级各自下面分train和val子目录datasets/ └── mydataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/图片放在images/train对应的同名txt标注文件放在labels/train图片名和txt文件名必须完全一致。目录结构正确了后面才能省心。4.3 data.yaml是新手车祸高发区数据集的配置文件长这样path: ../datasets/mydataset train: images/train val: images/val nc: 3 names: [cat, dog, bird]三个易错点第一path是相对于你执行训练命令时的当前目录来解析的建议写绝对路径省得在不同目录下执行命令时路径千奇百怪第二nc类别数必须和names里列的数量一致这是最常见的报错来源第三names的顺序要和标注时的类别编号一致类别0是第一个类别1是第二个这里错了模型就学错了。4.4 超参数解析别上来就盲目调参YOLOv5默认的超参配置对大多数场景已经够用刚开始训练时不用动。你需要知道的是几个直接影响训练效果的参数--imgsz决定输入图片分辨率默认640提高会带来精度提升但显存占用和训练时间也上涨--batch-size是每个批次处理的图片张数越大训练越稳定但显存有限--epochs是训练轮数不要一上来就设300先设50看看收敛趋势再说。如果loss曲线降不下去或者震荡很厉害先按这个顺序排查学习率是不是太高默认0.01可以试试调到0.001、batch-size是不是太小、数据标注有没有错。大部分“不收敛”问题根源不在超参数而在数据。5. 网络结构对源码学习者的意义不是每个模块都要改5.1 Backbone、Neck、Head各管什么YOLOv5的网络结构分三大块Backbone负责提取图片特征把原始像素逐层抽象成越来越“语义化”的特征图CSPDarknet是它的主体Neck用的是PANet结构负责把不同尺度的特征融合让网络既能看到大物体也能看到小物体HeadDetect模块负责在融合后的特征图上预测目标的类别和框坐标。理解这三块分工你就能明白一个关键问题为什么YOLOv5能同时检测大目标和小目标。因为Backbone在不同的层输出不同分辨率的特征图Neck把这些特征图从下到上和从上到下各融合一遍Head则在三个尺度上各做一次预测。小目标靠高分辨率特征图大目标靠低分辨率特征图分工明确。5.2 源码里的常见模块速查models/common.py里定义了许多基础组件比如Conv是卷积批归一化SiLU激活三件套C3是Bottleneck和残差连接的组合模块SPPF是空间金字塔池化的快速实现Concat用于特征拼接。很多想魔改网络的人最终都会落在这几个模块上。比如有人想加注意力机制通常会去找C3的位置在它内部加一个通道注意力模块有人想改进多尺度特征融合会去改Neck部分的Concat逻辑。你只需要带着“我改的是哪个模块、它负责什么”这个意识去读代码会发现源代码并不神秘。没必要逐行理解先抓住模块之间的连接关系就够了。5.3 关于推理速度对比这件事这几年每次新版本出来都会有人做“YOLOv5和v8/v6推理速度对比”。这里提醒一句不同框架之间的对比必须保证硬件、输入分辨率、推理框架纯PyTorch还是TensorRT、批处理大小这些条件完全一致否则对比结果没有意义。YOLOv5优化的重点在工程易用性和生态成熟度这是它源码设计上的优势也是很多人选择它作为学习对象的原因。6. 推理和部署之路从拿到权重到实际使用6.1 用detect.py快速验证模型效果训练完成后用detect.py看实际效果python detect.py --weights runs/train/exp/weights/best.pt --source ./test_images --conf-thres 0.5--source可以接图片路径、视频路径、摄像头序号0表示第一个摄像头。--conf-thres是置信度阈值默认0.25如果你的场景对误检敏感就调高到0.5以上对漏检敏感就调低。检测结果会输出到runs/detect/目录下。6.2 导出部署格式ONNX和TensorRT实际项目里很少有人直接用PyTorch权重上生产环境因为推理速度不够快。最常见的做法是导出成ONNX再转成TensorRT的engine格式在NVIDIA显卡上跑python export.py --weights runs/train/exp/weights/best.pt --include onnx --imgsz 640导出完成后用ONNX Runtime或者TensorRT推理在同样的硬件上速度通常能提升2到5倍。导出这步除了时间没有别的成本经验是导出前的PyTorch版本和导出后的ONNX Runtime版本之间可能存在算子兼容性问题报错了就换一个ONNX Runtime版本试试。6.3 边缘设备部署以树莓派为例最近看到很多人想在树莓派上部署YOLOv5模型思路是对的但要注意两点。第一树莓派的算力比桌面GPU弱很多直接跑原版模型帧率会很难看通常需要导出成TensorFlow Lite或ONNX再用量化压缩模型体积。第二模型大小和精度是跷跷板部署到边缘端之前先在数据集上评估一下量化后的精度损失如果损失超过5%就要考虑用更大的模型或者更精细的量化方案。我个人的建议是树莓派这种场景上先用yolov5s最小的一种模型跑通全流程确认推理帧率能接受再考虑精度优化。一上来就想跑最重的模型大概率是两头都不讨好。7. 几个真正让人头疼的报错和排查过程7.1 “No labels found”不等于你的标注文件不存在这个报错误导性很强。我第一次遇到时检查了目录下的txt文件明明都在但训练脚本仍然报这个错。后来发现是data.yaml里的path写的是相对路径而当时执行命令的当前目录和配置文件里的相对路径基准对不上。改成绝对路径之后立刻就好了。所以遇到这个报错按顺序排查先看path指向的路径是否存在再看train和val子目录名和路径有没有配错最后确认txt文件内容不是空的空文件也会触发这个报错。7.2 显存溢出CUDA out of memory是最容易处理的错训练时报CUDA out of memory90%的情况是因为batch-size设太大。处理方案很简单把batch-size降一半或者把--imgsz从640降到416。千万不要一开始就换更小的模型——先用同一模型降batch-size这是成本最低的办法。小技巧YOLOv5训练时显存占用峰值通常在刚开始那几步因为这时模型在计算初始loss梯度更新幅度也大。如果你看到前几个batch就OOM果断降batch-size但如果训练了十几轮才OOM可能是内存泄漏升级一下PyTorch版本往往能解决。7.3 训练loss正常但mAP很低问题往往在数据端我碰到过一个案例loss曲线一路下降看起来训练一切正常但验证集上的mAP始终在0.3左右徘徊。查了几天最后发现是验证集标签的类别编号和训练集不一致同一只猫在训练集里是类别0在验证集里被标成了类别1。这种错位在loss曲线和训练指标上几乎不会暴露只能在验证阶段体现出来。这类问题提醒我跑训练之前把每个类别的样本数、标注框尺寸分布都统计一遍确认数据的合理性比训练完再诊断要省力得多。顺便说一句标注框的尺寸分布也很关键——如果你的目标普遍很小但输入分辨率设得低那小目标很容易直接“缩”到几个像素模型根本学不出特征。最后再分享一个实用小技巧训练完一批模型后把每次训练的args.yaml文件好好保存下来这里面记录了这次训练的全部参数、数据集路径、生成时间。过两周再看你大概率已经记不住上批模型是怎么训出来的——这个文件就是你的安全带。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价