时不我与

V1

2022/02/27阅读:26主题:橙心

1.13

日期: 1.13 - 1.15

RepVGG

原文:RepVGG: Making VGG-style ConvNets Great Again(arXiv:2101.03697)

论文链接: https://arxiv.org/abs/2101.03697

pytorch official code: https://github.com/megvii-model/RepVGG

写在前面

文章还未正式发表出来(已经发在cvpr2021了),暂时是挂在了arxiv上。感觉很有意思,读这篇文章之前看了一眼作者在ICCV2019上的ACNet(Acnet: Strengthening the kernel skeletons for powerful cnn via asymmetric convolution blocks)

感觉两篇文章的核心应该是异曲同工之妙。

从我读文章的感觉,核心点简单来看就叫 训练和推理(测试)不是一个网络

该文章的作者在知乎上也写了自己的笔记:https://zhuanlan.zhihu.com/p/344324470

文章的细节内容大家可以看作者笔记和原文,这里就记录一点自己的感受。

让vgg再次伟大?

对于一个新入门cv的新人,对vgg的感觉就是一个很老的老古董,不怎么想去看的东西。文章的标题就比较吸引我。

自vgg之后,网络加深,网络加宽,网络加注意力,NAS。各种技术层出不穷。我们不怎么关注vgg,可能还是因为vgg效果对比后来者实在太差了。差归差,但是他有自己的有优势。

所说的“VGG式”指的是:

  1. 没有任何分支结构。即通常所说的plain或feed-forward架构。
  2. 仅使用3x3卷积。
  3. 仅使用ReLU作为激活函数。

也就是说这个“VGG式”,相比我们现在所看到的网络而言非常非常的简单。除此之外,他还快(具体可见论文)。

vgg虽然快,但是差怎么办?

vgg虽然快,但是效果并不好,他甚至连个分支结构都没有。于是作者就说,既然分支结构有利于训练,那我训练就用分支结构呗。既然vgg式快,那我推理(测试)的时候就用vgg呗。那么问题来了,训练的网络和推理的网络不一样?那怎么搞?

作者说等价转换,这就是文章与其他的文章的不同了。

对于一般的方法来讲是这样的:

对于作者的想法是:

于是就可以同时利用了:1.训练时模型的优点(可以达到更好的收敛结果和效果)2.推理时的高速,省内存。

那么刚才的问题又来了,也是最重要的问题~训练的网络和推理的网络不一样?这怎么等价转换呢?

其实思路也蛮简单的。可以看下图:

作者很贴心,这个图搞了两列。左边这列表示的是这个网络结构的变化的过程。右边这列表示的是卷积核参数的变化过程(当输入和输出的通道都是2)。

从左上角中可以看出作者设计的训练块,是一个多分支的并列了3x3,1x1,skip三条线的block。我们现在的目的是,要把它训练完后的参数集中到一个3x3的卷积核当中。怎么集中呢?其实想法看起来还是蛮简单的。

1x1卷积可以看成是一个特殊(卷积核中有很多0)的3x3卷积,而恒等映射是一个特殊(以单位矩阵为卷积核)的1x1卷积。于是就有了三个3x3的卷积核,把他们相加一下,那么效果就和原模型一毛一样啦。

总结一下

其实作者那篇ACNet就展露出这种训练网络通过一定的方式转换成快速的推理网络的思想。而这篇文章,应该是专门为这种叫“VGG式”而设计的网络。

还有就是乍一看可能会觉得我直接训练vgg不就好了,为什么搞来搞去还是那个模型结构,却比我原来训练的结果要好呢? 感觉吧,神经网络就是一个巨大的黑箱子,很多情况下训练可能只会陷入局部最优却找不到更优的结果。这就是个优化问题。理论上,足够大的网络可能可以找到一个很精准的拟合结果,但是就是我们优化的过程中找不到它,我们只能想办法找到尽可能离得近的结果了。

不知道是不是我孤陋寡闻了,不知道接下来会不会有一些系列的相关工作会出现。会不会能有人去解决relu的合并?如何去将这种想法运用在一些任务的特定模块当中呢?魔改出更好的结果?......

本文可能有许多不当之处,如有不对之处还望批评指正。

参考

1.Ding, Xiaohan, Xiangyu Zhang, Ningning Ma, Jungong Han, Guiguang Ding, and Jian Sun. "RepVGG: Making VGG-style ConvNets Great Again." arXiv preprint arXiv:2101.03697.

2.Ding, Xiaohan, Yuchen Guo, Guiguang Ding, and Jungong Han. "Acnet: Strengthening the kernel skeletons for powerful cnn via asymmetric convolution blocks." In Proceedings of the IEEE International Conference on Computer Vision, pp. 1911-1920. 2019.

3.https://zhuanlan.zhihu.com/p/344324470

4.https://github.com/megvii-model/RepVGG

分类:

后端

标签:

后端

作者介绍

时不我与
V1