Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition论文阅读翻译

Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition论文阅读翻译

论文下载地址:点击此链接跳转.
这是博主自己在github整理的目标检测方向论文的合集,应该算比较全,目前2020ECCV持续更新中,欢迎下载…

一、Abstract

       本文提出了金字塔卷积(PyConv),能够在多个尺度上处理输入。PyConv包含一个金字塔卷积核,其中每层都包含不同类型(大小深度可变)的滤波器,能够捕捉场景中不同层级的细节。除了识别能力有所改进,PyConv也十分高效,相比标准卷积,它不会增加计算成本和参数。此外PyConv极其灵活且可扩展,提升了不同方向的网络架构空间。PyConv可以应用于几乎所有的计算机视觉任务中,本文作者主要针对视觉识别的四个任务提出了基于PyConv的不同架构:图像分类、视频动作分类/识别、目标检测和语义图像分割/解析。与baseline相比,作者的方法有显著改进。如在图像识别方面,作者提出的50层的网络的识别性能优于152层的ResNet,同时参数量减少2.39倍,计算复杂度降低2.52倍,层数减少3倍多。

二、Introduction

       当前几乎所有视觉识别任务的最新架构都是基于CNN的。CNN的核心就是卷积,对空间卷积核/滤波器进行学习。大多数CNN使用的是相对较小的3*3的卷积核,这是由于增大卷积核尺寸会带来参数量和计算复杂度的显著增加。为解决较小的卷积核无法覆盖较大输入区域的问题,CNNs用一连串卷积核较小的卷积以及下采样层来逐渐减小输入大小以及增大网络的感受野。但是这会有两个问题,首先,对于当前的CNN来说,尽管理论上感受野是能够覆盖较大的甚至整个输入图像区域,但实际上感受野可能会小很多,在网络的较高层甚至会小2.7倍左右。第二点是在对输入下采样前如果没有获取足够的上下文信息(尤其是复杂场景),可能会影响网络的学习和性能。
       自然图像中可能会包含极复杂的场景。下图显示了两个例子(户外和室内),右边是场景中每个像素的语义标签,想要去解析这些图像并提供每个像素的语义类别是非常有挑战性的。在这些例子中,同一个场景中类别很多、存在部分遮挡和尺度不同的目标。
在这里插入图片描述
       从上图可以看到,部分类别在图像中的空间表示很大(如建筑、树或沙发),而其他类别在图像中的表示可能很小(如人物、书或瓶子)。此外同一目标类别可以在同一图像的不同尺度中出现。比如上图中汽车的尺度从图中最大的物体之一变化到只覆盖场景非常小的一部分。为了能够捕获多类别及尺度变化,使用单一类型及空间大小的卷积核可能不是对这种复杂问题的最优解。计算机视觉的目标之一就是能在多个尺度上处理输入以捕获关于场景上下文的详细信息。经典例子之一是SIFT,主要是用来提取不同尺度的描述符。在深度学习中,标准卷积并不具备隐式地处理多个尺度输入的能力,它只包含单一类型及单一空间大小和深度的卷积核。

contributions:

       (1) 提出了金字塔卷积(PyConv),它包含不同大小和深度的卷积核。除了扩大感受野,PyConv还可以通过并行的大小不断增加的卷积核来处理输入来捕获不同层级的细节信息。并且PyConv非常高效,它可以保持与标准卷积相似的参数量和计算消耗,灵活可扩展。
       (2) 提出了两种用于图像分类任务的网络架构,性能明显优于baseline,具有更少的参数量和计算成本。
       (3) 提出了一种新的语义分割框架。作者提出的head可以从backbone提取的特征中捕获从局部到全局的不同层级的上下文信息,场景解析性能达到SOTA。
       (4) 提出了用于目标检测和视频分类任务的基于PyConv的网络架构,在识别性能上比baseline有明显提升。

三、Pyramidal Convolution

在这里插入图片描述
       标准卷积如上图a所示,只有单一类型的卷积核且空间大小为K12,深度等于输入特征图通道数FMi。在输入特征图上应用FMo个有相同的空间分辨率和深度卷积核,得到FMo深度的输出特征图(高H宽W)。因此标准卷积所需的参数和FLOPs(浮点运算)为:
