(Review cs231n) Object Detection

时间:2023-12-11 13:11:44

目标:我们有几个类别,然后我们要在这张图中找到这些类的所有实例

解决思路:是否可以按照回归的思路进行求解呢?

但是受限制于确定的种类输出问题。

方法:分类和回归是解决问题的两个套路,我们现在对于目标的探测问题不把它看作是回归问题,

而是看作是分类问题。所以我们将一张图片的一部分作为分类器的输入,进行判断;再重复运行判断。

问题:如何确定窗口的大小?

  答案就是把所以尺寸都是一次,但是这是低效的方法,太多不确定。同时需要加入两个东西:背景的类和多标签的分类(你可以加入很多正值,不计算softmax损失,现在有了独立归回的损失,多个类在一个点上,但是还是用了损失函数。)

问题:太多的点需要我们去计算?

不全部进行,只查看一些可能的区域,在很少的区域运行分类器。

历史的上的目标探测方法:

1.HOG(histogram of oriented gradient) 方向梯度直方图

(Review cs231n) Object Detection

基本思想计算在特征的基础上进行线性分类,这就是分类器,线性分类器的速度非常快;在不同的比例下, 计算整个图像的方向梯度直方图,针对不同的尺度,不同位置区域进行线性分类。

2.Deformable parts model(DPM)

(Review cs231n) Object Detection

还是基于HOG的线性分类,但是更为强大的线性分类器,允许形变,很快的运算速度。

3. Region Proposals 

输入一张图像,输出所以可能存在目标对象的区域,不关心对象的具体类别,在图像中寻找一些整体相似的结构,有很多小框的图像区域产生框,在进行选择。

(Review cs231n) Object Detection

Region Proposals ----selective search

  基于像素出发,像素颜色和纹理的区域进行合并,形成相连接的区域,不断合并,最后图像包含很多图像块的区域,减少了搜索的区域。

(Review cs231n) Object Detection

4. RCNN 将检测方法和分类结合在一起

基本思想就是基于区域的CNN方法,输入一张图像,应用选择性搜索的检测方法,得到大概2K个不同大小和不同位置的框,把每一个框内的图像区域裁剪出来,调整到固定的大小,然后通过CNN网络进行分类。

这个CNN网络最后分别连接回归端和一个应用的SVM的分类端,回归端可以对目标框进行微调。

RCNN的实现步骤:

(Review cs231n) Object Detection

对这个网络进行微调从而可以用于检测,因为这个分类模型是针对Imagenet的1000类进行训练,而你的检测数据集中类别数目不一样而且图像的统计特性也不一样,在网络最后加上新的几层来处理你的类别,

帮你处理图像数据中不同的统计特性,这里进行的分类过程,但不是针对整张图像的处理,只是对检测数据集图像中正的或负的区域进行分类,初始化网络层。

(Review cs231n) Object Detection

要把提取的特征存到磁盘中,所以对每一张图像运行选择性搜索算法,你要提取出的这些区域,并输入到CNN网络中,把这些区域的特征存到磁盘中。

(Review cs231n) Object Detection

接下来训练SVM,使它基于这些特征进行正确分类,训练二分类的SVM,能够区分这些图像区域中是否包含对象,希望图像中有多个正的区域,判断出多个类别,对不用的类分别训练一个二分类的SVM。

(Review cs231n) Object Detection

对区域框进行回归,有时候你的region proposal 并不完美,从存储的特征回推到region proposal 的更正,这个更正是一个有趣的格式化表示,实际上就是回推出一个更正因子(correction factor ),告诉我们需要向右移动,所以做一个线性回归。

(Review cs231n) Object Detection

用于检测的数据集

(Review cs231n) Object Detection

评估指标:

平均准确率(mean average precision,MAP)0-100的数字。

(Review cs231n) Object Detection

Fast RCNN

训练:整体训练

(Review cs231n) Object Detection

关键技术:ROI池化 (region of interest pooling)

  当输入的图片,很大可能是一个高分辨率的,而且我们有目标框,由selective research 得到目标框,把这个高分辨图像输入到卷积池化,全连接层希望得到低分辨率的conv特征值,然而整个图片的特征是高分辨率的,解决方法,as follows:

(Review cs231n) Object Detection

对于给出的目标框,我们把它投射到那个conv feature 空间,并把conv feature volume切成小块,切成下游层需要的h*w网络。

(Review cs231n) Object Detection

对于每一小格,我们进行max-pooling,共享卷积特征值,最后提取出那个区域输出,

(Review cs231n) Object Detection

同时,只使用了max-pooling.我们知道如何BP,可以对这些region of interest pooling 层进行BP算法。

(Review cs231n) Object Detection

Fast  Rcnn的优势

Rcnn 很慢,我们要分开运行每一个目标框,每一个候选区都要独立通过卷积层;

对于fast rcnn 我们对所有的候选区同时进行卷积。

问题又出现了! 对于推荐区域的选取,如果你将推荐区域的选取所花费的时间考量进来,之前的优势就非常的小。

在fast RCNN中,我们使用整张输入图片进行卷积,取代各个推荐区域进行卷积,在faster-RCNN中使用region proposal network 区域推荐网络来替代额外的区域推荐算法,获得卷积层最末端的特征图谱,从中获得推荐区域,其中比较关键的是区域推荐网络(region proposal network)

 (Review cs231n) Object Detection

region proposal network

我们把卷积网络最后一层的特征图谱当作输入,将区域推荐网络添加到卷积神经网络上,对特征图谱进行滑窗

操作,这里的滑窗就是卷积,在区域推荐网络中,我们有两种相似的顶层结构,一边进行分类,一边判断图片中

是否包含检测目标,并进行回归,对位置信息做回归,滑窗和特征图谱之间的位置关联,表示我们查看的图片

哪一部分,回归得出的结果给出特征图谱中具体位置。

(Review cs231n) Object Detection

并不是直接对特征图谱中的位置进行回归,这里有几个形状固定的框,根据特征图谱点到初始图片点的关联,覆盖到

原始的图片上,在fast-RCNN中,我们将这些框从原始图片映射到特征图谱。现在,在faster-RCNN中我们将这些框从特征

图谱映射到原始图片,这里有n个卷积框,对特征图片进行卷积,对于每个框,每对一个区域进行卷积,它会产生一个评分

判断这个框内是否有检测目标,还会输出四个回归坐标点,得到正确的框。

(Review cs231n) Object Detection

在faster-RCNN中,训练区域推荐网络,获得预测未知类的检测器。

(Review cs231n) Object Detection

Faster-RCNN的训练十分繁杂,包含四种损失,3*3卷积核,区域评分和坐标回归;是由3*3卷积核和一对1*1卷积核

对特征图谱做卷积得到,不同样式的卷积框,有着不同的位置和尺寸。

(Review cs231n) Object Detection

  特征图谱上的点和原始图片上的点有着对应关系,并不是将所有点都一一对应起来,我们选取图片的一些区域进行对应,我们需要对这些区域进行选取,做外部区域推荐的时候,你所做的是选取区域,然后进行卷积,你期待卷积能够对图像进行处理,卷积所包含的信息对区域选取十分有用,为了减少计算量。

  在最后,对于划分,你使用的同样的卷积特征图谱,无论是区域推荐,还是接下来的分类和回归。