Update faq_2021_s1 (#572)

pull/575/head
Tingquan Gao 2021-01-22 15:29:16 +08:00 committed by GitHub
parent 1ace93f42f
commit 5c6979ce1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 86 additions and 1 deletions

View File

@ -89,7 +89,7 @@
- [10万类图像分类预训练模型](./docs/zh_CN/application/transfer_learning.md)
- [通用目标检测](./docs/zh_CN/application/object_detection.md)
- FAQ
- [图像分类2021第一季精选问题(近期更新2021.01.14)](./docs/zh_CN/faq_series/faq_2021_s1.md)
- [图像分类2021第一季精选问题(近期更新2021.01.21)](./docs/zh_CN/faq_series/faq_2021_s1.md)
- [图像分类通用30个问题](./docs/zh_CN/faq.md)
- [PaddleClas实战15个问题](./docs/zh_CN/faq.md)
- [赛事支持](./docs/zh_CN/competition_support.md)

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

View File

@ -4,6 +4,7 @@
## 目录
* [第1期](#第1期)(2021.01.05)
* [第2期](#第2期)(2021.01.14)
* [第3期](#第3期)(2020.01.21)
<a name="第1期"></a>
## 第1期
@ -71,3 +72,87 @@
### Q2.5: 既然移动端网络非常快为什么还要使用诸如ResNet这样参数量和计算量较大的网络
不同的网络结构在不同的设备上运行速度优势不同。在移动端移动端系列的网络比服务器端的网络运行速度更快但是在服务器端相同精度下ResNet等经过特定优化后的网络具有更大的优势所以需要根据具体情况来选择具体的网络结构。
<a name="第3期"></a>
## 第3期
### Q3.1: 双分支结构与Plain结构各自有什么特点
**A**
以VGG为代表的Plain网络发展到以ResNet系列带有残差模块、InceptionNet系列多卷积核并行为代表的的多分支网络结构人们发现多分支结构在模型训练阶段更为友好更大的网络宽度可以带来更强的特征拟合能力而残差结构则可以避免深度网络梯度消失的问题但是在推理阶段带有多分支结构的模型在速度上并无优势即使多分支结构模型的FLOPs要更低但多分支结构的模型计算密度也更低。例如VGG16模型的FLOPs远远大于EfficientNetB3但是VGG16模型的推理速度却显著快于EfficientNetB3因此多分支结构在模型训练阶段更为友好而Plain结构模型则更适合于推理阶段那么以此为出发点可以在训练阶段使用多分支网络结构以更大的训练时间成本换取特征拟合能力更强的模型而在推理阶段将多分支结构转为Plain结构从而换取更短的推理时间。实现多分支结构到Plain结构的转换可以通过结构重参数化structural re-parameterization技术实现。
另外Plain结构对于剪枝操作也更为友好。
“Plain结构”与“结构重参数化structural re-parameterization技术”出自论文“RepVGG: Making VGG-style ConvNets Great Again”。Plain结构网络模型指整个网络不存在分支结构也即网络中第`i`层layer的输入为第`i-1`层layer的输出第`i`层layer的输出为第`i+1`层layer的输入。
### Q3.2: ACNet的创新点主要在哪里
**A**
ACNet意为“Asymmetric Convolution Block”即为非对称卷积模块该思想出自论文“ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks”文章提出了以“ACB”结构的三个CNN卷积核为一组用来在训练阶段替代现有卷积神经网络中的传统方形卷积核。
方形卷积核的尺寸为假设为`d*d`,即宽、高相等均为`d`则用于替换该卷积核的ACB结构是尺寸为`d*d`、`1*d`、`d*1`的三个卷积核,然后再将三个卷积核的输出直接相加,可以得到与原有方形卷积核相同尺寸的计算结果。
而在训练完成后将ACB结构换回原有的方形卷积核方形卷积核的参数则为ACB结构的三个卷积核的参数直接相加见`Q3.4`因此还是使用与之前相同的模型结构用于推理ACB结构只是在训练阶段使用。
在训练中通过ACB结构模型的网络宽度得到了提高利用`1*d`、`d*1`的两个非对称卷积核提取得到更多的特征用于丰富`d*d`卷积核提取的特征图的信息。而在推理阶段,这种设计思想并没有带来额外的参数与计算开销。如下图所示,分别是用于训练阶段和部署推理阶段的卷积核形式。
<div align="center">
<img src="../../images/faq/TrainingtimeACNet.png" width="400">
</div>
<div align="center">
<img src="../../images/faq/DeployedACNet.png" width="400">
</div>
文章作者的实验表明通过在原有网络模型训练中使用ACNet结构可以显著提高模型能力原作者对此有如下解释
1. 实验表明,对于一个`d*d`的卷积核,相对于消除卷积核角落位置(如上图中卷积核的`corners`位置)的参数而言,消除骨架位置(如上图中卷积核的`skeleton`位置的参数会给模型精度带来更大的影响因此卷积核骨架位置的参数要更为重要而ACB结构中的两个非对称卷积核增强了方形卷积核骨架位置参数的权重使之作用更为显著。这种相加是否会因正负数抵消作用而减弱骨架位置的参数作用作者通过实验发现网络的训练总是会向着提高骨架位置参数作用的方向发展并没有出现正负数抵消而减弱的现象。
2. 非对称卷积核对于翻转的图像具有更强的鲁棒性,如下图所示,水平的非对称卷积核对于上下翻转的图像具有更强的鲁棒性。对于翻转前后图像中语义上的同一位置,非对称卷积核提取的特征图是相同的,这一点要强于方形卷积核。
<div align="center">
<img src="../../images/faq/HorizontalKernel.png" width="400">
</div>
### Q3.3: RepVGG的创新点主要在哪里
**A**
通过Q3.1与Q3.2我们可以大胆想到是否可以借鉴ACNet将训练阶段与推理阶段解耦并且训练阶段使用多分支结构推理阶段使用Plain结构这也就是RepVGG的创新点。下图为ResNet、RepVGG训练和推理阶段网络结构的对比。
<div align="center">
<img src="../../images/faq/RepVGG.png" width="400">
</div>
首先训练阶段的RepVGG采用多分支结构可以看作是在传统VGG网络的基础上增加了`1*1`卷积和恒等映射的残差结构而推理阶段的RepVGG则退化为VGG结构。训练阶段RepVGG到推理阶段RepVGG的网络结构转换使用“结构重参数化”技术实现。
对于恒等映射,可将其视为参数均为`1`的`1*1`卷积核作用在输入特征图的输出结果因此训练阶段的RepVGG的卷积模块可以视为两个`1*1`卷积和一个`3*3`卷积,而`1*1`卷积的参数又可以直接相加到`3*3`卷积核中心位置的参数上该操作类似于ACNet中非对称卷积核参数相加到方形卷积核骨架位置参数的操作通过上述操作即可在推理阶段将网络结构中的恒等映射、`1*1`卷积、`3*3`卷积三个分支合并为一个`3*3`卷积,详见`Q3.4`。
### Q3.4: ACNet与RepVGG中的struct re-parameters有何异同
**A**
通过上面的了解可以简单理解RepVGG是更为极端的ACNet。ACNet中的re-parameters操作如下图所示
<div align="center">
<img src="../../images/faq/ACNetReParams.png" width="400">
</div>
观察上图,以其中的`conv2`为例,该非对称卷积可以视为`3*3`的方形卷积核,只不过该方形卷积核的上下六个参数为`0``conv3`同理。并且,`conv1`、`conv2`、`conv3`的结果相加,等同于三个卷积核相加再做卷积,以`Conv`表示卷积操作,`+`表示矩阵的加法操作,则:`Conv1(A)+Conv2(A)+Conv3(A) == Convk(A)`,其中`Convk1`、`Conv2`、`Conv3`的卷积核分别为`Kernel1`、`kernel2`、`kernel3`,而`Convk`的卷积核为`Kernel1 + kernel2 + kernel3`。
RepVGG网络与ACNet同理只不过ACNet的`1*d`非对称卷积变成了`1*1`卷积,`1*1`卷积相加的位置变成了`3*3`卷积的中心。
### Q3.5: 影响模型计算速度的因素都有哪些?参数量越大的模型计算速度一定更慢吗?
**A**
影响模型计算速度的因素有很多,参数量只是其中之一。具体来说,在不考虑硬件差异的前提下,模型的计算速度可以参考以下几个方面:
1. 参数量:用于衡量模型的参数数量,模型的参数量越大,模型在计算时对内存(显存)的容量要求一般也更高。但内存(显存)占用大小不完全取决于参数量。如下图中,假设输入特征图内存占用大小为`1`个单位对于左侧的残差结构而言由于需要记录两个分支的运算结果然后再相加因此该结构在计算时的内存峰值占用是右侧Plain结构的两倍。
<div align="center">
<img src="../../images/faq/MemoryOccupation.png" width="400">
</div>
2. 浮点运算数量FLOPs注意与每秒浮点运算次数FLOPS相区分。FLOPs可以简单理解为计算量通常用来衡量一个模型的计算复杂度。
以常见的卷积操作为例在不考虑batch size、激活函数、stride操作、bias的前提下假设input future map尺寸为`Min*Min`,通道数为`Cin`output future map尺寸为`Mout*Mout`,通道数为`Cout`conv kernel尺寸为`K*K`则进行一次卷积的FLOPs可以通过下述方式计算
1. 输出特征图包含特征点的数量为:`Cout * Mout * Mout`
2. 对于输出特征图中的每一个特征点的卷积操作而言:
乘法计算数量为:`Cin * K * K`
加法计算数量为:`Cin * K * K - 1`
3. 因此计算总量为:`Cout * Mout * Mout * (Cin * K * K + Cin * K * K - 1)`,也即`Cout * Mout * Mout * (2Cin * K * K - 1)`。
3. Memory Access CostMAC内存访问成本由于计算机在对数据进行运算例如乘法、加法需要将运算的数据从内存此处泛指内存包括显存读取到运算器的Cache中而内存的访问是十分耗时的。以分组卷积为例假设分为`g`组虽然分组后模型的参数量和FLOPs没有变化但是分组卷积的内存访问次数成为之前的`g`倍此处只是简单计算未考虑多级Cache因此MAC显著提高模型的计算速度也相应变慢。
4. 并行度常说的并行度包括数据并行和模型并行两部分此处是指模型并行。以卷积操作为例一个卷积层的参数量通常十分庞大如果将卷积层中的矩阵做分块处理然后分别交由多个GPU进行运算即可达到加速的目的。甚至有的网络层参数量过大单张GPU显存无法容纳时也可能将该层分由多个GPU计算但是能否分由多个GPU并行运算不仅取决于硬件条件也受特定的运算形式所限制。当然并行度越高的模型其运行速度也越快。