您當前的位置:首頁 > 詩詞

Learning a Discriminative Feature Network

作者:由 湃森 發表于 詩詞時間:2020-03-19

一、論文資訊

標題:《

Learning a Discriminative Feature Network for Semantic Segmentation

作者:Changqian Yu et al。

原始碼:

https://

github。com/lxtGH/dfn_se

g

文章收錄於CVPR 2018,bib引用如下:

@inproceedings{yu2018learning,

title={Learning a discriminative feature network for semantic segmentation},

author={Yu, Changqian and Wang, Jingbo and Peng, Chao and Gao, Changxin and Yu, Gang and Sang, Nong},

booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},

pages={1857——1866},

year={2018}

}

二、論文解讀

Learning a Discriminative Feature Network

本文由曠世科技提出,主要解決的是語義分割存在的兩個問題:類內不一致和類間無差別。

(1)

inter-class indistinciton

:即類內不一致,指本該屬於同一個物體的兩個部分卻歸為不同類,如圖1第一行那頭牛所示;

(2)

intra-class inconsistency

:即類間無差別,指本不屬於同一類的兩個物體卻歸為同一樣,如圖1第二行的顯示屏和主機所示;

作者將這兩個問題歸咎於沒有將語義分割看做是一個逐畫素的標註問題,而是將每一類的畫素當做一個整體。為了解決這兩個問題,作者設計了一個Discriminative Feature Network (DFN),即特徵判別網路。DFN主要包含了兩個子網路:平滑網路和邊界網路。

Learning a Discriminative Feature Network

(1)

Smooth Network

(S-Net):平滑網路,如圖2所示,S-Net包含了兩個子模組:Refinement Residual Block,

RRB

模組和Channel Attention Block,

CAB

模組,結合global pooling來傾向於選擇更有判別力的特徵;

(2)

Border Network

(B-Net):邊界網路,用於處理邊界特徵,使邊緣更加凸顯。

其中,S-Net用於處理類內不一致問題,考慮了兩個因素:

(1)利用多尺度和全域性上下文特徵來編碼區域性和全域性的資訊;

(2)由於引入了多尺度資訊,對於某個尺度的物體,特徵具有不同程度的判別能力;這可能會導致有些特徵被預測錯誤,因此需要有效的選出具有判別力的特徵;

因此,S-Net做了以下工作:

<1> 利用Unet架構集合RRB模組來捕獲

多尺度

的上下文資訊;

<2> 利用Global average pooling全域性平均池化來捕獲

全域性上下文

資訊;

<3> 利用CAB模組指導

高階特徵

低階特徵

之間的

有效融合

而B-Net主要用於解決類間無差別的問題。大多數現存的方法致力於解決語義分割的密集預測問題,忽略了建模類間的關係。因此,作者在訓練B-Net時整合了

語義邊界損失

semantic boundary loss

)去顯示地學習判別力的特徵從而凸顯出類間的區別。

class

CAB

nn

Module

):

‘’‘ Channel Attention Block ’‘’

def

__init__

self

in_channels

out_channels

):

super

CAB

self

__init__

()

self

global_pooling

=

nn

AdaptiveAvgPool2d

1

self

conv1

=

nn

Conv2d

in_channels

out_channels

kernel_size

=

1

stride

=

1

padding

=

0

self

relu

=

nn

ReLU

()

self

conv2

=

nn

Conv2d

out_channels

out_channels

kernel_size

=

1

stride

=

1

padding

=

0

self

sigmod

=

nn

Sigmoid

()

def

forward

self

x

):

x1

x2

=

x

# high, low

x

=

torch

cat

([

x1

x2

],

dim

=

1

x

=

self

global_pooling

x

x

=

self

conv1

x

x

=

self

relu

x

x

=

self

conv2

x

x

=

self

sigmod

x

x2

=

x

*

x2

res

=

x2

+

x1

return

res

class

RRB

nn

Module

):

‘’‘ Refinement Residual Block ’‘’

def

__init__

self

in_channels

out_channels

):

super

RRB

self

__init__

()

self

conv1

=

nn

Conv2d

in_channels

out_channels

kernel_size

=

1

stride

=

1

padding

=

0

self

conv2

=

nn

Conv2d

out_channels

out_channels

kernel_size

=

3

stride

=

1

padding

=

1

self

relu

=

nn

