您當前的位置:首頁 > 舞蹈

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

作者:由 煎餅果子不要果子 發表于 舞蹈時間:2021-10-17

主要思路和創新點

這是我看的第一篇小樣本分割的論文,一開始很驚奇文章的做法,後來發現其實一大部分都是之前的常規操作哈哈哈。所以概括起來本文的創新點在於不斷更新支援集特徵,以獲取到訓練圖片更多可能的額外分割物體,同時,也利用了更多未標註的圖片建立新的分支幫助訓練。

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

上圖是文章對以往方法不足之處的一個概括,在使用支援集特徵學習查詢圖片時,只考慮當前的支援類。因此在查詢圖片中潛在的新類比如上圖的人就無法得到學習,在將它監督為背景時,模型降低了對這些新類物體的檢測能力。

首先,講一下本文對這種情況的處理方式。和先前方法一樣,將支撐圖片特徵透過遮罩平均池化(MAP: Masked Average Pooling)獲取該標註類別的原型特徵:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

F 為特徵圖

其實就可以理解為將覆蓋物體的所有特徵平均了~類別 c 還包括了每張圖片中的背景類別,因為背景特徵差距很大,在本文中,作者直接採取平均所有圖片中背景類別作為最終背景原型特徵。

而對於前景來說,則將所有原型特徵使用 K-Means 聚類方法選出 K 個類中心,這些選出的中心特徵實際上並不代表某一種類別,只是明顯前景特徵的一種代表。K 的數量由不同的資料集而定,在實驗細節中,作者稱在 PASCAL-5 中僅使用 5 個聚類,COCO-20 中選取 15 個,甚至沒有訓練集總類別多。

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

之後則根據這些原型特徵對查詢圖片進行分割預測,先計算每個畫素特徵與原型特徵庫中的每個類別特徵的匹配程度,以及因此得到的匹配機率:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

sigma 為溫度超引數,實驗中取 20

之後損失函式採用交叉熵:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

實際上由於訓練和測試的時候不同類別圖片背景差異很大,所以文章提出了動態更新原型背景特徵的方法:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

訓練時候的更新,m 取 0。999

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

測試時候的更新,w 取 0。9

而對於測試時的前景部分類別,為了使小樣本的特徵更具穩定和普遍性,文章透過選擇 K 張與支援圖片特徵相似度最大的圖片來生成偽原型特徵。而每張被選取的圖片則在 ResNet-50/101 第三層進行池化得到區域特徵,每張圖片選取相似度最大的那個區域特徵進行最終的加權平均矯正:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

權重與相似度有關:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

在這些所有的基礎上,作者提出也要透過一個額外的任務分支加快模型的訓練速度與前景挖掘能力。

我在這裡與整個文章敘述順序是反的哈哈哈~

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

實際上這是一張完整的結構圖,在第一個部分,作者先使用訓練好的模型為一些沒有標註的輔助圖片生成偽標籤,偽標籤生成方法和最終預測過程一樣:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

之後在訓練的時候使用相同的編碼器,但對於這部分圖片會額外加一個簡易的解碼器結構,實際上也就是三層卷積,來預測最終分割圖。這部分損失也適用交叉熵,與提前生成的偽標籤圖作損失,總損失為:

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

Emmm……說了這麼多但目前開源的程式碼好像只有最基礎的部分,聊勝於無……

class

MatchingNet

nn

Module

):

def

__init__

self

backbone

):

super

MatchingNet

self

__init__

()

self

backbone

=

resnet

__dict__

backbone

](

pretrained

=

True

def

forward

self

img_s_list

mask_s_list

img_q

):

h

w

=

img_q

shape

-

2

:]

# feature maps of support images

feature_s_list

=

[]

for

k

in

range

len

img_s_list

)):

feature_s_list

append

self

backbone

base_forward

img_s_list

k

]))

# feature map of query image

feature_q

=

self

backbone

base_forward

img_q

# foreground(target class) and background prototypes pooled from K support features

feature_fg_list

=

[]

feature_bg_list

=

[]

for

k

in

range

len

img_s_list

)):

feature_fg_list

append

self

masked_average_pooling

feature_s_list

k

],

mask_s_list

k

==

1

float

())[

None

:])

feature_bg_list

append

self

masked_average_pooling

feature_s_list

k

],

mask_s_list

k

==

0

float

())[

None

:])

# average K foreground prototypes and K background prototypes

feature_fg

=

torch

mean

torch

cat

feature_fg_list

dim

=

0

),

dim

=

0

feature_bg

=

torch

mean

torch

cat

feature_bg_list

dim

=

0

),

dim

=

0

# measure the similarity of query features to fg/bg prototypes

similarity_fg

=

F

cosine_similarity

feature_q

feature_fg

。。。

None

None

],

dim

=

1

similarity_bg

=

F

cosine_similarity

feature_q

feature_bg

。。。

None

None

],

dim

=

1

out

=

torch

cat

((

similarity_bg

[:,

None

。。。

],

similarity_fg

[:,

None

。。。

]),

dim

=

1

*

10。0

out

=

F

interpolate

out

size

=

h

w

),

mode

=

“bilinear”

align_corners

=

True

return

out

def

masked_average_pooling

self

feature

mask

):

feature

=

F

interpolate

feature

size

=

mask

shape

-

2

:],

mode

=

“bilinear”

align_corners

=

True

masked_feature

=

torch

sum

feature

*

mask

[:,

None

。。。

],

dim

=

2

3

))

\

/

mask

[:,

None

。。。

sum

dim

=

2

3

))

+

1e-5

return

masked_feature

實驗結果

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

在 PASCAL-5 資料集上的實驗結果:unlabeled 表示最後提出的那個輔助任務,使用額外的未標註圖片來幫助訓練

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

在 COCO-20 資料集上的實驗結果

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

各組成部分精度貢獻的消融實驗:FG 表示前景矯正;BG 表示背景矯正;Mine 表示使用額外的分支挖掘新類

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

上表表示輔助任務只使用訓練集中的圖片;下表表示額外增加一些其他類的未標註圖片

【更新特徵 - 小樣本分割】Mining Latent Classes for Few-shot Segmentation

一些無標籤資料來源的消融實驗

論文資訊

Mining Latent Classes for Few-shot Segmentation

https://

arxiv。org/pdf/2103。1540

2。pdf

標簽: Feature  list  特徵  none  圖片