<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          視覺模型端側(cè)部署新范式|二值神經(jīng)網(wǎng)絡的落地實踐

          共 4941字,需瀏覽 10分鐘

           ·

          2022-02-26 23:28

          ↑ 點擊藍字?關(guān)注極市平臺

          作者丨Ironboy
          來源丨GiantPandaCV
          編輯丨極市平臺

          極市導讀

          ?

          二值神經(jīng)網(wǎng)絡 (BNN)指的是weight和activation都用1-bit來表示的模型架構(gòu),相比FP32的浮點神經(jīng)網(wǎng)絡,它可以實現(xiàn)約32倍的內(nèi)存減少,并且在推理過程中可以用xnor和popcount這樣的位運算來替代復雜的乘法和累加操作,從而大大加快模型的推理過程,所以BNN在模型壓縮與優(yōu)化加速領(lǐng)域存在著巨大的潛力。>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿

          引言

          在之前的兩篇文章中我也對其進行過比較詳細的介紹:二值化神經(jīng)網(wǎng)絡(BNN)綜述:https://zhuanlan.zhihu.com/p/270184068二值神經(jīng)網(wǎng)絡(BNN)若干篇論文總結(jié):https://zhuanlan.zhihu.com/p/365636375。不過雖然BNN在2016年就被正式提出,但在落地應用方面一直沒有得到很好的重視,眾多人認為這是因為在相同架構(gòu)下的BNN相比于浮點的神經(jīng)網(wǎng)絡精度相差太多導致無法應用到真實場景,而目前應用最廣泛的8-bit量化基本可以做到精度無損,甚至近兩年4-bit量化也可以達到非常不錯的效果,然而實際上一個模型架構(gòu)能否落地應用應該從以下兩方面進行考慮:

          1. 速度-精度平衡(SAT, speed-accuracy tradeoff) :目前的BNN研究主要集中于如何在相同架構(gòu)下,盡可能地減少1-bit和32-bit 神經(jīng)網(wǎng)絡的精度gap,除此之外,BNN整體的實際加速效益也遠沒有理論上64×(XNOR-Net提出)那么高,并且目前的研究實驗基本上把第一層和最后一層仍然保持為FP32,進一步削弱了加速效益,如下圖所示,BNN相比FP32大概是7倍加速,相比INT8大概是4倍。但在實際應用中,架構(gòu)是可以根據(jù)任務進行修改的,更好的SAT才是真正應該追求的目標,而不是僅僅看精度這一個指標,如果一個1-bit的架構(gòu)和8-bit的架構(gòu)精度相近,但前者可以節(jié)省大量內(nèi)存,顯著降低延時,即可以達到很好的SAT,那就是一個好架構(gòu);
          2. 泛化性(Generality) :BNN目前的研究基本集中在圖像分類上,對其他任務泛化的很不好,比如1-bit目標檢測領(lǐng)域大概只有不到10篇論文,精度還都不怎么行,因為BNN帶來的信息損失實在太大了,而像圖像分割,超分辨率這類對信息損失敏感的任務就更難了,也很少看到相關(guān)論文的實驗;

          針對上述兩點問題,近期大疆創(chuàng)新 (DJI)在論文《Binary Neural Networks as a general-propose compute paradigm for on-device computer vision》中提出了一種BNN的新架構(gòu)BiNeal networks (with Binary weights and No real-valued activations)在常見的計算機視覺任務,如圖像分類,目標檢測,語義分割,超分辨率和圖像匹配任務上進行了廣泛測試,均可以得到很好的效果,同時也在特定硬件上進行了延時測試,可以獲得比8-bit更好的SAT,從而證明了二值神經(jīng)網(wǎng)絡可以成為端側(cè)計算機視覺的一種新的通用范式,原論文鏈接如下:https://arxiv.org/abs/2202.03716arxiv.org

          作者團隊如上所示,里面還有幾個前Google MobileNet系列的大佬,目前都是DJI機器學習部門的負責人。下面將詳細闡述一下相關(guān)亮點,基礎(chǔ)內(nèi)容請移步上面的綜述。

          過參數(shù)化(Over-Parameterization)

          過參數(shù)化即在訓練過程中引入額外的對提升精度有益的參數(shù),比如XNOR++提出的可學習的scale factor,ReAct-Net提出的RSign和RPReLU,這種額外增加的浮點參數(shù)在我之前的二值神經(jīng)網(wǎng)絡綜述中提到過,我們把這些統(tǒng)一稱為增益項 (Gain term),對于weight和activation,本文提出采用不同的過參數(shù)化方式:

          Weight的過參數(shù)化

          其中的額外參數(shù)有兩個,分別是α和λ,α的維度可以像XNOR++中的scale factor一樣有多種選擇(N, N×C或N×C×K×K),而λ的維度為N,和輸出通道相同。之前的方法通常將α設(shè)置為1,λ設(shè)置為浮點weight的L1-Norm/N,而在本文中均設(shè)置為可學習參數(shù),隨著weight一起訓練。在推理過程中α可以直接和浮點weight進行融合,只需要存儲最終二值化之后的即可,λ可以和其他參數(shù)融合,后續(xù)會再提到。

          Activation的過參數(shù)化

          其中τ,b0, b1和k均為額外的參數(shù),前三個參數(shù)是per-channel的,k是標量,這些參數(shù)和ReActNet的RSign和RPReLU一樣,可以重塑activation的分布,從而幫助BNN的訓練。雖然參數(shù)很多,但可以和sign函數(shù)和其他參數(shù)進行融合。

          參數(shù)融合

          • 增益項的融合: 對于α,可以在訓練完直接和浮點weight融合,僅存儲w_b,對于activation的第n個通道,二值activation可以通過如下形式獲得:

          其中θ(n)可以通過b0(n), b1(n)和τ(n)計算得到,感興趣同學可以看原文的附錄,有詳細解釋。最終的卷積計算如下:

          其中k和λ可以和PReLU進行融合,所以也不需要在前向推理過程中進行計算。

          • Batch Normalization融合:

          由此,所有過參數(shù)技巧帶來的增益項都可以被融合掉,由于這個輸出進入下一層需要被二值化掉,所以這些參數(shù)又可以和sign進行融合,最終轉(zhuǎn)換為不同通道的閾值,浮點activation大于這個閾值activation為+1,小于這個閾值為-1。

          精度提升技巧2:架構(gòu)修改

          basic block如下所示,這里應該是BNN中常見的ResNet-18的basic block:

          三點修改:

          1. 輸入輸出通道數(shù)量相比原始架構(gòu)都擴大m倍,后面驗證generality的實驗基本上設(shè)置為2;
          2. skip connection一直配備一個binary convolution,而不是單純的residual connetion,無論是不是下采樣層都有,這塊感覺會增加不少計算量;
          3. element-wise add的輸入編碼為INT4,求和輸出為1-bit;

          雖然channel數(shù)x2,但我感覺增加的計算量接近x3了,因為skip connection的binary convolution會帶來不少的開銷。這個basic block相比于Bi-Real Net,有三點優(yōu)勢:

          1. BiNeal的輸入為1-bit,這樣就不需要頻繁地進行精度的轉(zhuǎn)換,也減少了數(shù)據(jù)搬移的次數(shù);
          2. 不包含PReLU,sign (這里指的應該是BiReal中每次和浮點connection加完再轉(zhuǎn)化為1-bit的操作)和其他非線性操作;
          3. skip connection很高效,額外的卷積是1-bit,輸出也都是1-bit;

          此外,傳統(tǒng)的BOPs和模型大小過于粗糙,并沒有考慮數(shù)據(jù)搬移帶來的延時開銷,從而不能真實地反映復雜性指標,為了證明這個架構(gòu)的高效性,作者描述了一個基于經(jīng)典收縮陣列的1位ASIC加速器設(shè)計,并推導出一個公式來計算不同塊所需的計算周期,具體細節(jié)可以見原文和附錄的推導,此處不做詳細介紹。

          實驗結(jié)果

          本文的出發(fā)點就是原始BNN的speed-accuracy tradeoff和generality做的不好,作者也是從這兩個方面進行的對比實驗來驗證這個BiNeal架構(gòu)的先進性。

          圖像分類任務上的SAT

          所有的模型都是在Snapdragon 845 CPU([email protected])平臺上進行的測試,為了更好地對比,對于不同bit都選取其最好的engine,即FP32和8bit采用TFLite,而BNN采用Bolt,結(jié)果如下:

          可以看出,在1.5倍通道擴增的情況下,BiNeal可以達到和8-bit相近的精度,但在Bolt上可以實現(xiàn)1.9倍的加速效果,同時在cycle指標下實現(xiàn)7倍的加速(即如果設(shè)計BNN專用的ASIC可以實現(xiàn)7倍的加速效果),同時相比目前最有競爭力的架構(gòu)ReActNet-A的延時和cycle指標快1.1和2.7,從而證明BiNeal架構(gòu)確實可以達到更好的SAT。

          4個常見計算機視覺任務上的Generality展示

          這里的實驗,通道倍數(shù)m均采用2,Cosine Annealing的學習率更新方式,wd為1e-5,下面的baseline都是8-bit的結(jié)果,延時都是使用Bolt在Snapdragon 845 CPU([email protected])平臺上測試的,前面圖像分類不是說8-bit在TFLite更好嗎,這里咋還換了engine。

          • 目標檢測任務

          輸入圖像尺寸為448×672×3,主干網(wǎng)絡為ResNet-18,將其替換為BiNeal,并且復用前面分類模型的訓練參數(shù)作為pretrained。第一個CenterNet是原文結(jié)果,第二個CenterNet是mmdetection復現(xiàn)的結(jié)果,ours是僅將backbone換成BNN,ours*是將BNN和head均替換為BNN,可以看出BiNeal均可以達到更好的SAT。

          • 圖像分割任務

          輸入圖像尺寸為512×1024×3,主干網(wǎng)絡仍然是ResNet-18,在ImageNet上預訓練,原文貌似是說將FCN二值化了,結(jié)果可以看出相似的精度,可以達到1.4倍的Bolt延時加速和3.9倍的cycle加速。

          • 超分辨率

          對EDSR進行binarize,原始模型有點大,為了可以進行通道擴增使用了更小的模型,block數(shù)更少,通道數(shù)更小了,第一層和最后一層保持為8-bit,同樣也是SAT更好。

          • 圖像匹配

          針對R2D2算法, 將網(wǎng)絡的大部分進行二值化,并保留最后兩個輸出層不變。每兩個連續(xù)的卷積可以被視為一個沒有skip connection的BasicBlock,在Web image (W), Aachen day-time images (A) and Aachen optical flow pairs (F)數(shù)據(jù)集上訓練,在HPatches上進行測試,同樣也是更好的SAT。

          總結(jié)

          本文提出了一種新的BNN架構(gòu),可以在眾多計算機視覺任務上達到和8-bit精度相近,但硬件效益更好的效果,ARM CPU上達到1.3~2.4倍加速,ASIC上的cycle達到2.8-7.0的加速,證明了BNN這種架構(gòu)可以成為計算機視覺模型端側(cè)部署的新的通用范式,感覺非常有意思,有空嘗試復現(xiàn)一下這個圖像分類的結(jié)果,不過有些結(jié)構(gòu)細節(jié)描述的還是不太清楚,感覺會有點坑在里面。


          公眾號后臺回復“數(shù)據(jù)集”獲取30+深度學習數(shù)據(jù)集下載~

          △點擊卡片關(guān)注極市平臺,獲取最新CV干貨
          極市干貨
          數(shù)據(jù)集資源匯總:10個開源工業(yè)檢測數(shù)據(jù)集匯總21個深度學習開源數(shù)據(jù)集分類匯總
          算法trick目標檢測比賽中的tricks集錦從39個kaggle競賽中總結(jié)出來的圖像分割的Tips和Tricks
          技術(shù)綜述:一文弄懂各種loss function工業(yè)圖像異常檢測最新研究總結(jié)(2019-2020)


          #?CV技術(shù)社群邀請函?#

          △長按添加極市小助手
          添加極市小助手微信(ID : cvmart4)

          備注:姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)


          即可申請加入極市目標檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~


          覺得有用麻煩給個在看啦~??
          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  爱爱无码AV | 欧美第五页 | 丁香社区在线观看 | 在线观看视频黄免费 | www.俺去啦 |