平均精度(Average Precision,AP)是信息检索领域和机器学习评价指标中常用的一个衡量方法,特别广泛用于目标检测任务。它在评估模型的表现时结合了准确率(Precision)和召回率(Recall),为我们提供一个综合性的评估指标。
Precision(准确率):精确率表示在模型预测为正例的所有样本中,实际上为正例的比例。它的计算公式为:
Precision = True Positives (TP) True Positives (TP) + False Positives (FP) \text{Precision} = \frac{\text{True Positives (TP)}}{\text{True Positives (TP)} + \text{False Positives (FP)}} Precision=True Positives (TP)+False Positives (FP)True Positives (TP)
其中,TP(True Positives)是真阳性,正例识别为正例,FP(False Positives)是假阳性,负例识别为正例。
Recall(召回率):召回率(Recall,或称灵敏度、查全率):召回率表示在所有真实正例中,被正确识别出来的比例。它的计算公式为:
Recall = True Positives (TP) True Positives (TP) + False Negatives (FN) \text{Recall} = \frac{\text{True Positives (TP)}}{\text{True Positives (TP)} + \text{False Negatives (FN)}} Recall=True Positives (TP)+False Negatives (FN)True Positives (TP)
其中,FN(False Negatives)是假阴性,正例识别为负例。
IoU 值在 0 到 1 之间,1 表示完全重叠,0 表示完全不重叠。
在计算目标检测系统性能时,平均精度(AP)是一个常用的评估指标。AP 是通过计算不同阈值下的精度 (Precision) 和召回率 (Recall) 来评估一个目标检测模型的性能,你需要以下步骤:
模型对图像中每个对象进行预测,得到预测框(Bounding Box)、置信度和类别标签。然后,将这些预测结果与数据集中的真实标注进行匹配。常用的匹配准则是 IoU(Intersection over Union),即预测框和真实框的交集面积与并集面积之比。一般情况下,IoU 大于某个阈值(如 0.5)时认为匹配成功。
然后根据预测的置信度对预测结果进行排序,从高到低计算 Precision 和 Recall:
通过前一步得到的 Precision-Recall 曲线,计算曲线下的面积即为 AP 值。通常采用 101 点插值法来计算该面积:即在 Recall 的 0 到 1 之间,以 0.01 为步长,共 101 个点,每个点对应的 Precision 取该点开始之后(右侧)的最大 Precision 值。
具体步骤如下:
A P = ∑ r ∈ { 0 , 0.01 , 0.02 , . . . , 1 } P interpolated ( r ) × Δ r AP = \sum_{r \in \{0, 0.01, 0.02, ..., 1\}} P_{\text{interpolated}}(r) \times \Delta r AP=r∈{0,0.01,0.02,...,1}∑Pinterpolated(r)×Δr
其中:
P interpolated ( r ) = max r ~ ≥ r P ( r ~ ) P_{\text{interpolated}}(r) = \max_{\tilde{r} \geq r} P(\tilde{r}) Pinterpolated(r)=r~≥rmaxP(r~)
Δ r = 0.01 \Delta r = 0.01 Δr=0.01
更详细的计算方法可以参考 COCO 数据集官方网站及其评估指标文档。另外,Python 中的 object detection 库(如 pycocotools)也提供了计算 AP 的现成函数。推荐阅读 COCO 的官方评估文档和代码以深入理解。
早期的平均精度计算方法,通常在11个固定的Recall点(0.0, 0.1, …, 1.0)处插值,并取这些点的Precision平均值。
假设有一个目标检测任务,我们的模型在不同阈值下产生的一系列Precision和Recall如下:
阈值(Confidence) | TP | FP | FN | Precision | Recall |
---|---|---|---|---|---|
0.9 | 1 | 0 | 4 | 1.0 | 0.20 |
0.8 | 2 | 1 | 3 | 0.67 | 0.40 |
0.7 | 3 | 1 | 2 | 0.75 | 0.60 |
0.6 | 4 | 1 | 1 | 0.80 | 0.80 |
0.5 | 5 | 2 | 0 | 0.71 | 1.00 |
绘制出的PR曲线的面积即为平均精度(AP)。对于更复杂的情况,更细致的插值方法会被采用以更准确地计算AP值。
AP50 和 AP75 是两种特定的 AP 指标,分别在不同的 IoU 阈值下计算。
例如:
一般来说,AP50 相对比较容易达到较高的值,因为它只要求 IoU 超过 0.5;而 AP75 更具挑战性,它要求模型的定位更精确(IoU 必须超过 0.75)。
尽管AP已经能提供一定的性能评估,但在具体细节上还是有所不足,比如目标检测对目标大小很敏感,因此引入了APs、APm和APl, 分别代表不同大小(small, medium, large)的目标上的平均精度。这种分细分类别评估的方式能够提供更为细致和具体的性能评估,为模型改进提供更多的信息:
APs(Small Objects):评估检测模型对小尺寸目标(面积 < 32x32 像素)的性能。这对于应用于高密度小物体场景(如行人检测、遥感图像目标检测等)是非常重要的。小物体检测通常更具挑战性,因为小物体的信息容易丢失或在特征图上存在更少的特征。
APm(Medium Objects):评估检测模型对中等尺寸目标(32x32 ≤ 面积 < 96x96 像素)的性能。中等大小的目标是大部分目标检测任务中较为常见的一类,准确检测这些目标对提高整体性能至关重要。
APl(Large Objects):评估检测模型对大尺寸目标(面积 ≥ 96x96 像素)的性能。大尺寸目标通常比较容易检测,因为它们在输入图片中含有更多的特征信息。然而,准确地框住这些大尺寸目标的边界仍然是一个挑战。
通过单独评估不同大小目标的检测性能,研究人员和工程师可以更清楚地了解模型的优缺点。例如,一个模型在AP总指标上表现不错,但APs较低,这可能意味着模型在小目标检测上存在不足。这些信息有助于有针对性地改进模型,优化检测算法,或者针对某些具体的应用场景进行模型调整和优化。
AP
(Average Precision,平均精度)是一种衡量模型检测性能的指标,常用于评估目标检测和实例分割算法。在具体应用中,AP可以根据不同的任务进行细分,比如 box AP
和 mask AP
。
Box AP 是具体针对目标检测任务中的 AP 值,在这类任务中,我们重点关注模型在检测到目标物体时,预测的边界框与真实的边界框的重合程度。具体来说,box AP 衡量的是模型预测的边界框(bounding boxes)与真实边界框之间的 IoU 值是否超过一个预设的阈值(一般为0.5或者更高)。流程如下:
Box AP 的核心在于评估边界框的质量,确保模型能够精确地定位目标物体。
Mask AP 是针对实例分割(Instance Segmentation)任务的 AP 值。这种任务不仅要求模型检测出物体的边界框,还需要对物体的每个像素点进行分类(生成二值掩膜)。Mask AP 的计算流程与 box AP 类似,但它的复杂度更高,因为它要求对掩膜预测的质量进行评估:
Mask AP 的核心在于评估掩膜的质量,确保模型能够精确地分割出目标物体的形状。
尽管 box AP 和 mask AP 针对不同的任务,它们的计算方法在概念上是类似的,都是通过评估 IoU 和计算平均精度来衡量模型的性能。
掩膜定义:
交集(Intersection):
并集(Union):
计算IoU:
平均精度(AP)作为一个有说服力且广泛接受的评价指标,可以有效地评估分类和检测模型的性能。通过整合Precision和Recall,它提供了一个对模型性能的全面衡量。