未验证 提交 b2baeab8 编写于 作者: T Tingquan Gao 提交者: GitHub

Add FAQ 20201207 (#459)

* Add FAQ 20201207

* Fix FAQ20201207
上级 066d53f8
......@@ -5,6 +5,7 @@
* [第1期](#第1期)(2020.11.03)
* [第2期](#第2期)(2020.11.11)
* [第3期](#第3期)(2020.11.18)
* [第4期](#第4期)(2020.12.07)
<a name="第1期"></a>
## 第1期
......@@ -142,3 +143,52 @@ use_dynamic_loss_scaling: True
```
* 可以开启dali,将数据预处理方法放在GPU上运行,在模型比较小时(reader耗时占比更高一些),开启dali会带来比较明显的精度收益,在训练的时候,添加`-o use_dali=True`即可使用dali进行训练,更多关于dali 安装与介绍可以参考:[dali安装教程](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/installation.html#nightly-builds)
<a name="第4期"></a>
## 第4期
### Q4.1: PaddlePaddle 的模型文件都有哪几种?
**A**:
* PaddlePaddle保存的模型相关文件有两类:
* 一类是用于*推理部署*的文件,包括后缀名为“`pdiparams`”、“`model`”的文件,其中“`pdiparams`”文件存储了模型参数信息,“`model`”文件存储了模型网络结构信息,对于推理部署文件,使用`paddle.jit.save``paddle.jit.load`接口进行保存、加载。
* 另一类模型相关文件则是用于*训练调优*过程中,包括后缀名为“`pdparams`”和“`pdopt`”的文件,其中“`pdparams`”文件存储了训练过程中的模型参数信息,“`pdopt`”文件存储了模型训练过程中的优化器信息,对于训练调优文件,使用`paddle.save``paddle.load`接口进行保存、加载。
* 利用推理部署文件,即可构建模型网络结构并加载模型参数,用于预测,利用训练调优文件,即可加载模型参数、优化器信息,用于恢复训练过程。
### Q4.2: HRNet的创新点体现在哪里?
**A**:
* 在图像分类领域,大部分神经网络的设计思想是提取图像的高维特征,具体来说,通常输入图像的空间分辨率较高,通过多层卷积、池化,可以逐步得到空间分辨率更低,但是维度更高的特征图,然后可用于分类等场景。
* 然而*HRNet*的作者认为这种逐步降低空间分辨率的设计思想并不适合目标检测(图像区域层次的分类任务)、语义分割(图像像素层次的分类任务)等场景,因为空间分辨率在逐步降低的过程中,会丢失很多信息,最终学习得到的特征难以表达原始图像在高空间分辨率的信息,而区域层次分类任务和像素层次分类任务都对空间精度十分敏感。
* 因此*HRNet*的作者提出了并联不同空间分辨率特征图的思想,与此相对,*VGG*等神经网络则是通过不同的卷积池化层来串联不同空间分辨率的特征图。并且,*HRNet*通过连接同等深度、不同空间分辨率的特征图,使得不同空间分辨率特征图的信息可以得到充分交换,具体的网络结构如下图所示。
<div align="center">
<img src="../../images/faq/HRNet.png" width="800">
</div>
### Q4.3: 在HRNet中,对于不同空间分辨率的特征图之间,是如何建立连接的?
**A**:
* 首先,在*HRNet*中,对特征图使用*stride**2**3 × 3*卷积,可以得到低空间分辨率但是为度更高的特征图;而对低空间分辨率特征图先使用*1 × 1*卷积进行通道数匹配,再使用最近邻插值的方式进行上采样,即可得到与高空间分辨率特征图相同空间分辨率、通道数的特征图;而对于相同空间分辨率的特征图,直接进行恒等映射即可。具体如下图所示。
<div align="center">
<img src="../../images/faq/HRNet_block.png" width="800">
</div>
### Q4.4: 模型中的“SE”表示什么意思?
**A**:
* SE表示该模型使用了SE结构。SE结构来自于2017年ImageNet分类比赛的冠军方案*Squeeze-and-Excitation Networks(SENet)**SENet*提出的SE结构可以迁移到任何其他网络中。其创新点是通过额外学习*scale*向量作为权重作用到特征图上,*scale*向量维度与特征图通道数相同,学习到的*scale*向量中每个维度上的数值表示对该维度特征通道的增强或减弱的大小,以此达到对重要的特征通道进行增强,不重要特征通道减弱的效果,从而让提取的特征指向性更强。
### Q4.5: SE结构具体如何实现的?
<div align="center">
<img src="../../images/faq/SE_structure.png" width="800">
</div>
**A**:
* *SE*结构具体如上图所示,首先,*Ftr*表示常规的卷积操作,*X**U*则是*Ftr*的输入与输出的特征图,在得到特征图*U*后,使用*Fsq**Fex*操作求得*scale*向量,*scale*向量维度为*C*,与*U*通道数相同,因此可以通过乘积的方式作用到*U*上,进而得到*X~*
* 具体地,*Fsq**Global Average Pooling*操作,*SENet*作者将其称之为*Squeeze*,因为该操作可以将*U**C × H × W*压缩到*C × 1 × 1*,对*Fsq*的输出再做*Fex*操作。
* *Fex*操作表示两次全连接,作者将该操作称为*Excitation*。其中第一次全连接将向量的维度从*1 × 1 × C*压缩到*1 × 1 × C/r*,然后使用*RELU*,再通过第二次全连接将向量的维度恢复到*C*,这样操作的目的是为了减小计算量,*SENet*作者通过实验得出结论:在*r=16*时可以获得增益与计算量之间的平衡。
* 对于*Fsq*部分,关键是求得*C*维的向量,因此不局限于使用*Global Average Pooling*操作,*SENet*作者认为,最终求得的*scale*是按通道分别作用于*U*的,因此需要基于对应通道的信息计算对应的*scale*,故使用了最简单的*Global Average Pooling*操作,最终求得的*scale*向量表示了不同通道之间的分布关系,而忽略了同一个通道中的分布关系。
* 对于*Fex*部分,其作用是为了在每一个*mini batch*上的训练来求得基于所有训练数据的分布。因为我们的训练是在*mini batch*上进行的,而基于全部训练数据求得的*scale*才是最佳的,使用*Fex*部分,可以通过在每个*mini batch*上的训练来求得更为逼近全部训练数据的*scale*
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册