深度學習之卷積操作中的im2col 理論篇

2021-10-05 10:53:49 字數 1391 閱讀 3842

卷積運算

眾所周知,在深度學習(這裡主要指計算機視覺)中,卷積操作是乙個重要的操作,卷積操作的物件通常是乙個3d matrix,形如[height, width, channels],卷積操作中對應的單個卷積核形狀為[k, k, channels],如下圖所示:

該卷積核在輸入資料上,從左到右,從上到下,以一定的步長(stride)進行滑動,每滑動到乙個位置便計算對應的輸出值,卷積運算的視覺化過程如下所示:

上圖中,藍色部分表示輸入資料,淡紅色的區域表示卷積核所處的區域,綠色部分是卷積運算後的輸出資料。

img2col

img2col理論上就是將乙個3d matrix的輸入資料變成2d matrix,即[height, width, in_channels] --> [height * width, k * k * in_channels], 如下圖所示。(這裡假設了輸入輸出height和width相同,如果不相同,則輸出應變為out_height和out_width)

從上圖可以看到,img2col的輸出上,行數是卷積核在輸入資料上的移動次數,也就是out_heigth * out_width,列數就是乙個卷積核的元素個數。經過上述變換,相當於把原始的輸入資料展開成了2d matrix。

另外需要注意:該操作並不是reshape!!!當卷積核移動步長較小時,每個卷積核的區域是有重疊的。因此通常情況下輸出的2d matrix的元素個數要大於輸入的3d matrix。

再對輸入輸入進行img2col後,我們下一步對卷積核進行變換。將乙個維度為[k, k, in_channels]的卷積核變為[1, k * k * in_channels],即將卷積核拉成1d matrix(或者說是一維向量,統一用matrix表示了)

上述兩步操作完後,卷積操作就變成了如下如所示的矩陣乘法:

上面就是整個卷積流程。

另外剛才說過,對輸入資料進行變換後,通常得到的2d matrix元素要比原資料更多,那這麼做的好處是什麼?

簡而言之就是:矩陣乘法有加速方法和記憶體訪問方式,上述兩點帶來的收益要大於消耗的儲存量。

參考:

深度學習之卷積操作的實現

影象的卷積概述 一般,通過對進行卷積操作,可以對進行某種效果的增強或者是減弱,比如模糊 銳化 浮雕效果等,當然也可以發現中的某些特徵,如查詢物體的邊緣資訊。什麼是卷積核 一張卷積後的效果,絕大部分取決於它的卷積核。卷積核就是乙個2維的陣列,行列數相等而且為奇數 因為每個卷積核都是對於它中心的那個畫素...

深度學習中的卷積型別

使用卷積操作的動機是讓網路關注有意義的區域性特徵,同時因為其引數共享的機制,能夠極大地降低參數量,提高計算效率。深度學習發展至今,衍生出了多種卷積型別。除了常規卷積外,還有轉置卷積 空洞卷積 可分離卷積等。以2d卷積為例,乙個卷積操作通常包含以下幾個引數 卷積核尺寸 kernel size 卷積核的...

關於深度學習中的各種卷積

在訊號 影象處理領域,卷積的定義是 其定義是兩個函式中乙個函式經過反轉和位移後再相乘得到的積的積分。訊號處理中的卷積。過濾器 g 經過反轉,然後再沿水平軸滑動。在每乙個位置,我們都計算 f 和反轉後的 g 之間相交區域的面積。這個相交區域的面積就是特定位置出的卷積值。互相關是兩個函式之間的滑動點積或...