caffe中的im2col


參考:http://blog.csdn.net/mrhiuser/article/details/52672824

caffe的卷積過程是im2col和SGEMM(什么是GEMM?http://www.cnblogs.com/mengmengmiaomiao/p/7587005.html)。

一:im2col

一個圖像 input_num=1;


圖像通道 input_channel=1;

圖像高 input_h=4;

圖像寬 input_w=4;

kernel高 kernel_h=3;

kernel寬 kernel_w=3;

stride=1;pad=0;

卷積后,輸出圖像的計算公式:

output_h=(input_h-kernel_h)/stride+1;

output_w=(input_w-kernel_w)/stride+1;




如下圖,(注:圖像中數據不代表圖像的顏色數值)
原圖(圖a)按照從左到右、從上到下的過程,將(a)中大小為3*3(因為kernel大小為3*3)的矩陣拉成右圖(圖b)中的一列。具體過程如下圖所示:
如果stride是2怎么辦?

答案是填零。
二:多通道的im2col

假設有三個通道(R、G、B)圖像通道 input_channel=3;

圖像在內存中的存儲是:首先是連續存儲第一通道的數據,然后再存儲第二通道的數據,最后存儲第三通道的數據。如下圖:
多通道的im2col的過程,是首先im2col第一通道,然后在im2col第二通道,最后im2col第三通道。各通道im2col的數據在內存中也是連續存儲的。如下圖:
三:kernel
圖像的每個通道對應一個kernel通道,如下圖(注:為計算簡單,將kernel的值設置為1,同樣此值不代表顏色數值。)
kernel的通道數據在內存中也是連續存儲的。所以上面的kernel圖像也可以表示為下圖:
三:矩陣乘 sgemm
在caffe中圖像與kernel的矩陣乘,是kernel*img。即:在矩陣乘法中
M=1 ,
N=output_h * output_w
K=input_channels * kernel_h * kernel_w


如下圖所示:
圖像數據是連續存儲,因此輸出圖像也可以如下圖所示【output_h * output_w】=【2*2】:


四:多通道圖像輸出
在caffe中圖像與kernel的矩陣乘中:
M=output_channels ,
N=output_h * output_w
K=input_channels * kernel_h * kernel_w


如下圖:
同樣,多個輸出通道圖像的數據是連續存儲,因此輸出圖像也可以如下圖所示【output_channels*output_h * output_w】=【3*2*2】,
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM