提交 24c7b102 编写于 作者: W weishengyu

add faq

上级 a6667a15
......@@ -6,6 +6,7 @@
* [第2期](#第2期)(2021.01.14)
* [第3期](#第3期)(2020.01.21)
* [第4期](#第4期)(2021.01.28)
* [第5期](#第5期)(2021.02.03)
<a name="第1期"></a>
## 第1期
......@@ -227,3 +228,40 @@ RepVGG网络与ACNet同理,只不过ACNet的`1*d`非对称卷积变成了`1*1`
1. 和BERT相类似,ViT在第一个patch前添加一个`[CLS]`标志位,最后一个结束标志位对应的向量可以作为整个图像的语义表示,从而用于下游的分类任务等。从而使得整个embedding组可以表征该图像不同位置的特征。
2.`[CLS]`标志位对应的向量作为整个图像的语义表示,是因为与图像中已有的其它patch块图像相比,这个无明显语义信息的符号会更“公平”地融合图像中各个patch的语义信息,从而更好的表示整个图像的语义。
<a name="第5期"></a>
## 第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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册