文章目录
- 前言
- 一、RepVgg简介
- 二、为什么训练时采用多分支结构
- 三、为什么推理时使用单分支结构
- 四、结构重参数化
- 1、融合Conv2d和BN
前言
看yolonas代码,发现有QARepVgg网络,完全不懂,所以来补课,先看了RepVGG
这篇文章主要来自于霹雳啪啦wz!!我的神
一、RepVgg简介
RepVgg主要使用了tructural re-parameterization technique方法,即结构重参数化 。
在训练过程中,网络使用类似于Resnet的多分支结构,而在推理时使用Vgg风格的单分支结构。
如下图所示,图(B)表示RepVGG训练时所采用的网络结构,而在推理时采用图(C)的网络结构。关于如何将图(B)转换到图(C)以及为什么要这么做后面再细说,如果对模型优化部署有了解就会发现这和做网络图优化或者说算子融合非常类似。
二、为什么训练时采用多分支结构
使用多分支结构其实比较好理解,比如原始的vgg就是单分支,但是rexnet这些性能是要好于vgg的,多分支结构是可以更多的表示出其特征的,论文中也有解释。
在使用单路结构时(不使用其他任何分支)Acc大概为72.39,在加上Identity branch以及1x1 branch后Acc达到了75.14。
三、为什么推理时使用单分支结构
原因有:
①更快。
主要是内存访问(mac)和并行速度。
每个分支都需要去得到输入的特征图,都需要去访问内存。
并行速度:多个分支,有的分支计算快,有的分支计算慢,就会导致计算快的只能去等着计算慢的,浪费。
②更节省内存
多分支结构时,我们是需要保存多个特征图的,这就需要占用内存更多。
③使得模型更加灵活。
对于多分支的模型,结构限制较多剪枝很麻烦,而对于Plain结构的模型就相对灵活很多,剪枝也更加方便。
四、结构重参数化
1、融合Conv2d和BN
不详细写了,看这篇博客!!
点击此处