几篇文章带你看懂目标检测(1)—RCNN

1,390 阅读5分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情

RCNN

计算机视觉是一个跨学科的领域,随着卷积神经网络的出现,再次推动了计算机视觉各个任务向前发展。还有无人驾驶也再次对计算机视觉任务提出新的要求。

在计算机视觉一个主要任务就是目标检测,以目标检测为基础的实例分割、姿态估计和跟踪也是当下主流的研究方向。

object_detection_001.jpeg

多目标检测问题要比图像分类复杂得多,图像分类问题,往往图像中只有一个我们感兴趣的类别,而目标检测问题中,图像中有多少个我们感兴趣目标我们并不知道,而且我们不但要判断有多少个要检测目标,这些目标分别属于什么类别,而且还需要给出其位置所在,我们需要拥有边界框将目标物体括起来来表示目标物体的位置。

虽然距离 2014 年提出 RCNN 网络已经过去快 8 年了,不过现在的目标检测 2 stage 网络大概 pipeline 还是准寻这当年 RCNN 基本思想。

解决目标检测一般思路

多目标检测,也就是一张图像中,可能存在多个目标(我们感兴趣)的物体,在目标检测任务,或者说多目标检测,我们需要对图像中出现的目标,不但要说出图像中的目标所属的类别,还要给出其位置信息。那么一个比较朴素想法,既然我们分类已经做的很好,我们能不能将目标检测问题转化为分类问题。

  • 提取候选框,也就是将一张大图片变为若干张小图像
  • 然后对小图像做一个分类任务

RCNN 网络基本思想

rcnn_architecture.png

  • 对输入图像提取 2k 候选区域
  • warped region 对候选区域进行一次缩放
  • 通过 CNN 计算特征

rcnn_artichecture_002.png

OverFeat 在之前,有关 OverFeat 在之前也介绍过,大家可以翻阅一下之前录制的视频

候选框的生成

利用 selective Search 算法通过图像分割的方法得到一些原始区域,然后通过一定策略将这些原始区域进行合并,得到一个层次化的区域结果,而这些结构就包括可能需要的物体。

proposal_generation_001.png

selective search 从概念上来看属于图像分割,通过使用阶层聚类算法,产生物体候选区域,通常会认为同一个物体,其纹理或者颜色具有一定相似性,也就是利用颜色、纹理、大小和形状相似性来选择候选区域。

selective_search_001.png

提取候选框的特征

我们通常利用 selective search 会生成 2k 候选框,然后将这些候选框进行缩放一个统一的大小尺寸(warped region),论文中是 227x227 接着将候选区域输入事先训练好的神经网络获取 4096 维度特征,得到 2000x4096 相当做 2k 分类任务,

将基于卷积神经网络后直接将特征图进行展平后,并没有输入到全连接层,那么 2000 x 4096

分类器

SVM 是 2 分类分类器,这里简单地说一下,之前的确下了很多功夫,今天来看过时的东西,我们还是简单了解一下,时代在变,大家学习重点也在不断迁移,我们今天在数学上,计算机的出现,让我们可以少在计算技巧花一些功夫。2000x4096 特征与 20 个 SVM 组成的权值矩阵 4096x20 相乘,获取 2000x20 为矩阵,在矩阵中,每一列也就是每一类进行非极大值抑制剔除权重重叠候选框,

非极大值抑制(NMS)

可能该模型能够找到同一物体的多个边界盒。非极大值抑制有助于避免对同一实例的重复检测。在我们得到一组相同对象类别的匹配边界框后。按置信度分数对所有边界框进行排序。

非极大值抑制剔除重叠建议框,IoU(Intersection over Union) 也就是两个集合 A 和 B 他们交集比上他们并集。

  • 寻找得分最高的目标
  • 计算其他目标与该目标的 IoU 值
  • 删除所有 IoU 值大于给定阈值的目标

IoU_001.png

回归算法来精修候选框

对 NMS 处理后剩余的建议框进一步筛选。接着分别用 20 个回归器对上述 20 个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的 bounding box,预测得到 bounding box x 方向的偏移量和 y 方向的偏移量,以宽度和高度的缩放因子,

g^x=pwdx(P)+pxg^y=phdy(P)+pyg^w=pwexp(dw(P))g^h=phexp(dh(P))\hat{g}_x = p_w d_x(P) + p_x\\ \hat{g}_y = p_h d_y(P) + p_y\\ \hat{g}_w = p_w \exp( d_w(P) )\\ \hat{g}_h = p_h \exp( d_h(P) )\\

RCNN_bbox_regression.png

将不包含目标作为负例样本,并非所有的负例样本都同样难以识别,也就是对于负例样本识别有的负例样本容易识别,如某一个负例并不包含目标一部分或者,如果在负例样本中包括一些噪音或者目标一部分,可能这样负例样本就不能容易事

这样难于识别负例样本增加识别难度,容易造成误识别。