0
本文作者: 叢末 | 2019-02-20 09:43 |
雷鋒網(wǎng) AI 科技評論按:深度學(xué)習(xí)中的各種卷積網(wǎng)絡(luò)大家知多少?對于那些聽說過卻又對它們沒有特別清晰的認(rèn)識的小伙伴們,Kunlun Bai 這篇文章非常值得一讀。Kunlun Bai 是一位人工智能、機(jī)器學(xué)習(xí)、物體學(xué)以及工程學(xué)領(lǐng)域的研究型科學(xué)家,在本文中,他詳細(xì)地介紹了 2D、3D、1x1 、轉(zhuǎn)置 、空洞(擴(kuò)張)、空間可分離、深度可分離、扁平化、 分組等十多種卷積網(wǎng)絡(luò)類型。雷鋒網(wǎng) AI 科技評論編譯如下。
如果你曾聽過深度學(xué)習(xí)的各種卷積網(wǎng)絡(luò)(例如 2D/3D/ 1x1 / 轉(zhuǎn)置 /空洞(擴(kuò)張)/ 空間可分離 / 深度可分離 /扁平化 / 分組 / 混洗分組卷積)并疑惑它們到底都是什么的話,你可以通過這篇文章了解它們實際的工作原理。
在文中,我概括性地介紹了在深度學(xué)習(xí)中常見的幾種卷積,并采用了大家都能夠明白的方式來解釋它們。針對這一主題,這篇文章以外也有其他的一些文章可供大家參考,我將這些文章的鏈接附在了文末參考部分,大家可前往閱讀。
希望這篇文章能夠幫助大家建立起對這幾種卷積的認(rèn)知,并為大家的學(xué)習(xí)/研究帶來有用的參考價值。
本文的內(nèi)容包括:
1. 卷積 VS 互關(guān)聯(lián)
2. 深度學(xué)習(xí)中的卷積網(wǎng)絡(luò)(單通道版,多通道版)
3.3D 卷積
4. 1x1 卷積
5. 卷積算法
6. 轉(zhuǎn)置卷積(反卷積,棋盤效應(yīng))
7. 空洞卷積(擴(kuò)張卷積)
8. 可分離卷積(空間可分離 卷積,深度可分離卷積)
9. 扁平化卷積
10. 分組卷積
11. 混洗分組卷積
12. 逐點分組卷積
卷積是一項廣泛應(yīng)用于信號處理、圖像處理以及其他工程/科學(xué)領(lǐng)域的技術(shù)。在深度學(xué)習(xí)中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)這一模型架構(gòu)就由這項技術(shù)命名的。然而,深度學(xué)習(xí)中的卷積本質(zhì)上就是信號/圖像處理中的互關(guān)聯(lián)(cross-correlation)。二者間只有細(xì)微的差別。
不深入考慮細(xì)節(jié)的話,二者的區(qū)別在于:在信號/圖像處理中,卷積被定義為:
它的定義是:一個函數(shù)經(jīng)過翻轉(zhuǎn)和移動后與另一個函數(shù)的乘積的積分。下面的圖像形象化地展示了這個思想:
信號處理中的卷積。過濾函數(shù) g 經(jīng)過翻轉(zhuǎn)然后沿著橫軸滑動。對于該函數(shù)在橫軸上滑過的每個點的位置,都計算出函數(shù) f 與翻轉(zhuǎn)后的函數(shù) g 的重合區(qū)域。這個重合的區(qū)域就是函數(shù) g 在橫軸上滑過的某個特定位置的卷積值。圖像來源:http://fourier.eng.hmc.edu/e161/lectures/convolution/index.html
在這里,函數(shù) g 是一個過濾函數(shù)。這個函數(shù)經(jīng)過翻轉(zhuǎn)然后沿著橫軸滑動。對于該函數(shù)在橫軸上滑過的每個點的位置,都計算出函數(shù) f 與翻轉(zhuǎn)后的函數(shù) g 的重合區(qū)域。這個重合的區(qū)域就是函數(shù) g 在橫軸上滑過的某個特定位置的卷積值。
而另一方面,互關(guān)聯(lián)是這兩個函數(shù)的滑動的點積(dot product)或滑動的內(nèi)積(inner-product)。互關(guān)聯(lián)的過濾函數(shù)不經(jīng)過翻轉(zhuǎn),它直接滑動通過函數(shù) f。函數(shù) f 和函數(shù) g 的重合區(qū)域就是互關(guān)聯(lián)。下圖展示了卷積和互關(guān)聯(lián)的區(qū)別:
在信號處理中,卷積和互關(guān)聯(lián)的區(qū)別。圖像來源:https://en.wikipedia.org/wiki/Convolution
在深度學(xué)習(xí)中,卷積中的過濾函數(shù)是不經(jīng)過翻轉(zhuǎn)的。嚴(yán)格來說,它就是互關(guān)聯(lián)。我們本質(zhì)上就是在執(zhí)行 element-wise 乘法和加法。但是,這個「卷積」僅在深度學(xué)習(xí)中被稱為卷積,可以這樣做的原因是因為卷積在訓(xùn)練期間就學(xué)到了過濾函數(shù)的權(quán)重,如果上面示例中的經(jīng)翻轉(zhuǎn)的函數(shù) g 是正確的函數(shù),那么經(jīng)過訓(xùn)練后,卷積所學(xué)到的過濾函數(shù)就會找到翻轉(zhuǎn)后的函數(shù) g。因此,在正確的卷積中,就不需要在訓(xùn)練前早早地翻轉(zhuǎn)過濾函數(shù)。
執(zhí)行卷積的目的就是從輸入中提取有用的特征。在圖像處理中,執(zhí)行卷積操作有諸多不同的過濾函數(shù)可供選擇,每一種都有助于從輸入圖像中提取不同的方面或特征,如水平/垂直/對角邊等。類似地,卷積神經(jīng)網(wǎng)絡(luò)通過卷積在訓(xùn)練期間使用自動學(xué)習(xí)權(quán)重的函數(shù)來提取特征。所有這些提取出來的特征,之后會被「組合」在一起做出決策。
進(jìn)行卷積操作有許多優(yōu)勢,例如權(quán)重共享(weights sharing)和平移不變性(translation invariant)。此外,卷積也可以考慮到像素的空間關(guān)系。這些優(yōu)勢都非常有幫助,尤其是在許多的計算機(jī)視覺任務(wù)中,因為這些任務(wù)往往涉及到對某些組成部分與其他組成部分有某些空間關(guān)系的目標(biāo)進(jìn)行識別(例如一只狗的身體通常是跟它的腦袋、四條腿以及尾巴相連的)。
2.1 卷積:單通道版
面向單通道的卷積,圖像源自:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
在深度學(xué)習(xí)中,卷積就是元素級別( element-wise) 的乘法和加法。對于一張僅有 1 個通道的圖像,卷積過程如上圖所示,過濾函數(shù)是一個組成部分為 [[0, 1, 2], [2, 2, 0], [0, 1, 2]] 的 3 x 3 矩陣,它滑動穿過整個輸入。在每一個位置,它都執(zhí)行了元素級別的乘法和加法,而每個滑過的位置都得出一個數(shù)字,最終的輸出就是一個 3 x 3 矩陣。(注意:在這個示例中,卷積步長=1;填充=0。我會在下面的算法部分介紹這些概念。)
2.2 卷積:多通道版
在許多應(yīng)用中,我們處理的是多通道的圖像。一個典型的案例就是 RGB 圖像,如下圖所示,每一個 RGB 通道都分別著重于原始圖像的不同方面。
每一個 RGB 通道都分別著重于原始圖像的不同方面,圖片拍攝于:中國云南元陽
另一個多通道數(shù)據(jù)的案例就是卷積神經(jīng)網(wǎng)絡(luò)中的層。一個卷積網(wǎng)絡(luò)層往往都由多個通道(一般為數(shù)百個通道)組成,每一個通道描述出前一個層的不同方面。那我們?nèi)绾螌崿F(xiàn)不同深度的層之間的過渡呢?又如何將深度為 n 的層轉(zhuǎn)化為后面的深度為 m 的層呢?
在介紹這個過程之前,我們先搞清楚幾個名詞:層(layer)、通道(channel)、特征映射(feature map)、過濾器(filter)以及卷積核(kernel)。從層級角度來說,「層」和「過濾器」的概念屬于一個層級,而「通道」和「卷積核」都在下一個層級?!竿ǖ馈购汀柑卣饔成洹故侵竿粋€東西。一層可以有多個通道(或特征映射);如果輸入的是 RGB 圖像,那這個輸入層有 3 個通道?!竿ǖ馈挂话阌脕硇稳荨笇印沟募軜?gòu)。類似地,「卷積核」則用來形容「過濾器」的架構(gòu)。
「層」(「過濾器」)和「通道」(「卷積核」)之間的區(qū)別
過濾器和卷積核之間的區(qū)別非常微妙,有時候,二者可以交替使用,這無疑就制造了些困惑。但根本上來講,二者還是有些細(xì)微區(qū)別的:「卷積核」指的是指權(quán)重組成的 2D 數(shù)組 ;「過濾器」則是由多個卷積核堆疊在一起的 3D 架構(gòu)概念。對于一個 2D 過濾器來說,過濾器就相當(dāng)于卷積核,但是對于一個 3D 過濾器以及深度學(xué)習(xí)中的大多數(shù)卷積而言,一個過濾器由一組卷積核組成。每個卷積核都是獨一無二的,強調(diào)了輸入通道的不同方面。
帶著對這些概念的了解,下面讓我們一起來看看多通道卷積。生成一個輸出通道,就需要將每一個卷積核應(yīng)用到前一層的輸出通道上,這是一個卷積核級別的操作過程。我們對所有的卷積核都重復(fù)這個過程以生成多通道,之后,這些通道組合在一起共同形成一個單輸出通道。下圖可以讓大家更清晰地看到這個過程。
這里假設(shè)輸入層是一個 5 x 5 x 3 矩陣,它有 3 個通道。過濾器則是一個 3 x 3 x 3 矩陣。首先,過濾器中的每個卷積核都應(yīng)用到輸入層的 3 個通道,執(zhí)行 3 次卷積后得到了尺寸為 3 x 3 的 3 個通道。
面向多通道的 2D 卷積的第一步:過濾器每個卷積核分別應(yīng)用到輸入層的 3 個通道上。圖片源自:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
之后,這 3 個通道都合并到一起(元素級別的加法)組成了一個大小為 3 x 3 x 1 的單通道。這個通道是輸入層(5 x 5 x 3 矩陣)使用了過濾器(3 x 3 x 3 矩陣)后得到的結(jié)果。
面向多通道的 2D 卷積的第二步:3 個通道都合并到一起(元素級別的加法)組成了一個大小為 3 x 3 x 1 的單通道。圖片源自:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
同樣地,我們可以將這個過程視作將一個 3D 過濾器矩陣滑動通過輸入層。注意,這個輸入層和過濾器的深度都是相同的(即通道數(shù)=卷積核數(shù))。這個 3D 過濾器僅沿著 2 個方向(圖像的高&寬)移動(這也是為什么 3D 過濾器即使通常用于處理 3D 體積數(shù)據(jù),但這樣的操作還是被稱為 2D 卷積)。在每一個滑過的位置,我們都執(zhí)行元素級別的乘法和加法,最終得出一個數(shù)值。下面這個例子中,過濾器橫向滑過 5 個位置、縱向滑過 5 個位置。全部完成后,我們得到了一個單輸出通道。
看待 2D 卷積的另一個角度:將這個過程視作將一個 3D 過濾器矩陣滑動通過輸入層。注意,這個輸入層和過濾器的深度都是相同的(即通道數(shù)=卷積核數(shù))。這個 3D 過濾器僅沿著 2 個方向(圖像的高&寬)移動(這也是為什么 3D 過濾器即使通常用于處理 3D 體積數(shù)據(jù),但這樣的操作還是被稱為 2D 卷積)。輸出是一個 1 層的矩陣。
現(xiàn)在我們可以看到如何在不同深度的層之間實現(xiàn)過渡。假設(shè)輸入層有 Din 個通道,而想讓輸出層的通道數(shù)量變成 Dout ,我們需要做的僅僅是將 Dout 個過濾器應(yīng)用到輸入層中。每一個過濾器都有 Din 個卷積核,都提供一個輸出通道。在應(yīng)用 Dout 個過濾器后,Dout 個通道可以共同組成一個輸出層。
標(biāo)準(zhǔn) 2D 卷積。通過使用 Dout 個過濾器,將深度為 Din 的層映射為另一個深度為 Dout 的層。
在上部分的最后一張圖中,我們看到了將卷積在 3D 體積上的執(zhí)行情況。但是一般而言,我們依舊將這一操作視為深度學(xué)習(xí)中的 2D 卷積——3D 體積數(shù)據(jù)上的 2D 卷積:其過濾器和輸入層的深度是一樣的;3D 過濾器僅沿著 2 個方向(圖像的高&寬)移動。這樣操作得出的結(jié)果就是一個 2D 圖像(僅有 1 個通道)。
有 2D 卷積,自然就有 3D 卷積。3D 卷積是 2D 卷積的一般化。在 3D 卷積中,過濾器的深度要比輸入層的深度更?。ň矸e核大小<通道大小),結(jié)果是,3D 過濾器可以沿著所有 3 個方向移動(高、寬以及圖像的通道)。每個位置經(jīng)過元素級別的乘法和算法都得出一個數(shù)值。由于過濾器滑動通過 3D 空間,輸出的數(shù)值同樣也以 3D 空間的形式呈現(xiàn),最終輸出一個 3D 數(shù)據(jù)。
在 3D 卷積中,過濾器的深度要比輸入層的深度更?。ň矸e核大小<通道大小),結(jié)果是,3D 過濾器可以沿著所有 3 個方向移動(高、寬以及圖像的通道)。每個位置經(jīng)過元素級別的乘法和算法都得出一個數(shù)值。由于過濾器滑動通過 3D 空間,輸出的數(shù)值同樣也以 3D 空間的形式呈現(xiàn),最終輸出一個 3D 數(shù)據(jù)。
和對 2D 區(qū)域中目標(biāo)的空間關(guān)系進(jìn)行解碼的 2D 卷積相似,3D 卷積也可以描述 3D 空間中目標(biāo)的空間關(guān)系。對于一些應(yīng)用來說,這種 3D 關(guān)系很重要,例如在 CT 和 MRI 等生物醫(yī)學(xué)圖像的 3D 分割/重建中,這些圖像的目標(biāo)如血管都是蜿蜒分布在 3D 空間中的。
由于我們在前一個部分——3D 卷積中探討了深度級別的操作,接下來讓我們了解另一個有趣的操作,1 x 1 卷積。
你或許想知道為什么這個卷積是有幫助作用的。我們剛剛是否讓輸入層中的每個數(shù)值都乘以了一個數(shù)值?是,也不是。對于僅有 1 個通道的層來說,這項操作不重要。在上面的示例中,我們讓每一個組成部分都乘以了一個數(shù)值。
如果輸入層有多個通道,那事情就變得非常有趣了。下圖闡述了 1 x 1 卷積在一個維度為 H x W x D 的輸入層上的操作方式。經(jīng)過大小為 1 x 1 x D 的過濾器的 1 x 1 卷積,輸出通道的維度為 H x W x 1。如果我們執(zhí)行 N 次這樣的 1 x 1 卷積,然后將這些結(jié)果結(jié)合起來,我們能得到一個維度為 H x W x N 的輸出層。
過濾器大小為 1 x 1 x D 的 1 x 1 卷積
1 x 1 卷積最初是在 Network-in-network 的論文(論文閱讀地址:https://arxiv.org/abs/1312.4400)中被提出的,之后在谷歌的 Inception 論文(論文閱讀地址:https://arxiv.org/abs/1409.4842)中被大量使用。1 x 1 卷積具有如下幾個優(yōu)勢:
減少維度以實現(xiàn)更有效率的計算;
進(jìn)行更有效率的低維度嵌入,或者對特征進(jìn)行池化;
卷積以后反復(fù)應(yīng)用非線性特征。
前兩個優(yōu)勢我們可以從上面的圖像中觀察到。執(zhí)行 1 x 1 卷積后,我們明顯減少了維度的深度級別。假設(shè)原始輸入有 200 個通道,1 x 1 卷積會將這些通道(特征)嵌入到一個單通道中。第三個優(yōu)勢在 1 x 1 卷積執(zhí)行后才顯現(xiàn)出來,它會將線性整流函數(shù)(ReLU)等非線性激活函數(shù)添加進(jìn)模型中。非線性特征讓網(wǎng)絡(luò)學(xué)習(xí)更復(fù)雜的函數(shù)。
谷歌的 Inception 論文中也對這些優(yōu)勢進(jìn)行了描述:
「上面這個模塊(至少在這個樸素的形式中)的一個大問題是,即便是數(shù)量適度的 5 x 5 卷積,在有大量過濾器的卷積層之上的計算也會過于昂貴。
這就給提出的框架帶來了第二個思路:明智地減少維度并進(jìn)行投影,不然就會過度增加對于計算的要求。這是基于成功實現(xiàn)嵌入上的:即便是低維度的嵌入也可以容納大量關(guān)于相對較大的圖像塊的信息... 也就是說,在執(zhí)行計算昂貴的 3 x 3 卷積和 5 x 5 卷積前,往往會使用 1 x 1 卷積來減少計算量。此外,它們也可以利用調(diào)整后的線性激活函數(shù)來實現(xiàn)雙重用途?!?/p>
針對 1 x 1 卷積,Yann LeCun 提出了一個非常有趣的角度:「在卷積網(wǎng)絡(luò)中,不存在像「全連接層」這樣的東西,而只有含有一些 1x1 卷積核和 1 個全連接表的卷積層」
我們現(xiàn)在知道了如何處理卷積的深度。接下來討論一下怎樣處理在其他兩個方向(高&寬)中的卷積,以及重要的卷積算法(onvolution arithmetic)。
這里有一些需要了解的名詞:
卷積核大?。↘ernel size):卷積核在前一部分已經(jīng)討論過了。卷積核大小確定卷積的視野。
卷積步長(Stride):它確定的是卷積核滑動通過圖像的步長。步長為 1 表示卷積核一個像素一個像素地滑動通過圖像;步長為 2 則表示卷積核在圖像上每滑動一次就移動了 2 個像素(即跳過 1 個像素)。對于下面這個案例中的圖像,我們采用大于或等于 2 的步長。
填充(Padding):填充定義如何處理圖像的邊界。如果有必要的話,可以通過將輸入邊界周圍的填充設(shè)置為 0,這樣的話,經(jīng)過填充后的卷積(Tensorflow 中的「相同」填充)就可以保持空間輸出維度與輸入圖像的維度一樣。另一方面,如果不在輸入邊界周圍添加 0 填充,未填充的卷積(Tensorflow 中的「有效」填充)僅對輸入圖像的像素執(zhí)行卷積,輸出大小也會小于輸入大小。
下圖表示使用卷積核大小為 3、步長為 1;填充為 1 的 2D 卷積:
這里有一篇不錯的文章(A guide to convolution arithmetic for deep learning,https://arxiv.org/abs/1603.07285)詳細(xì)地描述了算法,大家可前往閱讀。這篇文章對其進(jìn)行了詳細(xì)介紹,并針對不同的卷積核大小、卷積步長以及填充分別進(jìn)行了案例分析。這里我僅僅概括出了最常用的結(jié)果:
對于一個大小為 i、卷積核大小為 k、填充為 p 以及卷積步長為 s 的輸入圖像,經(jīng)過卷積的輸出圖像的大小為 o:
對于許多應(yīng)用以及在許多網(wǎng)絡(luò)架構(gòu)中,我們通常需要朝與標(biāo)準(zhǔn)卷積相反的方向做轉(zhuǎn)換,例如,當(dāng)我們想要執(zhí)行上采樣(up-sampling)時。這些案例其中就包括生成高分辨率圖像以及在自動編碼器或語義分割中將低維度特征映射映射到高維度空間中。(在隨后的案例中,語義分割首先在編碼器中提取特征映射,然后在解碼器中還原原始圖像的大小從而能夠在原始圖像中對每一個像素進(jìn)行分類。)
傳統(tǒng)上,研究者可以通過應(yīng)用插值(interpolation)方案或者手動創(chuàng)建規(guī)則來實現(xiàn)上采樣。神經(jīng)網(wǎng)絡(luò)等現(xiàn)代架構(gòu)則反過來趨向于讓網(wǎng)絡(luò)自己自動學(xué)習(xí)合適的轉(zhuǎn)換,而不需要人類的干預(yù)。我們可以使用轉(zhuǎn)置卷積來實現(xiàn)這一點。
在書面表達(dá)上,轉(zhuǎn)置卷積也稱作反卷積(deconvolution),或小數(shù)步長的卷積(fractionally strided convolution)。不過值得一提的是,將其稱作「反卷積」并不是那么合適,因為轉(zhuǎn)置卷積并不完全是信號/圖像處理中所定義的反卷積。從技術(shù)上來說,信號處理中的反卷積是卷積的逆向操作,跟這里所說的轉(zhuǎn)置卷積不一樣。正因為此,一些論文作者強烈反對將轉(zhuǎn)置卷積稱作反卷積,而大眾要這樣稱呼主要是為了簡單起見。隨后,我們會探討為什么將這種操作稱作轉(zhuǎn)置卷積才是自然且更合適的。
我們可以直接使用卷積來實現(xiàn)轉(zhuǎn)置卷積。例如在下圖的案例中,我們 2 x 2 的輸入上做轉(zhuǎn)置卷積:其卷積核為 3 x 3,卷積步長為 1,填充為 2 x 2 的空格。上采樣的輸出大小為 4 x 4。
將 2 x 2 輸入上采樣為 4 x 4 輸出,圖片源自: https://github.com/vdumoulin/conv_arithmetic
非常有趣的是,研究者可以通過應(yīng)用花式填充和步長,將相同的 2 x 2 輸入圖像映射出不同的圖像大小。下圖中,在同一個卷積核為 3 x 3,卷積步長為 1,填充為 2 x 2 空格的 2 x 2 的輸入(輸入之間插入了一個空格)上做轉(zhuǎn)置卷積,得出的輸出大小為 5 x 5。
將 2 x 2 輸入上采樣為 5 x 5 輸出,圖片源自: https://github.com/vdumoulin/conv_arithmetic
通過觀察上述案例中的轉(zhuǎn)置卷積,我們可以初步建立一些認(rèn)知。但是要想較好地掌握它的應(yīng)用,在電腦上看看它怎樣通過矩陣乘法來實現(xiàn)會比較有用。從中,我們還可以了解到為什么「轉(zhuǎn)置卷積」這個名字更合適。
在卷積中,我們設(shè)定卷積核為 C,輸入圖像為 Large,卷積輸出的圖像為 Small。在做卷積(矩陣乘法)后,我們將大圖像下采樣(down-sample)為小的輸出圖像。矩陣乘法中的卷積實現(xiàn)遵循 C x Large = Small。
下面案例顯示了這項操作如何實現(xiàn)。它將輸入也壓平為 16 x 1 矩陣,之后將卷積核轉(zhuǎn)換為一個稀疏矩陣 (4 x 16),接著在稀疏矩陣和壓平的輸入間執(zhí)行矩陣乘法運算,最終得出的矩陣(4 x 1)轉(zhuǎn)換回 2 x 2 的輸出。
卷積的矩陣乘法:從大小 4 x 4 為 Large 輸入圖像到大小為 2 x 2 的 Small 輸出圖像
現(xiàn)在,如下圖所示,如果我們對等式兩邊的矩陣 CT 進(jìn)行多次轉(zhuǎn)置,并利用一個矩陣和其轉(zhuǎn)置矩陣相乘得出一個單元矩陣的屬性,我們可以得出下面的運算公式:CT x Small = Large。
卷積的矩陣乘法:從大小 2x 2 為 Large 輸入圖像到大小為 4 x 4 的 Small 輸出圖像
正如你在這里看到的,轉(zhuǎn)置卷積執(zhí)行的是從小圖像到大圖像的上采樣。這也是我們所要實現(xiàn)的。而現(xiàn)在,你也可以了解到「轉(zhuǎn)置卷積」這個名字的由來。
轉(zhuǎn)置卷積的通用算法可以在《深度學(xué)習(xí)的卷積算法指南》「A guide to convolution arithmetic for deep learning」這篇文章的「Relationship 13」和「Relationship 14」章節(jié)中找到。
6.1 棋盤效應(yīng)(Checkerboard artifacts)
所謂的「棋盤效應(yīng)」是研究人員在使用轉(zhuǎn)置卷積時可以觀察到的一種令人不快的現(xiàn)象(奇怪的棋盤格狀偽影)。
「棋盤效應(yīng)」的一些案例。圖片源自論文「Deconvolution and Checkerboard Artifacts」,https://distill.pub/2016/deconv-checkerboard/
《反卷積和棋盤效應(yīng)》(Deconvolution and Checkerboard Artifacts,https://distill.pub/2016/deconv-checkerboard)對于這一現(xiàn)象有一個非常好的闡述。大家可以前往閱讀這篇文章了解詳細(xì)內(nèi)容。這里我僅僅概括出關(guān)鍵點。
造成棋盤效應(yīng)的原因是轉(zhuǎn)置卷積的「不均勻重疊」(uneven overlap)。這種重疊會造成圖像中某個部位的顏色比其他部位更深。
在下圖中,頂部這層是輸入層,底部這層則是操作轉(zhuǎn)置卷積后的輸出層。在轉(zhuǎn)置卷積過程中,小的這層映射到大的那層。
在案例(a)中,其卷積步長為 1,過濾器大小為 2。正紅線所標(biāo)出的,輸入圖像上的第一個像素映射為輸出圖像上的第一個和第二個像素。綠線標(biāo)出的則是輸入圖像上的第二個像素映射為輸出圖像上的第二個和第三個像素。這樣的話,輸出圖像上的第二個像素就收到了輸入圖像上的第一個和第二個像素的雙重信息,而整個卷積過程中,輸出圖像中間部分的像素都從輸入圖像中接收到了同樣多的信息,這樣就導(dǎo)致了卷積核重疊的區(qū)域。而在案例(b)中,當(dāng)過濾器的大小增加到 3 時,這個接收到最多信息的中間部分縮小了。但是這樣的話問題不大,因為重疊部分依舊是均勻的。在輸出圖像中間部分的像素從輸入圖像中接收到同樣多的信息。
圖片源自并修改于論文「Deconvolution and Checkerboard Artifacts」,https://distill.pub/2016/deconv-checkerboard/
現(xiàn)在針對下面的案例,我們將卷積步長改為 2。在案例(a)中,過濾器的大小為 2,輸出圖像上的所有像素從輸入圖像中接收到同樣多的信息,它們都從輸入圖像中接收到一個像素的信息,這里就不存在轉(zhuǎn)置卷帶來的重疊區(qū)域。
圖片源自并修改于論文「Deconvolution and Checkerboard Artifacts」,https://distill.pub/2016/deconv-checkerboard/
而在案例(b)中,當(dāng)我們將過濾器大小增至 4 時,均勻的重疊區(qū)域縮小了,但是研究者依舊可以將輸出圖像的中間部分用作有效的輸出,其中每個像素從輸入圖像中接收到的信息是同樣多的。
然而,在案例(c)和(d)中,當(dāng)過濾器大小變成 3 或 5 時,情況就變得非常有趣了。在這兩個案例中,輸出圖像上的每個像素與其毗鄰的像素所接收到的信息量都不相同。研究者在輸出圖像上無法找到一個連續(xù)并均勻的重疊區(qū)域。
當(dāng)過濾器大小無法被卷積步長整除時,轉(zhuǎn)置卷積就會出現(xiàn)「不均勻重疊」。這種「不均勻重疊」會造成圖像中某個部位的顏色比其他部位更深,因而會帶來「棋盤效應(yīng)」。實際上,不均勻重疊區(qū)域會在二維上更加極端。因為二維上的兩個模式會相乘,因而最終的不均勻性是原來的平方。
在應(yīng)用轉(zhuǎn)置卷積時,可以做兩件事情來減輕這種效應(yīng)。第一,確認(rèn)使用的過濾器的大小是能夠被卷積步長整除的,從而來避免重疊問題。第二,可以采用卷積步長為 1 的轉(zhuǎn)置卷積,來減輕「棋盤效應(yīng)」。然而,正如在最近許多模型中所看到的,這種效益依舊可能會顯露出來。
這篇論文進(jìn)一步提出了一個更好的上采樣方法:首先調(diào)整圖像大小(使用最近鄰域內(nèi)插法(Nearest Neighbor interpolation)和雙向性內(nèi)插法(bilinear interpolation)),然后制作一個卷積層。通過這樣做,論文作者成功避免了這一「棋盤效應(yīng)」。大家或許也想要在自己的應(yīng)用中嘗試一下這個方法吧。
(上篇)
via:https://towardsdatascience.com/a-comprehensive-introduction-to-different-types-of-convolutions-in-deep-learning-669281e58215 雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。