在卷积层的运用_Conv 卷积层
onv 卷積層
一.why CNN for image ?
1.Some Patterns are much smaller than the whole image.
一些模式比起整張圖片來說更小,即尋找模式不用看完整的圖像。
2.The same patterns appear in different regions.
同一個模式可能會出現在不同的區域。
3.Subsamping the pixels will not change the object.
子采樣不會改變物體。
1&2--> Convolution 3-->Pooling
二.作用
提取特征。
三.具體計算過程
卷積主要有兩個特征:局部連接以及權值共享。
參數量:單層卷積層總參數=卷積核個數*(卷積核尺寸+偏置項)
卷積核個數一般通過該卷積層參數設置,卷積核尺寸為Filter*Filter(該層設置參數)*上一層通道數(無需設置),偏置項為1。
(全連接層是節點數相乘。)
卷積的計算量:
(對于某個卷積層,它的FLOPs數量為:考慮偏置項的話,
其中num_params表示該層參數的數目。)
(全連接層:BxMxN , B是batch size,M是輸入形狀,N是輸出形狀。)
四.輸入輸出分析
五.caffe中的卷積實現
caffe是展開成向量實現
對通道為C,高和寬分別為H、W的圖像,在每一個位置上,劃分一個KxK大小的patch,算上通道數,那就是CxKxK大小的patch,一共有HxW個patch:
這樣就完成了由圖像到矩陣的轉化,這種操作在matlab中叫做im2col。需要注意的是,因為每一個像素點都對應一個patch,可以看成patch區域在圖像上滑動,滑動的過程是有重疊的,轉化所得的矩陣大小大于原圖像。
與此同時,將濾波器轉化成矩陣形式。
最后一頁沒畫,但是基本上就是Filter Matrix乘以Feature Matrix的轉置,得到輸出矩陣Cout x (H x W),就可以解釋為輸出的三維Blob(Cout x H x W)。
這樣,卷積就可以轉化為矩陣乘法(Gemm in BLAS)問題,調用GEMM(Generalized Matrix Multiplication)對兩矩陣內積。BLAS有許多性能優良的庫,而且由分銷商Intel和Nvidia針對所有平臺進行優化。
②Group Convolution
Group Convolution分組卷積,最早見于AlexNet——2012年Imagenet的冠軍方法,Group Convolution被用來切分網絡,使其在2個GPU上并行運行,AlexNet網絡結構如下:
常規卷積:如果輸入feature map尺寸為C?H?W,卷積核有N個,輸出feature map與卷積核的數量相同也是N,每個卷積核的尺寸為C?K?K,N個卷積核的總參數量為N?C?K?K,輸入map與輸出map的連接方式如下圖左所示,
Group Convolution顧名思義,則是對輸入feature map進行分組,然后每組分別卷積。假設輸入feature map的尺寸仍為C?H?W,輸出feature map的數量為N個,如果設定要分成G個groups,則每組的輸入feature map數量為CG,每組的輸出feature map數量為NG,每個卷積核的尺寸為CG?K?K,卷積核的總數仍為N個,每組的卷積核數量為NG,卷積核只與其同組的輸入map進行卷積,卷積核的總參數量為N?CG?K?K,可見,總參數量減少為原來的 1G,其連接方式如上圖右所示,group1輸出map數為2,有2個卷積核,每個卷積核的channel數為4,與group1的輸入map的channel數相同,卷積核只與同組的輸入map卷積,而不與其他組的輸入map卷積。
用途:
1.減少參數量,分成G組,則該層的參數量減少為原來的1G
2.Group Convolution可以看成是structured sparse,每個卷積核的尺寸由C?K?K變為CG?K?K,可以將其余(C?CG)?K?K的參數視為0,有時甚至可以在減少參數量的同時獲得更好的效果(相當于正則)。
3.當分組數量等于輸入map數量,輸出map數量也等于輸入map數量,即G=N=C、N個卷積核每個尺寸為1?K?K時,Group Convolution就成了Depthwise Convolution,參見MobileNet和Xception等,參數量進一步縮減,如下圖所示
4.更進一步,如果分組數G=N=C,同時卷積核的尺寸與輸入map的尺寸相同,即K=H=W,則輸出map為C?1?1即長度為C的向量,此時稱之為Global Depthwise Convolution(GDC),見MobileFaceNet,可以看成是全局加權池化,與 Global Average Pooling(GAP) 的不同之處在于,GDC 給每個位置賦予了可學習的權重(對于已對齊的圖像這很有效,比如人臉,中心位置和邊界位置的權重自然應該不同),而GAP每個位置的權重相同,全局取個平均,如下圖所示:
③深度可分離卷積(depthwise separable convolution)
在可分離卷積(separable convolution)中,通常將卷積操作拆分成多個步驟。而在神經網絡中通常使用的就是深度可分離卷積(depthwise separable convolution)。
舉個例子,假設有一個3×3大小的卷積層,其輸入通道為16、輸出通道為32。
那么一般的操作就是用32個3×3的卷積核來分別同輸入數據卷積,這樣每個卷積核需要3×3×16個參數,得到的輸出是只有一個通道的數據。之所以會得到一通道的數據,是因為剛開始3×3×16的卷積核的每個通道會在輸入數據的每個對應通道上做卷積,然后疊加每一個通道對應位置的值,使之變成了單通道,那么32個卷積核一共需要(3×3×16)×32 =4068個參數。
而應用深度可分離卷積的過程是①用16個3×3大小的卷積核(1通道)分別與輸入的16通道的數據做卷積(這里使用了16個1通道的卷積核,輸入數據的每個通道用1個3×3的卷積核卷積),得到了16個通道的特征圖,我們說該步操作是depthwise(逐層)的,在疊加16個特征圖之前,②接著用32個1×1大小的卷積核(16通道)在這16個特征圖進行卷積運算,將16個通道的信息進行融合(用1×1的卷積進行不同通道間的信息融合),我們說該步操作是pointwise(逐像素)的。這樣我們可以算出整個過程使用了3×3×16+(1×1×16)×32 =656個參數。
假設輸入特征圖大小為 D_F×D_F×M,輸出特征圖大小為 D_F×D_F×N,卷積核大小為 D_K×D_K,則傳統卷積的計算量為:
D_K×D_K×M×N×D_F×D_F
深度可分離卷積的計算量為深度卷積和 1×1 卷積的計算量之和:
D_K×D_K×M×D_F×D_F+M×N×D_F×D_F
深度可分離卷積的優點
可以看出運用深度可分離卷積比普通卷積減少了所需要的參數。重要的是深度可分離卷積將以往普通卷積操作同時考慮通道和區域改變成,卷積先只考慮區域,然后再考慮通道。實現了通道和區域的分離。
④Defomable Convolution
可形變卷積的思想很巧妙:它認為規則形狀的卷積核(比如一般用的正方形3*3卷積)可能會限制特征的提取,如果賦予卷積核形變的特性,讓網絡根據label反傳下來的誤差自動的調整卷積核的形狀,適應網絡重點關注的感興趣的區域,就可以提取更好的特征。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的在卷积层的运用_Conv 卷积层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7安装es mysql_Ce
- 下一篇: echo回声不能用了_已懂得用电子分频器