ReLU

()

self

bn

=

nn

BatchNorm2d

out_channels

self

conv3

=

nn

Conv2d

out_channels

out_channels

kernel_size

=

3

stride

=

1

padding

=

1

def

forward

self

x

):

x

=

self

conv1

x

res

=

self

conv2

x

res

=

self

bn

res

res

=

self

relu

res

res

=

self

conv3

res

return

self

relu

x

+

res

self

global_pool

=

nn

AdaptiveAvgPool2d

1

# 全域性平均池化

方法

Smooth Network

在語義分割中,有時候經常會出現本該屬於同一個物體的兩個部分,網路將其歸為不同地類別——類內不一致問題。導致此類問題的主要原因是由於缺乏足夠的

上下文

資訊。觀察圖2,可以發現作者在Backbone的輸出,緊接著一個全域性平均池化層去獲取全域性上下文資訊。然而,利用GAP得到的特徵圖僅具有高度的語義資訊,對於恢復空間資訊無任何的幫助。因此,大多數的分割方法是利用多尺度資訊來逐漸地恢復空間資訊。遺憾的是,不同尺度的特徵具有不同程度的判別力,如果直接將其融合起來,很有可能會導致錯誤的分類,因此我們需要選擇出更具判別力的特徵來預測出label。

DFN採用ResNet101作為Backbone,模型整體分為5個階段,每個階段具有不同的判別能力:

(1)在lower stage上,模型由於原始影象的解析度較高,能很好的編碼空間資訊;但是由於感受野較小和缺乏相應的語義資訊,因此具有較差的語義一致性;

(2)在higher stage上,模型由於具有更大的感受野,所以語義一致性更強,因此能編碼出更精確的語義資訊;但是由於缺乏足夠的空間資訊,因此預測的結果較為模糊粗糙;

In a work:低階特徵圖具有更精確的空間資訊,高階特徵圖具有更精確的語義資訊。因此,作者設計了CAB模組去更好地融合高階特徵和低階特徵。

目前語義分割框架存在兩類代表性的結構:

(1)以FCN、U-Net為代表的Encoder-Decoder-Style(

EDS

)結構;

(2)以PSPNet、Deeplab系列為代表的Backbone-Style(

BS

)結構;

作者採用的是第(1)種編解碼的結構。作者指出EDS利用了內在的不同stage的多尺度資訊,但是缺乏含有強烈一致性的全域性上下文資訊;另外,像U-Net模型為代表的U-shape網路是透過求和操作來直接結合不同階段的特徵的,這嚴重忽略了不同階段之間所含有的不一致性語義資訊。為了解決這個問題,作者引入了GAP將U-shape網路轉為V-shape網路,引入了強烈的一致性約束;然後設計了CAB模組去強化這種一致性。

Learning a Discriminative Feature Network

這裡闡述下CAB是怎麼操作的:給定兩個特徵圖x1(high-level feature),x2(low-level feature);首先將x1和x2進行concat連線得出輸出x1_2;然後利用GAP得到一個尺寸大小為c*1*1的特徵圖gx;緊著著送入一個[1*1的卷積+relu+1*1的卷積+sigmoid]組合,得到一個Weight Vector;隨後我們將這個帶權的向量於x2相乘;最後再將相乘的結果與x1進行相加得到CAB模組的輸出,得到了更具有語義一致性的輸出特徵圖。

Border Network

上面介紹S-Net的時候,我們提到過在語義分割中,有時候經常會出現本該屬於同一個物體的兩個部分,網路卻將其歸為不同地類別,這是類內不一致問題。另外如開頭所介紹的,還存在一種情況是,如圖1相鄰的顯示屏和主機,由於整體看起來很相似,所以網路將其誤歸為同一類,這是類間無差別的問題。因此,為了提取準確的語義邊界,作者採用語義邊界作為顯式監督,使網路學習具有較強的類間獨特效能力的特徵

B-Net整體結構為bottom-up結構;網路有不同的階段,低階段特徵具有更詳細的資訊,而高階段特徵具有更高階的語義資訊,而我們需要的是具有更多語義資訊的語義邊界。該網路能夠同時從lower stage獲取精確的邊緣資訊,同時從higher stage獲取豐富的語義資訊,從而消除了一些原始邊緣缺乏語義資訊的情況。透過這種方式,高階階段的語義資訊便可以細化低階階段邊緣資訊細節。 利用如[2]中傳統的影象處理方法,從語義分割的ground truth中獲取網路的監督訊號。 為了糾正正負樣本的不均衡,我們使用focal loss來監督邊界網路的輸出。

