我正在将Retinanet(https://github.com/fizyr/keras-retinanet)与Keras一起用于物体检测。在图像上使用模型,我经常会得到多个边界框(类预测),这些边界框对于“相同”对象具有很高的置信度得分-预测不同的类,就像这样:
我正在寻找一种解决方案,以防止类重叠。如果有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)
我一直在阅读有关非最大压缩和联合的交集的信息,但是我不确定如何实现。