未验证 提交 d08daf9b 编写于 作者: L littletomatodonkey 提交者: GitHub

add faq (#587)

* add faq

* add pngs

* fix mainpage

* fix faq
上级 6d22322a
......@@ -91,7 +91,7 @@
- [10万类图像分类预训练模型](./docs/zh_CN/application/transfer_learning.md)
- [通用目标检测](./docs/zh_CN/application/object_detection.md)
- FAQ
- [图像分类2021第一季精选问题(近期更新2021.01.21)](./docs/zh_CN/faq_series/faq_2021_s1.md)
- [图像分类2021第一季精选问题(近期更新2021.01.29)](./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)
......
......@@ -5,6 +5,7 @@
* [第1期](#第1期)(2021.01.05)
* [第2期](#第2期)(2021.01.14)
* [第3期](#第3期)(2020.01.21)
* [第4期](#第4期)(2021.01.28)
<a name="第1期"></a>
## 第1期
......@@ -156,3 +157,73 @@ RepVGG网络与ACNet同理,只不过ACNet的`1*d`非对称卷积变成了`1*1`
3. 因此计算总量为:`Cout * Mout * Mout * (Cin * K * K + Cin * K * K - 1)`,也即`Cout * Mout * Mout * (2Cin * K * K - 1)`
3. Memory Access Cost(MAC):内存访问成本,由于计算机在对数据进行运算(例如乘法、加法)前,需要将运算的数据从内存(此处泛指内存,包括显存)读取到运算器的Cache中,而内存的访问是十分耗时的。以分组卷积为例,假设分为`g`组,虽然分组后模型的参数量和FLOPs没有变化,但是分组卷积的内存访问次数成为之前的`g`倍(此处只是简单计算,未考虑多级Cache),因此MAC显著提高,模型的计算速度也相应变慢。
4. 并行度:常说的并行度包括数据并行和模型并行两部分,此处是指模型并行。以卷积操作为例,一个卷积层的参数量通常十分庞大,如果将卷积层中的矩阵做分块处理,然后分别交由多个GPU进行运算,即可达到加速的目的。甚至有的网络层参数量过大,单张GPU显存无法容纳时,也可能将该层分由多个GPU计算,但是能否分由多个GPU并行运算,不仅取决于硬件条件,也受特定的运算形式所限制。当然,并行度越高的模型,其运行速度也越快。
<a name="第4期"></a>
## 第4期
### Q4.1: 图像分类任务中,有一部分合成数据,这一部分合成数据是否需要使用样本均衡?
**A**:
1. 不同类别的样本数如果差异过大,某类样本因合成数据集扩充至其他类的数倍以上,需要做适当减小该类的权值。
2. 如果是有的类别是合成而有的类别半合成半真实,只要数量在一个量级可不做均衡,并尝试训练一下,测试该合成类别样本是否能够准确识别。
3. 如果不同来源数据的类别因合成数据增大问题,造成性能衰减,需要考虑合成数据集是否有噪声或者难例样本,也可适当增加该类别权重,获得该类别更好的识别性能。
### Q4.2: 学术界将Vision Transformer(ViT)引入图像分类领域,将对图像分类带来什么新的机遇和挑战?相比于CNN的优势?
论文地址[AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE](https://openreview.net/pdf?id=YicbFdNTTy)
**A**:
1. 图像对CNN的依赖是不必要的,利用Transformer的计算效率和可伸缩性,可以训练很大模型,当模型和数据集增大的情形下,仍然不会存在饱和的情况。受到Transformer在NLP上的启发,在图像分类任务中使用时,将图片分成顺序排列的patches,并将这些patches输入一个线性单元嵌入到embedding作为transformer的输入。
2. 在中等规模数据集中如ImageNet,ImageNet21k,视觉Transformer模型低于相同规模尺寸的ResNet几个百分点。这是因为transformer缺少CNN平移和局限性,在数据量不够大的时候,不能超越卷积网络。
3. 在超大规模数据集14M-300M训练时,这种方式可以越过局部信息,建模更加长距离的依赖关系,而CNN能较好关注局部信息全局信息捕获能力较弱。
4. Transformer一度在NLP领域一统江湖,也一度被质疑不适用于CV领域,当前出来的几片视觉领域的文章,性能也是直逼CNN的SOTA。相信在未来能够提出Vision-Language联合或者多模态的模型,能够一并解决视觉和语言问题。
### Q4.3: 对于Vision Transformer模型,是如何将图像转换成序列信息传给Encoder?
**A**:
1. 使用Transformer模型,主要是使用其中的注意力方法。我们希望构想一个适用语义embedding信息的场景,但是图像分类与序列的语义信息关联性不大,因此Vision Transformer有其独特的设计。ViT的目标也正是希望使用注意力机制来代替CNN。
2. 考虑Transformer中Encoder编码器的输入形式,如下图:
* (1)不定长度的顺序输入,因为它是RNN结构,一句话,单词数不一样。如果是NLP场景,换词的顺序不太过于影响语义,但是图像换了不同区域的位置,不同区域连接顺序不同,将造成极大理解偏差。
* (2)单个patch位置信息通过变换成一个维度固定的向量,Encoder输入是patch像素信息embedding,与一些固定位置的向量concate, 合成一个维度固定的向量和位置信息在其中。
<div align="center">
<img src="../../images/faq/Transformer_input.png" width="400">
</div>
3. 考虑以下问题:怎样将一张图片怎么传给encoder?
* 如下图所示。假设输入图片是[224,224,3],按照顺序从左到右,从上到下,切分成很多个patch,patch大小可以为[p,p,3](p取值可以是16,32),对其使用Linear Projection of Flattened Patches模块转成特征向量,并concat一个位置向量,传入Encoder中。
<div align="center">
<img src="../../images/faq/ViT_structure.png" width="400">
</div>
4. 如上图,给定一个`H×W×C`的图像以及区块大小P,可以把图像划分为`N``P×P×C`的区块,`N=H×W/(P×P)`。得到区块后要使用线性变换转为D维特征向量,再加上位置编码向量即可。和BERT类似,ViT 在序列之前也加入了一个分类标志位,记为`[CLS]`。ViT输入序列`z`如下面的公式所示,其中`x`表示一个图像区块。
<div align="center">
<img src="../../images/faq/ViT.png" width="400">
</div>
5. ViT 模型和 Transformer 基本一样,输入序列传入 ViT,然后利用`[CLS]`标志位的最终输出特征进行分类。ViT主要由MSA(多头自注意力)和MLP(两层使用GELU激活函数的全连接网络) 组成,在MSA和MLP之前加上LayerNorm和残差连接。
### Q4.4: 如何理解归纳偏置Inductive Bias?
**A**:
1. 在机器学习中,会对算需要应用的问题做一些假设,这个假设就称为归纳偏好。在现实生活中观察得到的现象中归纳出一定的先验规则,然后对模型做一定的约束,从而起到模型选择的作用。在CNN中,假设特征具有局部性(Locality)和空间不变性(Spatial Invariance)的特点,即把相邻的的特征有联系而远离的没有,将相邻特征融合在一起,更会容易产生“解”;还有attention机制,也是从人的直觉、生活经验归纳的规则。
2. Vision Transformer利用的归纳偏置是有序列能力Sequentiality和时间不变性Time Invariance,即序列顺序上的时间间隔的联系,因此也能得出在更大规模数据集上比CNN类的模型有更好的性能。文章Conclusion里的“Unlike prior works using self-attention in computer vision, we do not introduce any image-specific inductive biases into the architecture”和Introduction里的“We find that large scale training trumps inductive bias”,可以得出直观上inductive bias在大量数据的情况中的产生是衰减性能,应该尽可能丢弃。
### Q4.5: ViT为什么要增加一个[CLS]标志位? 为什么将[CLS]标志位对应的向量作为整个序列的语义表示?
**A**:
1. 和BERT相类似,ViT在第一个patch前添加一个`[CLS]`标志位,最后一个结束标志位对应的向量可以作为整个图像的语义表示,从而用于下游的分类任务等。从而使得整个embedding组可以表征该图像不同位置的特征。
2.`[CLS]`标志位对应的向量作为整个图像的语义表示,是因为与图像中已有的其它patch块图像相比,这个无明显语义信息的符号会更“公平”地融合图像中各个patch的语义信息,从而更好的表示整个图像的语义。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册