提交 45cdbcd4 编写于 作者: S sibo2rr

modify menu of faq

上级 f5b60151
......@@ -2,14 +2,14 @@
## 目录
* [第1期](#第1期)(2020.11.03)
* [第2期](#第2期)(2020.11.11)
* [第3期](#第3期)(2020.11.18)
* [第4期](#第4期)(2020.12.07)
* [第5期](#第5期)(2020.12.17)
* [第6期](#第6期)(2020.12.30)
<a name="第1期"></a>
* [1. 第1期](#1)(2020.11.03)
* [2. 第2期](#2)(2020.11.11)
* [3. 第3期](#3)(2020.11.18)
* [4. 第4期](#4)(2020.12.07)
* [5. 第5期](#5)(2020.12.17)
* [6. 第6期](#6)(2020.12.30)
<a name="1"></a>
## 第1期
### Q1.1: PaddleClas可以用来做什么?
......@@ -69,7 +69,7 @@ ResNet系列模型中,相比于其他模型,ResNet_vd模型在预测速度
**A**: 不一定,将网络中的所有卷积核都增大未必会带来性能的提升,甚至会有有损性能,在论文[MixConv: Mixed Depthwise Convolutional Kernels](https://arxiv.org/abs/1907.09595)
中指出,在一定范围内提升卷积核大小对精度的提升有正向作用,但是超出后会有损精度。所以考虑到模型的大小、计算量等问题,一般不选用大的卷积核去设计网络。同时,在[PP-LCNet](../models/PP-LCNet.md)文章中,也有关于大卷积核的实验。
<a name="第2期"></a>
<a name="2"></a>
## 第2期
### Q2.1: PaddleClas如何训练自己的backbone?
......@@ -103,7 +103,7 @@ ResNet系列模型中,相比于其他模型,ResNet_vd模型在预测速度
**A**: PaddleClas中提供了很多ssld预训练模型,其通过半监督知识蒸馏的方法获得了更好的预训练权重,在迁移任务或者下游视觉任务中,无须替换结构文件、只需要替换精度更高的ssld预训练模型即可提升精度,如在PaddleSeg中,[HRNet](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v0.7.0/docs/model_zoo.md)使用了ssld预训练模型的权重后,精度大幅度超越业界同样的模型的精度,在PaddleDetection中,[PP-YOLO](https://github.com/PaddlePaddle/PaddleDetection/blob/release/0.4/configs/ppyolo/README_cn.md)使用了ssld预训练权重后,在较高的baseline上仍有进一步的提升。使用ssld预训练权重做分类的迁移表现也很抢眼,在[SSLD蒸馏策略](../advanced_tutorials/knowledge_distillation.md)部分介绍了知识蒸馏对于分类任务迁移的收益。
<a name="第3期"></a>
<a name="3"></a>
## 第3期
### Q3.1: DenseNet模型相比于ResNet有什么改进呢?有哪些特点或者应用场景呢?
......@@ -146,7 +146,7 @@ AMP:
* 可以开启dali,将数据预处理方法放在GPU上运行,在模型比较小时(reader耗时占比更高一些),开启dali会带来比较明显的训练速度收益,在训练的时候,添加`-o Global.use_dali=True`即可使用dali进行训练,更多关于 dali 安装与介绍可以参考:[dali安装教程](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/installation.html#nightly-builds)
<a name="第4期"></a>
<a name="4"></a>
## 第4期
### Q4.1: PaddlePaddle 的模型文件都有哪几种?
......@@ -195,7 +195,7 @@ AMP:
* 对于*Fsq*部分,关键是求得*C*维的向量,因此不局限于使用*Global Average Pooling*操作,*SENet*作者认为,最终求得的*scale*是按通道分别作用于*U*的,因此需要基于对应通道的信息计算对应的*scale*,故使用了最简单的*Global Average Pooling*操作,最终求得的*scale*向量表示了不同通道之间的分布关系,而忽略了同一个通道中的分布关系。
* 对于*Fex*部分,其作用是为了在每一个*mini batch*上的训练来求得基于所有训练数据的分布。因为我们的训练是在*mini batch*上进行的,而基于全部训练数据求得的*scale*才是最佳的,使用*Fex*部分,可以通过在每个*mini batch*上的训练来求得更为逼近全部训练数据的*scale*
<a name="第5期"></a>
<a name="5"></a>
## 第5期
### Q5.1 如何选择优化器?
......@@ -335,7 +335,7 @@ Cosine_decay和piecewise_decay的学习率变化曲线如下图所示,容易
- 知识蒸馏:可以先使用一个较大的模型在该数据集上训练一个精度较高的teacher model,然后使用该teacher model去教导一个Student model,其中,Student model即为目标模型。PaddleClas提供了百度自研的SSLD知识蒸馏方案,即使在ImageNet-1k这么有挑战的分类任务上,其也能稳定提升3%以上。SSLD知识蒸馏的的章节请参考[**SSLD知识蒸馏**](../advanced_tutorials/knowledge_distillation.md)
<a name="第6期"></a>
<a name="6"></a>
## 第6期
### Q6.1: PaddleClas的几个分支有什么区别?应该如何选择?
......
......@@ -2,13 +2,13 @@
## 目录
* [第1期](#第1期)(2021.01.05)
* [第2期](#第2期)(2021.01.14)
* [第3期](#第3期)(2020.01.21)
* [第4期](#第4期)(2021.01.28)
* [第5期](#第5期)(2021.02.03)
* [1. 第1期](#1)(2021.01.05)
* [2. 第2期](#2)(2021.01.14)
* [3. 第3期](#3)(2020.01.21)
* [4. 第4期](#4)(2021.01.28)
* [5. 第5期](#5)(2021.02.03)
<a name="第1期"></a>
<a name="1"></a>
## 第1期
### Q1.1: 在模型导出时,发现导出的inference model预测精度很低,这块是为什么呢?
......@@ -54,7 +54,7 @@
更多的预测部署加速技巧,也欢迎大家补充。
<a name="第2期"></a>
<a name="2"></a>
## 第2期
### Q2.1: PaddleClas在设置标签的时候必须从0开始吗?class_num必须等于数据集的类别数吗?
......@@ -77,7 +77,7 @@
不同的网络结构在不同的设备上运行速度优势不同。在移动端,移动端系列的网络比服务器端的网络运行速度更快,但是在服务器端,相同精度下,ResNet等经过特定优化后的网络具有更大的优势,所以需要根据具体情况来选择具体的网络结构。
<a name="第3期"></a>
<a name="3"></a>
## 第3期
### Q3.1: 双(多)分支结构与Plain结构,各自有什么特点?
......@@ -161,7 +161,7 @@ RepVGG网络与ACNet同理,只不过ACNet的`1*d`非对称卷积变成了`1*1`
3. Memory Access Cost(MAC):内存访问成本,由于计算机在对数据进行运算(例如乘法、加法)前,需要将运算的数据从内存(此处泛指内存,包括显存)读取到运算器的Cache中,而内存的访问是十分耗时的。以分组卷积为例,假设分为`g`组,虽然分组后模型的参数量和FLOPs没有变化,但是分组卷积的内存访问次数成为之前的`g`倍(此处只是简单计算,未考虑多级Cache),因此MAC显著提高,模型的计算速度也相应变慢。
4. 并行度:常说的并行度包括数据并行和模型并行两部分,此处是指模型并行。以卷积操作为例,一个卷积层的参数量通常十分庞大,如果将卷积层中的矩阵做分块处理,然后分别交由多个GPU进行运算,即可达到加速的目的。甚至有的网络层参数量过大,单张GPU显存无法容纳时,也可能将该层分由多个GPU计算,但是能否分由多个GPU并行运算,不仅取决于硬件条件,也受特定的运算形式所限制。当然,并行度越高的模型,其运行速度也越快。
<a name="第4期"></a>
<a name="4"></a>
## 第4期
......@@ -231,7 +231,7 @@ RepVGG网络与ACNet同理,只不过ACNet的`1*d`非对称卷积变成了`1*1`
2.`[CLS]`标志位对应的向量作为整个图像的语义表示,是因为与图像中已有的其它patch块图像相比,这个无明显语义信息的符号会更“公平”地融合图像中各个patch的语义信息,从而更好的表示整个图像的语义。
<a name="第5期"></a>
<a name="5"></a>
## 第5期
### Q5.1: PaddleClas训练配置文件中都包含了哪些内容?训练模型时如何进行修改?
......
......@@ -9,20 +9,20 @@
## 目录
* [近期更新](#近期更新)(2021.09.08)
* [精选](#精选)
* [1. 理论篇](#1.理论篇)
* [1.1 PaddleClas基础知识](#1.1PaddleClas基础知识)
* [1.2 骨干网络和预训练模型库](#1.2骨干网络和预训练模型库)
* [1.3 图像分类](#1.3图像分类)
* [1.4 通用检测模块](#1.4通用检测模块)
* [1.5 图像识别模块](#1.5图像识别模块)
* [1.6 检索模块](#1.6检索模块)
* [2. 实战篇](#2.实战篇)
* [2.1 训练与评估共性问题](#2.1训练与评估共性问题)
* [2.2 图像分类](#2.2图像分类)
* [2.3 通用检测模块](#2.3通用检测模块)
* [2.4 图像识别模块](#2.4图像识别模块)
* [2.5 检索模块](#2.5检索模块)
* [2.6 模型预测部署](#2.6模型预测部署)
* [1. 理论篇](#1)
* [1.1 PaddleClas基础知识](#1.1)
* [1.2 骨干网络和预训练模型库](#1.2)
* [1.3 图像分类](#1.3)
* [1.4 通用检测模块](#1.4)
* [1.5 图像识别模块](#1.5)
* [1.6 检索模块](#1.6)
* [2. 实战篇](#2)
* [2.1 训练与评估共性问题](#2.1)
* [2.2 图像分类](#2.2)
* [2.3 通用检测模块](#2.3)
* [2.4 图像识别模块](#2.4)
* [2.5 检索模块](#2.5)
* [2.6 模型预测部署](#2.6)
<a name="近期更新"></a>
## 近期更新
......@@ -92,10 +92,10 @@ pip install paddle2onnx
<a name="精选"></a>
## 精选
<a name="1.理论篇"></a>
<a name="1"></a>
## 1. 理论篇
<a name="1.1PaddleClas基础知识"></a>
<a name="1.1"></a>
### 1.1 PaddleClas基础知识
#### Q1.1.1 PaddleClas和PaddleDetection区别
......@@ -122,10 +122,10 @@ w_t+1 = w_t - v_t+1
#### Q1.1.4: PaddleClas 是否有 `Fixing the train-test resolution discrepancy` 这篇论文的实现呢?
**A**: 目前 PaddleClas 没有实现。如果需要,可以尝试自己修改代码。简单来说,该论文所提出的思想是使用较大分辨率作为输入,对已经训练好的模型最后的FC层进行fine-tune。具体操作上,首先在较低分辨率的数据集上对模型网络进行训练,完成训练后,对网络除最后的FC层外的其他层的权重设置参数 `stop_gradient=True`,然后使用较大分辨率的输入对网络进行fine-tune训练。
<a name="1.2骨干网络和预训练模型库"></a>
<a name="1.2"></a>
### 1.2 骨干网络和预训练模型库
<a name="1.3图像分类"></a>
<a name="1.3"></a>
### 1.3 图像分类
#### Q1.3.1: PaddleClas有提供调整图片亮度,对比度,饱和度,色调等方面的数据增强吗?
......@@ -136,7 +136,7 @@ w_t+1 = w_t - v_t+1
其中,RandAngment提供了多种数据增强方式的随机组合,可以满足亮度、对比度、饱和度、色调等多方面的数据增广需求。
<a name="1.4通用检测模块"></a>
<a name="1.4"></a>
### 1.4 通用检测模块
#### Q1.4.1 主体检测是每次只输出一个主体检测框吗?
......@@ -148,7 +148,7 @@ w_t+1 = w_t - v_t+1
#### Q1.4.3: 目前使用的主体检测模型检测在某些场景中会有误检?
**A**:目前的主体检测模型训练时使用了COCO、Object365、RPC、LogoDet等公开数据集,如果被检测数据是类似工业质检等于常见类别差异较大的数据,需要基于目前的检测模型重新微调训练。
<a name="1.5图像识别模块"></a>
<a name="1.5"></a>
### 1.5 图像识别模块
#### Q1.5.1 使用`circle loss`还需加`triplet loss`吗?
......@@ -160,7 +160,7 @@ w_t+1 = w_t - v_t+1
#### Q1.5.3 最后使用512维的向量,为什么不用1024或者其他维度的呢?
**A**:使用维度小的向量,为了加快计算,在实际使用过程中,可能使用128甚至更小。一般来说,512的维度已经够大,能充分表示特征了。
<a name="1.6检索模块"></a>
<a name="1.6"></a>
### 1.6 检索模块
#### Q1.6.1 PaddleClas目前使用的Möbius向量检索算法支持类似于faiss的那种index.add()的功能吗? 另外,每次构建新的图都要进行train吗?这里的train是为了检索加速还是为了构建相似的图?
......@@ -169,10 +169,10 @@ w_t+1 = w_t - v_t+1
#### Q1.6.2: PaddleClas 图像识别用于 Eval 的配置文件中,`Query` 和 `Gallery` 配置具体是用于做什么呢?
**A**: `Query``Gallery` 均为数据集配置,其中 `Gallery` 用于配置底库数据,`Query` 用于配置验证集。在进行 Eval 时,首先使用模型对 `Gallery` 底库数据进行前向计算特征向量,特征向量用于构建底库,然后模型对 `Query` 验证集中的数据进行前向计算特征向量,再与底库计算召回率等指标。
<a name="2.实战篇"></a>
<a name="2"></a>
## 2. 实战篇
<a name="2.1训练与评估共性问题"></a>
<a name="2.1"></a>
### 2.1 训练与评估共性问题
#### Q2.1.1 PaddleClas 的`train_log`文件在哪里?
......@@ -222,7 +222,7 @@ PaddlePaddle is installed successfully! Let's start deep learning with PaddlePad
* 当需要 `fine-tune` 时,可以通过字段 `Global.pretrain_model` 配置预训练模型权重文件的路径,预训练模型权重文件后缀名通常为 `.pdparams`
* 在训练过程中,训练程序会自动保存每个epoch结束时的断点信息,包括优化器信息 `.pdopt` 和模型权重信息 `.pdparams`。在训练过程意外中断等情况下,需要恢复训练时,可以通过字段 `Global.checkpoints` 配置训练过程中保存的断点信息文件,例如通过配置 `checkpoints: ./output/ResNet18/epoch_18` 即可恢复18epoch训练结束时的断点信息,PaddleClas将自动加载 `epoch_18.pdopt``epoch_18.pdparams`,从19epoch继续训练。
<a name="2.2图像分类"></a>
<a name="2.2"></a>
### 2.2 图像分类
#### Q2.2.1 在SSLD中,大模型在500M数据上预训练后蒸馏小模型,然后在1M数据上蒸馏finetune小模型,具体步骤是怎样做的?
......@@ -234,7 +234,7 @@ PaddlePaddle is installed successfully! Let's start deep learning with PaddlePad
#### Q2.2.2 训练SwinTransformer,loss出现nan
**A**:训练SwinTransformer时,请使用版本大于等于 `2.1.1``Paddle`,并且加载我们提供的预训练模型,学习率也不宜过大。
<a name="2.3通用检测模块"></a>
<a name="2.3"></a>
### 2.3 通用检测模块
#### Q2.3.1 为什么有一些图片检测出的结果就是原图?
......@@ -246,7 +246,7 @@ PaddlePaddle is installed successfully! Let's start deep learning with PaddlePad
#### Q2.3.3: 对于未知的标签,加入gallery dataset可以用于后续的分类识别(无需训练),但是如果前面的检测模型对于未知的标签无法定位检测出来,是否还是要训练前面的检测模型?
**A**:如果检测模型在自己的数据集上表现不佳,需要在自己的检测数据集上再finetune下
<a name="2.4图像识别模块"></a>
<a name="2.4"></a>
### 2.4 图像识别模块
#### Q2.4.1: 识别模块预测时报`Illegal instruction`错?
......@@ -261,7 +261,7 @@ PaddlePaddle is installed successfully! Let's start deep learning with PaddlePad
#### Q2.4.4: 有些图片没有识别出结果,为什么?
**A**:在配置文件(如inference_product.yaml)中,`IndexProcess.score_thres`中会控制被识别的图片与库中的图片的余弦相似度的最小值。当余弦相似度小于该值时,不会打印结果。您可以根据自己的实际数据调整该值。
<a name="2.5检索模块"></a>
<a name="2.5"></a>
### 2.5 检索模块
#### Q2.5.1: 添加图片后建索引报`assert text_num >= 2`错?
......@@ -276,7 +276,7 @@ PaddlePaddle is installed successfully! Let's start deep learning with PaddlePad
#### Q2.5.4: 在 build 检索底库时,参数 `pq_size` 应该如何设置?
**A**`pq_size` 是PQ检索算法的参数。PQ检索算法可以简单理解为“分层”检索算法,`pq_size` 是每层的“容量”,因此该参数的设置会影响检索性能,不过,在底库总数据量不太大(小于10000张)的情况下,这个参数对性能的影响很小,因此对于大多数使用场景而言,在构建底库时无需修改该参数。关于PQ检索算法的更多内容,可以查看相关[论文](https://lear.inrialpes.fr/pubs/2011/JDS11/jegou_searching_with_quantization.pdf)
<a name="2.6模型预测部署"></a>
<a name="2.6"></a>
### 2.6 模型预测部署
#### Q2.6.1: hub serving方式启动某个模块,怎么添加该模块的参数呢?
......
......@@ -9,19 +9,19 @@
## PaddleClas常见问题汇总
* [图像分类30个问题](#图像分类30个问题)
* [基础知识](#基础知识)
* [模型训练相关](#模型训练相关)
* [数据相关](#数据相关)
* [模型推理与预测相关](#模型推理与预测相关)
* [PaddleClas使用问题](#PaddleClas使用问题)
* [1. 图像分类30个问题](#1)
* [1.1 基础知识](#1.1)
* [1.2 模型训练相关](#1.2)
* [1.3 数据相关](#1.3)
* [1.4 模型推理与预测相关](#1.4)
* [2. PaddleClas使用问题](#2)
<a name="图像分类30个问题"></a>
## 图像分类30个问题
<a name="1"></a>
## 1. 图像分类30个问题
<a name="基础知识"></a>
### 基础知识
<a name="1.1"></a>
### 1.1 基础知识
>>
* Q: 图像分类领域常用的分类指标有几种
......@@ -49,8 +49,8 @@
* Q: 注意力机制是什么?目前有哪些比较常用的注意力机制方法?
* A: 注意力机制(Attention Mechanism)源于对人类视觉的研究。将注意力机制用在计算机视觉任务上,可以有效捕捉图片中有用的区域,从而提升整体网络性能。目前比较常用的有[SE block](https://arxiv.org/abs/1709.01507)[SK-block](https://arxiv.org/abs/1903.06586)[Non-local block](https://arxiv.org/abs/1711.07971)[GC block](https://arxiv.org/abs/1904.11492)[CBAM](https://arxiv.org/abs/1807.06521)等,核心思想就是去学习特征图在不同区域或者不同通道中的重要性,从而让网络更加注意显著性的区域。
<a name="模型训练相关"></a>
### 模型训练相关
<a name="1.2"></a>
### 1.2 模型训练相关
>>
* Q: 使用深度卷积网络做图像分类,如果训练一个拥有1000万个类的模型会碰到什么问题?
......@@ -106,8 +106,8 @@
* Q: 怎么使用已有的预训练模型提升自己的数据集的精度呢?
* A: 在现阶段计算机视觉领域中,加载预训练模型来训练自己的任务已成为普遍的做法,相比从随机初始化开始训练,加载预训练模型往往可以提升特定任务的精度。一般来说,业界广泛使用的预训练模型是通过训练128万张图片1000类的ImageNet-1k数据集得到的,该预训练模型的fc层权重是是一个k\*1000的矩阵,其中k是fc层以前的神经元数,在加载预训练权重时,无需加载fc层的权重。在学习率方面,如果您的任务训练的数据集特别小(如小于1千张),我们建议你使用较小的初始学习率,如0.001(batch_size:256,下同),以免较大的学习率破坏预训练权重。如果您的训练数据集规模相对较大(大于10万),我们建议你尝试更大的初始学习率,如0.01或者更大。
<a name="数据相关"></a>
### 数据相关
<a name="1.3"></a>
### 1.3 数据相关
>>
* Q: 图像分类的数据预处理过程一般包括哪些步骤?
......@@ -145,8 +145,8 @@
* Q: 对于长尾分布的数据集,目前有哪些比较常用的方法?
* A: (1)可以对数据量比较少的类别进行重采样,增加其出现的概率;(2)可以修改loss,增加图像较少对应的类别的图片的loss权重;(3)可以借鉴迁移学习的方法,从常见类别中学习通用知识,然后迁移到少样本的类别中。
<a name="模型推理与预测相关"></a>
### 模型推理与预测相关
<a name="1.4"></a>
### 1.4 模型推理与预测相关
>>
* Q: 有时候图像中只有小部分区域是所关注的前景物体,直接拿原图来进行分类的话,识别效果很差,这种情况要怎么做呢?
......@@ -166,8 +166,8 @@
* A: (1)使用性能更优的GPU进行预测;(2)增大预测的batch size;(3)使用TenorRT以及FP16半精度浮点数等方法进行预测。
<a name="PaddleClas使用问题"></a>
## PaddleClas使用问题
<a name="2"></a>
## 2. PaddleClas使用问题
>>
* Q: 评估和预测时,已经指定了预训练模型所在文件夹的地址,但是仍然无法导入参数,这么为什么呢?
......
......@@ -11,9 +11,9 @@
- [3.3 合适的位置添加更大的卷积核](#3.3)
- [3.4 GAP 后使用更大的 1x1 卷积层](#3.4)
- [4. 实验部分](#4)
- [图像分类](#4.1)
- [目标检测](#4.2)
- [语义分割](#4.3)
- [4.1 图像分类](#4.1)
- [4.2 目标检测](#4.2)
- [4.3 语义分割](#4.3)
- [5. 总结](#5)
- [6. 引用](#6)
......
......@@ -5,7 +5,7 @@
- [1. 优化器的选择](#1)
- [2. 学习率以及学习率下降策略的选择](#2)
- [2.1 学习率的概念](#2.1)
- [2. 2 学习率下降策略](#2.2)
- [2.2 学习率下降策略](#2.2)
- [2.3 warmup 策略](#2.3)
- [3. batch_size 的选择](#3)
- [4. weight_decay 的选择](#4)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册