1.几个经典语义分割模型简介
1.1FCN
1.2 PSPSNet
1.3 Deeplabv3
1.4 DANet
1.5 OCR
2. 网络的训练和调参
- 数据增强, 参见链接
- 验证集划分
- 超参数设置
3. 模型融合
- TTA
测试时数据增强TTA(Test Time Augmentation)是常见的集成学习技巧,数据扩增不仅可以在训练时候用,而且可以同样在预测时候进行数据扩增,比如对同一个样本预测三次,然后对三次结果进行平均。
语义分割常用的TTA技巧是多尺度推理和左右翻转,通常能够稳定提升miou。下面是一段示例代码,将原图缩放到5个尺度进行推理,然后直接对分割的概率相加,除此之外还可以对每个尺度的分割类别以投票的方式进行集成。
- ensemble
还可以进行不同模型的融合,比如使用不同的backbone或者不同的segment head,如resnest200_danet +resnest269_danet +efficientnetb6_danet +resnest200_ocr等等。具体融合方式既可以直接相加概率也可以对分割结果硬投票还可以以不同权重融合不同模型的结果。
- snapshot
在论文Snapshot Ensembles中,作者提出使用cyclical learning rate进行训练模型,并保存精度比较好的一些checkopint,最后将多个checkpoint进行模型集成。
由于在cyclical learning rate中学习率的变化有周期性变大和减少的行为,因此CNN模型很有可能在跳出局部最优进入另一个局部最优。在Snapshot论文中作者通过使用表明,此种方法可以在一定程度上提高模型精度,但需要更长的训练时间。
- SWA
SWA(Stochastic Weights Averaging),随机权重平均简单来说就是对训练过程中的多个checkpoints 进行平均,以提升模型的泛化性能。一般来说我们通常选择在验证集上表现最好的模型作为最终模型。但SWA一般在最后采用较高的固定学习速率或者周期式学习速率额外训练一段时间,取多个checkpoints的平均值作为最终模型。另外一点是模型中如果有BN层,那么应该用SWA得到的模型在训练数据中跑一遍得到BN层的running statistics。SWA为什么有效?论文给出的解释是由于模型的参数属于高维空间,SGD训练的模型往往收敛到最优解的边界区域,得到次优解,那么平均多个次优解则可以接近最优解,提升模型的泛化能力。