卷積神經網絡-轉置卷積

一、簡介

我們把從低分辨率特徵圖(小尺寸)到高分辨率特徵圖(大尺寸)稱爲上採樣,上採樣有兩種方式:各種插值方法、轉置卷積(反捲積)。

二、轉置卷積

轉置卷積(Transposed Convolution)又稱爲反捲積(Deconvolution)。在PyTorch中可以使用torch.nn.ConvTranspose2d()來調用,在Caffe中也有對應的層deconv_layer。
轉置卷積常常用於CNN中對特徵圖進行上採樣,比如語義分割和超分辨率任務中。之所以叫轉置卷積是因爲,它其實是把我們平時所用普通卷積操作中的卷積核做一個轉置,然後把普通卷積的輸出作爲轉置卷積的輸入,而轉置卷積的輸出,就是普通卷積的輸入。這樣說可能有點繞,我們可以參照CNN中的反向傳播過程來理解,轉置卷積形式上就和一個卷積層的反向梯度計算相同。既然是輸入輸出對調,那麼就有兩個很重要的特性:
1、轉置的卷積核變爲了普通卷積核的轉置;
2、如果把由輸入特徵圖到輸出特徵圖的計算過程畫成一個計算圖,那麼輸入輸出元素的連接關係是不變的

轉置卷積的矩陣乘法:
在這裏插入圖片描述
我們將上面的416矩陣轉置後與拉平的輸入41矩陣相乘就可以得到輸出的161矩陣。
大家注意看轉置卷積示意圖和轉置卷積的矩陣乘法中對應關係,轉置卷積示意圖灰色區域表示0-padding。比如在轉置卷積示意圖中a11只與y11相關(去掉0項),在矩陣乘法中a11也只與y11相關(去掉0項)。同理類推其他項也符合,雖然轉置卷積示意圖中每個輸出由9個乘加得到,轉置卷積的矩陣乘法每個輸出由4個乘加得到。然後我們將得到的16
1矩陣reshape成4*4矩陣。這裏值得注意的是轉置矩陣中的權值是由網絡學習得到的,而不是直接使用的原來未轉置矩陣中的權值。
值得注意的是,在一些深度學習網絡的開源框架中並不是通過這種這個轉換方法來計算卷積的,因爲這個轉換會存在很多無用的0乘操作,Caffe中具體實現卷積計算的方法可參考 Implementing convolution as a matrix multiplication。

上面討論的是沒有padding(儘管上面的轉置卷積有補0,但這種情況稱爲’valid’),卷積步長等於1的情況。那麼有padding,卷積步長大於1又怎麼計算呢?例如下圖的兩種輸入尺寸的正常卷積後輸出尺寸都爲33,那麼33的輸入特徵圖,padding爲1,以步長爲2的轉置卷積後輸出尺寸到底是55還是66呢。
首先看看步長大於1的情況怎麼做,轉置卷積時候也被叫做小數步長的卷積。對於步長s>1的卷積,其對應的轉置卷積步長s′<1。步長大於1卷積對應的轉置卷積在計算時,在其輸入特徵單元之間插入strider-1個0,插入0後把其看出是新的特徵輸入,然後此時步長s′ 不再是小數而是爲1,後面轉置卷積按步長爲1處理即可。

對於轉置卷積輸出尺寸不確定問題,我們用output_padding參數來控制。
padding就是對輸入特徵圖常規意義的padding,例如’same’模式常取(K-1)/2,output_padding是轉置卷積完成後在輸出特徵圖上增加的padding,已達到控制輸出特徵圖形狀的目的。一般情況下output_padding=strider-1。轉置卷積輸入特徵圖和輸出特徵圖尺寸大小關係爲:

在這裏插入圖片描述

三、總結

本期關於卷及神經網絡相關的內容分享就到這裏了,這塊有大量的概念性的東西和算法,歡迎大家留言交流,共同進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章