目标检测预测框置信度(Confidence Score)计算方式
预测框的置信度(Confidence Score)是目标检测模型输出的一个关键部分,它衡量了模型对一个预测框中包含特定类别对象的确定程度。
不同的目标检测模型(如Faster R-CNN、SSD、YOLO、DETR等)在计算置信度时有其特有的机制,但核心思想都是将对象存在性和类别概率结合起来。
常见的置信度计算方式
以下是几种主流目标检测模型中置信度的计算方式:
1. 基于分类和目标性评分(如Faster R-CNN, SSD, RetinaNet)
这类模型通常会为每个预测框(或预定义的锚框/先验框)输出两部分信息:
- 目标性评分 (Objectness Score / Objectness Probability):表示该预测框中存在一个对象的可能性。这通常是一个二分类问题(前景 vs 背景),通过一个sigmoid激活函数输出0到1之间的值。
- 类别概率 (Class Probabilities):表示该预测框中对象属于各个类别的概率分布。这通常通过一个softmax激活函数输出,所有类别的概率和为1。
置信度计算公式:
对于某个预测框,其最终的置信度通常是:
Confidence Score=Objectness Score×Max Class Probability
例子:
假设一个预测框:
- 目标性评分:0.95 (模型认为这个框里有东西的概率是95%)
- 类别概率:
- 人 (Person): 0.8
- 车 (Car): 0.1
- 狗 (Dog): 0.05
- 背景 (Background): 0.05 (如果模型也预测背景类)
那么,这个预测框的最终置信度会是:
Confidence Score=0.95×0.8=0.76
这个0.76就是该预测框是“人”且“确实是一个对象”的置信度。当我们在NMS后设置阈值(例如0.5)时,就是用这个0.76与0.5进行比较。
具体模型中的体现:
- Faster R-CNN:
- RPN (Region Proposal Network) 会预测每个锚框的objectness score (是否是前景)。
- Fast R-CNN Head 会对每个RoI(Region of Interest)进行分类,输出class probabilities。
- 最终的置信度结合了RPN的objectness和Fast R-CNN Head的分类概率。
- SSD (Single Shot MultiBox Detector):
- SSD为每个预设的default box(类似锚框)在不同特征图层上同时预测class probabilities和bounding box offsets。
- 在SSD中,通常会有一个背景类,因此class probabilities本身就包含了是否是目标的含义。模型会为每个default box预测num_classes + 1 (包括背景) 的概率。
- 置信度就是某个非背景类别的最高概率。例如,如果模型预测一个框是“猫”的概率是0.7,背景是0.3,那么这个框的置信度就是0.7。
- RetinaNet:
- RetinaNet使用Focal Loss来解决前景背景类别不平衡问题。
- 它为每个锚框预测objectness score (通过二分类) 和class probabilities (通过多分类)。
- 置信度计算方式类似Faster R-CNN,是objectness score乘以max class probability。
2. 直接预测置信度(如YOLO系列 - 早期版本)
早期的YOLO(如YOLOv1)模型会直接预测每个网格单元(grid cell)是否包含一个对象以及该对象的类别。
- YOLOv1: 每个网格单元预测一个 confidence score (C),表示该网格包含对象的置信度以及预测框的准确性(IoU)。同时预测 conditional class probabilities (
)。
- 最终的类别特异性置信度 (Conditional Class Probability with Confidence) 是:
- 这里的 Confidence 本身就包含了IoU的含义,即
。
- YOLOv2/v3/v4: 这些版本中,confidence score 通常指的是目标性分数 (Objectness Score),即预测框中存在一个对象的概率。
- 模型为每个锚框预测一个objectness score (通过sigmoid激活函数)。
- 同时预测class probabilities (通过softmax或多个独立的sigmoid)。
- 最终的置信度仍然是objectness score乘以max class probability。
- YOLOv5/v8(及更新版本):
- 这些现代YOLO版本通常输出num_classes + 5个值:4个边界框坐标,1个目标性分数 (objectness),以及num_classes个类别分数。
- 最终的置信度计算方式与上面类似,即objectness score与max class probability的乘积。
3. 基于Transformer的直接预测(如DETR)
DETR (DEtection TRansformer) 模型的置信度计算方式与传统基于锚框的方法有所不同,因为它直接输出一个固定数量的检测结果集,并且通过二分图匹配来处理重复检测。
- DETR的输出: 对于每个对象查询(Object Query),DETR的解码器头会直接预测:
- 类别概率 (Class Probabilities):包括一个特殊的“无对象”(no object)类别 ∅。这通过Softmax输出,所有类别的概率和为1。
- 边界框坐标。
- 置信度计算: 对于一个预测框,其置信度就是该预测框属于某个非 ∅ 类别的最高概率。
- 如果某个预测框的最高类别概率是 ∅ 类别,那么它的置信度就被认为是0(或低于某个极低阈值,从而被丢弃)。
- 如果最高类别概率是非 ∅ 的某个物体类别(例如“人”),那么这个概率就是该预测框的置信度。
DETR中的“无对象”类别 ∅ 和二分图匹配是其处理置信度和假阳性的关键:
- 在训练时,DETR通过匈牙利算法进行二分图匹配,将每个预测框与一个真实目标(或 ∅ )唯一匹配。这使得模型直接学习到如何抑制冗余预测,而不是依赖NMS。
- 在推理时,如果模型预测某个查询的类别概率中 ∅ 的概率最高,就表示该查询没有检测到任何对象,这个预测会被忽略,从而自然地减少了假阳性。
总结
尽管不同模型有细节差异,但预测框置信度的核心思想是衡量一个边界框中确实存在一个特定类别对象的概率。这个概率通常是通过将对象存在性的评估和类别分类的评估相结合而得到的。在实际应用中,我们会根据这个置信度来过滤预测结果,并通过调整置信度阈值来平衡模型的精度和召回率。