[CS131] Lecture 15 Detecting Objects by Parts

根据 Stanford CS131 课程写的笔记(大部分为 note 翻译),英语水平一般,如有错误请评论指正

Lecture 15 Detecting Objects by Parts

Introduction to Object Detection

之前我们介绍了物体检测,本章将介绍物体检测和定位物体。

Challenges

环境改变(光照、视角、物体变形)使得同一类的物体变得不同,以至于难以正确检测并分类。另外,此处介绍的算法只适用于 2D 空间,例如:无法检测一个物体是否在另一个物体的旁边。还有,以下的算法不能检测物体的具体边缘,只是像上图一样的边界框。

Current Object Detection Benchmarks(基准点)

为了评估一个物体检测器的表现,研究者用标准化的物体检测器基准点。基准点用于保证我们比之前的表现好。

PASCAL VOC

第一个广泛使用的基准点是 PASCAL VOC Challenge, 模式分析、统计建模和计算学习 (the Pattern Analysis, Statistical Modeling, and Computational Learning, PASCAL) Visual Object Classes(VOC) Challenge。PASCAL VOC Challenge 测试了 20 个类,因其测试集的每个类内多变性,所以 PASCAL 被认为是高质量的基准点。每个测试集对所有物体都有边界框。

ImageNet Large Scale Visual Recognition Challenge

代替 PASCAL 的基准点是 ImageNet 大规模视觉识别 (ImageNet Large Scale Visual Recognition Challenge, ILSVR)。ILSVR 测试了 200 种物体,且物体种类更加多样化,一张图中常常有多个物体。

2.3 Common Objects in Context

另一个基准点直到今天人仍在使用,在上下文中常见的物体 (Common Objects in Context, COCO)。COCO 测试了 80 种物体,但另外测试了物体位置的边界区域。它也进行了物体分割,即物体更加细节的边界。

Evaluating Object Detection

我们通过对比预测和真实情况来评估物体检测算法,其中真实情况是人工标记的。下图中黄框表示真实情况,绿框表示预测。

扫描二维码关注公众号,回复: 11484574 查看本文章

比较时,有四种情况:

  1. True Positive (TP)

    预测值与真实值均成功定位,见下图 (a)。TP 在图中被认为是预测值和真实值的重叠部分大于 0.5。重叠部分被定义为预测值和真实值集合的交集。也被称作击中 (hits)。

  2. False Positive (FP)

    真实值未定位,预测值定位。即预测值和真实值重叠部分小于 0.5,见下图 (b)。也被称作假警报 (false alarms)。

  3. True Negative (TN)

    模型找不到真实物体,见下图 (c)。也被称作漏掉 (misses)。

  4. False Negative (FN)

    真实值未定位,预测值也未定位。也被称作正确拒绝 (misses)。

如上图,通常我们想要最小化 FP 和 FN,同时最大化 TP 和 TN。

我们定义两种衡量尺度:精度 (precision) 和召回率 (recall)。

P r e c i s i o n = T P T P + F P

精度可以被视作模型检测到的所有对象中,正确预测的概率。
R e c a l l = T P T P + F N

召回率可以被视作所有真实值中被正确检测到的概率。

上图中所有黄框真实值都被正确检测到了,所以召回率很高。但是,因为有太多 FP,所以精度很低。

对每个用于定义 TP 的阈值 (之前的例子中是 0.5),我们可以衡量精度和召回率,并画出精度 - 召回率曲线 (Precision-Recall, PR curve)。通常,我们想要将 PR 都最大化。在比较不同模型时可以用到 PR 曲线,模型越好在曲线在的区域就越大。如下图,Faster-RCNN 的效果最好。

实际应用中,我们常指定一个精度 / 召回率值,然后在这个值下使另外一个值(召回率 / 精度)最大化。

A Simple Sliding Window Detector

检测问题可以被当作分类问题。我们将窗滑过整张图片,找出窗在的每个位置是否包含物体。如下图,窗滑过的四个位置,只有 (d) 中包含人。

Feature Extraction and Object Representation

在 Lecture 8 中,我们提到过 HOG 描述子。本章继续用 HOG 描述子检测物体。首先,我们需要训练一个模板 HOG 描述子来检测新图像中的物体。一个方法是基于多张已标记的图像的 HOG 描述子,训练一个分类器,例如:线性支持向量机 (Support Vector Machine, SVM)。然后将分类器对新图像的窗进行识别。

另一个简单的方法是,取得一张平均图像,基于平均图像提取 HOG 描述子,来创建一个模板。如下图。

Classifying Windows

在创造一个模板后,接下来我们需要将物体模板和窗的每个位置对比。这里我们直接将模板作为过滤器,在图上滑动。在每个位置,提取该位置的 HOG 描述子,和模板的描述子进行计算,得到一个相似度分数。若分数超过预先设置的阈值,则含有该物体。

相似度分数可以简单的用窗 HOG 描述子和模板描述子的点乘计算。

现在唯一的问题在于滑动的模板窗的大小。如下图,窗太小只能检测到左图,而漏掉了右图。

15.11Multi Scale Sliding Window

为了解决上述窗大小问题,我们建立不同尺寸图片的特征金字塔(如下图)。这样我们无需调整模板的大小,在某个尺寸上产生最大相似度值的窗即为物体所在位置。

The Deformable Parts Model (DPM)

简单的滑窗检测器仍然对物体形状的小变化不够强健,例如:人脸五官的改变,汽车轮子间距等等。我们需要一个新模型解决这个问题。类似于词袋模型,我们可以检测物体的部分而不是整体。最后将部分组合,可以得到一个有些许方差的正确位置。

Early Deformation Model for Face Detection

1973 年,研究者创建了下图可变形的装置来检测人脸,中间用弹簧连接。