在这里插入图片描述
在这里插入图片描述
       作者提出的金字塔卷积(PyConv)如上图(b)所示,由n个不同类型的卷积核组成金字塔。提出PyConv的目标是在不增加计算成本或模型复杂度(参数量)的情况下在不同的卷积核尺度上处理输入。在PyConv的每个层级上卷积核的空间大小不同,自底向上逐级增加卷积核大小,同时随着卷积核大小的增加减小卷积核的深度。
       为了在PyConv的每个层级上使用不同深度的卷积核,输入特征图被分成不同的组独立地进行卷积运算,也就是分组卷积,下图是组卷积的例子:
在这里插入图片描述
       在这些例子中有8个输入和输出特征图。(a)是输入一组特征图也就是标准卷积,其中卷积核的深度等于输入特征图通道数。在这种情况下每个输出特征图会与所有输入特征图相连接。(b)显示了输入特征图分成两组的情况,在每组上分别应用卷积核,因此卷积核的深度减少了2倍。即组数增加时,连通性(即卷积核深度)减小,参数量和卷积的计算成本减小了等于组数的倍数。
       如图2b所示,对于输入特征图FMi,PyConv的每一层采用的是不同空间大小{K12,K22,K32,…,Kn2}的卷积核,并且卷积核深度也不同,为:
在这里插入图片描述
       这样会输出一组不同通道数{FMo1, FMo2, FMo3, … , FMon},宽高相同(H*W)的特征图。因此PyConv的参数量和计算成本(以FLOPs为单位)为:
在这里插入图片描述
       FMo1 + FMo2 + FMo3 + … + FMon = FMo。这些方程的每一行表示PyConv中每一层级的参数量和计算成本。如果PyConv的每一层输出特征图的通道数相等,那么每一层的参数量和计算量就会均匀分布。并且从这个公式可以看出,无论PyConv的层数以及卷积核的空间大小是多少,其参数量和计算成本和卷积核大小为K12的标准卷积是相近的。上式中FMi的分母表示了输入特征图FMi所分组数(G)。
       在构建PyConv时还设定了一些附加规则。首先是上式中金字塔每层FMi的分母应该是FMi的除数。也就是金字塔各层中各组特征图的通道数应该是相等的。因此当为金字塔每层选择组数(从而确定卷积核深度)时,从FMi可能的除数列表中取离FMi分母最近的数。此外每一层的组数也应当是每一层输出特征图通道数的除数。为了能够使用PyConv来构建不同的网络架构,作者将PyConv每一层的输入特征图通道数、金字塔每一层的组数以及输出特征图的通道数都设为2的幂次。

       该方法的主要优点:
       (1)多尺度处理。与标准卷积相比,PyConv不仅可以在不增加额外计算成本的情况下扩大卷积核的感受野,还能够并行多个空间分辨率和深度不同的卷积核。也就是在多个尺度上处理输入,获取更详细的信息。这个双向金字塔的卷积核类型(卷积核尺寸增加时卷积核深度减小)提供了一个非常多样化的卷积核组合池,网络可在学习时进行探索。这些不同类型的PyConv卷积核得到的信息互补,有助于提高网络的识别性能。感受野较小的卷积核专注于细节,捕获关于较小目标和部分目标的信息,而大卷积核可以提供更多关于较大目标和上下文信息的可靠细节。
       (2)效率。与标准卷积相比,PyConv消耗的计算资源相近。此外PyConv具有高度的并行性,金字塔各层可以独立地并行计算。
       (3)灵活性。用户可以灵活选择金字塔的层数、PyConv每个层级的卷积核大小和深度,且不会增加参数量或计算成本。此外每个级别输出特征图的通道数可能不同。例如对于某些特定任务,可能感受野较小的卷积核输出特征图通道数少一些,感受野较大的卷积核输出特征图通道数多一些可能会更有用。此外网络中PyConv的设置可以不同,网络的每一层都可以使用不同的PyConv设置。这样就可以使用PyConv来构建用于不同视觉识别任务的架构。

四、PyConv Networks for Image Classification

       对于图像分类,作者使用的残差块结构。下图是一个例子,首先用一个1×1卷积降维至64,然后使用有4个大小的卷积核的PyConv。此外各层卷积核的深度都是不同的,从分为16组到全连接。每层会输出16通道的特征图,总和就是PyConv64通道的输出特征图。然后采用1×1卷积将特征图升至原本的通道数。并且BN和ReLU都正常使用,还有一个残差连接。
