SSD中VOC数据的边界框标签

时间:2018-05-10 07:20:53

标签: deep-learning caffe

我使用SSD进行CNN培训,并使用VOC2007和VOC2012数据集进行了测试。 我不太了解VOC2007数据集中的标准化边界框。 当我们查看Annotations / 000002.xml文件时,请说明VOC2007数据集。它有

的边界框
include/uapi

可以在下面显示的图像上绘制一个边界框。

但是当我查看标签/ 000002.txt文件中的规范化数据时。

include/uapi

我使用335和500进行标准化,但没有得到这些值。 enter image description here

1 个答案:

答案 0 :(得分:0)

过去我有类似的问题,我的解决方法是:

考虑一下(从Pascal VOC XML文件-Annotations / 000002.xml中):

$("#Save").on("click", function(e){
    $("#errorRow").css("visibility", "hidden");
    $("#errorRow").css("display", "none");

    //Validate
    if($("#form").val() == "")
    {
        $("#errorRow").css("visibility", "visible");
        $("#errorRow").css("display", "contents");
        return;
    }
});

要标准化边界框坐标,可以执行以下操作:

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)
与标签/000002.txt文件中的规范化数据匹配的

(0.5164179104477612, 0.501, 0.20298507462686566, 0.202)

要对其进行非规范化,可以执行以下操作:

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)

您可以在此处查看演示: https://notebooks.azure.com/andrewssobral/libraries/utils/html/bbnorm.ipynb

希望对您有帮助