查看原文
其他

【源头活水】ConTNet:在视觉任务中同时使用Transformer和Convolution

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—yht

地址:https://zhuanlan.zhihu.com/p/375129868

本文介绍我们关于应用Transformer在视觉任务上的探索工作 ConTNet (Convlution-Tranformer Network)。
论文地址:https://arxiv.org/pdf/2104.13497.pdf
代码地址:https://github.com/yan-hao-tian/ConTNet。

本文欢迎转载~可私信交流yanhaotian@bupt.edu.cn


01

相关背景
ViT带火了Transformer在CV领域的应用,各大研究机构不发一篇Vision Transformer都不好意思说自己在搞CV。但是相信很多自己复现过各种Vision Transformer的同学都体会过调参的痛苦,明明结构完全复现、各种trick都已经加上了,但是模型就是对不上点,甚至可能完全不收敛。有没有可能既得到Tranformer在vision上的福利,又可以像训练ResNet一样训练模型呢?答案当然是可以的!我们最近提出的ConTNet结合了卷积层和Transformer,可以同时结合两者优点。即使不需要Vision Transformer中常用的各种复杂的aug和花样的训练trick,在对齐ConvNet的训练配置下,ConTNet也可以达到非常可观的性能,如果加上一些数据增强策略,点还可以继续涨,逼进甚至超过现在流行的Vision Transformer工作。实验结果表明,ConTNet在参数量、FLOPs更低的情况下在ImageNet上能超过ResNet和DeiT,在下游的检测分割任务上,用ConTNet做backbone也可以取得比常用的backbone(ResNet)更好的结果。


02

网络介绍
Vision Transformer文章都采用了纯Transformer的结构,一般情况下除了patch embedding外,就不会再使用卷积了,相比于卷积本有的inductive bias(weight sharing & locality),脱离卷积层的Vision Transformer可尽情享受超大数据集带来的收益,但也相当于缺失了一部分的regularization,在Imagenet1k这样的mid-size dataset上增加了过拟合的风险。为了既能利用到Transformer强大的表征能力和对nonlocal interaction的模拟能力,也为了可以避免Transformer的过拟合风险、并有效地开发局部信息,我们以ConvNet的结构为基底,将Transformer in-place嵌入进卷积网络中,形成卷积层和Transformer交替提取特征的新结构(也可以看作是Hierarchical Vision Transformer中添加了卷积层)。为了验证这个思路,我们基础模型结构采用的都是ConvNet中最普遍的设计原则,使用的Tranformer也是“Attention is All You Need”中的原始结构,没有其他的修改。即使这样ConTNet也在图片分类、目标检测和分割上取得了不错的结果。

ConTNet网络结构

首先看一下模型结构,整个结构非常简单,沿用了之前ConvNet的经验,图片进入网络后先过7x7的卷积和MaxPooling进行下采样。整个网络分为4个stage,每个stage包含若干个相同的block。每个block中含有两层Transformer和一层3x3卷积,卷积也会按需对feature-map进行下采样和升高维度。在网络的末尾,全局平均池化和全连接层实现图片的分类。
在利用Transformer上,我们的方式跟现在流行的Hierarchical Vision Transformer的使用方法类似。首先把patch切分成(w/n)*(h/n)个大小为n*n的patch,然后令Transformer在每个patch上进行滑窗,每滑到一个patch的位置上做patch to patch的映射,即最后输出的特征图与输入有相同的空间尺寸和维度。由于切分后的patch和patch之间是non-overlapping的,相比于整个网络都固定patch大小的操作,我们将每一个block中第一个Transformer的patch尺寸设为7,第二个的patch尺寸设为14,目的是为了增大产生内部交互的区域,增强网络对相对更global信息的提取能力。
ConTNet中的Transformer示例
feature-map在1个Block中的流动
为了和不同的网络大小对比,我们调整网络的深度和宽度,设计了4个不同大小的ConTNet。


03

图片分类
在ImageNet上,我们使用了两套训练配置,第一套使用经典的ResNet训练参数,主要使用SGD优化器,在reg和aug上使用0.1的label smoothing和常用的ImageNet augmentation。
从结果可以看出,ConTNet即使使用最简单的训练参数,依然可以很好的收敛,但是在网络更深的情况下会出现过拟合的情况。
第二套参数设置是为了和DeiT对比,我们使用AdamW优化器,但是增加了autoaug和mixup两种ConvNet中比较常用的的强aug(也为了跟ResNet做对比,毕竟强aug也会给其带来很大的增益)。由于DeiT对aug的设置比较敏感,改其中一种可能就无法收敛,我们没有改动其配置借用了原论文的实验结果。
结果说明加了强aug之后可以有效缓解大模型的过拟合问题,同时与DeiT进行比较,可以在参数量和运算量更小的情况下获得不弱甚至更好的表现。


04

下游任务
在物体检测上我们选择了RetinaNet, FCOS和Faster RCNN,使用ConT-M替换Res-50,都取得一定程度的涨点,其中在小物体和大物体上获得了更高的涨点。这也说明ConTNet可以更好的捕捉local和相对更global的信息。
在实例分割上,我们使用了mask RCNN,也获得了不错的效果,涨点也很明显。
最后放一个语义分割任务上cityscapes里的可视化结果,关注黄色框中的内容可以发现ConTNet(第三列)相对于Resnet(第二列)在不少大物体上的分割表现要更好。


05

后记
我们最早跟风ViT的时候是想把它用在视频任务上,但发现实在是太难训练了,就想做一个模型可以简单鲁棒地训练和部署,不至于用一些太多的trick和特定的配置。后来做出了ConTNet,ConTNet使用的都是最常见结构和设计,没有用很复杂的训练trick,其实如果增加一些trick或者使用一些convolution和Transformer的变形结构,应该可以在Imagenet上取得更好的效果。我们也希望给大家提出一个新的思路,网络可以不局限于pure conv或者Transformer或者是最近大火的MLP,有时候把他们结合起来也可以获得更好的效果。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看


分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存