目标检测论文阅读:Deformable Convolutional Networks

https://blog.csdn.net/qq_21949357/article/details/80538255

这篇论文其实读起来还是比较难懂的,主要是细节部分很需要推敲,尤其是deformable的卷积如何实现的一步上,在写这篇博客之前,我也查阅了很多其他人的分享或者去github找代码,当然也不敢说完全了解了这种特殊的卷积……仅仅做一点自己的阅读心得与体会吧。这是一篇很有意义的工作,但是和深度学习很多论文一样,在读完之后内心也不免有着种种疑云。

Deformable Convolutional Networks

论文链接:https://arxiv.org/abs/1703.06211
代码链接:https://github.com/msracver/Deformable-ConvNets(官方实现,但是release的版本是迁移到MXNet上的,速度和performance上有些出入)
MSRA的文章,严格意义上讲,deformable convolutional不仅仅只适用于object detection,作为对常见的卷积的一种改良,它可以广泛应用在各个网络中,和空洞卷积一样,是对传统卷积的改良,而且某种意义上也可以说是空洞卷积的进一步拓展。

1. Background

这篇文章的motivation其实比较简单,我们都知道,常规的卷积,包括池化这些操作,不管你怎么累加,基本得到的都是矩形框……这个其实非常不贴合实际,在对不规则的目标建模的时候有非常大的局限性。
作者认为克服建模形变困难主要是两种方法:

通过提供变化足够丰富的大量训练样本,让训练器强行记忆拟合
设计能够检测到形变的特征和算法,这方面主要还是以hand-crafted的特征为主,这种在对付没有考虑到的形变和过于复杂的形变的时候其实比较无力
CNN其实不具有旋转不变性和尺度不变性的,所以本质上CNN是用的策略1,缺乏判断形变的策略依据。局限性比较多,比如固定的box对于灵活物体来说非常僵硬,比如同一层的特征图的不同位置可能对应的是不同形状的物体,但是都和同一个卷积做计算。(理解这一点比较重要,涉及到后面对deformable卷积的理解)
作为对上述问题的解决方案,作者提出了一种新的卷积方式deformable convolution,在此基础上提出了一种新的RoI pooling方法deformable RoI pooling。主要思路就是卷积操作不是在规规矩矩的3x3的格子里做了,而是有了种种偏移,如下图所示:

至于这个位置偏移是怎么做的?看下个部分
2. Deformable Convolutional Networks

2.1 deformable卷积的计算公式

我们知道,一般的卷积是这种形式的:

留意到p0是中心点,pn是属于R的3x3的kernel的9个位置,因此这是在3x3方格内采样的一个规则卷积,而可形变的卷积就是在x(po+pn)之中再加上一个偏移量:

在实际当中,因为添加的这个偏移量往往是小数,导致比较难处理,作者采用的办法是双线性差值,根据相邻的点来进行计算具体公式如下,留意到这里的a-b如果差值大于1了,g就是0,所以只有比较接近的点才对线性差值的点有效果:

(以上是公式化的内容,关于差值内容如何求导可以到附录里面找)

2.2 偏置求法

重点来了,怎么得到这个偏移量?,可变卷积神经网络的示意图如下图所示:

deformable convolution在特征图的每个位置都生成一个偏移量,注意是特征图的每个位置而不是卷积核的每个位置,我之前也经常误解为后者……实际上这里的特征图经过conv得到一个2N的offset field,N就是通道数,field是和feature map相同的,这样HxWxN的feature map就得到了一个HxWx2N的offset filed,正好每个feature map位置有两个偏移量。
然后将偏移量对应到原来feature map的每个位置,就可以在原来的feature map上做deformable卷积了~还不理解的话可以看这篇博客https://blog.csdn.net/u011974639/article/details/79996353,是对照着代码讲的,很详细,不过这个只是帮助理解原理的,不能直接用,没有重写op,太慢。
还需要注意的一点是,如果input feature map到output feature map用的是空洞卷积之类的特殊结构的话,生成offset field的卷积也要使用相应的结构以保证一致。

2.3 Deformable RoI Pooling

为RoI pooling添加deformable机制其实和卷积的非常类似。因为本身RoI pooling的时候和卷积一样,选取的也是方形区域,我们要做的也是增加偏移量。原来的RoI pooling过程可以表示为如下:

