【计算机视觉】实现目标检测

什么是目标检测?

目标检测的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状、姿态,再加上光照、遮挡等因素的干扰,目标检测在计算机视觉中也是一项具有挑战性的任务。

机器视觉中关于目标检测有4大类任务:

  1. 分类(Classification):给定一张图片或一段视频判断里面包含什么类别的目标。
  2. 定位(Location):定位出这个目标的的位置。
  3. 检测(Detection):即定位出这个目标的位置并且知道目标物是什么。
  4. 分割(Segmentation):分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题

这4大类任务结果如图所示:
【计算机视觉】实现目标检测

什么是IoU呢?

交并比是预测边界框和标注数据边界框的交集和并集之间的比率,这个统计量也叫做 Jaccard 指数(Jaccard Index)。要获得交集和并集的值,我们首先把预测边界框覆盖在参考边界框之上,如图:
【计算机视觉】实现目标检测

现在对于每个类别,预测边界框和标注数据边界框的重叠部分叫做交集,而两个边界框跨越的所有区域叫做并集。

比如,图中的马,看起来是这样的:

【计算机视觉】实现目标检测

这个例子中交集区域相当大,交集覆盖的是边界框重合区域(蓝绿色区域),并集覆盖的是橙色和蓝绿色的所有区域。

然后,IoU是这样计算的:

【计算机视觉】实现目标检测

利用IoU,我们就能判断检测结果是否正确,常用的阈值是0.5。如果IoU > 0.5,就认为是一个正确的检测,否则就认为是一个错误的检测。注意:这里的0.5只是一个人为经验值,根据不同的场景要做调整。为了学习方便起见,我们先用0.5,等学会了再调整也不迟。
【计算机视觉】实现目标检测

  1. 什么是精确率呢?

现在,我们为模型生成的每一个检测边框计算其IoU值,利用该IoU数值和阈值,我们为图片中的每一个类计算其正确检测的数量A。对于每张图片,我们都有标准数据,可以告诉我们在图片中某个特定类别的真实数量B,那么A/B就是该类别的预测精确率了。

比如,给定的图片中类别C的精确率=图片中类别C的真正类数量/图片中类别 C 所有目标的数量。

  1. 什么是平均精度呢?

对于一个给定的类别,让我们对验证集中的每张图片都计算它的精确率。假设我们的验证集中有 100 张图片,并且我们知道每张图片都包含了所有的类别(根据参考标准告诉我们的信息)。这样对于每个类别,我们会有 100 个精度率的值(每张图片一个值)。让我们对这些 100 个值进行平均。这个平均值叫做该类的平均精度(Average Precision)。

某个类别的平均精度 = 验证集中该类的所有精确率的和 / 含有该类别目标的图像数量。

  1. 什么是平均精度均值呢?

假设我们有20个类别,对每一个类别,我们都进行相同的计算流程:IoU -> 精确率(Precision) -> 平均精度(Average Precision)。这样就有20个类别的平均进度,我们对所有类别的平均精度值计算其均值(average/mean)。这个新的值,就是我们的平均精度均值 mAP。 (Mean Average Precision)

【计算机视觉】实现目标检测

平均精确度均值 = 所有类别的平均精度值之和/所有类别的数目。

平均精度均值(mAP,Mean Average Precision)是预测目标位置和类别的性能度量标准。我们的任务也将采用平均精度均值作为性能衡量指标。

在确定了算法性能度量后,我们来看看常用目标检测的算法有哪些?

上一篇:独家揭秘 | 阿里怎么做双11全链路压测?


下一篇:飞天加速计划·高校学生在家实践——ECS服务器初体验