我知道TensorFlow API用于训练自定义目标检测数据集时只使用矩形边界框,即xmin、xmax、ymax和ymin。同时我也知道,多边形边界框将极大地提高检测精度,因为它可以消除边界框内的任何不必要信息,从而使训练数据集更加优秀。我目前使用labelImg来为所有需要训练的图像绑定多边形框。我的问题是,是否有一种方法可以修改TensorFlow API中的代码,使其能够处理多边形框而不仅仅是矩形框呢?
我知道TensorFlow API用于训练自定义目标检测数据集时只使用矩形边界框,即xmin、xmax、ymax和ymin。同时我也知道,多边形边界框将极大地提高检测精度,因为它可以消除边界框内的任何不必要信息,从而使训练数据集更加优秀。我目前使用labelImg来为所有需要训练的图像绑定多边形框。我的问题是,是否有一种方法可以修改TensorFlow API中的代码,使其能够处理多边形框而不仅仅是矩形框呢?
以下是一些流行的目标检测算法及其工作原理的介绍:
好的,我修改了我的多边形。我模拟了一个内接于矩形中且与我的图像具有相同尺寸(用零填充,例如[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