邊界網路主要關注語義邊界,該語義邊界將邊界兩側的類別區分開。為了提取準確的語義邊界,雙方的特徵將變得更加具有可區分性。 這恰好實現了作者所期待的目標,即儘可能使類間具有區別變得可能。

Network Architecture

以帶預訓練權重的ResNet101網路作為Backbone,結合Smooth Network和Border Network共同組成Discriminative Feature Network(DFN)。網路的損失函式主要包括兩部分,即S-Net的損失和B-Net的損失,如下所示:

Learning a Discriminative Feature Network

實驗細節

資料集介紹

作者在

PASCAL VOC 2012

Cityscapes

這兩個語義分割資料集上進行實驗。

(1)PASCAL VOC 2012資料集包含20個目標類別加1個背景資訊類別,具有1,464張訓練圖片+14,449張驗證圖片+1,456張測試圖片。原始訓練圖片透過[12]中的資料增強方法擴充為10,582張圖片。

(2)Cityscapes資料集是汽車視角下城市街道場景的一個大型語義分割資料集。它包含了30個類別,其中19個類別用於訓練和評估。其中2,979張影象用於訓練,500張影象用於驗證,1,525張影象用於測試,這些影象都是帶精細標註的影象。另外還有19,998張帶粗分割的影象,所有的影象解析度大小為2,048x1,024。

實現細節

(1)作者使用了FCN4[27, 36]的結構,初始化權重為在ImageNet上訓練過的ResNet-101。

(2)訓練細節:

<1> 使用batch_size為32,動量大小為0。9,權重衰減率為0。0001的SGD演算法作為最佳化演算法;

<2> 使用多項式學習衰減策略,衰減率設定為0。9,初始學習率設定為4e-3;

<3>

\lambda

經過對比實驗最終設定為0。1,並設定IOU作為評價指標。

(3)資料增強:

<1> mean subtranction,即均值減法,是一種常用的預處理操作。它對資料中心每個獨立特徵減去其平均值,從幾何上可以理解為在每個維度上都將資料的中心遷移到原點;

<2> random horizontal flip,即隨機水平翻轉;

<3> randomly scale,即隨機尺度縮放,作者總共使用5中尺度{0。5, 0。75, 1, 1。5, 1。75}。這個主要用於增強模型的魯棒性,對效能的提升也是非常關鍵。

消融實驗

(1)首先是驗證隨機尺度增強的消融實驗,可以看升提升了大約3。5個點:

Learning a Discriminative Feature Network

(2)其次是驗證S-Net上的不同模組:Global pooling、Deep supervision、CAB、RRB:

Learning a Discriminative Feature Network

這裡可以看出RRB的提升能力很強勁,直接拔高了將近4個點;另外GP這個就有點懵逼,在最頂層引入個全域性平均池化操作就能提升1。5個點,作者將其歸功於它能夠引入最強的一致性來指導其他階段;還有就是CAB促進了高低階特徵更有效率的融合,提升了1+個點;最後是DS,能夠透過細化層次特徵來提升0。4個點。

(3)然後再驗證B-Net:

Learning a Discriminative Feature Network

(4)最後再驗證整個網路,首先是loss權重

\lambda

的選取,設定一組引數{0。05, 0。1, 0。5, 0。75, 1}

Learning a Discriminative Feature Network

可以看出取值為0。1最好;其次,驗證S-Net和B-Net結合的效果,如下圖所示:

Learning a Discriminative Feature Network

已現有方法對比

Learning a Discriminative Feature Network

總結

本文作者從宏觀的角度重新定義了語義分割,將其視為一項任務,將一致的語義標籤分配給一個物件類別,而不是每個畫素。 本質上,這項任務需要類內一致性和類間區別性。考慮到這兩方面,作者提出了一種特徵判別網路(DFN),它包含了兩個子網路:平滑網路(Smooth Net)和邊界網路(Border Net)。透過雙向的逐步機制(S-Net是top-town結構 & B-Net是bottom-up結構)使其能夠捕捉到更具有判別力的特徵。

標簽: self  語義  NET  channels  特徵