語義分割中多尺度特征的配準(zhǔn)問題
1.問題闡述
語義分割的目的是給每一個(gè)像素進(jìn)行正確的分類,這個(gè)定義提供了一種從分類視角看待問題的思路,但不能很好的闡述語義分割所面臨的關(guān)鍵問題。顧名思義,語義分割是將圖像分成若干塊,同時(shí)獲取塊的類別,也就是語義信息。這其中有兩個(gè)關(guān)鍵,一是分割的準(zhǔn)確性,保證每個(gè)類邊緣的準(zhǔn)確;二是類別預(yù)測(cè)的準(zhǔn)確性。要準(zhǔn)確預(yù)測(cè)類別,需要利用深層的網(wǎng)絡(luò)提取語義特征,而隨著網(wǎng)絡(luò)層數(shù)的加深,邊緣細(xì)節(jié)不可避免的損失掉了。
很直觀的我們可以用邊界預(yù)測(cè)的方式來解決這個(gè)問題,也的確有很多論文這么做。但更多的論文是通過融合多尺度特征來保證在獲取健壯的語義表示(大尺度)的同時(shí)維持細(xì)節(jié)(小尺度)。因?yàn)槎喑叨冗€有助于像素分類,畢竟不同的類別可能需要在不同的尺度之下進(jìn)行探測(cè)。圖像的多尺度還有一些其他的優(yōu)勢(shì),比如省內(nèi)存,最近視覺Transformer相關(guān)的論文也有相當(dāng)多的一部分在致力于提取多尺度的特征或者說是恢復(fù)成多尺度的結(jié)構(gòu)。
多尺度特征的提取問題暫且不談,我們重點(diǎn)來討論一下如何同時(shí)利用好不同尺度的特征,也就是如何進(jìn)行多尺度特征融合。以FPN結(jié)構(gòu)為例,小尺度的圖像先經(jīng)過1*1卷積降維使得大家通道數(shù)都一樣,然后大尺度的圖像經(jīng)過一個(gè)上采樣使得大家圖像尺寸一樣,規(guī)模都一樣之后就可以相加了。然而真的可以直接相加嗎,相加默認(rèn)了像素之間存在一個(gè)一一對(duì)應(yīng)的關(guān)系,但這個(gè)對(duì)應(yīng)關(guān)系是否正確呢?在上采樣通常只是雙線性插值的情況下,這個(gè)對(duì)應(yīng)關(guān)系明顯存在疏漏。

最近剛好看到了兩篇論文SFsegNet(ECCV 2020), AlignSeg(TPAMI 2021)都是重點(diǎn)解決的這個(gè)問題,在此特地總結(jié)一下,包括他們的解決思路以及具體的代碼實(shí)現(xiàn)。這兩篇論文都是認(rèn)為像素之間一一對(duì)應(yīng)的關(guān)系存在誤差,需要進(jìn)行糾正,需要尋找每個(gè)像素之間正確的對(duì)應(yīng)關(guān)系,也就是為每個(gè)像素尋找對(duì)應(yīng)點(diǎn)。這不就是一個(gè)配準(zhǔn)問題嗎?當(dāng)然不是很嚴(yán)格的一樣,但是思路打開了,能否借鑒一下配準(zhǔn)領(lǐng)域的知識(shí)呢,譬如這兩篇論文都是用光流的方式進(jìn)行配準(zhǔn),去計(jì)算每個(gè)像素的運(yùn)動(dòng)。
·可不可以不對(duì)所有像素進(jìn)行計(jì)算,只計(jì)算一些關(guān)鍵點(diǎn)?(這樣會(huì)有收益嗎)?
·可不可以用其他的方式配準(zhǔn)?(光流似乎最好實(shí)現(xiàn))?
·不準(zhǔn)的原因是什么,是不是這里發(fā)生了運(yùn)動(dòng)?(肯定不是真實(shí)的運(yùn)動(dòng),是什么的運(yùn)動(dòng)呢)
不管怎樣解決這個(gè)問題,這兩篇論文至少都證明了語義分割中配準(zhǔn)問題是真真實(shí)實(shí)存在的,以下圖來自SFsegNet, 可以很明顯的看到不同尺度之間圖像“對(duì)應(yīng)”像素之間的語義差別還是蠻大的,估計(jì)了光流然后糾正后效果十分明顯。

