Yolo框架大改 | 消耗極低的目標檢測新框架(附論文下載)
本文經計算機視覺研究院公眾號授權轉載,轉載請聯系出處。
1.前言
在過去的十年中,深度神經網絡(DNNs)在各種應用中表現出顯著的性能。當我們試圖解決更艱難和最新的問題時,對計算和電力資源的需求增加已經成為不可避免的。
Spiking neural networks(SNNs)作為第三代神經網絡,由于其事件驅動(event-driven)和低功率特性,引起了廣泛的興趣。
然而,SNN很難訓練,主要是因為它們的神經元復雜的動力學和不可微的尖峰操作。此外,它們的應用僅限于相對簡單的任務,如圖像分類。
在今天的分享中,作者研究了SNN在一個更具挑戰性的回歸問題(即對象檢測)。通過深入分析,引入了兩種新的方法:channel-wise normalization和signed neuron with imbalanced threshold,這兩種方法都為深度SNN提供了快速的信息傳輸。因此,提出了第一個基于尖峰的目標檢測模型,稱為Spiking-YOLO。
2.新框架貢獻
盡管SNN有很多好處,但目前僅能處理相對簡單的任務,由于神經元復雜的動態性以及不可導的操作,暫時沒有一個可擴展的訓練方法。DNN-to-SNN是近期廣泛的SNN訓練方法,該方法將目標DNN轉化成SNN的中間DNN網絡進行訓練,然后轉成SNN并復用其訓練的參數,在小數據集分類上能達到不錯的性能,但是在大數據集上分類結果不太理想
論文打算使用DNN-to-SNN轉化方法將SNN應用到更復雜的目標檢測領域中,圖片分類只需要選擇分類就好,而目標檢測則需要神經網絡進行高度準確的數字預測,難很多。在深入分析后,論文實現YOLO的轉換主要面臨以下兩個問題:
- 常用的SNN歸一化方法過于低效,導致脈沖發射頻率過低。由于SNN需要設定閾值進行脈沖發射,所以要對權值進行歸一化,這樣有利于閾值的設定,而常用的SNN歸一化方法在目標檢測中顯得過于低效,后面會詳細闡述
- 在SNN領域,沒有高效leaky-ReLU的實現,因為要將YOLO轉換為SNN,YOLO中包含大量leaky-ReLU,這是很重要的結構,但目前還沒有高效的轉換方法
來自韓國的比較冷門或者前沿一點的文章,研究方向是脈沖神經網絡(Spiking Neural Networks)與YOLO算法的融合,發現韓國人特別擅長對YOLO,SSD等算法進行魔改啊。
- 提出一種在深度SNN中能夠進行快速精確信息傳輸的Spiking-YOLO算法。這是第一次將深度SNN成功應用于目標檢測任務的工作;
- 為深度SNN開發了一種成為逐通道歸一化的精細歸一化技術。所提出的方法使得在多個神經元中更高的發射率成為可能,這促成了快速并且精確的信息傳輸;
- 提出了一種新穎的方法,其特點在于具有不平衡閾值的帶符號神經元,這些神經元讓SNNs中的leakyReLU得以實現。這給深度SNN應用于各種模型和應用創造了機會。
3.新框架
Channel-wise data-based normalization
在SNN中,根據輸入的幅度產生脈沖序列進行無損的內容傳遞是極為重要的。但在固定時間,激活過度或激活不足的神經元內將可能導致內容損失,這和臨界電壓的設置有關。設置過高,神經元需要累積很長時間的電壓才能發射脈沖,相反則會過多地發射脈沖。發射頻率通常定義為
,
為
個timestep的脈沖發射總數,最大的發射率為100%,即每個timestep都發射脈沖:
為了防止神經元的激活過度和激活不足,權值和臨界電壓都需要精心地選擇。為此,很多研究提出了歸一化的方法,比如常用的Layer-wise normalization(layer-norm)。該方法通過該層的最大化激活值來歸一化層的權值,如上公式,和
為權重,
為輸出特征圖最大值。
經過歸一化后,神經元的輸出就歸一到,方便設定臨界電壓。由于最大激活值
從訓練集得到的,所以測試集和訓練集需要有相同的分布,但論文實驗發現這種常規的歸一化方法在目標檢測任務上會導致明顯的性能下降。
基于數據的逐通道歸一化
傳統的脈沖神經網絡中,需要確保神經元根據其輸入大小產生脈沖序列,其中權值和閾值電壓分別負責神經元激活的充足度和平衡度,這會導致要么欠激活要么過激活,從而使信息丟失和性能不佳。
作者深入分析并證明了細粒度的通道正則化可以通過極小的激活來提高神經元的發射率。換句話說,非常小的激活被正確歸一化,將在更短的時間內準確地傳輸信息。文章認為通道正則化的應用可以帶來更快更準確的深度SNN,這將使深度SNN應用于更高級機器學習問題成為可能。
上圖展示了通過layer-norm后的各層每個channel的最大激活值,藍色和紅色的線分別為每層的平均激活值和最小激活值。可以看到每層的歸一化后的激活值偏差較大,總體而言,layer-norm使得神經元的channel偏向激活不足,這在僅需選擇分類的圖片分類任務是不被察覺的,但對于需要預測準確值的檢測任務的回歸則不一樣。比如傳遞0.7,則需要在10個timestep脈沖7次,0.007則需要在1000timestep脈沖7次。當tempstep本身就很少時,過低的發射率可能會因發射不到足夠的脈沖而導致信息丟失。
Proposed normalization method
整個流程如下:
具體的邏輯如上圖和算法,channel-wise的歸一化方法能夠消除激活值特別小的問題,即得到更高但合適的發射頻率,在短時間內也能準確地傳遞信息。
Signed neuron featuring imbalanced threshold
具有不平衡閾值特征的帶符號神經元
引入了一種具有不平衡閾值(即IBT)的帶符號神經元,它不僅可以對正負激活進行解釋,還可以對leakyReLU負激活值區域的滲漏項進行補償。如下圖所示,作者增加了另外一個Vth負責對負激活響應。
其中,具有IBT的帶符號神經元的基本動力學公式如下所示。
通過使用上述具有IBT的帶符號神經元,可以在SNN中使用leakyReLU,從而將各種DNN模型轉換為廣泛應用的SNN。
4.實驗結果與評估
作者使用Tiny YOLO的實時目標檢測模型,在脈沖神經網絡中實現最大池化層和BN層。模型在PASCAL VOC2007和2012上訓練,在PASCAL VOC2007上測試。所有代碼基于Tensorflow Eager框架,在V100的GPU上進行實驗。
文章通過實驗的設計驗證并分析了使用通道正則化和有符號神經元的IBT存在的用處。如下圖所示,當通道正則化和有符號神經元都使用時,脈沖-YOLO能夠達到51.61%的mAP,這個性能比較高了。
此外,逐層正則化的mAP僅僅46.98%,而通道正則化優勢明顯,收斂速度也更快。如果不使用本文提出的這兩種方法,Spiking-YOLO無法檢測目標,如果僅僅使用有符號神經元的話,mAP僅僅7.3%,這表明有符號神經元可以補償leakyReLU的不足項,并且在解決深度SNN中這種高數值精度問題中起著關鍵作用。
在上圖中,作者還在兩種輸出編碼方案上進行了額外的對比實驗,一種基于累計Vth,一種基于脈沖數量。實驗結果表明基于Vth的輸出編碼方案在解釋尖峰序列時將更精確,也體現出收斂更快的特點。
實驗的目的是無損地將Tiny-YOLO的轉移為SNN,結果如上圖所示,使用channel-norm和IBT能有效地提升性能,且使用的timestep更少。
作者嘗試了不同的解碼方式,分別為膜電壓和脈沖數
,由于脈沖數的余數要舍棄,這會帶來誤差和信息損失,所以基于膜電壓進行解壓會更準確。
5.總結
在今天分享中,作者提出了Spiking-YOLO,第一個SNN模型,通過在non-trivial datasets、PASCALVOC和MSCO上獲得與原始DNN相似的結果來成功地執行目標檢測。
我認為,這項研究代表了解決深度SNN中更高級的機器學習問題的第一步。