CVPR:零樣本通用分割框架
本文經(jīng)計(jì)算機(jī)視覺(jué)研究院公眾號(hào)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。
論文地址:https://arxiv.org/pdf/2306.11087.pdf
01 概要簡(jiǎn)介
這種零樣本分割能力依賴于語(yǔ)義空間中的類間關(guān)系,將從可見(jiàn)類別中學(xué)習(xí)到的視覺(jué)知識(shí)轉(zhuǎn)移到不可見(jiàn)類別中。因此,希望很好地橋接語(yǔ)義視覺(jué)空間,并將語(yǔ)義關(guān)系應(yīng)用于視覺(jué)特征學(xué)習(xí)。
研究者引入了一個(gè)生成模型來(lái)合成不可見(jiàn)類別的特征,該模型連接了語(yǔ)義和視覺(jué)空間,并解決了缺乏不可見(jiàn)訓(xùn)練數(shù)據(jù)的問(wèn)題。此外,為了緩解語(yǔ)義空間和視覺(jué)空間之間的領(lǐng)域差距。首先,通過(guò)學(xué)習(xí)primitives增強(qiáng)vanilla generator,每個(gè)都包含與類別相關(guān)的細(xì)粒度屬性,并通過(guò)選擇性地組裝這些指令來(lái)合成看不見(jiàn)的特征。其次,提出將視覺(jué)特征分為語(yǔ)義相關(guān)部分和語(yǔ)義無(wú)關(guān)部分,語(yǔ)義相關(guān)部分包含有用的視覺(jué)分類線索,但與語(yǔ)義表示不太相關(guān)。然后,與語(yǔ)義相關(guān)的視覺(jué)特征的類間關(guān)系需要與語(yǔ)義空間中的那些類間關(guān)系對(duì)齊,從而將語(yǔ)義知識(shí)轉(zhuǎn)移到視覺(jué)特征學(xué)習(xí)中。該方法在零樣本全景分割、姿態(tài)分割和語(yǔ)義分割方面取得了令人印象深刻的先進(jìn)性能。
02 背景分析
圖像分割旨在將具有不同語(yǔ)義的像素分組,例如類別或?qū)嵗?。深度學(xué)習(xí)方法憑借CNNs和Transformer強(qiáng)大的學(xué)習(xí)能力,極大地提高了圖像分割的性能。然而,由于深度學(xué)習(xí)方法是數(shù)據(jù)驅(qū)動(dòng)的,對(duì)大規(guī)模標(biāo)記訓(xùn)練樣本的強(qiáng)烈需求帶來(lái)了巨大的挑戰(zhàn),這是勞動(dòng)密集型和耗時(shí)的。為了解決這個(gè)問(wèn)題,提出了零樣本學(xué)習(xí)(ZSL)來(lái)對(duì)無(wú)訓(xùn)練樣本的新對(duì)象進(jìn)行分類。最近,ZSL被擴(kuò)展到零樣本語(yǔ)義分割(ZSS)和零樣本實(shí)例分割(ZSI)等分割任務(wù)。在此,研究者進(jìn)一步介紹了零樣本全景分割(ZSP),旨在借助語(yǔ)義知識(shí)構(gòu)建一個(gè)通用的零樣本全景/語(yǔ)義/實(shí)例分割框架,如下圖所示。
然而,目前基于生成模型的方法通常是以每像素級(jí)生成的形式,在更復(fù)雜的場(chǎng)景中不夠魯棒。最近,一些工作提出將分割解耦為類不可知的掩碼預(yù)測(cè)和對(duì)象級(jí)分類。研究者遵循這一策略,并將像素級(jí)生成退化為更穩(wěn)健的對(duì)象級(jí)生成。
此外,先前的生成作品通常學(xué)習(xí)從語(yǔ)義嵌入到視覺(jué)特征的直接映射。這樣的生成器沒(méi)有考慮特征粒度的視覺(jué)語(yǔ)義差距,即圖像包含比語(yǔ)言豐富得多的信息。從粗粒度信息到細(xì)粒度信息的直接映射導(dǎo)致低質(zhì)量的合成特征。為了解決這個(gè)問(wèn)題,研究者提出利用具有非常細(xì)粒度語(yǔ)義屬性的豐富原語(yǔ)來(lái)組成視覺(jué)表示。這些指令的不同集合構(gòu)造不同的類表示,其中集合由指令和語(yǔ)義嵌入之間的相關(guān)性決定。極大地增強(qiáng)了生成器的表達(dá)多樣性和有效性,特別是在豐富的細(xì)粒度屬性方面,使不同類別的合成特征更加可靠和具有鑒別性。
03 新框架介紹
下圖說(shuō)明了提出的方法的總體架構(gòu),具有協(xié)作關(guān)系對(duì)齊和特征去糾纏學(xué)習(xí)(PADing)的原始生成。主干預(yù)測(cè)了一組類不可知掩碼及其相應(yīng)的類嵌入。Primitive生成器被訓(xùn)練為從語(yǔ)義嵌入中合成類嵌入。真實(shí)的和合成的類嵌入被分解為語(yǔ)義相關(guān)和語(yǔ)義無(wú)關(guān)的特征。對(duì)語(yǔ)義相關(guān)特征進(jìn)行關(guān)系對(duì)齊學(xué)習(xí)。使用合成的不可見(jiàn)類嵌入,用可見(jiàn)類別的真實(shí)類嵌入和不可見(jiàn)類別的合成類嵌入來(lái)重新訓(xùn)練分類器。訓(xùn)練過(guò)程在下算法1中進(jìn)行了演示。
- 算法1
Primitive Cross-Modal Generation
由于缺乏看不見(jiàn)的樣本,分類器無(wú)法使用看不見(jiàn)類的特征進(jìn)行優(yōu)化。因此,在可見(jiàn)類上訓(xùn)練的分類器傾向于為所有對(duì)象/材料分配可見(jiàn)組的標(biāo)簽,這被稱為偏差問(wèn)題。為了解決這個(gè)問(wèn)題,以前的方法提出利用生成模型來(lái)合成看不見(jiàn)類的虛假視覺(jué)特征。然而,以往的零樣本分割工作通常采用生成矩匹配網(wǎng)絡(luò)(Generative Moment Matching Network,GMMN)或GAN,它們由多個(gè)線性層組成,作為特征生成器。
這樣的生成器雖然取得了良好的性能,但沒(méi)有考慮特征粒度的視覺(jué)語(yǔ)義差異。眾所周知,圖像通常比語(yǔ)言包含更豐富的信息。視覺(jué)信息提供對(duì)象的細(xì)粒度屬性,而文本信息通常提供抽象和高級(jí)屬性。這種差異導(dǎo)致視覺(jué)特征和語(yǔ)義特征之間的不一致。為了應(yīng)對(duì)這一挑戰(zhàn),提出了一種Primitive Cross Modal Generator,該生成器使用大量可學(xué)習(xí)的Primitiv屬性來(lái)構(gòu)建視覺(jué)表示。
如上圖所示,使用Transformer架構(gòu)構(gòu)建Primitive Generator。
Semantic-Visual Relationship Alignment
眾所周知,類別之間的關(guān)系自然是不同的。例如,有三個(gè)對(duì)象:蘋(píng)果、橙子和奶牛。顯然,蘋(píng)果和桔子的關(guān)系比蘋(píng)果和奶牛的關(guān)系更密切。語(yǔ)義空間中的類關(guān)系是強(qiáng)大的先驗(yàn)知識(shí),而特定于類別的特征生成并沒(méi)有明確地利用這些關(guān)系。如下圖所示,用語(yǔ)義嵌入建立了這樣的關(guān)系,并探索將這些知識(shí)轉(zhuǎn)移到視覺(jué)空間,根據(jù)類關(guān)系進(jìn)行語(yǔ)義視覺(jué)對(duì)齊。通過(guò)考慮這種關(guān)系,對(duì)看不見(jiàn)的類別的特征生成有更多的限制,以拉或推他們與看到的類別的距離。
04 實(shí)驗(yàn)及分析
為了驗(yàn)證新提出方法的有效性,在COCO數(shù)據(jù)上針對(duì)全景分割、實(shí)例分割、語(yǔ)義分割上進(jìn)行了對(duì)比實(shí)驗(yàn),見(jiàn)表1、2、3。實(shí)驗(yàn)結(jié)果表明,本文方法PADing取得先進(jìn)的性能。
Installation:
The code is tested under CUDA 11.2, Pytorch 1.9.0 and Detectron2 0.6.
- Install Detectron2 following the manual
- Run
sh make.sh
underPADing/modeling/pixel_decoder/ops
(Note: 1-2 steps you can also follow the installation process of Mask2Former) - Install other required packages:
pip install -r requirements.txt
- Prepare the dataset following
datasets/README.md
Training
Firstly, download the pretrained weights here or you can train vanilla mask2former backbone using seen classes and convert it using the following command:
python train_net_pretrain.py --config-file configs/panoptic-segmentation/pretrain.yaml --num-gpus 8
python tools/preprocess_pretrained_weight.py --task_name panoptic --input_file panoptic_pretrain/model_final.pth
Then train PADing and finetune the last class embedding layer of the trained mask2former model:
CUDA_VISIBLE_DEVICES=0 python train_net.py --config-file configs/panoptic-segmentati