1.AlignSeg: Feature-Aligned Segmentation Networks
論文地址:
https://arxiv.org/abs/2003.00872
代碼地址:
https://github.com/speedinghzl/AlignSeg
這里只看配準(zhǔn)部分,其他部分有興趣的可以看看原文。

模塊組成很直觀,先對(duì)低分辨率特征上采樣,再與高分辨率特征相連,經(jīng)過1x1卷積降到256,然后BN,激活,經(jīng)過3x3卷積得到四個(gè)通道,其含義就是兩個(gè)尺度特征的offset map(H x W x 2, 因?yàn)橛袃蓚€(gè)方向的偏移,所以乘2)。模塊里沒有體現(xiàn)的就是那個(gè)u函數(shù),也就是如何利用offset map進(jìn)行糾正,糾正之后把兩個(gè)尺度的特征相加即可。論文給出的糾正公式如下:(出自Spatial transformer networks,但論文并沒有進(jìn)行引用,我還是看的SFsegNet發(fā)現(xiàn)的)

拍腦袋想一下,有了offset map,直接按照偏移量將原像灰度值(為了簡(jiǎn)便,這樣表述)賦給新的像點(diǎn)不就好了嗎?為什么要用這個(gè)看起來這么復(fù)雜的公式。實(shí)際上要考慮到偏移不是整數(shù)的情況,直接賦值就是最近鄰插值,不太精確,論文這個(gè)公式就是雙線性插值。
點(diǎn)(h,w)經(jīng)過偏移變成

, 新像點(diǎn)(h,w)的值由偏移后的點(diǎn)附近(-1,1)范圍內(nèi)的點(diǎn)按距離雙線性插值得到。雖然求和范圍是全圖,但把max以及絕對(duì)值展開,就會(huì)發(fā)現(xiàn)只有在距偏移后的點(diǎn)(-1,1)的方格內(nèi)的點(diǎn)才對(duì)權(quán)重有貢獻(xiàn)。
來看一下實(shí)際的代碼實(shí)現(xiàn),發(fā)現(xiàn)論文作者并沒有按論文里說的一起計(jì)算偏移分量,delta_gen還是各自經(jīng)過卷積得到,作者回復(fù)因?yàn)閮蓚€(gè)尺度偏移矩陣的方差不一樣,分開計(jì)算效果更好。
代碼復(fù)雜的部分依然是這個(gè)雙線性插值如何實(shí)現(xiàn),但仔細(xì)一看,我發(fā)現(xiàn)和下一篇的warp函數(shù)基本上完全一樣,這里就不介紹了。它的第二個(gè)插值函數(shù)實(shí)際并沒有用到...
2.Semantic Flow for Fast and Accurate Scene Parsing
論文地址:
https://arxiv.org/abs/2002.10120v3
代碼地址:
https://github.com/lxtGH/SFSegNets
同樣只看配準(zhǔn)部分。

先各自經(jīng)過一個(gè)1*1卷積到指定維數(shù),再對(duì)低分辨率上采樣,將兩個(gè)分辨率特征相連,經(jīng)過3×3卷積降到2維,分別代表x,y方向的offset map,再經(jīng)過一個(gè)warp操作對(duì)低分辨率圖進(jìn)行糾正。
warp操作就是雙線性插值,看起來比較復(fù)雜的代碼就是grid的生成,可以固定h,w的大小,在python命令行里自己輸入一下那幾行語句,從維度和具體的值來加深這一過程的理解。
2.總結(jié)
這兩篇論文解決多尺度特征配準(zhǔn)問題的方式大同小異,區(qū)別就在于AlignSeg分別估計(jì)了 不同分辨率的offset map,并分別進(jìn)行了糾正,而SFsegNet只對(duì)低分辨率圖進(jìn)行了糾正。前 者解釋說估計(jì)兩個(gè)的原因是,配準(zhǔn)靠單方面無法完成。
有趣的是這兩篇論文第一版上arXiv的時(shí)間都是Mon, 24 Feb 2020。
作者:圖拉