Residual Pattern Learning: 在不影响模型闭集表现的情况下分割异常物体

论文链接 : arxiv.org/pdf/2211.14...
代码链接 : github.com/yyliu01/RPL
训练细节 : wandb.ai/yy/RPL?work...

导读

Out-of-Distribution (OoD) Segmentation 是在原有的闭集分割器的基础上, 让模型进一步拥有识别异常物体的能力。现在的 SOTA 方法都是基于重新 fine-tuning/retraining 整个闭集 Segmentation 网络, 这样会导致对原本 inlier object 的性能下降。同时, 大多数 OoD 的办法很难对多个不同的环境进行很好的拟合, 导致识别异常物体的性能在不同的场景会落差很大。

在这里和大家分享一波我们 ICCV 2023 中稿的工作。在本次工作中, 我们针对当前 OoD Segmentation中的两个问题进行了优化, 并且用 consistent checkpoint 在所有数据集上取得了非常好的性能。

背景

语义分割模型用于将像素级别的 sample 分类到 In Distribution (ID) 类别中。然而,当在开放世界中部署时,这些模型的可靠性不仅取决于其对 ID 像素的分类能力,还取决于其对 Out-of-Distribution (OoD) 像素的检测能力。比如在 autonomous driving 的任务中, 路上出现一些障碍物 (OoD object, 比如说路障) 的时候, 传统的闭集 semantic segmentation 并不能很好的检测出这些物体。因为原本的 segmentation 模型在训练的时候并没有定义这些种类, 导致这类物体会被判定成 head categories (e.g., road), 会对驾驶造成潜在的危险。

OoD Segmentation 方向概述:

锁网络

最直接的方法就是直接通过 softmax 或者 energy 的结果来把 segmentation 输出的 mask 里面潜在的 low confidence pixel 判断成 OoD。这种方法的好处是不会影响 ID 的 segmentation 性能, 并且不需要训练网络, 但是在遇到复杂的 inlier 或者 outlier 的时候, 性能会下降的很明显, 如上图 (a) 所示。

重新训练

最近的办法主要是通过 Outlier Exposure (OE) 将一个不相干的 OoD 数据集加入到 ID 数据集, 然后fine-tune已经训练好的 close-set segmentation 模型。在这个 fine-tuning 过程中, 利用新加入的 OoD object来强行增加原本 segmentation 模型对异常的敏感度, 使得其 OoD 分割的性能得到了非常大的提升。但是这类方法的重新训练会导致原本 ID 类别的分割的性能受到不可逆的干扰, 如图 (b) 所示。

由这两点为 motivation, 我们想要在保留原本 inlier 的分类性能的情况下, 得到一个稳定有效的 OoD 分割器, 如图 (c)。

方法

Residual Pattern Block (RPL)

与以往直接 fine-tuning/retraining 分割网络不同, 我们在在原本的网络上外接了一个轻便的 RPL block (f~rpl~) ,然后原本的 segmentation 模型会全程锁住。基本思路是, f~rpl~ block 对 ID 的 pixel 不做任何影响, 但是对潜在的 OoD pixel 做一个扰动, 让对应的 confidence 大幅下降, 进而通过最终 map 里的 energy 来判别是不是异常。

在训练过程中, 我们先用原本的网络生成 y_tilde (ID pseudo label):

然后用 RPL 扰动后的原本网络的结果:

对 ID 的 pixel, 我们用 cross-entropy 来做 penalty, 保证原本对 OE 的 OoD object, 我们用下面的 energy cost function 来约束他的能量

在训练的过程中, RPL不会导致原本segmentation模型的性能受到影响, 并且能高效的分割出潜在的OoD pixel。

Context-Robust Contrastive Learning (CoroCL)

目前所有 OoD Segmentation在不同场景下的表现都不稳定, 比如大多数分割器在城市场景下能够很好的检测到物体, 但是在以下乡村的环境 (context) 下就会直接失效。

为了应对这个问题, 增强网络对多个context的鲁棒性, 我们引用了supervised contrastive learning。我们在RPL的基础上多加了一层projection layer, 并且随机提取四种样本, 分别是:

  • 1.) & 2.) ID 场景里的 inlier and anomaly pixel:

  • 3.) & 4.) OoD 场景里的 inlier and anomaly pixel:

我们通过 InfoNCE 来将不同场景的 inlier feature 聚合到一起, 并且推远 anomaly feature

实验

Test Results

(wandb visualisation: wandb.ai/yy/RPL?work...)

我们的结果在多个 benchmark 上获得了最稳定的结果, 超过了之前的 SOTA 超过10个点的 FPR 和20个点的 AuPRC。

Ablation Study

在消融实验里, 我们可以先比较了用 entropy 和 energy 用来当 loss 的结果, 然后比较了使用 RPL 和直接使用一个 binary OoD 检测器 (最后一行), RPL 与 Energy 带来了稳定的提升。然而 RPL 在不同的 context 也有之前 OoD segmentation 的通病: 在 FS-Static\L&F 这种 city 环境下效果很好, 但是在其他的 context benchmark 比如 SMIYC&RoadAnomaly 表现却很差 (25.65 & 17.74), CoroCL 很好的缓解了这个问题。

Ablation of RPL

在上图, 我们比较了原本 close-set 分割模型的 mIoU [39] 和 其他re-training based OoD ([3], [9] and [31]) 在 close-set 的表现。我们的方法和freeze model 的方法 [13] 在ID数据集没有改变, 但是我们的方法有更好的识别 OoD pixel 的性能 (如section 1.) 所示)。

同时如上表, 我们 RPL block 可以对其他的 OoD 的方法在所有 benchmark 带来进一步的提升。

Ablation of CoroCL

我们在对anchor set 和 contrastive set的选择上, 测试了不同的组合。在最后我们发现当使用Anchor为 Inlier 与 (OE) anomaly, Contrastive set为全部种类时效果最好。 在这种组合下, InfoNCE只会分别将不同种类的 ID 互相拉近, 并且推远 OoD 。 与以往的方法不同, 两种 OoD 之间的距离会被忽略。

The Learned RPL Feature

我们用 self-attention:

less 复制代码
torch.einsum('abc,bca->bc', r, r.permute(1,2,0))

来可视化RPL的输出学到的OoD pattern (r)。在上图可以看到, RPL对潜在的OoD object会输出扰动, 而ID的pixel会拟合0输出。

Final Visualisation

我们在上图中对我们模型在不同的场景下做了可视化, 并取得了很好的视觉效果。 颜色越偏红 代表异常可能性越高

写在最后

如果你有更多有趣的工作想分享给各位小伙伴,欢迎添加微信号:cv_huber 或扫描屏幕下方二维码与小编联系。

相关推荐
游是水里的游31 分钟前
【算法day19】回溯:分割与子集问题
算法
不想当程序猿_32 分钟前
【蓝桥杯每日一题】分糖果——DFS
c++·算法·蓝桥杯·深度优先
南城花随雪。1 小时前
单片机:实现FFT快速傅里叶变换算法(附带源码)
单片机·嵌入式硬件·算法
dundunmm1 小时前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
波音彬要多做1 小时前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
程序员老冯头3 小时前
第十五章 C++ 数组
开发语言·c++·算法
AC使者8 小时前
5820 丰富的周日生活
数据结构·算法
cwj&xyp8 小时前
Python(二)str、list、tuple、dict、set
前端·python·算法
xiaoshiguang312 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode