引自:https://blog.csdn.net/u014451076/article/details/79156967
bilinear
雙線性插值是目前在語義分割中用的比較多的一種方式,比如FCN中就是用的這種方法。
這種方法特點是不需要進行學習,運行速度快,操作簡單。只需要設置好固定的參數值即可,設置的參數就是中心值需要乘以的系數。
一個簡單的例子可以參考如下(來自互聯網):
接着,同樣的道理,使用f(R1), f(R2)進行插值,推導出來f( P )就可以了.
Deconvolution
Deconvolution是目前爭議比較多的方法,主要是名字上的爭議,由於實現上采用轉置卷積核的方法,所以有人說應該叫(transposed convolution),但是思想上是為了還原原有特征圖,類似消除原有卷積的某種效果,所以叫反卷積(deconvolution). Caffe中叫deconvolution,這里就繼續沿用這個名字.
要理解deconv,要先了解conv的具體是實現方式,在實現過程中,為了使卷積運算更快的執行,通常轉化為矩陣乘法進行處理(因為矩陣乘法有一些加速計算庫)。卷積計算通常的兩種實現方式是:在caffe中使用im2col的方法,在其他的地方使用toeplitz matrix(托普利茲矩陣)進行實現。這里指的反卷積,也叫轉置卷積,它並不是正向卷積的完全逆過程,用一句話來解釋:反卷積是一種特殊的正向卷積,先按照一定的比例通過補 來擴大輸入圖像的尺寸,接着旋轉卷積核,再進行正向卷積。
unpooling
也就是反池化,不需要學習,用的不是太多,參考論文Visualizing and Understanding Convolutional Networks,還有SegNet和DeconvNet
簡單原理:在池化過程中,記錄下max-pooling在對應kernel中的坐標,在反池化過程中,將一個元素根據kernel進行放大,根據之前的坐標將元素填寫進去,其他位置補0
實現代碼可以看SegNet的實現