天天看点

学习笔记 --- 目标检测性能评价指标MAP、FLOPs

通常我们去评价一个模型时,首先看的应该是它的精确度,当你精确度不行的时候,你和别人说我的模型预测的多么多么的快,部署的时候占的内存多么多么的小,都是白搭。但当你模型达到一定的精确度之后,就需要更进一步的评价指标来评价你模型:

1)前向传播时所需的计算力,它反应了对硬件如GPU性能要求的高低;

2)参数个数,它反应所占内存大小。

为什么要加上这两个指标呢?因为这事关你模型算法的落地。比如你要在手机和汽车上部署深度学习模型,对模型大小和计算力就有严格要求。

IOU定义与计算

https://github.com/amusi/Deep-Learning-Interview-Book/blob/master/docs/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89.md#iou

mAP定义与计算

https://github.com/amusi/Deep-Learning-Interview-Book/blob/master/docs/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89.md#map

关于IOU的疑问:

iou只能用来判断预测预测的位置准不准确,但是目标检测除了预测位置准不准确外,还需要判断预测的类别和gt(ground truth)类别是否对应呀。

现在我拿出一张图片中所有要计算AP的类别的检测框,计算与Gt对象检测框的iou,若iou大于阈值,则视为TP,若预测框中的实际对象不是要计算AP值的那个类别,但预测的标签是要计算AP的那个类别,且预测框与gt对象的框iou也大于阈值,那么这种情况判读为TP,明显是错误的。

其实这种情况基本不可能发生:

1、源码中:if not R[‘difficult’][jmax],将难检测的目标去掉了(个人觉得这里主要去除的是被遮挡面积较大的检测对象,也就是2个不同类别的物体重叠干扰的情况)

2、假如框中实际对象与要GT的类别不匹配,你预测的此类别的置信度分数不会很高,然后在统计TP的时候,置信度分数高的检测结果先去判断是否是TP

3、即使假设你是剩下预测中置信度分数最高的,你与其他目标的GT的IOU还要超过阈值

以上三点每一样都基本很难满足,更别说三点都满足了,所以说这样做是一点问题没有的。

目标检测中的遮挡问题解决方案

一般通过设计优化损失函数来解决

1.对于待检测目标之间的相互遮挡

通过优化损失函数,一方面对proposal向其它目标偏移或其它目标对应的proposals靠近的情况进行惩罚;

另一方面设计损失函数使(1)所有的预测框逼近对应的Target框;(2)属于同一Target框的多个预测框尽量集中来解决待检测目标之前的相互遮挡。

2.对于待检测的物体被干扰物体(非检测的类别目标)遮挡

因为算法只学习待检测的物体的特征,所以第二种遮挡只能通过增加样本来优化检测效果。

在NMS之后计算mAP

这一点一定要明确,mAP值计算在NMS之后进行的,mAP是统计我们的检测模型的最终评价指标,是所有操作完成之后,以最终的检测结果作为标准,来计算mAP值的,另外一般只有测试的时候才会作NMS,训练的时候不进行NMS操作,因为训练的时候需要大量的正负样本去学习。

FLOPs和FLOPS区分

FLOPs:floating point operations 指的是浮点运算次数,理解为计算量,可以用来衡量算法/模型的复杂度。

FLOPS(全部大写)指的是每秒运算的浮点数,理解为计算速度,衡量一个硬件的标准。

我们要的是衡量模型的复杂度的指标,所以选择FLOPs。

FLOPs计算

卷积层FLOPs计算

参考:(另外其中有计算FLOPs的工具)

目标检测的性能评价指标

CNN 模型所需的计算力flops是什么?怎么计算?

继续阅读