SSD训练中VOC2007数据集归一化Bounding Box计算疑问
解析SSD中VOC数据集边界框的归一化逻辑
我来帮你搞清楚这个SSD边界框归一化的逻辑——你之前算不对肯定是没get到它的转换规则!它不是直接拿原始坐标除以图像尺寸,而是先把边界框转成中心坐标+宽高的形式,再分别归一化到图像的宽和高。我拿你给的例子一步步算给你看:
1. 先明确原始标注与目标格式
首先看你提供的原始XML标注:
<size> <width>335</width> <height>500</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>train</name> <bndbox> <xmin>139</xmin> <ymin>200</ymin> <xmax>207</xmax> <ymax>301</ymax> </bndbox> </object>
而SSD生成的labels/000002.txt采用的格式是:[类别ID] [归一化中心x] [归一化中心y] [归一化宽度] [归一化高度],对应你看到的内容:
18 0.516417910448 0.501 0.202985074627 0.202
2. 逐值对应计算
我们来逐个推导txt里的归一化数值:
- 归一化中心x:
第一步计算边界框的中心x坐标:(xmin + xmax) / 2 = (139 + 207) / 2 = 173
第二步除以图像宽度335做归一化:173 / 335 ≈ 0.516417910448→ 对应txt里的第二个数值 - 归一化中心y:
第一步计算边界框的中心y坐标:(ymin + ymax) / 2 = (200 + 301) / 2 = 250.5
第二步除以图像高度500做归一化:250.5 / 500 = 0.501→ 对应txt里的第三个数值 - 归一化宽度:
第一步计算边界框的实际宽度:xmax - xmin = 207 - 139 = 68
第二步除以图像宽度335做归一化:68 / 335 ≈ 0.202985074627→ 对应txt里的第四个数值 - 归一化高度:
第一步计算边界框的实际高度:ymax - ymin = 301 - 200 = 101
第二步除以图像高度500做归一化:101 / 500 = 0.202→ 对应txt里的第五个数值
这样算下来,所有数值就完全对应上了!你之前应该是直接用原始的xmin/xmax去做归一化,忽略了SSD是先把边界框转换成「中心坐标+宽高」的格式再进行归一化处理~
内容的提问来源于stack exchange,提问作者batuman
相关产品推荐
相关产品推荐

