TIP 2022 | 领域迁移Adaboost,让模型“选择”学哪些数据!

20天前 60 阅读 ID:672
机器学习算法与自然语言处理
机器学习算法与自然语言处理

论文题目:

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 更高一些。

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn