卷積操作轉化成矩陣乘法

  • 2019 年 12 月 20 日
  • 筆記

參考:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/

平常都是無腦使用Pytorch提供的nn.Conv2d方法,但是並不關心具體該如何實現,原來是把卷積操作轉化成矩陣乘法,而不是真的通過滑動卷積核來做卷積,下面做具體介紹。

首先看一下下面的示意圖,左邊是輸入影像,右邊是卷積核(為方便說明,只用了一個卷積核)。

image.png

下面是用這個卷積核對輸入影像做卷積操作,最後得到一個2維的平面

image.png

由下圖可以看到卷積操作其實就是把輸入影像劃分成若干個塊(patch),每個塊的維度和卷積核保持一致(這裡暫時忽略stride,padding的影響)。然後我們可以把每個3維的patch展開成一維向量,然後拼接起來得到一個二維矩陣。

image.png

因為每個patch都是和相同的卷積核做卷積,那麼我們也可以同樣把卷積核展開成以為向量。下圖中右邊的卷積核矩陣表示多個卷積核拼湊的結果。

image.png

完整的轉化過程可看下圖:

<footer style="color:white;;background-color:rgb(24,24,24);padding:10px;border-radius:10px;"><br>

<h3 style="text-align:center;color:tomato;font-size:16px;" id="autoid-2-0-0"><br>

<b>MARSGGBO</b><b style="color:white;"><span style="font-size:25px;">♥</span>原創</b>

<p>如有意合作,歡迎私戳</p>

<p>郵箱:[email protected]</p>

<b style="color:white;">

2019-12-20 17:17:07

<p></p>

</b><p><b style="color:white;"></b>

</p></h3><br>

</footer>