除了基本的图片分类外,计算机视觉处理的更高阶的任务还包括目标检测,语意理解,视频分析,场景理解等等,在这里主要记录一些计算机视觉实现目标检测 Detection and Localization 相关的实现方法和论文阅读心得。
在很多计算机视觉的任务的实现过程中,都可以将任务分解为多个按步骤执行的子任务:例如在目标定位问题中,可以先通过一定的方法定位图片中的多个可能有意义的区域,在此基础上,对这个区域进行分析,以进一步确定这个区域内的物体属于哪一个类别。从这个意义上说,定位问题实际上是建立在分类问题的基础上的。
Regional Based CNN, R-CNN
在使用 CNN 解决目标定位问题时,一个较为明显的挑战在于图片当中可以包含不确定数量的目标,而通常情况下 CNN 模型都只能输出确定数量的目标值,作为这一系列研究的鼻祖 R-CNN 作者的解决方法如下:
-
通过传统的计算机视觉方法如边缘检测、轮廓检测等方法在输入图像中选定 2000个可能的备选区域 Region of Interests:如具有相同纹理和边界的区域通常可能包含同一个物体
-
由于这些备选区域一般会有不同的尺寸,因此需要将这些区域的尺寸通过仿射变换 Affine Warp 进行标准化,得到尺寸为 227x 227 的固定长度的特征向量作为 AlexNet CNN 的输入
-
将 CNN 的输出结果(4096维特征向量)利用 SVM 分类器生成一个分类标签,同时通过另一个线性回归分支建立一个确定 Bounding Box 位置
在这一实施中使用的 ROI 区域确定的方法为 Selective search,这一方法的主要问题在于其特征提取 CNN 需要遍历所有的可能的备选区域,因此时间耗费较长。
Fast-R-CNN
前面已经提到,在 R-CNN 中由于提供足够多的 Region Prosals 作为输入是后续 CNN 分类的基础,因此需要要求 Region Proposals 有较高的查全率,这一操作的负面影响是其大大增加了特征提取 CNN 需要处理的输入的数量,使得算法的计算时间大范围提高。
为了解决这一问题,R-CNN 的作者通过将原始图片及该图片上的一系列 ROI 同时作为网络的输入,经过一系列的卷积和池化操作后,在网络中间层的 Feature Maps 中通过 RoI pooling 进而得到标准化的特征向量,再将这些向量输入到后续的全连接 Softmax 分类器中。
Region of Interests features generation in Fast-R-CNN, source: Deepsense.ai其中 RoI pooling 层的实现方式为:
-
在该层的前续卷积操作中,由于已经得到了基于输入图片的 Feature map 和基于对应的多个 ROI 得到的 Nx5 个 ROI Matrix,其中 N=64 为该图片中的 ROI 的数量,矩阵的第一列为 ROI 的索引,后四列为对应的 ROI 的坐标值
-
将 Feature Map 上对应 ROI 坐标位置的区域内分成指定数量的区域,在论文中这一数量为 7x7,在每一个区域内施行 Max Pooling 的到一个 7x7 的矩阵,这一矩阵作为网络后续层的输入
-
需要注意的是,基于同一图片的所有 64 个 ROI 共用同一个 Feature Map,这大大减少了计算量
Faster R-CNN
Fast R-CNN 的运行速度是 R-CNN 的 10 倍左右,除了ROI 区域计算外,已经基本实现了实时检测,此时实时检测的瓶颈落在了备选区域的计算上。基于此,研究者们进一步提出了 Faster-R-CNN,通过在特征提取这一步添加一个 Region Proposal Network 以进一步加快速度,其中在 Region Proposal Network 中目标区域的选择方式如下:
-
在训练集中通过 RPN score 选择分值较高的 12000 个区域,在论文的测试集中这一数量为 6000
-
对这些 IOU 超过 0.7 的区域实施非极大抑制以进一步去掉重复区域
-
最终在剩余的窗口中选择 2000 个备选区域作为后续识别网络的输入,在测试集中这一数量为 300
Faster R-CNN 可以认为是 RPN + Fast R-CNN,如果仅仅读论文的话无法有效的理解,这里可以参考已经开源的代码实现。
网络的损失函数
从损失函数的角度,分类问题和定位问题最大的差别是分类问题的损失函数可以通过 Cross Entropy Loss 来定义,并且可以通过准确度 Accuracy 来描述模型的预测能力,而在定位问题中,由于需要衡量的是网络输出的位置坐标与实际坐标的相近程度,因此是一个回归问题。在回归问题中,我们衡量模型的好坏的标准常常是误差的大小,其常用的损失函数有以下几种:
-
L1 Loss:按照坐标中元素的之差的绝对值来衡量误差的大小,这个误差函数当误差较小时其结果会过小
-
MSE Loss:按照坐标中元素之差的平方和(再取均值)来衡量误差的大小,这个误差函数由于会放大较大的误差项而容易受到异常数据的影响
-
Smooth L1 Loss:结合了上述两者的优点而建立的,当相应坐标值之差 |ŷi - yi| < 1 时采用修正的误差的平方和 0.5(ŷi - yi)2 来衡量损失,而当坐标值之差 |ŷi - yi| ≥ 1 时,采用坐标之差的绝对值 |ŷi - yi| - 0.5 来衡量损失。
网友评论