大数跨境
0
0

用13层拿下83.1%的性能!华为诺亚提出全新骨干架构VanillaNet:开辟基础模型新思路

用13层拿下83.1%的性能!华为诺亚提出全新骨干架构VanillaNet:开辟基础模型新思路 极市平台
2023-05-24
1
↑ 点击蓝字 关注极市平台

作者丨happy
编辑丨极市平台

极市导读

 

简到极致、浅到极致!深度为6的网络即可取得76.36%@ImageNet的精度,深度为13的VanillaNet甚至取得了83.1%的惊人性能。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

论文地址:https://arxiv.org/abs/2305.12972

代码地址:https://github.com/huawei-noah/VanillaNet

简而浅的直桶状网络具有非常优秀的推理效率,但其训练难度较高,难以取得优异性能。自AlexNet与VGG之后,鲜少有这种"直桶"状且性能优异的网络出现,其中的代表当属RepVGG与ParNet。

就在这样的环境下,简到极致、浅到极致的网络VanillaNet诞生了!!!深度为6的网络即可取得76.36%@ImageNet的精度,深度为13的VanillaNet甚至取得了83.1%的惊人性能。

网络架构

上图给出了本文所提VanillaNet架构示意图,有没有觉得简到极致了。

  • 对于Stem部分,采用 卷积进行特征变换;
  • 对于body部分的每个stage,首先采用MaxPool进行特征下采样,然后采用一个 进行特征处理;
  • 对于head部分,采用两个非线性层进行分类处理。

值得注意的是,(1) 每个stage只有一个 卷积;(2)VanillaNet没有跳过连接。

尽管VanillaNet非常简单且足够浅,但其弱非线性能力会限制其性能。为此,作者从训练策略与激活函数两个维度来解决该问题。

训练策略

在训练阶段,通过引入更强的容量来提升模型性能是很常见的。由于更深的网络具有比浅层网络更强的非线性表达能力,作者提出在训练阶段采用深度训练技术为VanillaNet带来更强的性能

深度训练策略

对于激活函数 ,我们将其与Identity进行组合,公式如下:

其中, 是用于平衡非线性能力的超参数。假设当前epoch与总训练Epoch分别表示为 ,那么定义 。因此,在训练初始阶段,该修正版激活函数等价于原始激活函数,即 ,此时网络具有较强的非线性表达能力;伴随训练收敛,修正版激活函数退化为Identity,即 ,这就意味着两个卷积之间就不再有激活函数。

接下来,我们在说明一下如何合并两个卷积层(在DBB一文中已有了非常详细的公式介绍,而且对各种可折叠操作进行了非常详细的介绍)。

我们先来介绍BN与前接卷积之间的合并方式。假设表示卷积的参数,BN层的参数分别表示为 ,合并后的参数表示如下:

在完成卷积与BN合并后,我们介绍如何合并两个 卷积。令分别表示输入与输出特征,卷积可表示如下:

基于上述卷积表示,我们可以将两个连续卷积表示如下:

因此,两个连续 卷积可以进行合并且不会造成推理速度提升。

SIAF(Series Informed Activation Function)

尽管已有诸多非线性激活函数,如ReLU、PReLU、GeLU、Swish等,但这些它们主要聚焦于为深而复杂的网络带来性能提升。已有研究表明:简而浅网络的有限能力主要源于其弱非线性表达能力

事实上,有两种方式可用于改善神经网络的非线性表达能力:堆叠非线性激活层、提升激活函数的非线性表达能力。现有方案往往采用了前者,前者往往会导致更高的推理延迟;而本文则聚焦于后者,即改善激活函数的非线性表达能力。

改善激活函数非线性能力能力的最直接的一种方式为stacking,序列堆叠也是深层网络的核心。不同与此,作者提出了共生(concurrently)堆叠方式,可表示如下:

其中,n表示堆叠激活函数的数量, 表示每个激活的scale与bias参数以避免简单的累加。通过该处理,激活函数的非线性表达能力得到了大幅提升。

为进一步丰富表达能力,参考BNET,作者为其引入了全局信息学习能力,此时激活函数表示如下:

可以看到,当 时, 。也就是说,所提激活函数是现有激活函数的一种广义扩展。因其推理高效性,作者采用ReLU作为基激活函数。

以卷积作为参考,作者进一步分析了所提激活函数的计算复杂度。卷积的计算复杂度可表示如下:

所提激活函数的计算复杂度表示为:

进而可以得出两者之间的计算复杂度比例关系如下:

以VanillaNet-B第4阶段为例, ,该比例约为84,也就是说,所提激活函数的计算复杂度远小于卷积。