这些弹簧标志着两个部分(人脸器官)间有一个相对位置。就像弹簧拉的越长越紧一样,相对于理想位置偏移越大,我们给予的惩罚越大。

More General Deformable Parts Models

上图可变形装置只适用于人脸检测,对更加通用的可变形部分模型,一个流行的方法是星形模型。如下图,将一些检测器作为根 (如 x 1 ),然后将其他部分和根用 “弹簧” 连接。

上图右为一个人形检测的例子。蓝框是整个人检测的边界框,也是我们作为根的框。剩下的黄框是人的各个部分检测的边界框,作为和根连接的框。

在这个例子中,我们已经知道每个部分的大致位置,例如:头应该在人整体位置的上中部。但是在机器学习中,我们可能需要学习应该用到哪些部分(例如检测人时的头手脚),以便于最佳的物体检测。

Examples of Deformable Parts Models

通常用物体的整体作为根,更小更细节的过滤器来检测每个部分,如下图。

通常我们会对一个物体的多方向采用一个多成分模型,即有一个整体过滤器和每个方向的多个部分过滤器。但这样只能抵抗轻微的角度改变,对于大幅度的角度改变,我们需要不同的检测器。如下图的汽车检测,每行代表一个方向,左列代表车的整体过滤器,中列代表车的多个部分过滤器。右列代表对每个部分的相对惩罚,其中颜色越浅代表惩罚越大。

Calculating Score for Deformable Parts Models

为了建立一个可变形部分模型,我们需要一个计算分数的方法。首先,我们给整体物体检测器计算一个分数,然后每个部分的分数取决于其变形惩罚。最终分数为整体分数减去所有变形惩罚,这样一个物体整体检测较强但部分变形过大会被大幅度惩罚,具体步骤如下。

一个有 n 个部分的整体模型被一个 ( n + 2 ) 的元组表达:

( F 0 , P 1 , P 2 , . . . , P n , b )

其中 F 0 是根过滤器, P n 是模型的第 n 个部分, b 是基元。每个模型部分 P i 定义为一个元组:
( F i , v i , d i )

其中 F i 是第 i 个部分的过滤器, v i 是部分 i 联系根位置的 “锚” 的位置, d i 定义了每个 “锚” 的可能位置的变形花费。

我们在 HOG 金字塔上计算整体和每个部分过滤器的位置,如下图。我们对每个尺度都运用 HOG 过滤器以抵抗尺度变化。每个过滤器的位置是响应最大的位置,为了保持尺度不变,我们需要将每个部分的最大响应映射到原始尺度的图像位置上。

检测分数计算式如下:

i = 0 n F i · ϕ ( p i , H ) i = 1 n d i ( d x i , d y i , d x i 2 , d y i 2 )

上式左侧部分是根和其它部分检测分数的累乘。其中 θ ( p i , H ) 定义为过滤器在 p i 位置的窗的 HOG 特征向量。 F i 是第 i ( i > 0 ) 个部分过滤器, i = 0 代表整体过滤器。

上式右侧部分是所有部分变形惩罚之和。其中 d i 表示第 i 部分的惩罚权重,对应大小 d x i (相对于 “锚” 在 x 方向的偏移量), d y i (相对于 “锚” 在 y 方向的偏移量)。例如:若 d i = ( 0 , 0 , 1 , 0 ) ,那么惩罚为 d x i 2 ,相对于 “锚” 在 x 方向的偏移量的平方。

The DPM Detection Pipeline

可变形部分模型流程有许多步骤,如下图。我们必须先用整体过滤器来检测一个物体,接着用部分过滤器来计算检测的整体分数。

  1. 产生多个不同尺度的原始图像的拷贝。对这些拷贝储存 HOG,以便于后续过滤器应用。

  2. 对这些图像应用整体过滤器。在整体过滤器检测之上,运用部分过滤器。这部分在整体流程中的位置如下图。

    i = 0 n F i · ϕ ( p i , H )

  3. 计算空间花费(例如:部分相对于整体的变形惩罚),这部分在整体流程中的位置如下图。:

    i = 1 n d i ( d x i , d y i , d x i 2 , d y i 2 )

  4. 计算检测分数:

    F 0 + i = 1 n F i · ϕ ( p i , H ) i = 1 n d i ( d x i , d y i , d x i 2 , d y i 2 )

  5. 这些分数代表了在图上每个坐标检测到物体的强度。所以根据分数,画出整张图上的响应分数:

DPM Detection Results

DPM 模型有几个重要假设:

  • 一个物体由整体和与之相连的部分之间的关系定义
  • 检测分数随着根和部分之间的变形减少而提高
  • 不管物体是否可能是另一个类的,只要检测分数高,就认为检测到物体

因此,DPM 在这些假设不满足时会产生错误。

在右上图,DPM 成功检测到汽车的多个部分和整体(背后的车)。但由于两辆汽车的部分距离过近,所以 DPM 将两辆汽车认为是一个整体过滤器,产生错误。

在右下图,DPM 成功检测到汽车的整体和部分。但由于 DPM 没有考虑到不属于汽车的特征(校车顶部),也没有考虑到物体可能属于另一相似类(校车),产生错误。

DPM Summary

Approach

  • 手动选择部分集:对每个部分训练一个特殊的检测器
  • 在部分上训练空间模型
  • 用连接可能性评估这些部分

Advantages

  • 部分有意义
  • 标准的检测方法可以应用于每个部分
  • 在许多类中有效运行

Disadvantages

  • 需要手动选择部分
  • 语义驱动部分有时不容易发现
  • 不能保证没有遗漏重要部分
  • 切换到别的类时,需要重建模型

现在 DPM 已经过时,它的全连接版本被更广泛的使用:

猜你喜欢

转载自blog.csdn.net/bear507/article/details/82316041