07 源码文件索引
根路径:
1 | YOLO/yolov5-7.0/ |
7.1 任务入口
| 文件 | 关键入口 | 职责 |
|---|---|---|
train.py |
train, main, run |
检测训练、验证、保存、超参进化 |
val.py |
run, process_batch |
检测评估、AP、JSON/TXT |
detect.py |
run |
图片/视频/流检测 |
export.py |
run, export_* |
多格式模型导出 |
benchmarks.py |
run |
导出格式速度和精度基准 |
hubconf.py |
_create, custom, yolov5* |
PyTorch Hub |
segment/train.py |
train |
实例分割训练 |
segment/val.py |
run |
实例分割评估 |
segment/predict.py |
run |
实例分割推理 |
classify/train.py |
train |
分类训练 |
classify/val.py |
run |
分类评估 |
classify/predict.py |
run |
分类推理 |
7.2 模型核心
| 文件/类 | 职责 |
|---|---|
models/yolo.py::Detect |
三尺度 Anchor 检测头与推理解码 |
models/yolo.py::Segment |
Detect + Proto 实例分割头 |
models/yolo.py::BaseModel |
通用前向、profile、fuse |
models/yolo.py::DetectionModel |
从 YAML 构建检测模型 |
models/yolo.py::ClassificationModel |
分类模型或检测 backbone 改造 |
models/yolo.py::parse_model |
YAML → nn.Sequential |
models/common.py::Conv |
Conv+BN+SiLU |
models/common.py::C3 |
CSP 主干模块 |
models/common.py::SPPF |
快速空间金字塔池化 |
models/common.py::Proto |
分割原型 |
models/common.py::Classify |
分类头 |
models/common.py::DetectMultiBackend |
多运行时推理 |
models/common.py::AutoShape |
自动预处理/NMS |
models/common.py::Detections |
结果封装 |
models/experimental.py::attempt_load |
.pt 权重/集成加载 |
7.3 数据与增强
| 文件/对象 | 职责 |
|---|---|
utils/dataloaders.py::create_dataloader |
创建训练/验证 DataLoader |
LoadImagesAndLabels |
检测数据、标签、缓存、增强 |
LoadImages |
图片/视频推理输入 |
LoadStreams |
摄像头/网络流 |
LoadScreenshots |
屏幕输入 |
InfiniteDataLoader |
复用 worker 的无限迭代器 |
utils/augmentations.py::letterbox |
等比例缩放和 padding |
random_perspective |
几何增强 |
augment_hsv |
HSV 增强 |
mixup |
MixUp |
utils/segment/dataloaders.py |
分割数据加载 |
utils/segment/augmentations.py |
分割增强 |
7.4 损失与指标
| 文件/对象 | 职责 |
|---|---|
utils/loss.py::ComputeLoss |
CIoU + Obj BCE + Class BCE |
ComputeLoss.build_targets |
Anchor/网格正样本匹配 |
BCEBlurWithLogitsLoss |
缓和缺失标签影响 |
FocalLoss / QFocalLoss |
难样本加权 |
utils/metrics.py::box_iou |
IoU 计算 |
ap_per_class |
每类别 P/R/AP |
ConfusionMatrix |
混淆矩阵 |
utils/segment/loss.py |
分割损失 |
utils/segment/metrics.py |
Mask AP |
7.5 通用与 PyTorch 工具
| 文件 | 高频内容 |
|---|---|
utils/general.py |
NMS、坐标转换、路径/YAML/数据检查 |
utils/torch_utils.py |
设备、AMP、DDP、EMA、优化器、早停 |
utils/autoanchor.py |
Anchor 适配度检查和进化 |
utils/autobatch.py |
自动估算 batch size |
utils/callbacks.py |
生命周期事件 |
utils/loggers/ |
日志平台适配 |
utils/plots.py |
Annotator、训练图、框绘制 |
utils/downloads.py |
数据与权重下载 |
7.6 配置文件
| 路径 | 内容 |
|---|---|
models/yolov5n.yaml |
Nano 检测模型 |
models/yolov5s.yaml |
Small 检测模型 |
models/yolov5m.yaml |
Medium 检测模型 |
models/yolov5l.yaml |
Large 检测模型 |
models/yolov5x.yaml |
Extra Large 检测模型 |
models/segment/*.yaml |
分割模型 |
models/hub/*.yaml |
P6/P7 与实验结构 |
data/*.yaml |
数据集路径和类别 |
data/hyps/*.yaml |
学习率、损失和增强超参数 |
7.7 检测主调用链
1 | detect.py::run |
7.8 训练主调用链
1 | train.py::main |
7.9 验证主调用链
1 | val.py::run |
7.10 导出函数
export.py 主要导出器:
1 | export_torchscript |
7.11 推荐阅读顺序
detect.py::run():先理解端到端推理models/yolov5s.yaml:看网络图models/yolo.py::parse_model():理解 YAML 如何变成模型BaseModel._forward_once():理解跳连执行Detect.forward():理解训练输出和推理解码差异utils/general.py::non_max_suppression():理解后处理utils/dataloaders.py::LoadImagesAndLabels:理解输入与增强utils/loss.py::ComputeLoss:理解监督信号train.py::train():最后串起 AMP、EMA、DDP、验证与保存- 按需要读
segment/、classify/、export.py
7.12 二次开发定位
| 想修改的能力 | 优先文件 |
|---|---|
| Backbone/Neck | 模型 YAML + models/common.py |
| 检测头解码 | models/yolo.py::Detect |
| 新网络模块 | models/common.py + parse_model |
| 损失函数 | utils/loss.py |
| 正样本分配 | ComputeLoss.build_targets |
| 数据增强 | utils/augmentations.py、DataLoader __getitem__ |
| NMS | utils/general.py |
| 图片/流输入 | utils/dataloaders.py |
| 训练日志 | utils/callbacks.py、utils/loggers/ |
| 新导出格式 | export.py + DetectMultiBackend |
正在加载留言…