卷積,特征圖,轉(zhuǎn)置卷積和空洞卷積的計(jì)算細(xì)節(jié)

最近在做姿態(tài)估計(jì)的項(xiàng)目,在定制和實(shí)現(xiàn)卷積網(wǎng)絡(luò)的時(shí)候發(fā)現(xiàn)自己對里面的一些計(jì)算細(xì)節(jié)還不夠了解,所以整理了該文章,內(nèi)容如下:

  • 卷積計(jì)算過程(單 / RGB 多通道)
  • 特征圖大小計(jì)算公式
  • 轉(zhuǎn)置卷積(反卷積)的計(jì)算過程
  • 空洞卷積的計(jì)算過程

該文章只單純的講解計(jì)算的細(xì)節(jié),關(guān)于對應(yīng)的原理和證明可以戳尾部的參考文獻(xiàn)。


卷積計(jì)算過程(單 / RGB 多通道)


假設(shè)輸入層的大小為 5 x 5,局部感受野(或稱卷積核)的大小為 3 x 3,那么輸出層一個(gè)神經(jīng)元所對應(yīng)的計(jì)算過程(下文簡稱「卷積計(jì)算過程」)如下:

卷積計(jì)算過程

上述計(jì)算對應(yīng)的公式如下:

其中 I 表示輸入,W 表示卷積對應(yīng)的權(quán)重。

每個(gè)卷積核對應(yīng)的權(quán)重 W 在計(jì)算卷積過程中,值是固定的,我們稱為權(quán)重共享

然后,將值輸入到激活函數(shù) σ 中獲得輸出值。

如果將輸入層想像成黑板,局部感受野就像是黑板擦,他會從左往右,從上至下的滑動,每次滑動 1 個(gè)步長(Stride)并且每次滑動都重復(fù)上述的計(jì)算過程,我們就可以得到輸出的特征圖(feature map),如下圖所示:

卷積過程,藍(lán)色表示輸入,綠色表示輸出

有時(shí)候,按照規(guī)定步數(shù)滑動到黑板邊緣時(shí),黑板擦一部分會露出在黑板外,這個(gè)時(shí)候就 不能夠順利執(zhí)行卷積過程了,解決的方法是填充,常見的有兩種填充(Padding)方法,第一種方法為 Valid,第二種方法為 Same,如下圖所示:

Valid 填充方法

Valid 是丟棄的方法,比如上述的 input_width = 7,kernel_width = 5,stride = 3,只允許滑動 1 次,多余的元素則丟掉。

image.png

Same 是補(bǔ)全的方法,對于上述的情況,允許滑動 3 次,但是需要補(bǔ) 4 個(gè)元素,左邊補(bǔ) 2 個(gè) 0,右邊補(bǔ) 2 個(gè) 0,這種方法則不會拋棄邊緣的信息,關(guān)于如何計(jì)算填充數(shù)量會在下小節(jié)中講到。

在實(shí)際應(yīng)用中,輸入的都為彩色圖像(RGB 三通道),也就是說輸入的維度是 [圖片數(shù),圖片高,圖片寬,通道數(shù)],這個(gè)時(shí)候,執(zhí)行卷積的過程如下:

RGB 多通道卷積過程

特征圖大小的計(jì)算公式


我們在設(shè)計(jì)和調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)的時(shí)候,還需要快速知道調(diào)整了卷積核后,輸出特征圖的大小,假定:

  • 輸入圖片 i(只考慮輸入寬高相等)
  • 卷積核大小 f
  • 步長 s
  • 填充的像素?cái)?shù) p

那么輸出的特征圖大小 o 的計(jì)算公式則如下:

o 值的大小與 i,f,p,s 這四個(gè)變量相關(guān),也和填充的方式有關(guān)。

  • 當(dāng)填充方式為 VALID 時(shí),p 值等于 0,代入相應(yīng)的 i,f,p,s 就可以相應(yīng)的計(jì)算出 o 值了。
  • 當(dāng)填充方式為 SAME 時(shí),步長 s 為 1 時(shí),輸出的 o == i,我們則可以計(jì)算出相應(yīng)的 P 值為 p = (f-1) / 2

轉(zhuǎn)置卷積(反卷積,逆卷積)的計(jì)算過程

在理解轉(zhuǎn)置卷積(Transposed Convolution)計(jì)算過程之前,先來看一下如何用矩陣相乘的方法代替?zhèn)鹘y(tǒng)的卷積。

假設(shè)一個(gè)卷積操作,它的輸入是 4x4,卷積核大小是 3x3,步長為 1x1,填充方式為 Valid 的情況下,輸出則為 2x2,如下圖所示:

我們將其從左往右,從上往下以的方式展開,

  • 輸入矩陣可以展開成維數(shù)為 [16, 1] 的矩陣,記作 x
  • 輸出矩陣可以展開成維數(shù)為 [4, 1] 的矩陣,記作 y
  • 卷積核可以表示為 [4, 16] 的矩陣,記作 C,其中非 0 的值表示卷積對應(yīng)的第 i 行 j 列的權(quán)重。
  • 所以卷積可以用 y = C * x ([4, 1] = [4, 16] * [16, 1])來表示
矩陣 C

那么,轉(zhuǎn)置卷積就可以理解為是

空洞卷積的計(jì)算過程

空洞卷積(Dilated convolutions)在卷積的時(shí)候,會在卷積核元素之間塞入空格,如下圖所示:

空洞卷積過程,藍(lán)色表示輸入,綠色表示輸出

這里引入了一個(gè)新的超參數(shù) d,(d - 1) 的值則為塞入的空格數(shù),假定原來的卷積核大小為 k,那么塞入了 (d - 1) 個(gè)空格后的卷積核大小 n 為:

進(jìn)而,假定輸入空洞卷積的大小為 i,步長 為 s ,空洞卷積后特征圖大小 o 的計(jì)算公式為:

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容