点击下方卡片,关注“CVer”公众号
AI/CV重磅干货,第一时间送达
点击进入—> CV 微信技术交流群
转载自:阿柴的算法学习日记
在之前读的一篇有意思的文章(ICCV2021-DINO:无监督预训练的ViT居然能够包含关于图像语义分割的明确信息?)中,我们知道了无监督预训练的Transformer能够具有一定的将图像中属于同一类别的区域分割出来的能力,当时就在想这其实可以作为先验信息来指导无监督语义分割模型的训练。不过,对于无监督语义分割确实了解的过少,没有细究。今天无意间看到已经有一些方法开始这么做了,并且效果还不错,所以阅读了其中一篇,顺手总结一下。
Discovering Object Masks with Transformers for Unsupervised Semantic Segmentation
论文地址:https://arxiv.org/pdf/2206.06363.pdf
开源代码:https://github.com/wvangansbeke/MaskDistill

一、背景介绍

无监督语义分割任务的意义闭着眼睛想肯定是那几句话嘛:全监督语义分割标签费时费力,弱监督语义分割对标签依赖性减弱但仍然需要标签,这不,无监督语义分割的意义就来了。
无监督语义分割任务的目的是将可能属于同一类别的像素分为一组,值得注意的是,并不要求模型知道每个组真实对应哪一个语义类别。比如说一张图片里面有猫、狗、背景三个类别,模型将图片里的猫、狗、背景分为了三组,但是模型自己是不知道这三组像素与真实语义类别的对应关系的,只不过能将这些类别的像素区分开。
想要将分组和真实的类别对应起来,我看,文中的实验部分提到了两种设置:
Linear classifier:在无监督分割模型训练结束之后,将分割模型的参数Frozen,然后在分割模型产生的特征上额外加一层1*1卷积(即分类器),从而对应到语义分类。(所以对应想将分组对应到语义类别还是需要类别标签?所以我费这老大劲进行无监督语义分割干嘛?直接image-level的弱监督语义分割不香吗?VOC数据集的mIoU都能到70几了,这篇文章才62.)
Clustering:通过 Hungarianmatching [Kuhn, H.W.: The hungarian method for the assignment problem. Naval research logistics quarterly 2(1-2), 83–97 (1955) 6, 10] 将分组预测与GT进行比较,但是效果较差。
按本文所述,无监督语义分割在这之前分为两个主流的方法:
End to End类型:这一类型的方法,通过对图像进行数据增强来施加聚类一致性而实现聚类的功能(其实就是对比学习的思路?)。作者不建议这种方法,应该它们会让模型聚焦于图像的颜色、纹理等低级特征。我倒觉得这一类的方法挺优美而简洁的。
自下而上多阶段类型:首先,利用边缘检测或显著性估计来获取可能属于同一类别的的区域的先验信息。然后使用这些区域来学习语义embedding。最后,通过 K-means 对embedding进行聚类得到分割结果。作者更推荐这种方法。
但是,文中提到自下而上的方法,在最开始获取区域先验信息的时候,目前包括:边缘检测、显著性检测、超像素等,都有各自的缺陷。比如,显著性检测就只适合以对象为中心的图像,并且会使得不同类别的图像区域合并在一起(如图1中的第二行),边缘检测或者超像素会使得图像中同一类别被切割成很多块(如图1中的第一行)。而基于Transformer无监督预训练得到的区域,则已经具有了一定的语义信息了,因此得到的区域也比较好(图1中的第三行)
图 1: 不同方法得到的图像区域的比较。第三行为Transformer得到的
因此,作者
基于
无监督预训练Transformer能够达到一定包含语义信息的图像区域的信息,结合自下而上的多阶段方法,提出了本文的工作。

二、方法简介

第一阶段:获取 图像 mask
不用公式来描述这个过程就是:
1)
搞一个无监督预训练的Transformer模型,然后加载它的预训练参数;

2)每一个 patch token 与 CLS token 相乘,得到每一个token与CLS token的相似度a_cls。然后 patch token 之间两两相乘得到 token之间的相似度 A。
3)选取a_cls 中与 CLS 相似度最大的token对应的 patch 作为“源patch”,该区域往往对应于最具辨别力的图像区域,例如鸟的喙、犀牛的角。
4)选取a_cls中相似度前 K 的patch作为proposal。proposal中的 patch 与 patch”的相似度大于0的被选取出来(根据 A 可知),这个集合称为 P'。
5)
产生mask,
P'中的patch和patch”也被标为了1。然后将
与P'集合中的patch的相似度的和大于0的patch标为1。这一步的目的我理解为语义传播,也就是将mask中被标记为1的区域扩大,不然太少了。

这样,到目前为止,我们得到了很多个被标记为 1 的patch,它们应该都属于前景类别。根据Transformer给图像分割patch的原理,我们也很容易知道它在图中的坐标、范围。但是还不能区分他们的组别。

第二阶段:将 mask 赋予定义的组别信息
这一个阶段就是训练一个Mask-RCNN来将这些赋予之前被标记为1的patch的组别信息。Mask-RCNN的目标函数为:
其中,b,M为上一阶段获取的patch的边界框的坐标,以及是否为前景类别。由于不知道组别,所以c是由对CLS token做k-means聚类得到的结果。区域带尖尖的符号为模型相应的预测值。
这一阶段后,我们也可以得到前景patch的组别信息。

第三阶段:利用 mask 训练分割模型
这一步怎么做就很明显了,用Mask-RCCN的输出作为分割模型的伪标签(当然怎么处理成分割模型的伪标签有一定的技巧,可以参见原文)来训练分割模型即可。

三、实验

点击进入—> CV 微信技术交流群
CVPR 2022论文和代码下载
后台回复:CVPR2022,即可下载CVPR 2022论文和代码开源的论文合集
后台回复:Transformer综述,即可下载最新的3篇Transformer综述PDF
图像分割和Transformer交流群成立
扫描下方二维码,或者添加微信:CVer6666,即可添加CVer小助手微信,便可申请加入CVer-图像分割或者Transformer 微信交流群。另外其他垂直方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch、TensorFlow和Transformer等。
一定要备注:研究方向+地点+学校/公司+昵称(如图像分割或者Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲扫码或加微信: CVer6666,进交流群
CVer学术交流群(知识星球)来了!想要了解最新最快最好的CV/DL/ML论文速递、优质开源项目、学习教程和实战训练等资料,欢迎扫描下方二维码,加入CVer学术交流群,已汇集数千人!
扫码进群
▲点击上方卡片,关注CVer公众号
整理不易,请点赞和在看
继续阅读
阅读原文