diff --git a/docs/zh_CN/faq_series/faq_2020_s1.md b/docs/zh_CN/faq_series/faq_2020_s1.md index 1cf7642218dde869b148233ca7314514be32b888..ad69fde431da3a637ca91a79c855c73ba89f7ae0 100644 --- a/docs/zh_CN/faq_series/faq_2020_s1.md +++ b/docs/zh_CN/faq_series/faq_2020_s1.md @@ -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) - - +* [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) + + ## 第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)文章中,也有关于大卷积核的实验。 - + ## 第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)部分介绍了知识蒸馏对于分类任务迁移的收益。 - + ## 第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)。 - + ## 第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*。 - + ## 第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)。 - + ## 第6期 ### Q6.1: PaddleClas的几个分支有什么区别?应该如何选择? diff --git a/docs/zh_CN/faq_series/faq_2021_s1.md b/docs/zh_CN/faq_series/faq_2021_s1.md index cff7c98bb57c2c048039ee3a6c8f615038aac298..1b9a382733b1782d3ddf7c9f59f6e7d03496ad3e 100644 --- a/docs/zh_CN/faq_series/faq_2021_s1.md +++ b/docs/zh_CN/faq_series/faq_2021_s1.md @@ -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) - + ## 第1期 ### Q1.1: 在模型导出时,发现导出的inference model预测精度很低,这块是为什么呢? @@ -54,7 +54,7 @@ 更多的预测部署加速技巧,也欢迎大家补充。 - + ## 第2期 ### Q2.1: PaddleClas在设置标签的时候必须从0开始吗?class_num必须等于数据集的类别数吗? @@ -77,7 +77,7 @@ 不同的网络结构在不同的设备上运行速度优势不同。在移动端,移动端系列的网络比服务器端的网络运行速度更快,但是在服务器端,相同精度下,ResNet等经过特定优化后的网络具有更大的优势,所以需要根据具体情况来选择具体的网络结构。 - + ## 第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并行运算,不仅取决于硬件条件,也受特定的运算形式所限制。当然,并行度越高的模型,其运行速度也越快。 - + ## 第4期 @@ -231,7 +231,7 @@ RepVGG网络与ACNet同理,只不过ACNet的`1*d`非对称卷积变成了`1*1` 2. 将`[CLS]`标志位对应的向量作为整个图像的语义表示,是因为与图像中已有的其它patch块图像相比,这个无明显语义信息的符号会更“公平”地融合图像中各个patch的语义信息,从而更好的表示整个图像的语义。 - + ## 第5期 ### Q5.1: PaddleClas训练配置文件中都包含了哪些内容?训练模型时如何进行修改? diff --git a/docs/zh_CN/faq_series/faq_2021_s2.md b/docs/zh_CN/faq_series/faq_2021_s2.md index 3172b38393536bd5342f56bf277ba61f330a5ab8..4e63596aba58c63c6d07662405e8020708764575 100644 --- a/docs/zh_CN/faq_series/faq_2021_s2.md +++ b/docs/zh_CN/faq_series/faq_2021_s2.md @@ -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) ## 近期更新 @@ -92,10 +92,10 @@ pip install paddle2onnx ## 精选 - + ## 1. 理论篇 - + ### 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训练。 - + ### 1.2 骨干网络和预训练模型库 - + ### 1.3 图像分类 #### Q1.3.1: PaddleClas有提供调整图片亮度,对比度,饱和度,色调等方面的数据增强吗? @@ -136,7 +136,7 @@ w_t+1 = w_t - v_t+1 其中,RandAngment提供了多种数据增强方式的随机组合,可以满足亮度、对比度、饱和度、色调等多方面的数据增广需求。 - + ### 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等公开数据集,如果被检测数据是类似工业质检等于常见类别差异较大的数据,需要基于目前的检测模型重新微调训练。 - + ### 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的维度已经够大,能充分表示特征了。 - + ### 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` 验证集中的数据进行前向计算特征向量,再与底库计算召回率等指标。 - + ## 2. 实战篇 - + ### 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继续训练。 - + ### 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`,并且加载我们提供的预训练模型,学习率也不宜过大。 - + ### 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下 - + ### 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`中会控制被识别的图片与库中的图片的余弦相似度的最小值。当余弦相似度小于该值时,不会打印结果。您可以根据自己的实际数据调整该值。 - + ### 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)。 - + ### 2.6 模型预测部署 #### Q2.6.1: hub serving方式启动某个模块,怎么添加该模块的参数呢? diff --git a/docs/zh_CN/faq_series/faq_selected_30.md b/docs/zh_CN/faq_series/faq_selected_30.md index edcad9a93175f391840705196a010492bd41e02c..d54f36b3e8ddcb0d90da0c515f2fd34612e0d21d 100644 --- a/docs/zh_CN/faq_series/faq_selected_30.md +++ b/docs/zh_CN/faq_series/faq_selected_30.md @@ -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) - -## 图像分类30个问题 + +## 1. 图像分类30个问题 - -### 基础知识 + +### 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)等,核心思想就是去学习特征图在不同区域或者不同通道中的重要性,从而让网络更加注意显著性的区域。 - -### 模型训练相关 + +### 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或者更大。 - -### 数据相关 + +### 1.3 数据相关 >> * Q: 图像分类的数据预处理过程一般包括哪些步骤? @@ -145,8 +145,8 @@ * Q: 对于长尾分布的数据集,目前有哪些比较常用的方法? * A: (1)可以对数据量比较少的类别进行重采样,增加其出现的概率;(2)可以修改loss,增加图像较少对应的类别的图片的loss权重;(3)可以借鉴迁移学习的方法,从常见类别中学习通用知识,然后迁移到少样本的类别中。 - -### 模型推理与预测相关 + +### 1.4 模型推理与预测相关 >> * Q: 有时候图像中只有小部分区域是所关注的前景物体,直接拿原图来进行分类的话,识别效果很差,这种情况要怎么做呢? @@ -166,8 +166,8 @@ * A: (1)使用性能更优的GPU进行预测;(2)增大预测的batch size;(3)使用TenorRT以及FP16半精度浮点数等方法进行预测。 - -## PaddleClas使用问题 + +## 2. PaddleClas使用问题 >> * Q: 评估和预测时,已经指定了预训练模型所在文件夹的地址,但是仍然无法导入参数,这么为什么呢? diff --git a/docs/zh_CN/models/PP-LCNet.md b/docs/zh_CN/models/PP-LCNet.md index db6a7149267d4fb4c8573fae7bf14397748961f2..a233c0b44d8a7efd66ef2b08a848f7ca0b8b06a7 100644 --- a/docs/zh_CN/models/PP-LCNet.md +++ b/docs/zh_CN/models/PP-LCNet.md @@ -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) diff --git a/docs/zh_CN/models_training/train_strategy.md b/docs/zh_CN/models_training/train_strategy.md index 74c131806dfa156da55ea66cbca4f287c9f396cb..db5cf1d46f8c5e20154946569d9f0027cdfcac3a 100644 --- a/docs/zh_CN/models_training/train_strategy.md +++ b/docs/zh_CN/models_training/train_strategy.md @@ -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)