在道床异物异常检测的实际工程任务中,我遇到了一个核心问题:相机采集的道床图像尺寸为2100×300 像素,与 YOLO 模型默认的 640×640 正方形输入尺寸存在极大的长宽比差异,直接使用默认参数训练会严重影响模型检测精度。
针对这一问题,我结合 YOLO 的图像预处理逻辑和网络结构特性,对训练参数进行了针对性优化,最终实现了模型精度的显著提升。
一、核心问题:YOLO 默认预处理对极端长宽比图像的缺陷
首先需要明确 YOLO 对输入图像的标准处理逻辑:
YOLO 采用等比例缩放 + 边缘补黑(Letterbox) 策略,不会直接拉伸 / 裁剪图像。以默认 640×640 输入为例,模型会先计算缩放比例,将原图最长边缩放到 640,短边不足的部分填充黑色像素,最终凑成正方形输入;推理后检测框会自动反向映射回原图坐标。
对于 2100×300 的狭长图像,若直接使用默认参数训练,图像会被压缩成细条状 + 大面积黑边的正方形。大量无效黑边会稀释有效特征,模型无法充分学习道床异物的纹理、形态信息,最终导致检测精度低下、训练效果差。

二、优化思路:保留原始图像特征,适配网络结构
我的核心优化原则:取消无效补黑,最大程度保留图像原始长宽比,同时严格适配 YOLO 网络的硬件要求。
由于推理阶段的输入图像与训练尺寸一致,因此直接基于原始图像比例定制训练参数,是解决该问题的最优方案。
三、关键优化代码与参数解析
基于 Ultralytics YOLO 框架,我对训练代码进行了如下修改,核心适配极端长宽比的道床图像:
from ultralytics import YOLO
import torch
# 清空GPU缓存,提升训练稳定性
torch.cuda.empty_cache()
# 加载YOLOv13s模型配置
model = YOLO('/home/bing/data/yolov13-main/ultralytics/cfg/models/v13/yolov13s.yaml')
# 启动模型训练
results = model.train(
data='/home/bing/data/AbnormalBallastBedDataset.yaml', # 数据集配置
epochs=300, # 训练轮次
workers=8, # 数据加载线程数
batch=16, # 批次大小
imgsz=2112, # 核心优化:输入尺寸
device=0, # 指定GPU
patience=50, # 早停策略
project='/home/bing/data/yolov13-main/runs', # 训练结果保存路径
name='ABBtrain2', # 训练任务名称
rect=True, # 核心优化:矩形训练
mosaic=0.0, # 关闭马赛克增强
mixup=0.0, # 关闭混合增强
amp=True, # 自动混合精度,加速训练
cache=False # 关闭数据缓存
)
在上述代码中值得注意的主要有以下几点:
imgsz=2112,
1. imgsz=2112(适配网络下采样机制)
YOLO 的骨干网络会进行5 次下采样,每次特征图尺寸减半,最终输入尺寸必须能被 32 整除(2⁵=32),这是保证特征图尺寸为整数、避免训练不稳定的硬性要求。
- 原始图像宽 2100:2100÷32=65.625(非整数,不满足要求)
- 优化尺寸 2112:2112÷32=66(整数,完美适配)
配置后,2100×300 的原始图像会被等比缩放为2112×320,无无效黑边,完全保留图像原始特征。
rect=True,
rect=True是解决极端长宽比图像训练的关键参数:启用后,框架会按照图像原始长宽比进行等比缩放,再批量组合成矩形输入,而非强制填充为正方形。
- 优势 1:最大程度减少无效黑边,降低 2112 超大尺寸带来的显存占用;
- 优势 2:避免图像拉伸变形,保证特征提取对齐,让训练更高效、更稳定;
- 对比:若不开启该参数,模型会默认将图像填充为 2112×2112,会直接导致显存溢出(爆内存)。
mosaic=0.0,
mixup=0.0,
针对道床狭长图像的特性,马赛克、混合增强会破坏异物的原始形态和上下文特征,因此关闭后能进一步提升训练精度。
四、优化效果对比
我使用同一道床异物数据集,分别进行两组训练:
- 默认参数:640×640 正方形输入
- 优化参数:2112×320 矩形输入
最终结果显示,优化后的模型在 mAP、精确率、召回率等核心指标上均实现显著提升,有效解决了极端长宽比图像的检测精度问题。

五、注意事项
若训练超大尺寸狭长图像时出现显存溢出(Out of Memory),优先检查两点:
- 是否未设置
rect=True,导致模型强制使用 2112×2112 正方形输入; - 输入尺寸
imgsz是否能被 32 整除,避免因尺寸不合法导致训练异常。

389

被折叠的 条评论
为什么被折叠?



