Keras对象识别:为同一对象获得多个类预测(边界框)

时间:2018-08-05 12:36:36

标签: python tensorflow keras object-recognition

我正在将Retinanet(https://github.com/fizyr/keras-retinanet)与Keras一起用于物体检测。在图像上使用模型,我经常会得到多个边界框(类预测),这些边界框对于“相同”对象具有很高的置信度得分-预测不同的类,就像这样:

enter image description here

我正在寻找一种解决方案,以防止类重叠。如果有70%的重叠,我只想返回分数最高的班级。

我一直在置信度阈值,即将其增加作为解决此问题的一种方法,但是结果是我的分类器仅限于一个边界框。因此,我想知道keras中是否有一种解决方案可以防止类重叠?

我的预测管道如下:

image = read_image_bgr(image_path)

# copy to draw on
draw = image.copy()
draw = cv2.cvtColor(draw, cv2.COLOR_BGR2RGB)

# preprocess image for network
image = preprocess_image(image)
image, scale = resize_image(image,min_side=256)

# process image
start = time.time()
boxes, scores, labels = model.predict_on_batch(np.expand_dims(image, axis=0))
#print("processing time: ", time.time() - start)

# correct for image scale
boxes /= scale

# visualize detections
for box, score, label in zip(boxes[0], scores[0], labels[0]):
    # scores are sorted so we can break
    if score < 0.5:
        break

    color = label_color(label)

    b = box.astype(int)
    draw_box(draw, b, color=color)

    caption = "{} {:.3f}".format(labels_to_names[label], score)
    draw_caption(draw, b, caption)
    print(caption)

#plt.figure(figsize=(8, 8))
fig.add_subplot(rows, columns, i)
plt.axis('off')
plt.imshow(draw)

我一直在阅读有关非最大压缩和联合的交集的信息,但是我不确定如何实现。

0 个答案:

没有答案