简介:这份资源是2026年YOLOv13完整源码与权重文件包,面向计算机、电子信息、数学等专业的学生及目标检测方向的研究者,尤其适合正在做课程设计、期末大作业或毕业设计的人群。YOLOv13由清华大学联合太原理工大学、北京理工大学等团队于2025年6月发布,首次将超图理论引入实时检测,Nano版本在MS COCO上以6.4G FLOPs达到41.6% mAP,较YOLOv12-N提升1.5%精度且参数减少0.1M,可用于快速搭建与理解目标检测系统。压缩包共486个文件,约263.76MB,包含164个py源码、86个yaml配置、8个pt权重、109个pyc编译文件,以及jpg、png示例图、md说明文档、ipynb笔记本和多种Dockerfile部署脚本,覆盖训练、推理与多平台部署。已有237人学习下载,适合对照源码复现实验、迁移到自有数据集或作为二次开发基础。
1. 2026 年还能不能碰 YOLO 系目标检测:从一份完整源码加权重说起
最近后台被问得最多的一句话是:2026 年了,YOLO 系目标检测还值不值得投入?问这话的人手里往往已经拿到一份「完整源码 + 权重文件」的压缩包,解压出来一堆.py、.yaml、.pt,却卡在第一步——不知道从哪跑起来,更不知道跑起来之后能干嘛。我先把结论摆在这:目标检测这条线在工业质检、安防巡检、零售盘点、农业估产这些场景里依然是刚需,而 YOLO 系因为工程化程度高、部署链路短,仍然是绝大多数团队落地时的第一选择。所谓「完整源码 + 权重」,本质是给你一套可训练、可推理、可导出的工程骨架,权重则是别人已经在大规模数据上训好的起点。适合谁?适合手上有标注数据、有明确检测目标、又不想从零搭训练框架的开发者。这篇不聊虚的,就按「拿到包之后怎么跑通、怎么换成自己的数据、参数怎么调、坑在哪」这条线走一遍。
2. 拿到源码包先别急着 train:目录结构与最小推理闭环
很多人拿到包的第一反应是python train.py,这是最容易翻车的起手式。训练动辄几小时起步,如果推理链路都没验证过,你连数据加载对不对、权重能不能读、显存够不够都不知道,等于闭着眼睛烧卡。正确顺序是先跑通推理,确认权重有效、环境无冲突,再动训练。
2.1 一份典型 YOLO 工程包的目录长什么样
不同版本命名有差异,但骨架高度一致。下面是我见过的绝大多数 YOLO 系工程包的通用结构,你对照自己手里的包看:
project/ ├── ultralytics/ # 核心库,模型定义、训练器、推理器都在这 │ ├── cfg/ # 模型结构 yaml 与默认超参 yaml │ ├── engine/ # 训练/验证/推理引擎 │ ├── models/ # 网络结构实现 │ └── utils/ # 数据加载、指标、绘图等工具 ├── data/ # 数据集配置 yaml 与样本 ├── weights/ # 预训练权重 .pt ├── train.py # 训练入口 ├── detect.py # 推理入口 ├── export.py # 导出 ONNX / TensorRT 等 └── requirements.txt关键要认清三个东西:cfg里的模型 yaml 决定网络结构,data里的数据 yaml 决定去哪找图和标签,weights里的.pt决定起点。三者对不上,报错一定发生在你意想不到的地方。
2.2 用一条命令验证权重是否可用
先装依赖,再跑推理。依赖安装这一步别偷懒用全局环境,虚拟环境能省掉后面 80% 的玄学报错:
# 建独立环境,避免和系统里的 torch 打架 python -m venv yolo_env source yolo_env/bin/activate # Windows 用 yolo_env\Scripts\activate # 按 requirements 装,注意 torch 版本要和 CUDA 匹配 pip install -r requirements.txt pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121装完先确认 GPU 能被识别,这一步不过后面全是白搭:
import torch print("torch:", torch.__version__) print("cuda available:", torch.cuda.is_available()) print("device:", torch.cuda.get_device_name(0) if torch.cuda.is_available() else "CPU")逻辑说明:torch.cuda.is_available()返回 False 时,九成是 torch 版本和本机 CUDA 驱动不匹配,或者装成了 CPU 版。参数上,cu121对应 CUDA 12.1,你要按nvidia-smi右上角显示的驱动支持版本去选,别照抄。确认无误后跑最小推理:
# 用自带权重对一张图做推理,先不接摄像头、不接视频流 python detect.py --weights weights/your_model.pt --source data/sample.jpg --conf 0.25 --device 0--conf 0.25是置信度阈值,先给个中间值看效果;--device 0指定第一块 GPU,没有 GPU 就写cpu。跑完看输出目录里有没有画框的图,框的位置对不对。这一步过了,说明权重、环境、推理链路全通,可以进入下一步。
2.3 权重文件到底装了什么,为什么不能随便换
.pt文件里通常包含三部分:网络结构定义、权重张量、以及训练时的类别名和输入尺寸等元信息。很多人换权重后报size mismatch,就是因为新权重的类别数和模型 yaml 里的nc对不上。常见做法是:换权重前先用一段脚本把元信息读出来,确认nc(类别数)和names(类别名)跟你自己的数据一致。
import torch ckpt = torch.load("weights/your_model.pt", map_location="cpu") model = ckpt.get("model", ckpt) print("类别数:", getattr(model, "nc", "未知")) print("类别名:", getattr(model, "names", "未知"))如果nc是 80(COCO 通用类别),而你要检测的是 3 类工业缺陷,那这个权重只能当预训练起点,不能直接推理出你要的结果。这是新手最容易误解的一点:权重不是万能钥匙,它只认识它训过的类别。
3. 换成自己的数据:标注格式、数据 yaml 与训练启动
推理跑通之后,真正的活是把自己的数据喂进去。这一章是整篇的核心,做不对,训练 loss 会以各种诡异方式教你做人。
3.1 标注格式选型:为什么我一般推荐 YOLO txt
目标检测标注格式主流有三种:COCO json、VOC xml、YOLO txt。选型理由很直接——YOLO 系训练器原生吃 txt,省掉一层转换损耗;COCO json 适合多任务和复杂标注,但解析慢;VOC xml 文件碎,几万张图就是几万个 xml,IO 压力大。常见做法是:如果你的标注工具导出的是 COCO 或 VOC,先转成 YOLO txt 再训。
YOLO txt 每行格式是类别索引 中心x 中心y 宽 高,后四个都是相对整图宽高的归一化值(0~1)。这里有个血泪经验:归一化时用的是原图尺寸,不是缩放后的尺寸,很多人在这翻车,框整体偏移。
# VOC xml 转 YOLO txt 的核心逻辑 import xml.etree.ElementTree as ET from pathlib import Path def voc_to_yolo(xml_path, img_w, img_h, class_map): tree = ET.parse(xml_path) lines = [] for obj in tree.findall("object"): cls = obj.find("name").text if cls not in class_map: continue 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) # 转成中心点 + 宽高,并归一化 cx = (xmin + xmax) / 2.0 / img_w cy = (ymin + ymax) / 2.0 / img_h w = (xmax - xmin) / img_w h = (ymax - ymin) / img_h lines.append(f"{class_map[cls]} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}") return lines逻辑说明:class_map把类别名映射成从 0 开始的整数索引,顺序必须和后面数据 yaml 里的names完全一致,错一位整个训练就废了。归一化保留 6 位小数足够,再多没意义。转换完记得抽查几张,用可视化脚本把框画回原图,确认没偏。
3.2 数据 yaml 怎么写,路径为什么总报错
数据 yaml 是训练器和数据之间的合同,写错一个字段就找不到图。典型结构:
# data/mydata.yaml path: /abs/path/to/dataset # 数据集根目录,强烈建议写绝对路径 train: images/train # 相对 path 的训练图目录 val: images/val # 验证图目录 nc: 3 # 类别数 names: # 类别名,顺序即索引 0: scratch 1: dent 2: stain参数说明:path用绝对路径能避开绝大多数「找不到文件」的报错,相对路径会以训练脚本的工作目录为基准,换个目录跑就崩。train和val指向的是图片目录,标签目录默认是把路径里的images替换成labels,所以你的目录结构必须是images/train配labels/train,文件名一一对应,只是后缀不同(.jpg对.txt)。这是硬约定,别自己发明结构。
3.3 启动训练:从预训练权重微调而不是从零训
有了数据和 yaml,训练命令本身很短,但参数决定成败:
python train.py \ --weights weights/your_model.pt \ --data data/mydata.yaml \ --epochs 100 \ --imgsz 640 \ --batch 16 \ --lr0 0.01 \ --device 0参数逐个说:--weights指向预训练权重,从它微调比从零训收敛快得多,小数据集尤其明显;--epochs 100是上限,实际看验证指标早停;--imgsz 640是输入分辨率,显存不够就降到 416 或 320,但小目标会掉点;--batch 16按显存调,8G 显存跑 640 大概能到 8~16;--lr0 0.01是初始学习率,微调场景可以降到 0.001 更稳。训练开始后盯三个东西:loss 是否稳定下降、验证 mAP 是否上升、显存是否爆。loss 震荡不降,先查学习率;mAP 不涨,先查标注质量。
4. 参数调优与显存不够时的取舍:几个必调项
训练能跑起来只是及格线,能不能训出可用的模型,看的是参数取舍。这一章讲几个我每次都会动的参数,以及显存吃紧时怎么砍。
4.1 输入分辨率、batch 与显存的三角关系
这三者是绑死的:分辨率翻倍,显存占用大约翻四倍;batch 翻倍,显存线性涨。显存不够时,优先级是「先保分辨率,再砍 batch」。因为分辨率直接决定小目标能不能被看见,batch 小一点只是训练慢、梯度噪声大,用梯度累积能补回来。
# 显存不够时:降 batch,用累积补回等效 batch python train.py --batch 4 --accumulate 4 --imgsz 640 ...--accumulate 4表示每 4 个 batch 才更新一次梯度,等效 batch 是 16,代价是训练时间变长。这是显存换时间的标准操作,比直接降分辨率划算。
4.2 数据增强开哪些,关哪些
YOLO 系默认开了一堆增强:马赛克、随机缩放、色彩抖动、翻转。通用场景全开没问题,但有两类场景要手动关:一是工业质检,缺陷的方向和颜色是判别依据,翻转和色彩抖动会把特征搞乱;二是密集小目标,马赛克拼接会让目标更小更难学。
# 在训练配置里覆盖默认增强 mosaic: 0.0 # 工业质检建议关掉马赛克 fliplr: 0.0 # 有方向性的目标关掉水平翻转 hsv_h: 0.0 # 颜色是判别依据时关掉色相抖动 scale: 0.2 # 保留轻微缩放,增强泛化参数说明:这些值都是概率,0 表示关闭,1 表示必做。别一次性全关,先关最可疑的,跑一轮对比验证集指标,用数据说话,不要凭感觉。
4.3 学习率与优化器的选择
微调场景我一般用 SGD 配低初始学习率,或者 AdamW 配更低的。SGD 收敛慢但泛化通常更好,AdamW 收敛快但小数据集容易过拟合。判断标准很简单:验证集 mAP 和训练集 mAP 差距大,就是过拟合,换 SGD 或加权重衰减。
# 小数据集微调,偏保守的配置 python train.py --optimizer SGD --lr0 0.001 --lrf 0.01 --weight_decay 0.0005 ...--lrf 0.01是最终学习率相对初始值的比例,配合余弦退火,训练后期学习率会平滑降到初始的 1%。--weight_decay是权重衰减,抑制过拟合,0.0005 是常用起点。
5. 避坑与排查:那些让训练白跑的常见问题
这一章全是踩过的坑,按「现象 → 原因 → 解决」写,你对照自己的报错找。
现象一:训练 loss 是 nan,几轮后直接崩。原因通常是标注里有非法值,比如归一化后坐标超过 1,或者宽高为 0。解决:写个校验脚本扫一遍所有 txt,把越界的行打出来修掉。
# 扫描非法标注 from pathlib import Path for txt in Path("labels").rglob("*.txt"): for i, line in enumerate(txt.read_text().splitlines()): parts = line.split() if len(parts) != 5: print(f"{txt} 第{i}行字段数不对") continue vals = list(map(float, parts[1:])) if any(v < 0 or v > 1 for v in vals) or vals[2] <= 0 or vals[3] <= 0: print(f"{txt} 第{i}行数值越界: {vals}")现象二:验证 mAP 一直是 0。原因多半是类别索引对不上,或者标签目录结构和图片目录不匹配。解决:先确认labels/train和images/train文件名一一对应,再确认数据 yaml 里names的顺序和标注里的索引一致。
现象三:训练正常但推理结果全是乱框。原因通常是推理时的输入尺寸和训练时不一致,或者权重加载时类别数被覆盖。解决:推理命令里显式指定--imgsz,和训练保持一致;加载权重后打印nc确认。
现象四:显存明明够却报 OOM。原因是碎片化,或者 dataloader 的 worker 数开太多。解决:把--workers降到 4 或 2,或者设PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128缓解碎片。
现象五:训练几轮后 mAP 突然掉。原因是学习率过大导致跳出最优解,或者数据里有脏样本。解决:看 loss 曲线,如果 loss 突然飙升就是学习率问题,降lr0;如果 loss 平稳但 mAP 掉,去抽查验证集里预测错的图,多半是标注错了。
6. 从训练到部署:导出与量化的一条实用路径
模型训出来只是半成品,能不能上产线看部署。这一章讲导出和量化的具体操作,以及一个我常用的验证技巧。
6.1 导出 ONNX 与 TensorRT 的取舍
ONNX 是通用中间格式,跨平台好,但推理速度一般;TensorRT 是特定硬件上的极致优化,速度快但绑定硬件。常见做法是:先在 ONNX 上验证数值一致性,再转 TensorRT 上产线。
# 导出 ONNX,opset 选 12 兼容性较好 python export.py --weights runs/train/exp/weights/best.pt --include onnx --opset 12 --imgsz 640 # 导出 TensorRT,fp16 量化,速度提升明显 python export.py --weights runs/train/exp/weights/best.pt --include engine --half --imgsz 640 --device 0参数说明:--opset 12是 ONNX 算子集版本,太低不支持某些算子,太高部分推理引擎不认;--half开启 FP16 量化,速度能提 30%~50%,精度掉一点点,多数场景可接受。导出后务必做数值对齐验证。
6.2 用同一张图对比导出前后的输出
这是我最常用的验证技巧:拿一张有代表性的图,分别用 PyTorch 权重和导出后的模型推理,对比框的数量、位置、置信度。差异在千分位以内算正常,差太多说明导出过程丢了算子或量化过头。
import numpy as np def compare_outputs(out_pt, out_onnx, tol=1e-2): # out_pt / out_onnx 都是 Nx6 的数组: x1,y1,x2,y2,conf,cls if len(out_pt) != len(out_onnx): print(f"框数量不一致: pt={len(out_pt)}, onnx={len(out_onnx)}") return False diff = np.abs(out_pt[:, :4] - out_onnx[:, :4]).max() print(f"最大坐标偏差: {diff:.4f}") return diff < tol逻辑说明:先比框数量,数量对不上说明后处理阈值或 NMS 实现有差异;再比坐标,偏差超过tol就要查量化精度或输入预处理是否一致。这个脚本我每次导出后都跑,能提前拦住大部分部署事故。
6.3 一个我坚持了很多年的习惯
最后说个习惯,不是技术,但比技术更省事:每次训完一个模型,把「数据 yaml、训练命令、关键参数、验证集指标」四样东西记在一个文本文件里,和权重放一起。我吃过太多次亏——三个月后要复现某个版本,只记得「当时调了个参数效果不错」,具体是啥全忘了,只能重训。这个习惯帮我省下的卡时,够训好几个模型了。目标检测这条线,模型会迭代,工具会换,但「先验证再训练、先对齐再部署、先记录再遗忘」这三条不会过时。希望帮到你。
本文还有配套的精品资源,点击获取