论文题目:
Adaptive Boosting for Domain Adaptation: Towards Robust Predictions in Scene Segmentation
作者信息:
Zhedong Zheng, Yi Yang
论文链接:
https://arxiv.org/pdf/2103.15685.pdf
代码链接:
https://github.com/layumi/AdaBoost_Seg
1.『What』
“难”样本对于 Domain Adaptation 语意分割模型来说特别重要,比如 Cityscapes 中 “train”这种类别出现的场景比较少,自然在“Cityscapes”上的火车预测也特别差。这就导致,每次训练,模型的抖动特别大,有时候不同epoch(如 data shuffle 顺序不同等因素),就会在测试集上就有较大的 performance gap。
所以考虑到难样本挖掘,一个很自然的想法就是用 Adaboost, 这个是我的人脸检测老本行中一个最 work 的策略。具体可见(AdaBoost 笔记 [1]) 大概意思是,每次根据之前的“弱分类器”决定下一轮 我们应该学什么。在人脸检测上,就是根据前一个分类器分错的样本,做针对性的优化。
故本文基于 Adaboost 的概念,做了一个很简单的事情,针对 Domain Adapation 这个任务做 Adaptative Boosting。根据训练过程中的 snapshot(可以看成弱分类器),来针对性“选择”难样本,提高他们采样到的概率,如下图。
2.『How』
1. 其实思路是 还是按照以前模型训练方式,有 source domain 上的 Segmentation loss 和一些正则 Regularization (比如 adversarial loss 拉近两个 domain 的 gap)。
2. 通过这种方法我们可以每轮训练一个模型,得到 weak models (这都是在一次训练中的),我们通过 weight moving average 的方式得到 Student Aggregation 也就是 “臭皮匠们组成的诸葛亮”。
3. 我们根据“诸葛亮” 主分类器和辅助分类器意见不同的样本来估计样本难度。如下图:
4. 通过估计出来的预测 KL 差异(样本难度)
我们去更新目标领域采样器,给难样本多采一些。如下更新采样方式:这里
我们做了 softmax 确保所有样本的概率和是 1。
5. 其实“臭皮匠们组成的诸葛亮”的方式就很简单,就是平均模型参数,在训练过程中,我们用了一个简单的动态公式。进来一个之前臭皮匠就往下来,新来的给一个平均权重。
3.『实验』
需要注意的是:单纯使用难样本采样策略,是不能保证单个模型能训练得更好的。因为就像 Adaboost 一样,我们让模型 overfit 难样本,为了获得一个互补的模型,这个单模型在单独使用的情况下,不一定能更好。我们得到了一个类似的结论,单用难样本只能到 48.1,但结合了模型组合可以到 49.0。同时如果只能模型组合嫩到 48.4 左右的准确率。
归功于弱模型组合,我们的训练过程也比较稳定。相比虚线的传统方案,显然我们组合后的模型较为稳定。
同时我们在几个 benchmarks 也体现出了相对的提升(以及不是 sota 了,最新的 sota 可以关注我们的另一个工作:
https://github.com/chen742/PiPa
另外我们提出的方法在传统像 VGG16backbone 上也 work。
我们也与 MeanTeacher 做了一些比较。我们没有引入 teacher student distillation loss 所以这样反而保证了单个模型的互补性。在 Cifar10 上基于同一个网络结构,我们也比 MeanTeacher 更高一些。