TensorFlow目标检测:SSD MobileNet V1中图像位置为何影响检测精度?
结合你用SSD MobileNet V1迁移学习训练流星检测模型的情况,我梳理了几个可能导致目标位置影响精度的核心原因:
原始数据集的位置分布偏见,数据增强无法完全弥补
你只有85张标注图像,哪怕加了随机翻转、90度旋转,原始数据里流星的位置分布大概率是不均衡的——比如可能大部分流星集中在画面的某几个区域(比如左上、下半部分)。数据增强只是对现有样本做变换,没法凭空创造出原始数据里缺失的位置样本。模型在训练时,会优先学习出现次数多的位置特征,对那些罕见位置的流星,因为见过的样本太少,自然检测精度就差。预训练模型的位置特征偏向COCO数据集
ssd_mobilenet_v1_coco_11_06_2017是在COCO数据集上预训练的,COCO里的目标(比如人、车辆、动物)大多分布在画面中间区域,模型已经学到了“中间区域更容易有目标”的先验知识。而流星这类天体目标,可能经常出现在画面边缘甚至角落,小数据集的fine-tune力度不足以完全覆盖预训练模型的位置偏见,导致模型对边缘位置的流星敏感度极低。数据增强的覆盖范围有限
你用的水平翻转、垂直翻转、90度旋转都是刚性几何变换,只能把现有位置的流星转到几个固定的对称位置,没法模拟流星在画面任意位置出现的情况。比如如果原始数据里没有出现在右上角的流星,就算翻转旋转,也没法得到这个位置的样本。而且流星本身是细长的、有轨迹的目标,单一的旋转翻转可能也没覆盖到它所有可能的姿态和位置组合。小数据集下容易过拟合到位置特征而非目标本身
5000步的训练对于85张图来说,很可能已经过拟合了。模型没有学到流星的通用特征(比如轨迹的亮度、形状),反而记住了训练集里流星的具体位置——比如“左边出现的亮线是流星”,换到右边就认不出来了。这种情况下,位置就成了模型判断的核心依据,而非目标本身的特征。锚框设置可能不匹配流星的位置分布
SSD的检测依赖预设的锚框,COCO预训练模型的锚框是针对COCO目标的位置和大小设计的,可能更多集中在画面中间。如果你的流星经常出现在边缘,这些位置的锚框数量少、匹配度低,训练时模型在这些区域的样本学习不充分,自然检测效果差。
内容的提问来源于stack exchange,提问作者Sandy MacPherson