class activation(nn.ReLU):
    def __init__(self, dim, act_num=3, deploy=False):
        super(activation, self).__init__()
        self.deploy = deploy
        self.weight = torch.nn.Parameter(torch.randn(dim, 1, act_num*2 + 1, act_num*2 + 1))
        self.bias = None
        self.bn = nn.BatchNorm2d(dim, eps=1e-6)
        self.dim = dim
        self.act_num = act_num
        weight_init.trunc_normal_(self.weight, std=.02)

    def forward(self, x):
        if self.deploy:
            return torch.nn.functional.conv2d(
                super(activation, self).forward(x), 
                self.weight, self.bias, padding=(self.act_num*2 + 1)//2, groups=self.dim)
        else:
            return self.bn(torch.nn.functional.conv2d(
                super(activation, self).forward(x),
                self.weight, padding=(self.act_num*2 + 1)//2, groups=self.dim))

    def _fuse_bn_tensor(self, weight, bn):
        kernel = weight
        running_mean = bn.running_mean
        running_var = bn.running_var
        gamma = bn.weight
        beta = bn.bias
        eps = bn.eps
        std = (running_var + eps).sqrt()
        t = (gamma / std).reshape(-1111)
        return kernel * t, beta + (0 - running_mean) * gamma / std
    
    def switch_to_deploy(self):
        kernel, bias = self._fuse_bn_tensor(self.weight, self.bn)
        self.weight.data = kernel
        self.bias = torch.nn.Parameter(torch.zeros(self.dim))
        self.bias.data = bias
        self.__delattr__('bn')
        self.deploy = True

本文实验

在过去几年里,研究人员往往假设计算资源非常有限,依托ARM/CPU平台,聚焦于减少网络的FLOPs与推理延迟。但是,伴随着AI芯片的研发进展,像自动驾驶等设备往往携带多个GPU以期获取实时反馈。因此,本文的延迟基于bs=1进行测试,而非常规的吞吐量。基于此配置,作者发现:模型的推理速度与FLOPs、Params的相关性极低。

  • 以MobileNetV3-Large为例,尽管其具有非常低的FLOPs,但其GPU延迟为7.83,远高于VanillaNet13。这种配置的推理速度与复杂度和层数强相关;
  • 对比ShuffleNetV2x1.5与ShuffleNetV2x2,尽管其参数量与FLOPs差别很大,但推理速度基本相同(7.23 vs 7.84);
  • 对比ResNet,VGGNet与VanillaNet可以看到:无额外分支与复杂模块的的VGGNet、VanillaNet具有更高的推理速度。

基于上述分析,作者提出了VanillaNet这样简到极致,无任何额外分支,层数更少的架构。如上表所示,

  • VanillaNet9取得了79.87%的精度,推理速度进而2.91ms,比ResNet50、ConvNeXtV2-P快50%;
  • 当扩展至VanillaNet13-1.5x后,甚至取得了83.11%的指标。

这是不是意味着在ImageNet分类任务上,我们并不需要深而复杂的网络呢???

上图给出了不同架构深度与推理速度之间的关系图,可以看到:

  • 当bs=1时,推理速度与网络的深度强相关,而非参数量。这意味着:简而浅的网络具有巨大的实时处理潜力。
  • 在所有网络中,VanillaNet取得了最佳的速度-精度均衡。这进一步验证了:在计算资源充分时所提VanillaNet的优异性。

按照国际惯例,最后附上COCO检测任务上的对比,见上表。可以看到:所提VanillaNet取得了与ConvNeXt、Swin相当的性能。尽管VanillaNet的FLOPs与参数量更多,但其推理速度明显更快,进一步验证了VanillaNet在下游任务的有效性。

最后附上不同大小模型的配置信息,参考如下。

全文到此结束,更多消融实验建议查看原文。

公众号后台回复“对比学习综述”获取最新对比学习PDF资源
极市干货
极视角动态极视角亮相BEYOND Expo,澳门特别行政区经济财政司司长李伟农一行莅临交流极视角助力构建城市大脑中枢,芜湖市湾沚区智慧城市运行管理中心上线!
数据集:60+开源数据集资源大合集(医学图像、卫星图像、语义分割、自动驾驶、图像分类等)
多模态学习CLIP:大规模语言-图像对比预训练实现不俗 Zero-Shot 性能ALBEF:图文对齐后再融合,借助动量蒸馏高效学习多模态表征

极市平台签约作者#

happy

知乎:AIWalker

AIWalker运营、CV技术深度Follower、爱造各种轮子

研究领域:专注low-level,对CNN、Transformer、MLP等前沿网络架构

保持学习心态,倾心于AI技术产品化。

公众号:AIWalker


作品精选



投稿方式:
添加小编微信Fengcall(微信号:fengcall19),备注:姓名-投稿
△长按添加极市平台小编



觉得有用麻烦给个在看啦~  

【声明】内容源于网络
0
0
极市平台
为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
内容 8155
粉丝 0
极市平台 为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
总阅读5.7k
粉丝0
内容8.2k