卷積操作轉化成矩陣乘法
- 2019 年 12 月 20 日
- 筆記
參考:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/
平常都是無腦使用Pytorch提供的nn.Conv2d
方法,但是並不關心具體該如何實現,原來是把卷積操作轉化成矩陣乘法,而不是真的通過滑動卷積核來做卷積,下面做具體介紹。
首先看一下下面的示意圖,左邊是輸入影像,右邊是卷積核(為方便說明,只用了一個卷積核)。

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

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

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

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

<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>