在这里插入图片描述
       作者提出的分类网络PyConvResNet大体结构如下表所示,有和ResNet-50作比较。根据特征图大小可将网络分为四个主要阶段。PyConvResNet是从一个4层的PyConv开始,随着每一阶段特征图的减小,作者也减小了每一层级PyConv的层数。在最后一个阶段,PyConv是标准卷积,因为此时特征图大小只有7×7,连续的三个3×3的卷积能够很好地覆盖特征图,并且PyConvResNet也略降低了FLOPs。
在这里插入图片描述
       PyConv具有很强的灵活性,表1还有另一个基于PyConv的结构PyConvHGResNet,它在PyConv每一层使用更多的分组。对于这个架构,作者设置PyConv中最少32个组,最多64个组。用于空间卷积的特征图数量增加了一倍,能够更好地学习空间滤波器,不过FLOPs会略微增加一些。
       由于作者提出的网络中是使用不同大小的卷积核来对特征图下采样。因为下采样会减小空间分辨率,从而导致细节流失,但是使用不同大小的卷积核来并行地下采样可以考虑到不同级别的空间上下文依赖。由表1可以看到,ResNet是在网络第一阶段前用了一个最大池化层对特征图下采样。和ResNet不同,作者将最大池化移至第一个块的残差连接上,同时通过多尺度的卷积核对输入下采样,并且四个阶段都是在第一个块中下采样。
       这种变化不会增加网络参数量,也不会显著影响计算成本(从表1可以看出第一个块中使用了步长为2的空间卷积),为网络带来了识别性能上的优势。将最大池化移到shortcut上,这样能够在第一阶段的第一块上使用更大的特征图,同时使用多尺度的卷积核对输入下采样。与此同时,受益于最大池化的平移不变性,识别性能有所提升

五、PyConv on object detection

       由于作者提出的PyConv并行使用了不同大小的卷积核,因此它能够在目标检测上表现优异,因为目标可能会以不同的尺度出现在图像中。在目标检测方向,作者将PyConv集成在SSD中。SSD是一个有效的单阶段目标检测器,它在多个分辨率的特征图上进行检测。作者提出的PyConvSSD如图8所示。该框架包括两个主要部分:
在这里插入图片描述
       (1) PyConvResNet Backbone.
       作者以在ImageNet数据集上预训练的PyConvResNet作为主干,为保持高效,也为了得到与SSD中使用的backbone数量相近的输出特征图,作者移除了PyConvResNet backbone第三阶段后所有的层,还将backbone第三阶段的所有步长都设为1。这样PyConvResNet最终提供1024维,大小38×38的输出特征图(stage3的输出,输入图像的大小300×300)。
       (2) PyConvSSD Head.
       上图所示的PyConvSSD head使用PyConv通过并行的不同大小的卷积核来进一步提取不同的特征。在backbone第三阶段最终的特征图上,作者用了四个级别的PyConv(卷积核大小:9×9,7×7, 5×5, 3×3)。PyConv通过并行地使用这些卷积核来下采样(步长s=2)。随着特征图分辨率的降低,也降低使用PyConv的层级。由于最后特征图的空间分辨率很小,最后的两个PyConv只有一个级别(标准3×3),步长s=1,由于不使用padding,空间分辨率会降低。因此PyConvSSD head会将特征图的空间分辨率从38×38降低到1×1。所有head的PyConvs的输出会被用于检测。
       对六个输出特征图{S3FM, HFM1, HFM2, HFM3, HFM4, HFM5}分别进行检测,该框架使用与之对应的每个空间位置的默认框数量来进行检测(anchor){4, 6, 6, 6, 4, 4}。例如对于空间分辨率为38×38的输出特征图(S3FM),在每个位置上使用四个默认框会有5776次检测。
       在定位每个边界框时,网络需要预测四个值(loc:△(cx, cy, w, h),其中cx和cy表示边界框的中心点,w和h表示边界框的宽高)。边界框的偏移值是相对于默认框的位置来评估的。对于每个边界框网络HIA应该输出每个类的类别置信值(共C类)。为了得到检测结果,作者使用了一个3×3卷积来作为分类器,输出每个边界框所有类的类别置信值C。对于定位,也使用3*3卷积对每个边界框输出4个定位值。该框架一共输出8732个检测结果(对于300×300的输入图像),然后通过NMS得到最终检测结果。
在这里插入图片描述

六、个人总结

文章思路还是很清晰的,金字塔卷积其实就是将标准卷积中的卷积核变成了多层且每层不同尺度不同深度的卷积核,每一层卷积内使用分组卷积来降低计算量,这样来保证和标准卷积的计算量及FLOPs相当,但实际使用时好像还是会慢一些。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值