1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        手撕 | 深度神經(jīng)網(wǎng)絡(luò)卷積層計算加速與優(yōu)化

        共 2154字,需瀏覽 5分鐘

         ·

        2022-12-30 21:53

        點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時間送達(dá)

        閱讀本文大概需要 6 min 左右


        傳統(tǒng)卷積層計算

        01


        首先我們定義符號F()函數(shù)為卷積函數(shù)

        一維卷積:F(n,m)

        n代表輸出的維度,m代表濾波器的維度


        二維卷積:F(n*m,r*s)

        n*m代表輸出的維度,r*s代表濾波器的維度


        下面我們具體談?wù)勧槍ΧS的卷積加速

        傳統(tǒng)的卷積層加速:

         對于最簡單的F(n*m,r*s)

        最傳統(tǒng)暴力的卷積運算:

        時間成本:1. 乘法:(n*m*r*s)2. 加法:(n*m*(r – 1)*(s – 1))空間成本:1. 輸入層:(n+r-1)*(m + s - 1)2. 卷積核:(r*s)

        Imcol+GEMM

        02


        為了更好的理解,首先給出這幅圖:

        推廣到三維,也就是Image:C*H*W

        最后一頁沒畫,但是基本上就是Filter Matrix乘以Feature Matrix的轉(zhuǎn)置,得到輸出矩陣Cout x (H x W),就可以解釋為輸出的三維Blob(Cout x H x W)。


        相對于傳統(tǒng)的暴力的卷積算法而言,此算法將卷積變成了矩陣乘法,為加速提供了便捷條件,能很容易用硬件實現(xiàn)加速。但是內(nèi)存有冗余。


        Imcol+MEC初級版

        03



        由于是3x3卷積核,且步長為1。因此,循環(huán)取出A、B、C、D、E這5個子矩陣,每個矩陣的維度都是: 輸入高度x3

        將A、B、C、D、E按照行優(yōu)先展開并拼成一個大的中間矩陣L, L的維度則為:5x21。從L中循環(huán)取出P、Q、R、S、T這5個子矩陣,并計算5次矩陣乘法,就得到了最終的結(jié)果。從上面的示例中我們不難看出,MEC的解決思路在于將im2col這一過程分成了Height和Width兩部分,于是需要存儲的中間矩陣也大大減小了??赡軒淼膯栴}就是,原來的一次矩陣乘法,現(xiàn)在會變成多次小矩陣乘法。雖然有利于并行計算,但也失去了BLAS庫計算大矩陣乘法的優(yōu)勢。

        F( n*m,r*s)原本內(nèi)存:( n+r – 1) *( m+s – 1)Imcol+GEMM轉(zhuǎn)換需要內(nèi)存大?。簉 * s * n * mImcol+MEC初版需要內(nèi)存大?。簃 * ( r * ( n + s – 1 ) )


        Imcol+MEC高級版

        04


        考慮了batchsize和channel


        Winograd方法

        05


        說完了這些方法,我們來說說Winograd方法吧,加速卷積的不二之選。本文重在于利用Winograd方法加速卷積,順便選取內(nèi)存和速度兼顧的方案


        公式的推導(dǎo),這里選用F( 3 *3,2*2)

        用多項式的中國剩余定理推導(dǎo)可知:


        在其中,我用的是F( 4 * 4 , 3 * 3 )

        輸入的tensor:[N,W,H,C]

        卷積核的tensor:[C_out,kernal_W,kernel_H,C_in]


        圖中K = C_out、T = N

        Kernals中的眾矩陣通過從[C_out,3,3,C] -> [C_out,6,6,C]

        是一個變形后的卷積核,kernal1 = [1,6,6,128],上圖中有128個卷積核,因為輸出的Tensor:[N,W,H,128],拋開上面具體的實例,為了推導(dǎo)后續(xù)公式,這里我們只研究

        對于輸入矩陣16X16、卷積核 3X3,采用 F( 4 X 4,3X3 ) 的加速方案:

        明確輸出矩陣14 X 14 首先將卷積核通過GgG(T)變成 6X6的矩陣D

        現(xiàn)在的問題變成了如何將點乘的集合變成更簡易可表達(dá)的形式。再看下面這幅圖:



        故我們得到的最后的結(jié)果是:

        所以最后我們統(tǒng)計一下所作的乘法:

        傳統(tǒng):3 X 3 X 128 X 14 X 14 = 225792Winograd:6 X 6 X 128 X 16 = 73728浮點數(shù)運算倍數(shù):225792 / 73728 = 3.0625

        改進(jìn):如若有剩余,考慮用其他矩陣相乘方法


        好消息!

        小白學(xué)視覺知識星球

        開始面向外開放啦??????




        下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實戰(zhàn)項目52講
        小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。

        下載3:OpenCV實戰(zhàn)項目20講
        小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


        瀏覽 33
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲色欲av | 大香蕉狠狠操 | 中文字幕黄色电影 | 操日逼网| 亚洲色图家庭乱伦 | 91麻豆精产国品一二三产品 | 国产精品制服丝袜在线 | 欧美三根一起进三p视频 | 亲子乱婬一级A片 | 黄色成人网站在线观看免费 |