我使用SSD进行CNN训练,并使用VOC2007和VOC2012数据集进行测试。我不太理解VOC2007数据集中的规范化边界框。假设是注释数据集,当我们查看VOC2007 /000002.xml文件时。它的边界框是
<size>
<width>335</width>
<height>500</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object><name>train</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>139</xmin>
<ymin>200</ymin>
<xmax>207</xmax>
<ymax>301</ymax>
</bndbox></object> 可以为如下所示的图像绘制一个边界框。
但是当我查看labels/000002.txt文件中的标准化数据时。
18 0.516417910448 0.501 0.202985074627 0.202
How these 0.516417910448 0.501 0.202985074627 0.202 are related to 139 200 207 301?我使用335和500进行归一化,但没有得到这些值。

发布于 2018-08-02 22:41:17
我以前也遇到过类似的问题,我的解决方案是:
假设您拥有(来自Pascal VOC XML文件- Annotations/000002.xml):
width = 335
height = 500
xmin = 139
xmax = 207
ymin = 200
ymax = 301要规格化边界框坐标,可以执行以下操作:
def norm_box(width, height, xmin, xmax, ymin, ymax):
x = (xmin + xmax)/2. * 1./width
w = (xmax - xmin) * 1./width
y = (ymin + ymax)/2. * 1./height
h = (ymax - ymin) * 1./height
return (x,y,w,h)
box_norm = norm_box(width, height, xmin, xmax, ymin, ymax)
print(box_norm)输出为:
(0.5164179104477612, 0.501, 0.20298507462686566, 0.202)这与labels/000002.txt文件中的规范化数据相匹配。
18 0.516417910448 0.501 0.202985074627 0.202要对其进行反规范化,可以执行以下操作:
def denorm_box(width, height, x, y, w, h):
xmax = int((x*width) + (w * width)/2.0)
xmin = int((x*width) - (w * width)/2.0)
ymax = int((y*height) + (h * height)/2.0)
ymin = int((y*height) - (h * height)/2.0)
return (xmin, xmax, ymin, ymax)
(x,y,w,h) = box_norm
box = denorm_box(width, height, x, y, w, h)
print(box)输出为:
(139, 207, 200, 301)你可以在这里看到一个演示:https://notebooks.azure.com/andrewssobral/libraries/utils/html/bbnorm.ipynb
希望这能对你有所帮助
https://stackoverflow.com/questions/50267653
复制相似问题