SSD中VOC数据的边界框标签
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSD中VOC数据的边界框标签相关的知识,希望对你有一定的参考价值。
我使用SSD进行CNN培训,并使用VOC2007和VOC2012数据集进行了测试。我不太了解VOC2007数据集中的标准化边界框。当我们查看Annotations / 000002.xml文件时,请说明VOC2007数据集。它有一个边界框
<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?
答案
我过去遇到过类似的问题,我的解决方案是:
考虑一下(来自您的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)
与标签/ 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
希望这对你有所帮助
以上是关于SSD中VOC数据的边界框标签的主要内容,如果未能解决你的问题,请参考以下文章
SSD-Pytorch训练自己的VOC数据集&遇到的问题及解决办法