论文地址:https://arxiv.org/abs/2101.03697
- Contributions
在GPU上,3x3卷积的计算密度(理论运算量除以所用时间)可达1x1和5x5卷积的四倍。在训练时,使用一个类似ResNet-style的多分支模型,而推理时转化成VGG-style的单路模型。利用了多分支模型训练时的优势(性能高)和单路模型推理时的好处(速度快、省内存)。 - Architecture
仅使用3 × 3 conv和ReLU,通过结构重参数化技术,将训练时多分支转换为推理时单一路径
re-parameterization
RepVGG在训练时每一层都有三个分支,分别是identify,1x1,3x3
1x1卷积层:用0填充为3x3卷积
identify:构建了一个做了恒等映射3x3的卷积层
用卷积可加性原理,将三个分支的卷积层和bias对应相加组成最终一个conv3x3的形式即可
对于图像分类,使用global average pooling,然后使用全连接层作为head。对于其他任务,使用特定的head
(1)stage1分辨率很高,这很耗时,因此只使用一层
(2)最后的stage应该有更多的通道,所以只使用一层来保存参数
(3) 大多数层放在倒数第二阶段(ImageNet上的输出分辨率为14×14),参考的resnet
总结:
(1)推理时的等价性不代表训练时的等价性,直接训练一个 3x3 卷积最终也会得到同样形状的参数,虽然形状相同,但性能不同
(2)添加一些能在推理阶段去掉的参数,也许会work
(3)1x1卷积的表征能力弱于3x3卷积,因为前者可以看作一个有很多参数为0的3x3卷积,但是1x1 + 3x3的性能却好于3x3 + 3x3,一个强结构加一个弱结构大概率好于两个强结构相加
3. Experiments
ImageNet-1K
使用简单的数据增强(随机裁剪和左右翻转)
使用Winograd算法加速3×3 conv(仅当步幅为1时)
Cityscapes
参考官方在ResNet-50/101的最后两个阶段使用Dilated Convolution,RepVGG的最后两个阶段使用Dilated Convolution
但由于dilated conv效率低下,RepVGG-fast仅仅在stage4的最后4层和stage5的唯一一层使用Dilated Convolution
由实验结果得出,使用更多的dilated conv并不能提高性能