Conv2Former
创始人
2024-03-14 13:13:17
0

又发现了一个说比Transformer好的,通过充分利用卷积探索一种更高效的编码空域特征的方式:通过组合ConvNet与ViT的设计理念,本文利用卷积调制操作对自注意力进行了简化,进而构建了一种新的ConvNet架构Conv2Former超简Transformer风格ConvNet,比ConvNeXt还秀,媲美VAN

通过充分利用卷积探索一种更高效的编码空域特征的方式:通过组合ConvNet与ViT的设计理念,本文利用卷积调制操作对自注意力进行了简化,进而构建了一种新的ConvNet架构Conv2Former。ImageNet分类、COCO检测以及ADE20K分割任务上的实验结果表明:所提Conv2Former取得了优于主流ConvNet(如ConvNeXt)、ViT(如Swin Transformer)的性能。


 核心模块

上图给出了经典模块的架构示意图,从经典的残差模块到自注意力模块,再到新一代卷积模块。自注意力模块可以表示为如下形式:  ​

​​​​​​

class ConvMod(nn.Module):  def __init__(self, dim):  super().__init__()  self.norm = LayerNorm(dim, eps=1e-6, data_format='channel_first')  self.a = nn.Sequential(  nn.Conv2d(dim, dim, 1),  nn.GELU(),  nn.Conv2d(dim, dim, 11, padding=5, groups=dim)  )  self.v = nn.Conv2d(dim, dim, 1)  self.proj = nn.Conv2d(dim, dim, 1)  def forward(self, x):  B, C, H, W = x.shape  x = self.norm(x)  a = self.a(x)  v = self.v(x)  x = a * v  x = self.proj(x)  return x  

微观设计理念 

​​ Normalization and Activations 对于规范化层,作者参考ViT与ConvNeXt采用了Layer Normalization,而非卷积网络中常用的Batch Normalization;对于激活层,作者采用了GELU(作者发现,LN+GELU组合可以带来0.1%-0.2%的性能提升)。 

本文实验

​​​​​​​上述两表给出了ImageNet分类任务上不同方案的性能对比,从中可以看到:

  • 在tiny-size(<30M)方面,相比ConvNeXt-T与SwinT-T,Conv2Former-T分别取得了1.1%与1.7%的性能提升。值得称道的是,Conv2Former-N仅需15M参数量+2.2GFLOPs取得了与SwinT-T(28M参数量+4.5GFLOPs)相当的性能。

  • 在base-size方面,相比ConvNeXt-B与SwinT-B,Conv2Former-B仍取得了0.6%与0.9%的性能提升

  • 相比其他主流模型,在相近大小下,所提Conv2Former同样表现更优。值得一提的是,相比EfficientNet-B7,Conv2Former-B精度稍有(84.4% vs 84.3%),但计算量大幅减少(15G vs 37G)。

  • 当采用ImageNet-22K预训练后,Conv2Former的性能可以进一步提升,同时仍比其他方案更优。Conv2Former-L甚至取得了87.7% 的优异指标

 

 

上表给出了COCO检测任务上不同方案的性能对比,从中可以看到:

  • 在tiny-size方面,相比SwinT-T与ConvNeXt-T,Conv2Former-T取得了2% 的检测指标提升,实例分割指标提升同样超过1%;

  • 当采用Cascade Mask R-CNN框架时,Conv2Former仍具有超1%的性能提升。

  • 当进一步增大模型时,性能优势则变得更为明显; 

 

上表给出了ADE20K分割任务上的性能对比,从中可以看到:

  • 在不同尺度模型下,Conv2Former均具有比SwinT与ConvNeXt更优的性能;

  • 相比ConvNeXt,在tiny尺寸方面性能提升1.3%mIoU,在base尺寸方面性能提升1.1%;

  • 当进一步提升模型尺寸,Conv2Former-L取得了54.3%mIoU,明显优于Swin-L与ConvNeXt-L。

一点疑惑解析

到这里,关于Conv2Former的介绍也就结束了。但是,心里仍有一点疑惑存在:Conv2Former与VAN的区别到底是什么呢?。 

结合作者开源代码,笔者绘制了上图,左图为Conv2Former核心模块,右图为VAN核心模块。两者差别还是比较明显的!

  • 虽然大核卷积注意力均是其核心,但Conv2Former延续了自注意力的设计范式,大核卷积注意力是其核心;而VAN则是采用传统Bottleneck设计范式大核卷积注意力的作用类似于SE

  • 从大核卷积内在机理来看,Conv2Former仅考虑了的空域建模,而VAN则同时考虑了空域与通道两个维度

  • 在规范化层方面,Conv2Former采用了Transformer一贯的LayerNorm,而VAN则采用了CNN一贯的BatchNorm;

  • 值得一提的是:两者在大核卷积注意力方面均未使用Sigmoid激活函数。两者均发现:使用Sigmoid激活会导致0.2%左右的性能下降。

 

 为更好对比Conv2Former与VAN的性能,特汇总上表(注:GFLOPs列仅汇总了)在Image输入时的计算量Net-1K上的指标进行了对比,可以看到:在同等参数量前提下,两者基本相当,差别仅在0.1%。此外,考虑到作者所提到的“LN+GELU的组合可以带来0.1%-0.2%的性能提升”,两者就算是打成平手了吧,哈哈。       whaosoft aiot http://143ai.com

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...