以下是关于train.py
、val.py
和predict.py
三个脚本的功能解析与典型实现逻辑:
一、核心功能对比
脚本文件 | 主要用途 | 典型输出 |
---|---|---|
train.py | 模型训练入口,包含数据加载、优化器配置、训练循环及权重保存 | 训练日志、模型权重文件(如best.pt )、损失曲线等可视化结果 |
val.py | 模型验证/测试,计算mAP、混淆矩阵等指标,支持验证集和测试集评估 | 精度-召回曲线、类别级AP值、推理速度统计(如FPS) |
predict.py | 单张图像/视频推理,生成带检测框的可视化结果,不输出量化指标 | 标注后的图片或视频文件(如result.jpg ),适用于嵌入式部署场景 |
二、协同工作流程
- 标准开发阶段:
- 通过
train.py
训练模型并保存权重; - 使用
val.py
验证模型在独立数据集上的泛化能力; - 最终用
predict.py
进行实际场景推理。
- 通过
- 特殊场景:
- 分布式训练:
train.py
支持DDP模式(需设置distributed=True
); - 混合精度:通过
fp16
参数启用半精度训练加速; - 数据预处理:
predict.py
需集成图像归一化、尺寸调整等预处理逻辑。
- 分布式训练:
三、关键参数示例
- train.py:
model.train(data='coco.yaml', epochs=100, batch=32, optimizer='AdamW') # 基础训练配置citation{ref="5,8" data="citationList"}
- val.py:
model.val(data='val.yaml', conf_thres=0.01, iou_thres=0.5) # 验证时调整置信度阈值
- predict.py:
model.predict(source='input.jpg', save=True, conf=0.25) # 输出带检测框的图片
四、实现注意事项
- 代码结构:YOLO系列通常将核心逻辑封装在
ultralytics/engine
目录下(如训练器、验证器类); - 数据兼容性:
val.py
支持COCO/VOC格式数据集,需统一标注文件路径; - 性能优化:
predict.py
应启用model.eval()
关闭Dropout层以减少计算开销。