概述
方法的如下图所示:
主要分为两个阶段,第一个阶段给模型输入合成数据集、真实数据集和真实数据集的翻转版本。模型通过训练输出合成数据集的密度图和判断真实数据集是否发生了翻转。第二个阶段,在第一阶段训练的基础上继续使用合成数据集及真实数据集进行预测密度图的训练。其中真实数据集由于没有现成的标签,使用的是不确定度最小的密度图作为伪标签。
不确定度估计
这里使用的是Masksembles方法。具体来说,是在模型的解码器的第一个卷积层后面添加一个Masksembles层。在训练时,对于每一个训练batch,从预先设计好的mask中随机选择一个mask,然后根据其进行特征的丢弃。在推理时,对于一个给定的输入,让模型预测多次,每次使用其中的一个mask。多次预测后的结果可以计算出一个方差,用此方差来衡量不确定度的大小。
图像级别的自监督
尽管可以使用合成数据集进行监督训练,但是这样训练出来的模型却无法保证能在真实数据集上有效果。因此引入了一个分类的辅助任务。这个分类任务就是要判定输入的真实数据集是否被上下翻转了。最后的损失函数如下所示:
Ls是密度图L2损失,La是一个交叉熵损失。
像素级别的自监督
第一阶段训练之后,第二阶段是一个微调的迭代K次过程,训练的损失函数如下:
对于有标签的合成数据集,还是继续进行监督。对于无标签的真实数据集,则是利用了上一阶段(k-1)模型预测的密度图的均值y及其不确定度u,如果u小于某一个阈值(前α%),那么就使用y作为伪标签进行监督。
5. 实现细节
学习率:1e-6
根据网格搜索调参:
λ1 = 10^-4
λ2 = 1
迭代次数K=2
为了估计不确定度,对于每张输入图片,随机预测3次,使用标准差来衡量。α%被设置为10%,也就是说不确定度高于前10%的会被丢弃。
第二阶段的预测翻转任务被丢弃了,这是因为实验证明,不需要这个任务也能有差不多好的效果