pull/599/head
weishengyu 2021-02-03 15:35:52 +08:00
parent a6667a15ab
commit 24c7b102c2
1 changed files with 38 additions and 0 deletions

View File

@ -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。