* 可以开启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)。
* 可以开启 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)。
* 对于*Fsq*部分,关键是求得*C*维的向量,因此不局限于使用*Global Average Pooling*操作,*SENet*作者认为,最终求得的*scale*是按通道分别作用于*U*的,因此需要基于对应通道的信息计算对应的*scale*,故使用了最简单的*Global Average Pooling*操作,最终求得的*scale*向量表示了不同通道之间的分布关系,而忽略了同一个通道中的分布关系。
**A**:Label_smoothing 是深度学习中的一种正则化方法,其全称是 Label Smoothing Regularization(LSR),即标签平滑正则化。在传统的分类任务计算损失函数时,是将真实的 one hot 标签与神经网络的输出做相应的交叉熵计算,而 label_smoothing 是将真实的 one hot 标签做一个标签平滑的处理,使得网络学习的标签不再是一个 hard label,而是一个有概率值的 soft label,其中在类别对应的位置的概率最大,其他位置概率是一个非常小的数。在 label_smoothing 中,epsilon 参数描述了将标签软化的程度,该值越大,经过 label smoothing 后的标签向量的标签概率值越小,标签越平滑,反之,标签越趋向于 hard label。具体到数据集来说:
-**【备注】** 不太建议根据 loss 来重新调整训练策略,在使用不同的数据增广后,train loss 的大小差异较大,如使用 Cutmix 或者 RandAugment 后,train loss 会大于 test loss,当数据增广策略减弱后,train loss 会小于 test loss,所以较难调整。
**A**:最终的 FC 的权重是一个大的矩阵,大小为 C*class_num,其中 C 为 FC 前一层的神经单元个数,如 ResNet50 中的 C 为 2048,可以通过降低 C 的值来进一步减小 FC 权重的大小,比如,可以在 GAP 之后加一层维数较小的 FC 层,这样可以大大缩小最终分类层的权重大小。
注:“Plain结构”与“结构重参数化(structural re-parameterization)技术”出自论文“RepVGG: Making VGG-style ConvNets Great Again”。Plain结构网络模型指整个网络不存在分支结构,也即网络中第`i`层layer的输入为第`i-1`层layer的输出,第`i`层layer的输出为第`i+1`层layer的输入。
ACNet意为“Asymmetric Convolution Block”,即为非对称卷积模块,该思想出自论文“ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks”,文章提出了以“ACB”结构的三个CNN卷积核为一组,用来在训练阶段替代现有卷积神经网络中的传统方形卷积核。
ACNet 意为“Asymmetric Convolution Block”,即为非对称卷积模块,该思想出自论文“ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks”,文章提出了以“ACB”结构的三个 CNN 卷积核为一组,用来在训练阶段替代现有卷积神经网络中的传统方形卷积核。
2. Vision Transformer利用的归纳偏置是有序列能力Sequentiality和时间不变性Time Invariance,即序列顺序上的时间间隔的联系,因此也能得出在更大规模数据集上比CNN类的模型有更好的性能。文章Conclusion里的“Unlike prior works using self-attention in computer vision, we do not introduce any image-specific inductive biases into the architecture”和Introduction里的“We find that large scale training trumps inductive bias”,可以得出直观上inductive bias在大量数据的情况中的产生是衰减性能,应该尽可能丢弃。
2. Vision Transformer 利用的归纳偏置是有序列能力 Sequentiality 和时间不变性 Time Invariance,即序列顺序上的时间间隔的联系,因此也能得出在更大规模数据集上比 CNN 类的模型有更好的性能。文章 Conclusion 里的“Unlike prior works using self-attention in computer vision, we do not introduce any image-specific inductive biases into the architecture”和 Introduction 里的“We find that large scale training trumps inductive bias”,可以得出直观上 inductive bias 在大量数据的情况中的产生是衰减性能,应该尽可能丢弃。
* A: `batch size`是训练神经网络中的一个重要的超参数,该值决定了一次将多少数据送入神经网络参与训练。论文[Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour](https://arxiv.org/abs/1706.02677),当`batch size`的值与学习率的值呈线性关系时,收敛精度几乎不受影响。在训练ImageNet数据时,大部分的神经网络选择的初始学习率为0.1,`batch size`是256,所以根据实际的模型大小和显存情况,可以将学习率设置为0.1*k,batch_size设置为256*k。在实际任务中,也可以将该设置作为初始参数,进一步调节学习率参数并获得更优的性能。
* Q: 什么是`batch size`?在模型训练中,怎么选择合适的 `batch size`?
* A: `batch size` 是训练神经网络中的一个重要的超参数,该值决定了一次将多少数据送入神经网络参与训练。论文 [Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour](https://arxiv.org/abs/1706.02677),当 `batch size` 的值与学习率的值呈线性关系时,收敛精度几乎不受影响。在训练 ImageNet 数据时,大部分的神经网络选择的初始学习率为 0.1,`batch size` 是 256,所以根据实际的模型大小和显存情况,可以将学习率设置为 0.1*k,batch_size 设置为 256*k。在实际任务中,也可以将该设置作为初始参数,进一步调节学习率参数并获得更优的性能。
* A:(1)可以使用更大的预测尺度,比如说训练的时候使用的是224,那么预测的时候可以考虑使用288或者320,这会直接带来0.5%左右的精度提升。(2)可以使用测试时增广的策略(Test Time Augmentation, TTA),将测试集通过旋转、翻转、颜色变换等策略,创建多个副本,并分别预测,最后将所有的预测结果进行融合,这可以大大提升预测结果的精度和鲁棒性。(3)当然,也可以使用多模型融合的策略,将多个模型针对相同图片的预测结果进行融合。
* A:(1)可以使用更大的预测尺度,比如说训练的时候使用的是 224,那么预测的时候可以考虑使用 288 或者 320,这会直接带来 0.5%左右的精度提升。(2)可以使用测试时增广的策略(Test Time Augmentation, TTA),将测试集通过旋转、翻转、颜色变换等策略,创建多个副本,并分别预测,最后将所有的预测结果进行融合,这可以大大提升预测结果的精度和鲁棒性。(3)当然,也可以使用多模型融合的策略,将多个模型针对相同图片的预测结果进行融合。