那么新的RoI pooling计算公式则如下:

而它的偏移量的网络结构和计算过程如下图所示:

其中,要注意的有两点:

feature map此处是用fc来学习的,而且也不是直接学习最终偏移量,而是学习头上带三角号的那个变量……
这个变量会和(w, h)做点乘,然后再乘以一个尺度因子,其中w,h是RoI的宽和高,而伽马是一个0.1的常数因子……个人理解,前者是为了让deformable能和RoI的尺度结合起来,更好地估计偏移位置;而后者是为了防止偏移量太大甚至超出RoI和整个图像……之前也看到有人认为,DNN网络最后几层经常会出现感受野不足的情况,所以空洞卷积才会效果比一般卷积好,如果不加约束,deformable的RoI可能无限制地扩大,这个观念我还不是很理解,日后如果有了新发现再更新吧
另外就是作者还搞出了一个和R-FCN的位置敏感比较类似的另一种RoI方法,同样是考虑deformable因素的,叫Position-Sensitive (PS) RoI Pooling,这里就不详细介绍了
2.4 deformable networks

这个部分没什么太多内容要介绍的,因为deformable卷积使用前后feature map是不变化的,因此大致上就是将卷积和Pooling方法直接替换到一些主流方法里就好……一些网络设置就不谈了,说两个我感觉比较重要的点:

学习offset的那些参数怎么初始化和学习:作者采用的是0初始化,然后按照网络其它参数学习率的ββ倍来学习,这个\beata\beata默认是1,但在某些情况下,比如faster rcnn中的fc的那些,是0.01
并不是所有的卷积都一股脑地换成可行变卷积就是好的,在提取到一些语义特征后使用形变卷积效果会更好一点,一般来说是网络靠后的几层
3. 网络理解和实验结果

3.1 对deformable卷积的理解

作者绘制了一些图来方便我们理解deformable卷积,例如常规卷积和可形变卷积的一些对比:

最上面的top feature map的activation units,中间层和最下层是上一层和上上层的卷积,可以看到它们产生的过程。这张图应该会更清晰一点的:

绿色的点是activation units,而红色的点是激活点在3个level的deformable filters采样位置(一共9的三次方700多个点),左中右分别是背景类,小目标和中等目标的采样点分布,和传统的卷积还是产生了很大差异的。
另外也有关于RoI pooling中的9个Bin和gt的图,可以看到和传统的方法的差别,RoI pooling也会根据物体产生形变:

作者认为可形变卷积的优势还是很大的,包括:

对物体的形变和尺度建模的能力比较强
感受野比一般卷积大很多,因为有偏移的原因,实际上相关实验已经表明了DNN网络很多时候受感受野不足的条件制约;但是一般的空洞卷积空洞是固定的,对不同的数据集不同情况可能最适合的空洞大小是不同的,但是可形变卷积的偏移是可以根据具体数据的情况进行学习的
另外值得一提的是,作者发现可形变卷积可以适应物体的尺度,而背景类的尺度一般在medium和large尺寸的物体之间,作者认为这说明large的目标可以更有效帮助我们识别干扰,也算是无心插柳吧。
3. 2 实验结果

这是作者给出的最终结果,class-aware RPN是指分类别的RPN,可以视作一个简易版本的SSD,而对DeepLab的方法笔者也不是很了解。

总的来说,这个工作亮点是很多,包括对卷积的改良,知乎上对这个工作有一些讨论包括评论我觉得还是很不错的:
https://www.zhihu.com/question/57493889/answer/153369805 (包括评论),卷积改变为类似采样的思路都是很有意义的。但是看完之后总感觉也有一些疑问,比如怀疑是否一层网络真的能有效学习偏置,不同图片的大量不同物体在offset优化上会不会引发竞争什么的,不过都属于很难量化和考察的内容了,最后还是要靠实验结果说话,大概是目前炼丹的通病吧,有兴趣的也可以留言讨论下~
---------------------
作者:littleYii
来源:CSDN
原文:https://blog.csdn.net/qq_21949357/article/details/80538255
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/jukan/p/10286674.html

时间: 2024-10-07 22:55:53

目标检测论文阅读:Deformable Convolutional Networks的相关文章

论文: Deformable Convolutional Networks

