tensorflow 对象检测的置信度 API

The confidence level of tensorflow object detection API

我正在通过tensorflow进行物体检测,我遇到了物体检测不太准确的问题。我使用的架构是 faster_rcnn_resnet_101.

更具体地说,我想解决的问题如下:

我正在尝试检测盒子,但我所附的图像将平板电脑检测为盒子,而且置信度非常高 (99%)。我想找出置信度是在哪里定义和打印的,因为我真的很好奇为什么平板电脑检测到一个盒子会有这么高的置信度。我输入的所有训练数据都是像我检测到的那样的盒子。

谁能帮我找出 Tensorflow 对象检测中定义的置信度水平在哪里 API?或者可能会引导我解决这个问题?

首先我会解释分数是如何产生的。 方框边缘显示的置信度分数是 model faster_rcnn_resnet_101 的输出。这是它的生成方式。

上图借鉴了Fast R-CNN,但是box predictor部分,Faster R-CNN结构相同。我们从 ROI pooling layer 开始,所有的 region proposals(在 feature map 上)通过 pooling layer 并被表示为固定形状的特征向量,然后通过全连接层成为 ROI feature vector如图。现在,相同的 ROI 特征向量将被馈送到用于 class 预测的 softmax classifier 和用于边界框回归的 bbox 回归器。这是它们在张量流图中的样子。

图中,Flatten和Flatten_1节点都接收到相同的特征张量,它们进行了flatten op(经过flatten op后,它们实际上是第一张图中的ROI特征向量),它们仍然是相同。现在我们关注 ClassPredictor 因为这实际上会给出最终的 class 预测。

上图是ClassPredictor里面的内容。 其实就是第一张图所示的全连接层输出张量在图中的形状为64*24,代表64个预测对象,每个都是24个中的一个classes(23 classes with 1 background class)。所以对于每个对象,输出是一个 1x24 向量,99% 和 100% 的置信度分数是向量中的最大值。

所以关于你的问题,置信度分数没有定义,但是模型的输出,有一个置信度分数 threshold 你可以在可视化中定义函数,所有大于此阈值的分数都将显示在图像上。因此,除非您重新训练模型 and/or 提供更多训练数据,否则您无法更改置信度得分。在你的图中,平板电脑的 99% 检测在计算精度时将被 class 确定为误报。

解决这个问题的方法是添加更多的训练数据and/or训练更多的步骤(但不是过度拟合)