卷積轉換為矩陣運算中填充數的計算-GEMM
要將卷積操作轉換為矩陣乘積的第一步是要做img2col操作,如下圖,想詳細了解看這裏:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/
在執行convertImageTocolumn操作的時候,傳入的原始圖片Img的大小為3*416*416,填充數為1,stride為1,如果填充的塊都為1, 那麽將Img變成column形式後,裏面會有多少個零呢?答案是14964個,這是程序給出的結果,那麽這個是怎麽來的呢?首先將14964做質數分解:14963=43*3*2*2*29 ,這裏我們發現有3,那麽這個3可以看做是三個通道,這樣就只需要看14963=3*4988, 一個通道上有4988個零是怎麽來的。如下圖所示,如果通道大小是3*3,卷積核大小是3*3,填充為1,步長(stride)為1,那麽填充後的大小為5*5,現在要用3*3的卷積在其上進行塊轉換,我們知道轉換成塊後的大小將是原來大小的9倍。我們來計算5*5的通道上進行塊轉換後,裏面具有0的數量,首先4個角上,每個角上獲得的填充數為5,共20個,每一條邊上獲得的填充數量為3,共4條邊,共12個填充,總共為1*3*4+20 = 32個。 以此類推,如果單個通道的大小變為416*416,卷積核依然為3*3,那麽每條邊上獲得的填充數量為(416-3+1)*3 *4+ 4*5 = 4988個,如果通道數量為3,那麽就為3*4988=14964。 由此可以得到如下的計算公式:
假設,通道數為C,通道高度為H,通道寬度為W,卷積核大小為K,填充為1,步長為1,假設H=W,那麽獲得填充數量為:3*[(W-K+1)*3*4 + 5*4].
程序驗證:
可以用這個在線質數分解器:http://www.atool.org/quality_factor.php
卷積轉換為矩陣運算中填充數的計算-GEMM