论文: Deformable Convolutional Networks CNN因为其内部的固定的网络结构,对模型几何变换的识别非常有限. 本paper给出了两个模块deformable convolution 和 deformable ROI-Pooling来提高CNN的模型变换能力. 过去的办法解决几何变换的方法,一,使用data Augmentation来增大不同几何形状的object,二,使用sift 或者 sliding windows这样的方法来解决. 本paper主要针对三个mo

Deformable Convolutional Networks

1 空洞卷积 1.1 理解空洞卷积 在图像分割领域,图像输入到CNN(典型的网络比如FCN)中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测,之前的pooling操作使得每个pixel预测都能看到较大感受野信息.因此图像分割FCN中有两个关键,一个是pooling减小图像尺寸增大感受野,另一个是upsampling扩大图像尺

[论文理解]Region-Based Convolutional Networks for Accurate Object Detection and Segmentation

Region-Based Convolutional Networks for Accurate Object Detection and Segmentation 概括 这是一篇2016年的目标检测的文章,也是一篇比较经典的目标检测的文章.作者介绍到,现在表现最好的方法非常的复杂,而本文的方法,简单又容易理解,并且不需要大量的训练集. 文章的大致脉络如图. 产生region proposal 文章提到了滑窗的方法,由于滑窗的方法缺点非常明显,就是每次只能检测一个aspect ratio,所以确

目标检测论文(尤其针对一些小目标的可能改进方法)

------------------------------------------------------------------------About Face detection------------------------------------------------------------------------1.Finding Tiny Faces    Code:https://github.com/peiyunh/tiny    小目标检测难3大原因:目标本身尺度变化.图像

目标检测论文解读5——YOLO v1

背景 之前热门的目标检测方法都是two stage的,即分为region proposal和classification两个阶段,本文是对one stage方法的初次探索. 方法 首先看一下模型的网络结构,输入的原图片,经过24个卷积层提取特征,全连接层输出一个7*7*30的tensor,这个tensor里面就包含我们预测的结果了. 那么这个7*7*30的tensor包含哪些信息呢? 首先,7*7可以映射到448*448的原图片中,得到7*7个64*64的grid cell,对于原图中的每一个目

目标检测框架阅读步骤

总结一下最近一年来阅读目标检测框架的一些经验,主要是基于facebook的maskrcnn_benchmark和Detectron2. 组件 目标检测的框架需要包含: 组件 功能 config 所有参数设置 structures 数据容器,image, box, label, mask, keypoint data 数据整理,dataset, dataloader, transform modeling 网络模型,meta_arch, backbone, proposals_generator,

[论文理解] Making Convolutional Networks Shift-Invariant Again

Making Convolutional Networks Shift-Invariant Again Intro 本文提出解决CNN平移不变性丧失的方法,之前说了CNN中的downsample过程由于不满足采样定理,所以没法确保平移不变性.信号处理里面解决这样的问题是利用增大采样频率或者用抗混叠方法,前者在图像处理里面设置stride 1就可实现,但stride 1已经是极限,本文着重于后者,使用抗混叠使得CNN重新具有平移不变性. 混叠是在采样频率不满足采样定理时出现的一种现象,抗混叠通过抗

目标检测论文解读2——Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

背景 用ConvNet方法解决图像分类.检测问题成为热潮,但这些方法都需要先把图片resize到固定的w*h,再丢进网络里,图片经过resize可能会丢失一些信息.论文作者发明了SPP pooling(空间金字塔池化)层,让网络可以接受任意size的输入. 方法 首先思考一个问题,为什么ConvNet需要一个固定size的图片作为输入,我们知道,Conv层只需要channel固定(彩色图片3,灰度图1),但可以接受任意w*h的输入,当然输出的w*h也会跟着变化:然而,后面的FC层却需要固定长度的

论文讨论&&思考《Deformable Convolutional Networks》

这篇论文真是让我又爱又恨,可以说是我看过的最认真也是最多次的几篇paper之一了,首先deformable conv的思想我觉得非常好,通过end-to-end的思想来做这件事也是极其的make sense的,但是一直觉得哪里有问题,之前说不上来,最近想通了几点,先初步说几句,等把他们的代码跑通并且实验好自己的几个想法后可以再来聊一聊.首先我是做semantic segmentation的,所以只想说说关于这方面的问题. 直接看这篇paper的话可能会觉得ji feng的这篇工作非常棒,但实际上