论文标题:Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels
作者信息:商汤科技, 上海交通大学, 香港中文大学
录用信息:CVPR 2022 → arXiv:https://arxiv.org/pdf/2203.03884.pdf
代码开源:https://github.com/Haochen-Wang409/U2PL
Project Page:https://haochen-wang409.github.io/U2PL/
背景
半监督学习的核心问题在于有效利用无标注数据,作为有标签样本的补充,以提升模型性能。
- 通常作法是通过样本筛选等方式降低错误伪标签的影响,然而只选择高置信度的预测结果作为无标签样本的伪标签,这种朴素的 self-training 策略会将大量的无标签数据排除在训练过程外,导致模型训练不充分。
- 此外,如果模型不能较好地预测某些 hard class,那么就很难为该类别的无标签像素分配准确的伪标签,从而进入恶性循环。
这篇论文的核心思想:低质量伪标签也应当被合理利用
Motivation: Every Pixel Matters
具体来说,预测结果的可靠与否,我们可以通过熵 (per-pixel entropy) 来衡量,低熵表示预测结果可靠,高熵表示预测结果不可靠。我们通过 Figure 2 来观察一个具体的例子,Figure 2(a) 是一张蒙有 entropy map 的无标签图片,高熵的不可靠像素很难被打上一个确定的伪标签,因此不参与到 re-training 过程,在 FIgure 2(b) 中我们以白色表示。
- figure.c 中的小孩的置信度很高,证明模型预测结果可行。figure.d 中像素点在 motorbike 和 person 两个类别上都具有不低的预测概率且在数值上较为接近,模型无法给出一个确定的预测结果,符合文中定义的 unralibale prediction。但是显然,不属于 car 或者 train这种类别
- 即使是不可靠的预测结果,虽然无法打上确定的伪标签,但可以作为部分类别的负样本,从而参与到模型的训练。这样所有的无标签样本都能在训练过程中发挥作用。
Method
- 对于有标签的数据,利用 student 进行学习训练。然后利用训练好的模型,将无标签数据中的像素分为 reliable 和 unreliable 两种,然后再在这个基础上进行对比表征学习。单个网络的具体组成主要参考的是 ReCo,具体包括 e n c o d e r h , d e c o d e r f encoder h, decoder f encoderh,decoderf 和表征头 g g g。
- 目标函数如下:
- 损失函数优化上,有标签数据直接基于标准的交叉熵损失函数 L s L_s Ls 进行优化。
- 无标签数据则先靠 teacher 给出预测结果,然后根据 pixel-level entropy 分成 reliable pixels 和 unreliable pixels 两大部分 最后分别基于 L u L_u Lu 和 L c L_c Lc 进行优化。这个 L c L_c Lc 就是对比表征的InfoNCE Loss
L c L_c Lc中的正负样本
- 正样本对: 对于有标签样本和无标签样本,筛选的标准是一致的,就是该样本在真值标签类别或伪标签类别上的预测概率大于一个阈值,
- 负样本对:对于有标签样本,因们明确知道其所属的类别,因此除真值标签外的所有类别都可以作为该像素的负样本类别;而对于无标签样本,由于伪标签可能存在错误,因此我们并不完全却行确信标签的正确性,因而我们需要将预测概率最高的几个类别过滤掉,将该像素认作为剩下几个类别的负样本。
实验结果
网络结构:ResNet-101 + Deeplab v3
数据集合:** Classic VOC, Blender VOC, Cityscapes **
- 分数表示标签数据与无标签数据的比例
论文复现
- 具体思路可以按照github上的readMe来,当然可能有几个点需要修改:
文件目录下载
- 数据集下载:
- Download “eftImg8bit_trainvaltest.zip" from: https://www.cityscapes-dataset.com/downloads/
- Download “gtFine.zip” from: https://drive.google.com/file/d/10tdElaTscdhojER_Lf7XlytiyAkk7Wlg/view?usp=sharing
- 下载数据集合,然后将其放入项目中,文件目录如下:
data ├── cityscapes │ ├── gtFine │ └── leftImg8bit ├── splits │ ├── cityscapes │ └── pascal
模型训练
要求:由于图片过大,目前batchsize=4的情况下,也需要8个GPU才能跑。训练步骤如下:
-
迁移学习,下载ImageNet的预训练模型: Baidu Drive Fetch Code: 3p9h
-
for Cityscapes, a model supervised by
744
labeled data and2231
unlabeled data can be trained by:cd experiments/cityscapes/744/ours # use torch.distributed.launch