YOLOv5训练后车辆检测框整体左移,求问题排查方案
解决YOLOv5车辆检测边界框整体左偏的方案
一、核对标注坐标转换的正确性
- 手动校验缩放后的标注逻辑:原图像尺寸1000x750,缩放到640x640时,需按宽高各自的比例计算标注坐标。YOLO标注采用**(x_center, y_center, width, height)的归一化格式**,正确的转换方式是先对原绝对坐标乘对应宽高的缩放比例,再除以目标图像的宽高得到归一化值。比如原图像x_center绝对坐标500,缩放后绝对坐标为500*(640/1000)=320,再除以640得到0.5的归一化值。若转换时错误使用固定比例(比如宽高都用640/1000),会直接导致标注偏移,进而训练出偏移的检测框。
- 用YOLOv5工具可视化验证:执行
python utils/plots.py --source ../train/images,查看标注框是否精准贴合车辆,确认标注转换无错误。
二、补充训练数据量
- 当前仅用1张训练图,数据量严重不足,模型无法学习到稳定的特征,极易出现过拟合或偏移问题。至少收集几十张不同场景、角度、光照条件的车辆图片补充训练集。
- 开启数据增强:在
dataset.yaml中保留默认数据增强配置,或手动添加旋转、水平翻转、平移、亮度调整等操作,生成现有图片的变体样本,增加数据多样性。
三、调整训练参数
- 减少冻结层数:你使用
--freeze 10冻结了骨干网络10层,对于极小数据集来说,过度冻结会限制模型适配数据的能力。尝试改为--freeze 5或直接移除--freeze参数,让模型充分学习你的数据集特征。 - 修正batch size与epochs:当前仅1张训练图,
--batch 16无法生效,实际batch size为1,训练稳定性极差。将--batch改为1,同时把epochs增加到30-50,给模型足够的迭代学习次数。
四、适配数据集锚框
- YOLOv5默认锚框针对COCO数据集设计,可能与你的车辆框尺寸不匹配。执行
python utils/autoanchor.py --data ../dataset.yaml,让工具自动计算适配你数据集的锚框,替换models/yolov5s.yaml中的anchors字段后重新训练。
五、规范图像缩放方式
- YOLOv5默认采用letterbox缩放(保持原图比例,空白处填充黑边),若你手动拉伸图像到640x640,会导致图像变形,标注框也随之错位。建议不要手动缩放图片,直接使用原图1000x750,训练时指定
--img-size 640,模型会自动完成letterbox缩放并同步转换标注框。
内容的提问来源于stack exchange,提问作者Tiru
相关产品推荐
相关产品推荐

