RIPU 水记(语义分割,小样本 迁移学习 主动学习)
《Towards Fewer Annotations: Active Learning via Region Impurity and Prediction Uncertainty for Domain Adaptive Semantic Segmentation》
论文:https://arxiv.org/abs/2111.12940
项目:https://github.com/BIT-DA/RIPU
讲解:BV1oS4y1e7J5
用主动学习做迁移学习,实现极少标注的语义分割
分三步:
- 准备:一个预训练的语义分割模型
- 用算法挑选需要人工标注的区域,做人工标注
- 用新数据混合原数据,训练模型
其中,二三步交替进行,直到标注量达到预设的上限。
他做的是合成的数据集(GTAV,SYNTHIA)迁移到 真实数据集(Cityscapes)
讲道理我认为这个gap并不大,所以他在迁移的时候还是用了源域数据一起训练,完全只是一个finetune级别的迁移。
我认为在迁移gap比较大的时候是不能用源域数据的,如果遇到这种情况应该怎么用主动学习来处理呢。
只用了负伪标签,不用伪标签。因为伪标签往往会受到类别不平衡的影响。
选取区域
选取的标注区域的方法与一般方法不同,不是超像素、也不是网格划分,而是固定尺寸的滑动窗口(也研究了只标注单个像素的情况,这种情况就直接选中心像素)
遍历所有可能的区域,选取评分最高的区域用于标注
评分有两个指标,区域不纯度 和 预测不确定度。最终的评分是两个指标的乘积
区域不纯度:
计算区域内所有类别所占面积之的比例,然后算熵。简单来说就是区域内类别越多,所占面积越平均,不纯度越高。
预测不确定度:
求出每个像素类别的熵,在区域中求平均(分割模型会输出每个像素的one-hot分类,用这个就能计算出像素级的熵了)。也就是说,分类标签出现多个标签概率相近时,不确定度越高。
如果要做单像素标注,就不用区域内平均了。
训练
min Θ L s u p + α 1 L c r s + α 2 L n l t \min _{\Theta} \mathcal{L}_{s u p}+\alpha_{1} \mathcal{L}_{c r}^{s}+\alpha_{2} \mathcal{L}_{n l}^{t} ΘminLsup+α1Lcrs+α2Lnlt
可以看到损失函数有三部分
第一部分,在原数据集和新数据集上计算标准的交叉熵分类损失。
L s u p = L C E s ( I s , Y s ) + L C E t ( I t , Y ~ t ) \mathcal{L}_{s u p}=\mathcal{L}_{C E}^{s}\left(\mathbf{I}_{s}, \mathbf{Y}_{s}\right)+\mathcal{L}_{C E}^{t}\left(\mathbf{I}_{t}, \tilde{\mathbf{Y}}_{t}\right) Lsup=LCEs(Is,Ys)+LCEt(It,Y~t)
第二部分,在原数据集上,做一致性约束,提高光滑性。
L c r s = 1 ∣ I s ∣ ∑ ( i , j ) ∈ I s ∥ P ( i , j ) − P ‾ ( i , j ) ∥ 1 \mathcal{L}_{c r}^{s}=\frac{1}{\left|\mathbf{I}_{s}\right|} \sum_{(i, j) \in \mathbf{I}_{s}}\left\|\mathbf{P}^{(i, j)}-\overline{\mathbf{P}}^{(i, j)}\right\|_{1} Lcrs=∣Is∣1(i,j)∈Is∑∥ ∥P(i,j)−P(i,j)∥ ∥1
计算当前像素值与其邻域平均值之间的 L1 距离,得到单个像素的一致性损失,然后在整张图上做平均。
第三部分,在新数据集上,计算负学习损失。
负学习损失:
在训练初期,标签中有时候会缺席特定的类别,这称为负伪标签 [25,74] 。
比如,假设有三个类别,概率分别为 0.49 0.5 0.01 ,虽然前两个类别具体选哪个还不好定夺,但是第三个肯定不是正确的类别。
我们定义负伪标签:
当概率小于某一个特定值(本文中为0.05),就认为必定不属于该类,是一个负伪标签。
于是我们定义出负学习损失:
L n l t = − 1 Λ ( I t ) ∑ ( i , j ) ∈ I t ∑ c = 1 C π ( P t ( i , j , c ) ) log ( 1 − P t ( i , j , c ) ) \mathcal{L}_{n l}^{t}=\frac{-1}{\Lambda\left(\mathbf{I}_{t}\right)} \sum_{(i, j) \in \mathbf{I}_{t}} \sum_{c=1}^{C} \pi\left(\mathbf{P}_{t}^{(i, j, c)}\right) \log \left(1-\mathbf{P}_{t}^{(i, j, c)}\right) Lnlt=Λ(It)−1(i,j)∈It∑c=1∑Cπ(Pt(i,j,c))log(1−Pt(i,j,c))
其中, Λ ( I t ) \Lambda\left(\mathbf{I}_{t}\right) Λ(It) 表示所有可用的负伪标签数量, 定义为 Λ ( I t ) = ∑ ( i , j ) ∈ I t ∑ c = 1 C π ( P t ( i , j , c ) ) \Lambda\left(\mathbf{I}_{t}\right)=\sum_{(i, j) \in \mathbf{I}_{t}} \sum_{c=1}^{C} \pi\left(\mathbf{P}_{t}^{(i, j, c)}\right) Λ(It)=∑(i,j)∈It∑c=1Cπ(Pt(i,j,c))
该博客介绍了RIPU方法,通过结合主动学习和迁移学习,减少语义分割任务的标注需求。研究者提出使用区域不纯度和预测不确定度作为选择标注区域的依据,同时采用负伪标签策略处理类别不平衡问题。这种方法在小样本情况下有效,适用于数据集迁移,如从合成数据到真实数据的转换。
553

被折叠的 条评论
为什么被折叠?



