点击下方卡片,关注“小白玩转Python”公众号
《通过特征对应提取进行无监督语义分割》(Unsupervised Semantic Segmentation by Distilling Feature Correspondences),这篇论文将缩小有监督语义分割与无监督语义分割之间的差距。 论文下载地址如下:https://arxiv.org/abs/2203.08414
既然我们没有标签,那么 STEGO 是如何工作的呢?
在此之前,我们先明确一下目标。
目标是什么?
无监督语义分割的目标是在没有任何标记数据的情况下,发现并定位图像中语义上有意义的类别。为了解决这个任务,模型应该能够生成:
语义上有意义的
每个像素的特征是紧凑的(因为我们要对它们进行聚类)
如果你知道 Dino(没有标签的自我蒸馏)或其论文《自监督视觉变压器中的新兴特性》,否则可以将其视为一个特征提取模型。此外,这不是我们可以使用的唯一模型,只要满足上述两个条件,任何模型都可以使用。
他们本可以设计自己的特征提取模型,但由于 Dino 学到的特征在同一图像内和跨图像集合中已经语义一致(如下图所示),因此他们设计了 STEGO(基于能量的图优化的自监督变压器)框架,旨在将这些特征提取成高质量的离散语义标签。
DINO 的特征对应关系。从源图像(左)和目标(KNN)图像(中和右)之间的对应关系用源点的颜色(左图中的十字)在目标图像上绘制
产生这个结果的完整方法可以分为三个主要步骤:
特征对应关系预测类别共现
设 f 和 g 为两个具有空间维度(H, W)和(I, J)的特征张量,设 c 为通道数。使用这些特征我们形成特征对应张量,给出两幅图像区域之间的相似性。(从中提取了 f 和 g)
特征对应向量
这里的条目表示特征张量 f 的空间位置(h, w)和特征张量 g 的位置(i, j)之间的余弦相似性。上述特征对应张量与标签共现张量 L_hwij 强相关,这意味着如果你有两组图像和相应的语义分割真值(例如 k 和 l),并且你构建了一个标签共现张量,那么它与上述特征对应张量强相关。
提取特征对应关系
我们在上一步得到的是一个噪声分割,我们需要正确提取它,以便得到真实的分割。现在训练 S,一个轻量级的分割头,它接收 f 和 g 并输出 s 和 t。然后我们计算 s 和 t 的特征对应张量 S_hwij,与 f 和 g 的 F_hwij 类似。现在使用下面的损失函数,我们尝试将 S_hwij 的条目推向 F_hwij,如果 f 和 g 的两个相应条目之间存在显著耦合。
损失函数
这里的 b 是一个超参数,增加均匀的“负压”,可以用来调整损失函数对特征对应的敏感性。较高的 b 值意味着对对齐的更强的阻碍,而较低的 b 值则允许更多的特征对齐灵活性,基于相关强度。
现在我们要么完全反对齐(-1),要么完全对齐(1)。那些显示出很少或没有相关性的特征呢?为了解决这个问题,我们优化弱相关分割特征,使它们正交。通过将分割对应 S 固定在 0 上,这大大提高了优化的稳定性。因此,现在我们只进行完全对齐,否则 S 为 0。
此外,小物体存在问题(它们具有集中的相关模式)。在这些情况下,F_hwij − b 在大多数区域是负的,损失驱使特征分散而不是聚合。为了使优化更加平衡,我们在特征对应上引入了空间中心化操作:
带有零固定的最终损失函数为:
STEGO 架构
STEGO 使用三个实例的对应损失来训练一个分割头,以提取
图像与自身之间的特征关系
其 K 最近邻(KNNs),
随机其他图像。
这个分割头是一个简单的带有 ReLU 激活的前馈网络。我们首先使用主干通过全局平均池化(GAP)提取全局图像特征。然后我们根据主干特征空间中的余弦相似性构建每个图像的 K 最近邻的查找表。每个训练小批次由一组随机图像 x 和随机最近邻 x_knn 组成。STEGO 的完整损失为:
损失函数
架构的最后一个组件是聚类和 CRF。STEGO 分割头的输出形成明确的聚类。因此,最终使用基于余弦距离的小批量 K 均值算法提取这些聚类,并从 STEGO 的连续特征中计算具体的类别分配。聚类后,我们使用 CRF 进一步细化这些标签的空间分辨率,以获得最终输出。
结果:
· END ·
🌟 想要变身计算机视觉小能手?快来「小白玩转Python」公众号!
回复“Python视觉实战项目”,解锁31个超有趣的视觉项目大礼包!🎁
本文仅供学习交流使用,如有侵权请联系作者删除