当前位置:   article > 正文

目标检测Part2+Leetcode(733)_位置敏感分值图

位置敏感分值图

目标检测Part2(R-FCN,Yolo)

总结一下Part1的四种模型:
(1)R-CNN VS SPP-Net:
在这里插入图片描述

(2)SPP-Net vs Fast R-CNN
在这里插入图片描述(3)Fast R-CNN vs Faster R-CNN
在这里插入图片描述

1.R-FCN

为了适应全卷积化的过程,在Resnet的预训练上进行迁移学习的一个模型,目的还是为了减少全连接层。和Faster R-CNN相比,R-FCN具有更深的共享卷积网络层,这样可以获得更加抽象的特征;同时,它没有RoI-wise subnetwork,不像Faster R-CNN的feature map左右都有对应的网络层,它是真正的全卷积网络架构

1.1 检测网络的变换敏感性 和 分类网络的变换不变性

检测网络的变换敏感性(位置敏感性):简单来讲,对于检测任务而言,我希望我的网络有一个好的检测性能,可以准确的输出目标所在的位置值。随着某个目标的移动,我的网络希望能够和它一起移动,仍然能够准确的检测到它,即我对目标位置的移动很敏感。我需要计算对应的偏差值,我需要计算我的预测和GT的重合率等。但是,深的全卷积网路不具备这样的一个特征

分类网络的变换不变性(位置不敏感性):简单来讲,对于分类任务而言,我希望我的网络有一个很好地分类性能,随着某个目标在图片中不断的移动,我的网络仍然可以准确的将你区分为对应的类别。如上图左边所示,不管你这只鸟在图片中如何移动,我的分类网络都想要准确的将你分类为鸟。即我的网络有很好地区分能力。实验表明,深的全卷积网络能够具备这个特性,如ResNet-101等。

即卷积层越深,不变性越强,对变换越不敏感

所以这就存在检测网络的变换敏感性 和 分类网络的变换不变性的一个矛盾问题,而我们的目标检测中不仅要分类也要定位,那么如何解决这个问题呢?
R-FCN提出了Position-sensitive score maps来解决这个问题

1.2 设计动机(模型优势)

Faster R-CNN是首个利用CNN来完成proposals预测的,从此之后很多的目标检测网络都开始使用Faster R-CNN的思想。而Faster R-CNN系列的网络都可以分成2个部分:ROI Pooling之前的共享全卷积网络和ROI Pooling之后的ROI-wise子网络(用来对每个ROI进行特征提出,并进行回归和分类)。第1部分就是直接用普通分类网络的卷积层,用来提取共享特征,然后利用ROI Pooling在最后一层网络形成的feature map上面提取针对各个RoIs的特征向量,然后将所有RoIs的特征向量都交给第2部分来处理(即所谓的分类和回归),而第二部分一般都是一些全连接层,在最后有2个并行的loss函数:softmax和smooth-L1,分别用来对每一个RoI进行分类和回归,这样就可以得到每个RoI的真实类别和较为精确的坐标信息啦(x, y, w, h)。

需要注意的是第1部分通常使用的都是像VGG、GoogleNet、ResNet之类的基础分类网络,这些网络的计算都是所有RoIs共享的,在一张图片上面进行测试的时候只需要进行一次前向计算即可。而对于第2部分的RoI-wise subnetwork,它却不是所有RoIs共享的,主要的原因是因为这一部分的作用是“对每个RoI进行分类和回归”,所以不能进行共享计算。那么问题就处在这里,首先第1部分的网络具有“位置不敏感性”,而如果我们将一个分类网络比如ResNet的所有卷积层都放置在第1部分用来提取特征,而第2部分则只剩下全连接层,这样的目标检测网络是位置不敏感的translation-invariance,所以其检测精度会较低,而且这样做也会浪费掉分类网络强大的分类能力。

而ResNet论文中为了解决这个问题,做出了一点让步,即将RoI Pooling层不再放置在ResNet-101网络的最后一层卷积层之后而是放置在了“卷积层之间”,这样RoI Pooling Layer之前和之后都有卷积层,并且RoI Pooling Layer之后的卷积层不是共享计算的,它们是针对每个RoI进行特征提取的,所以这种网络设计,其RoI Pooling层之后就具有了位置敏感性translation-variance,但是这样做会牺牲测试速度,因为所有的RoIs都需要经过若干层卷积计算,这样会导致测试速度很慢。R-FCN就是针对这个问题提出了自己的解决方案,在速度和精度之间进行折中。

1.3 R-FCN架构分析-算法步骤

在这里插入图片描述

如图所示,先来宏观分析一下R-FCN算法的整个运行步骤

Step1:选择一张输入处理的图片,并对这张图片进行相应的预处理操作

Step2:将预处理后的图片送入一个预训练好的分类网络中(这里使用了ResNet-101网络的Conv4之前的网络),固定其对应的网络参数

Step3:在预训练网络的最后一个卷积层获得的feature map上存在3个分支
分支1:在该feature map上面进行RPN操作,获得相应的ROI
分支2:在该feature map上获得一个KK(C+1)维的位置敏感得分映射(position-sensitive score map),用来进行分类
分支3:在该feature map上获得一个4KK维的位置敏感得分映射,用来进行回归

Step4:在KK(C+1)维的位置敏感得分映射和4KK维的位置敏感得分映射上面分别执行位置敏感的ROI池化操作(Position-Sensitive Rol Pooling,这里使用的是平均池化操作),获得对应的类别和位置信息。

1.4 位置敏感分值图(Position-sensitive score maps)

Score map的设计思路:
如果一个ROI中含有一个类别为C1的物体,我们将该RoI划分为KxK 个区域,其分别表示该物体的各个部位.

比如假设该RoI中含有的目标类别C1是人,K=3,那么就将“人”划分成了9个子区域,如下图所示:
在这里插入图片描述
其中top-center区域毫无疑问应该是人的头部,而bottom-center应该是人的脚部,我们将RoI划分为KxK个子区域是希望这个RoI在其中的每一个子区域都应该含有该类别C1的物体的各个部位,即如果是人,那么RoI的top-center区域就应该含有人的头部。

当所有的子区域都含有各自对应的该物体的相应部位后,那么分类器才会将该RoI判断为该类别。也就是说物体的各个部位和RoI的这些子区域是“一一映射”的对应关系。

OK,现在我们知道了一个RoI必须是KxK个子区域都含有该物体的相应部位,我们才能判断该RoI属于该物体,如果该物体的很多部位都没有出现在相应的子区域中,那么就该RoI判断为背景类别。

##那么现在的问题就是网络如何判断一个RoI的 KxK个子区域都含有相应部位呢?

前面我们是假设知道每个子区域是否含有物体的相应部位,那么我们就能判断该RoI是否属于该物体还是属于背景。那么现在我们的任务就是判断RoI子区域是否含有物体的相应部位。这其实就是position-sensitive score map设计的核心思想了。

R-FCN会在共享卷积层的最后一层网络上接上一个卷积层,而该卷积层就是位置敏感得分图-position-sensitive score map,该score map的含义如下所述:

首先它就是一层卷积层,它的height和width和共享卷积层的一样(即具有同样的感受野),但是它的通道个数为KxKx(C+1) 。其中C表示物体类别种数,再加上1个背景类别,所以共有(C+1)类,而每个类别都有 KxK个score maps。

现在我们只针对其中的一个类别如C1来进行说明

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/222559
推荐阅读
相关标签
  

闽ICP备14008679号