Tensorflow使用多边形边界框

4

我知道TensorFlow API用于训练自定义目标检测数据集时只使用矩形边界框,即xmin、xmax、ymax和ymin。同时我也知道,多边形边界框将极大地提高检测精度,因为它可以消除边界框内的任何不必要信息,从而使训练数据集更加优秀。我目前使用labelImg来为所有需要训练的图像绑定多边形框。我的问题是,是否有一种方法可以修改TensorFlow API中的代码,使其能够处理多边形框而不仅仅是矩形框呢?

2个回答

1
不,此时您可能更感兴趣的是语义分割,比如Mask R-CNN(Tensorflow的目标检测API中未实现)。API中的模型具有特定的可微分层(因此可训练),可以找到边界框。在多边形模型上的自由度会更加复杂。Mask R-CNN通过识别对象,然后分割出边界框内实际为对象与背景的内容,解决了多边形问题。

以下是一些流行的目标检测算法及其工作原理的介绍:

https://blog.athelas.com/a-brief-history-of-cnns-in-image-segmentation-from-r-cnn-to-mask-r-cnn-34ea83205de4?gi=b386f4274020


0

好的,我修改了我的多边形。我模拟了一个内接于矩形中且与我的图像具有相同尺寸(用零填充,例如[w=0,h=0,颜色=0])的多边形,并将其用作训练的掩码。

这是它在我的代码中出现的片段:

im_w, im_h, color = img.shape
#
...
  image_masked, img_masks = mask_polygon_over_image(image, all_lists_poligon)
  #
  #convert to retangular over gray image
  tf_input_image = tf.image.resize(np.uint8(img), (im_w, im_h))
  tf_input_mask  = tf.image.resize(np.uint8(img_masks), (im_w, im_h))

我正在进行测试。

all_lists_poligon 来自一个注释的 JSON 文件。

对我来说刚刚好用!

请看 mask_polygon_over_image 函数:

   #
def mask_polygon_over_image(image, all_lists_poligon):
    new_image = Image.new(mode="RGB", size =(3000, 3000), color = (255, 255, 255))
    draw = ImageDraw.Draw(image,'RGBA')
    draw_new = ImageDraw.Draw(new_image)
    for list_polygon in all_lists_poligon:
        draw.polygon(list_polygon, fill=(50, 255, 50, 105),outline="yellow")
        draw_new.polygon(list_polygon, fill=(0, 185, 0),outline="yellow")
    return image, new_image

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接