diff --git a/docs/zh_CN/faq_series/faq_2021_s1.md b/docs/zh_CN/faq_series/faq_2021_s1.md index ef16dd13186dd95613f0494d7654a56baca4e9fc..6d73c95d0dbcdcad8b0f62b288c7fde36f12c9de 100644 --- a/docs/zh_CN/faq_series/faq_2021_s1.md +++ b/docs/zh_CN/faq_series/faq_2021_s1.md @@ -6,6 +6,7 @@ * [第2期](#第2期)(2021.01.14) * [第3期](#第3期)(2020.01.21) * [第4期](#第4期)(2021.01.28) +* [第5期](#第5期)(2021.02.03) ## 第1期 @@ -227,3 +228,40 @@ RepVGG网络与ACNet同理,只不过ACNet的`1*d`非对称卷积变成了`1*1` 1. 和BERT相类似,ViT在第一个patch前添加一个`[CLS]`标志位,最后一个结束标志位对应的向量可以作为整个图像的语义表示,从而用于下游的分类任务等。从而使得整个embedding组可以表征该图像不同位置的特征。 2. 将`[CLS]`标志位对应的向量作为整个图像的语义表示,是因为与图像中已有的其它patch块图像相比,这个无明显语义信息的符号会更“公平”地融合图像中各个patch的语义信息,从而更好的表示整个图像的语义。 + + +## 第5期 + +### Q5.1: PaddleClas训练配置文件中都包含了哪些内容?训练模型时如何进行修改? +**A**: +PaddleClas的模型包含6大模块的配置,分别为:全局配置,网络结构(ARCHITECTURE),学习率(LEARNING_RATE),优化器(OPTIMIZER),训练(TRAIN)和验证(VALID)。 + +全局配置主要包含了任务的配置信息,例如类别的数量,训练集内的数据量,训练的epoch数量,网络输入的尺寸等等。如果要训练自定义的任务,或是使用自己的训练集,需要关注这个部分。 + +网络结构的配置定义了要使用的网络。在实际使用时,首先要选择合适的配置文件,所以通常不会修改这部分配置。只有在自定义网络结构,或者对任务有特殊要求时才进行修改。 + +学习率和优化器的配置建议优先使用默认配置,这些参数是我们已经调过的。如果任务的改动比较大,也可以做微调。 + +训练和预测两个配置包含了batch_size,数据集,数据预处理(transforms),读数据进程数(num_workers)等比较重要的配置,这部分要根据实际环境适度修改。要注意的是,paddleclas中的batch_size是全局的配置,即不随卡数发生变化。而num_workers定义的是单卡的进程数,即如果num_workers是8,并且使用4卡训练,则实际有32个worker。 + +### Q5.2: 如何在命令行中快速的修改配置? +**A**: +在训练中,我们常常需要对个别配置不断进行微调,而不希望频繁的修改配置文件。这时可以使用-o来调整,修改是要先按层级写出要改的配置名称,层级之间用点分割,再写出要修改的值。例如我们想要修改batch_size,可以在训练的命令后加上-o TRAIN.batchsize 512。 + +### Q5.3: 如何根据PaddleClas的精度曲线选择合适的模型? +**A**: +PaddleClas提供了多个模型的benchmark,并绘制了性能曲线,主要有三种:准确率-预测时间曲线,准确率-参数量曲线和准确率-FLOPS曲线,纵轴为准确率,横轴分别为预测时间、参数量、FLOPS。一般来说,不同模型在三个图上的表现是一致的。同一个系列的模型在图上采用相同的符号来表示,并且用曲线连接。 + +以准确率-预测时间曲线为例,点越靠上表明准确率越高,约靠左表明速度越快。例如左上区域的模型为又快又准的模型,而最左侧贴近纵轴的点则为轻量级的模型。使用时,可以综合考虑准确率和时间因素,选择合适的模型。举个例子,我们希望模型的运行时间在10ms以下,选择最准确的模型。首先,在横轴的10ms出画一条垂直的线,之后在这条线的左侧找到最高的点,就是符合要求的模型。 + +实际使用中,模型的参数量和FLOPS是稳定不变的,而运算时间在不同的软硬件条件下均会有所变化。如果想更准确的选择模型,那么可以在自己的环境中运行测试,得到该环境下的性能图。 + +### Q5.4: 想在imagenet中增加两个类,能不能把现有全连接层的参数固定,只训练新的两个类别? +**A**: +这个想法理论上可行,但效果恐怕不会太好。如果只是固定全连接层,而前面的卷积层参数发生了变化,那么这些全连接层的作用也无法保证与开始一样。而如果保持整个网络的参数都不变,只训练全连接层的新增两个类别,也比较难训练处理想的结果。 + +如果实际使用中确实需要原有的1000个类别依然很准确,那么可以将新类别的数据加入到原有训练集中,再用预训练模型进行finetune。如果只需要1000个类中的几个类别,那么可以把这部分的数据挑出来,和新增数据混合再finetune。 + +### Q5.5: 使用分类模型做其他任务的预训练模型时,应该选择哪些层作为feature? +**A**: +使用分类模型做其他任务的backbone有很多策略,这里介绍一种较为基础的方法。首先,去掉最后的全连接层,这一层主要包含的是原始任务的分类信息。如果任务比较简单,只要将前一层的输出作为featuremap,并在此基础上添加与任务对应的结构即可。如果任务涉及多尺度,需要选取不同尺度的anchor,例如某些检测模型,那么可以选取每次下采样之前一层的输出作为featuremap。 \ No newline at end of file