YOLOv5 7.0:源码文件索引

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
2
3
4
5
6
7
8
9
10
11
12
13
detect.py::run
→ DetectMultiBackend(...)
→ attempt_load() # .pt
→ LoadImages / LoadStreams
→ letterbox()
→ DetectMultiBackend.forward()
→ DetectionModel.forward()
→ BaseModel._forward_once()
→ Detect.forward()
→ non_max_suppression()
→ scale_boxes()
→ Annotator.box_label()
→ cv2.imwrite / VideoWriter

7.8 训练主调用链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
train.py::main
→ select_device / DDP 初始化
→ train()
→ check_dataset()
→ Model(...) = DetectionModel(...)
→ parse_model()
→ create_dataloader()
→ LoadImagesAndLabels
→ check_anchors()
→ ComputeLoss(model)
→ epoch
→ model(imgs)
→ compute_loss(pred, targets)
→ build_targets()
→ AMP backward
→ optimizer.step()
→ ModelEMA.update()
→ val.run()
→ torch.save(last/best)

7.9 验证主调用链

1
2
3
4
5
6
7
8
9
val.py::run
→ DetectMultiBackend 或传入 model
→ create_dataloader
→ forward
→ non_max_suppression
→ scale_boxes
→ process_batch
→ ap_per_class
→ P/R/mAP + confusion matrix

7.10 导出函数

export.py 主要导出器:

1
2
3
4
5
6
7
8
9
10
11
export_torchscript
export_onnx
export_openvino
export_paddle
export_coreml
export_engine
export_saved_model
export_pb
export_tflite
export_edgetpu
export_tfjs

7.11 推荐阅读顺序

  1. detect.py::run():先理解端到端推理
  2. models/yolov5s.yaml:看网络图
  3. models/yolo.py::parse_model():理解 YAML 如何变成模型
  4. BaseModel._forward_once():理解跳连执行
  5. Detect.forward():理解训练输出和推理解码差异
  6. utils/general.py::non_max_suppression():理解后处理
  7. utils/dataloaders.py::LoadImagesAndLabels:理解输入与增强
  8. utils/loss.py::ComputeLoss:理解监督信号
  9. train.py::train():最后串起 AMP、EMA、DDP、验证与保存
  10. 按需要读 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.pyutils/loggers/
新导出格式 export.py + DetectMultiBackend

文章互动

阅读 --

留言

0 条留言

正在加载留言…