极市导读
半监督任务的关键在于充分利用无标签数据,本文基于「 Every Pixel Matters」的理念,有效利用了包括不可靠样本在内的全部无标签数据,大幅提升算法精度。目前 U2PL 已被 CVPR 2022 接收,相关代码已开源。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
今天介绍我们在半监督语义分割(Semi-Supervised Semantic Segmentation)领域的一篇原创工作 U2PL (Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels)。
半监督任务的关键在于充分利用无标签数据,我们基于「 Every Pixel Matters」的理念,有效利用了包括不可靠样本在内的全部无标签数据,大幅提升算法精度。目前 U2PL 已被 CVPR 2022 接收,相关代码已开源,有任何问题欢迎在 GitHub 提出。
半监督学习的核心问题在于有效利用无标注数据,作为有标签样本的补充,以提升模型性能。
经典的 self-training 方法大多遵循着 supervised learning → pseudo labeling → re-training 的基本流程,但学生网络会从不正确的伪标签中学习到错误的信息,因而存在 performance degradation 的问题。
通常作法是通过样本筛选等方式降低错误伪标签的影响,然而只选择高置信度的预测结果作为无标签样本的伪标签,这种朴素的 self-training 策略会将大量的无标签数据排除在训练过程外,导致模型训练不充分。此外,如果模型不能较好地预测某些 hard class,那么就很难为该类别的无标签像素分配准确的伪标签,从而进入恶性循环。
我们认为「 Every Pixel Matters」,即使是低质量伪标签也应当被合理利用,过往的方法并没有充分挖掘它们的价值。
具体来说,预测结果的可靠与否,我们可以通过熵 (per-pixel entropy) 来衡量,低熵表示预测结果可靠,高熵表示预测结果不可靠。我们通过 Figure 2 来观察一个具体的例子,Figure 2(a) 是一张蒙有 entropy map 的无标签图片,高熵的不可靠像素很难被打上一个确定的伪标签,因此不参与到 re-training 过程,在 FIgure 2(b) 中我们以白色表示。
我们分别选择了一个可靠的和不可靠的预测结果,在 Figure 2(c) 和 Figure 2(d) 中将它们的 category-wise probability 以柱状图的形式画出。黄色十字叉所表示的像素在 person 类上的预测概率接近于 1,对于这个预测结果模型非常确信,低熵的该像素点是典型的 reliable prediction。而白色十字叉所表示的像素点在 motorbike 和 person 两个类别上都具有不低的预测概率且在数值上较为接近,模型无法给出一个确定的预测结果,符合我们定义的 unralibale prediction。对于白色十字叉所表示的像素点,虽然模型并不确信它具体属于哪一个类别,但模型在这两个类别上表现出极低的预测概率,显然很确信它不属于 car 和 train 这些类别。
因而,我们想到即使是不可靠的预测结果,虽然无法打上确定的伪标签,但可以作为部分类别的负样本,从而参与到模型的训练。这样所有的无标签样本都能在训练过程中发挥作用。
网络结构上,U2PL 采用经典的 self-training 框架,由 teacher 和 student 两个结构完全相同的网络组成,teacher 通过 EMA 的形式接受来自 student 的参数更新。单个网络的具体组成主要参考的是 ReCo (ICLR'22)[1],具体包括 encoder , decoder 和表征头 。
损失函数优化上,有标签数据直接基于标准的交叉熵损失函数 进行优化。无标签数据则先靠 teacher 给出预测结果,然后根据 pixel-level entropy 分成 reliable pixels 和 unreliable pixels 两大部分 (分流的过程在 Figure 2 有所体现), 最后分别基于 和 进行优化。
如上三个部分构成了 U2PL 全部的损失函数,熟悉 Self-training 的话就只需要关注 对比学习这部分,其实也是十分经典的 InfoNCE Loss[2],后面会具体讨论。
本节主要探讨无标签样本中可靠预测结果的利用方式,即损失函数中的 部分
我们通过熵
对预测结果的可靠性进行衡量,将最可靠的部分筛选出来,再通过常规方式打上伪标签
随着训练过程的推进,我们认为模型的性能在不断攀升,不可靠预测结果的比例相适应地也在不断下降,因此在不同的训练时刻我们对可靠部分的定义是不断变化的,这里我们简单采用了线性变化策略而未作过多探索
需要注意的是,由于仅仅是部分无标签图片像素点参与到这部分的计算,因此需要计算一个权重对这部分损失进行调节。
本节主要探讨无标签样本中不可靠预测结果的利用方式,即损失函数中的 部分。
U2PL 以对比学习为例介绍了如何将不可靠伪标签用于提升模型精度,既然是对比学习,那不可避免的问题就是讨论如何构建正负样本对。接下来的有关对比学习内容的实现细节大量参考了 ReCo[1],因此建议可以先看下这篇论文。
首先是 anchor pixels (queries),我们会给训练过程中出现在 mini-batch 中的每一个类别都采样一系列的 anchor pixel。
然后是 anchor pixel 的 positive sampe 的构建,我们会计算每一个类别的特征中心,每一个类别的 anchor pixel 都 share 一个共同的特征中心作为 postive sample。具体地,我们先从 mini-batch 分类别筛选出可用于计算特征中心的像素点,对于有标签样本和无标签样本,筛选的标准是一致的,就是该样本在真值标签类别或伪标签类别上的预测概率大于一个阈值,筛选出来的这些像素点的表征 的集合 求一个向量均值就能用作于各个类别的特征中心 ,这里可以参见如下公式
最后是 anchor pixel 的 negative sampe 的构建,同样的也需要分成有标签样本和无标签样本两个部分去讨论。对于有标签样本,因们明确知道其所属的类别,因此除真值标签外的所有类别都可以作为该像素的负样本类别;而对于无标签样本,由于伪标签可能存在错误,因此我们并不完全却行确信标签的正确性,因而我们需要将预测概率最高的几个类别过滤掉,将该像素认作为剩下几个类别的负样本。这部分对应的是论文中公式 13-16,但说实话这一段内容用公式去描述还是比较晦涩的。
由于数据集中存在长尾问题,如果只使用一个 batch 的样本作为负样本可能会非常受限,因此采用对比学习中很常用的 MemoryBank 来维护一个逐类别的负样本库,存入的是由 teacher 生成的断梯度特征,以先进先出的队列结构维护。
本文所有的实验结果均是基于 ResNet-101 + Deeplab v3+ 的网络结构完成的,所采用的的数据集构成和评估方式请参见论文描述。
我们在 Classic VOC, Blender VOC, Cityscapes 三种数据集上均和现存方法进行了对比,在全部两个 PASCAL VOC 数据集上我们均取得了最佳精度。在 Cityscapes 数据集上由于我们没能很好的解决长尾问题,落后于致力解决长尾问题的 AEL 方法,我们将 U2PL 叠加在 AEL 上能够取得超越 AEL 的精度,也侧面证明了 U2PL 的通用性。
值得一提的是,U2PL 在有标签数据较少的划分下,精度表现极为优异。
我们在 PSACAL VOC 和 CItyscapes 等多个数据集的多个划分上验证了使用不可靠伪标签的价值。
我们增加了通过二分类去利用不可靠样本的对比实验,证明利用低质量伪标并不只能通过对比学习去实现,只要利用好低质量样本,即使是二分类方法也能取得不错的精度提升。
这里需要着重强调下我们的工作和 negative learning 的区别, negative learning 选用的负样本依旧是高置信度的可靠样本[3],相比之下我们则提倡充分利用不可靠样本而不是把它们过滤掉。
比如说预测结果 由于其不确定性会被 negative learning 方法丢弃,但在 U2PL 中却可以被作为多个 unlikely class 的负样本,实验结果也发现 negative learning 方法的精度不如 U2PL。
这里贴出技术蓝图,便于大家更好地理解论文的核心 story 和实验设计
参考
公众号后台回复“数据集”获取50+深度学习数据集下载~
# CV技术社群邀请函 #
备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)
即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群
每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~