我使用SSD进行CNN培训,并使用VOC2007和VOC2012数据集进行测试。我不太了解VOC2007数据集中的标准化边界框。对于VOC2007数据集说,当我们看…
我过去遇到过类似的问题,我的解决方案是:
考虑一下(来自您的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
希望这对你有所帮助