PaddleClas/docs/zh_CN/faq_series/faq_2020_s1.md

68 lines
6.2 KiB
Markdown
Raw Normal View History

2020-11-04 11:37:19 +08:00
# 图像分类常见问题汇总 - 2020 第1季
## 目录
* [第1期](#第1期)(2020.11.03)
<a name="第一期"></a>
## 第1期
### Q1.1: PaddleClas可以用来做什么?
**A**PaddleClas是飞桨为工业界和学术界所准备的一个图像分类任务的工具集助力使用者训练出更好的视觉模型和应用落地。PaddleClas提供了基于图像分类的模型训练、评估、预测、部署全流程的服务方便大家更加高效地学习图像分类。具体地PaddleClas中包含如下一些特性 。
* PaddleClas提供了24个系列的分类网络结构(ResNet, ResNet_vd, MobileNetV3, Res2Net, HRNet等)和训练配置122个预训练模型和性能评估与预测供大家选择并使用。
* PaddleClas提供了TensorRT预测、python inference、c++ inference、Paddle-Lite预测部署等多种预测部署推理方案在方便在多种环境中进行部署推理。
* PaddleClas提供了一种简单的SSLD知识蒸馏方案基于该方案蒸馏模型的识别准确率普遍提升3%以上。
* PaddleClas支持AutoAugment、Cutout、Cutmix等8种数据增广算法详细介绍、代码复现和在统一实验环境下的效果评估。
* PaddleClas支持在Windows/Linux/MacOS环境中基于CPU/GPU进行使用。
### Q1.2: ResNet系列模型是什么有哪些模型为什么在服务器端如此推荐ResNet系列模型
**A**: ResNet中创新性地引入了残差结构通过堆叠多个残差结构从而构建了ResNet网络。实验表明使用残差块可以有效地提升收敛速度和精度PaddleClas中ResNet从小到达依次有包含18、34、50、101、152、200层的ResNet结构ResNet系列模型于2015年被提出在不同的应用场景中如分类、检测、分割等都已经验证过其有效性业界也早已对其进行了大量优化该系列模型在速度和精度方面都有着非常明显的优势对基于TensorRT以及FP16的预测支持得也很好因而推荐大家使用ResNet系列模型由于其模型所占存储相对较大因此常用于服务器端。更多关于ResNet模型的介绍可以参考论文[Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385)。
### Q1.3: ResNet_vd和ResNet、ResNet_vc结构有什么区别呢
**A**:
ResNet_va至vd的结构如下图所示ResNet最早提出时为va结构在降采样残差模块这个部分在左边的特征变换通路中(Path A)第一个1x1卷积部分就行了降采样从而导致信息丢失卷积的kernel size为1stride为2输入特征图中 有部分特征没有参与卷积的计算在vb结构中把降采样的步骤从最开始的第一个1x1卷积调整到中间的3x3卷积中从而避免了信息丢失的问题PaddleClas中的ResNet模型默认就是ResNet_vbvc结构则是将最开始这个7x7的卷积变成3个3x3的卷积在感受野不变的情况下计算量和存储大小几乎不变而且实验证明精度相对于vb结构有所提升vd结构是修改了降采样残差模块右边的特征通路(Path B)。把降采样的过程由平均池化这个操作去替代了,这一系列的改进(va->vd)几乎没有带来新增的预测耗时结合适当的训练策略比如说标签平滑以及mixup数据增广精度可以提升高达2.7%。
<div align="center">
<img src="../../images/faq/ResNet_vabcd_structure.png" width="800">
</div>
### Q1.4 如果确定使用ResNet系列模型怎么根据实际的场景需求选用不同的模型呢
**A**:
ResNet系列模型中相比于其他模型ResNet_vd模型在预测速度几乎不变的情况下精度有非常明显的提升因此推荐大家使用ResNet_vd系列模型。
下面给出了batch size=4的情况下在T4 GPU上不同模型的的预测耗时、flops、params与精度的变化曲线可以根据自己自己的实际部署场景中的需求去选择合适的模型如果希望模型存储大小尽可能小或者预测速度尽可能快则可以使用ResNet18_vd模型如果希望获得尽可能高的精度则建议使用ResNet152_vd或者ResNet200_vd模型。更多关于ResNet系列模型的介绍可以参考文档[ResNet及其vd系列模型文档](../models/ResNet_and_vd.md)。
* 精度-预测速度变化曲线
<div align="center">
<img src="../../images/models/T4_benchmark/t4.fp32.bs4.ResNet.png" width="800">
</div>
* 精度-params变化曲线
<div align="center">
<img src="../../images/models/T4_benchmark/t4.fp32.bs4.ResNet.params.png" width="800">
</div>
* 精度-flops变化曲线
<div align="center">
<img src="../../images/models/T4_benchmark/t4.fp32.bs4.ResNet.flops.png" width="800">
</div>
### Q1.5 在网络中的block里conv-bn-relu是固定的形式吗
**A**: 在batch-norm出现之前主流的卷积神经网络的固定形式是conv-relu。在现阶段的卷积神经网络中conv-bn-relu是大部分网络中block的固定形式这样的设计是相对鲁棒的结构此外DenseNet中的block选用的是bn-relu-conv的形式ResNet-V2中也使用的是这种组合方式。在MobileNetV2中为了不丢失信息部分block中间的层没有使用relu激活函数选用的是conv-bn的形式。
### Q1.6 ResNet34与ResNet50的区别
**A**: ResNet系列中有两种不同的block分别是basic-block和bottleneck-block堆叠较多这样的block组成了ResNet网络。basic-block是带有shortcut的两个3x3的卷积核的堆叠bottleneck-block是带有shortcut的1x1卷积核、3x3卷积核、1x1卷积核的堆叠所以basic-block中有两层bottleneck-block有三层。ResNet34和ResNet50中堆叠的block数相同但是堆叠的种类分别是basic-block和bottleneck-block。
### Q1.7 大卷积核一定可以带来正向收益吗?
**A**: 不一定,将网络中的所有卷积核都增大未必会带来性能的提升,甚至会有有损性能,在论文[MixConv: Mixed Depthwise Convolutional Kernels](https://arxiv.org/abs/1907.09595)
中指出,在一定范围内提升卷积核大小对精度的提升有正向作用,但是超出后会有损精度。所以考虑到模型的大小、计算量等问题,一般不选用大的卷积核去设计网络。