來源:人工智能AI技術git
本文約3400字,建議閱讀7分鐘github
本文介紹咱們被NeurIPS 2020會議錄用的一篇文章。算法
本文主要介紹咱們被NeurIPS 2020會議錄用的一篇文章:Glance and Focus: a Dynamic Approach to Reducing Spatial Redundancy in Image Classification。安全
論文:
網絡
https://arxiv.org/abs/2010.05300框架
代碼和預訓練模型已經在Github上面放出:ide
https://github.com/blackfeather-wang/GFNet-Pytorch函數
這項工做提出了一個通用於絕大多數CNN的自適應推理框架,其效果比較明顯,在同等精度的條件下,將MobileNetV3的平均推理速度加快了30%,將ResNet/DenseNet加速了3倍以上,且在iPhone XS Max上的實際測速和理論結果高度吻合。此外,它的計算開銷能夠簡單地動態在線調整,無需額外訓練。工具
(太長不看版)下面一張圖能夠歸納咱們作的事情:將圖像識別建模爲序列決策過程,先將縮略圖輸入神經網絡(Glance),再不斷選擇最關鍵的圖像區域進行處理(Focus,利用強化學習實現),直至網絡產生一個足夠可信的預測結果時中止;對於簡單和困難的樣本分配不一樣的計算資源,以提高總體效率。性能
![](http://static.javashuo.com/static/loading.gif)
圖1 Glance and Focus Network (GFNet) 效果圖
下面,我將詳細介紹這一工做的具體內容。
1. Introduction (研究動機及簡介)
在基於卷積神經網絡(CNN)的圖像任務中,提高網絡效果的一個有效方法是使用高分辨率的輸入,例如,在ImageNet分類[1]任務上,近年來的最新網絡(DenseNet[2], SENet[3], EfficientNet[4])每每須要使用224x224或更大的輸入圖片以取得最佳性能:
Model | Input Size | Accuracy |
---|---|---|
DenseNet-265 | 224x224 | 77.85 % |
SENet-154 | 320x320 | 82.72 % |
EfficientNet-B7 | 600x600 | 84.40 % |
然而,這種方式會帶來較大的計算開銷,由於推理CNN所需的計算量(FLOPs)基本與像素數目成正比[5],即與圖形的長、寬成二次關係,以下圖所示:
![](http://static.javashuo.com/static/loading.gif)
圖2 CNN計算量與圖片長/寬的關係
在實際應用(例如手機APP、自動駕駛系統、圖片搜索引擎)中,計算量每每正比於能耗或者時間開銷,顯然,不管出於成本因素仍是從安全性和用戶體驗的角度考慮,網絡的計算開銷都應當儘量小。那麼,如何在保留高分辨率輸入所帶來的好處的同時,減少其計算開銷呢?
事實上,咱們能夠藉助神經網絡的一個有趣的性質。與人類視覺類似,神經網絡每每能夠經過僅僅處理圖像中與任務相關的一小部分區域而獲得正確的結果,例如在下圖中,遮擋住屋頂、飛鳥或花朵以外的部分,神經網絡仍然能夠獲得正確的分類結果[6]:
![](http://static.javashuo.com/static/loading.gif)
圖3 部分關鍵信息足以使神經網絡作出可靠的判斷
這即是本文所提出方法的出發點,咱們的目標是,對於輸入圖片,自適應地找到其與任務最相關的區域,進而經過使神經網絡只處理這些區域,以儘量小的計算量獲得可信的結果。具體而言,咱們採用的方法是,將一張分辨率較高的圖片表徵爲若干個包含其關鍵部分的「小塊」(Patch),然後僅將這些小塊輸入神經網絡。如下面的示意圖爲例,將一張224x224的圖片分解爲3個96x96的Patch進行處理所需的計算量僅爲原圖的55.2%。
![](http://static.javashuo.com/static/loading.gif)
圖4 Glance and Focus Network (GFNet) 的基本建模方式
2. Method (方法詳述)
爲了實現上述目的,事實上,有兩個顯然的困難:
(a) 任意給定一張輸入圖片,如何判斷其與任務最相關的區域在哪裏呢?
(b) 考慮到咱們的最終目的是使神經網絡獲得正確的預測結果,不一樣輸入所需的計算量是不同的,例如對於下面所示的兩個輸入圖片,神經網絡可能僅須要處理一個patch就能識別出特徵很是突出的月亮,可是須要處理更多的patch才能分辨出貓咪的具體品種。
![](http://static.javashuo.com/static/loading.gif)
圖5 對於不一樣輸入,應分配不一樣大小的計算資源
爲了解決這兩個問題,咱們設計了一個Glance and Focus的框架,將這一思路建模爲了一個序列決策過程,以下圖所示。
![](http://static.javashuo.com/static/loading.gif)
圖6 Glance and Focus Network (GFNet) 的基本框架
其具體執行流程爲:
首先,對於一張任意給定的輸入圖片,因爲咱們沒有任何關於它的先驗知識,咱們直接將其放縮爲一個patch的大小,輸入網絡,這一方面產生了一個初步的判斷結果,另外一方面也提供了原始輸入圖片的空間分佈信息;這一階段稱爲掃視(Glance)。
然後,咱們再以這些基本的空間分佈信息爲基礎,逐步從原圖上取得高分辨率的patch,將其不斷輸入網絡,以此逐步更新預測結果和空間分佈信息,獲得更爲準確的判斷,並逐步尋找神經網絡還沒有見到過的關鍵區域;這一階段稱爲關注(Focus)。
值得注意的是,在上述序列過程的每一步結束以後,咱們會將神經網絡的預測自信度(confidence)與一個預先定義的閾值進行比較,一旦confidence超過閾值,咱們便視爲網絡已經獲得了可信的結果,這一過程當即終止。此機制稱爲自適應推理(Adaptive Inference)。經過這種機制,咱們一方面可使不一樣難易度的樣本具備不一樣的序列長度,從而動態分配計算量、提升總體效率;另外一方面能夠簡單地經過改變閾值調整網絡的總體計算開銷,而不須要從新訓練網絡,這使得咱們的模型能夠動態地以最小的計算開銷達到所需的性能,或者實時最大化地利用全部可用的計算資源以提高模型表現。
3. Network Architecture (網絡結構)
下面咱們具體介紹Glance and Focus Network (GFNet) 的具體結構,以下圖所示
![](http://static.javashuo.com/static/loading.gif)
圖7 Glance and Focus Network (GFNet) 的網絡結構
GFNet共有四個組件,分別爲:
全局編碼器
和局部編碼器
(Global Encoder and Local Encoder)爲兩個CNN,分別用於從放縮後的原圖和局部patch中提取信息,之因此用兩個CNN,是由於咱們發現一個CNN很難同時適應縮略圖和局部patch兩種尺度(scale)的輸入。幾乎全部現有的網絡結構都可以做爲這兩個編碼器以提高其推理效率(如MobileNet-V三、EfficientNet、RegNet等)。
分類器
(Classifier)爲一個循環神經網絡(RNN),輸入爲全局池化後的特徵向量,用於整合過去全部輸入的信息,以獲得目前最優的分類結果。
圖像塊選擇網絡
(Patch Proposal Network)是另外一個循環神經網絡(RNN),輸入爲全局池化前的特徵圖(不作池化是爲了不損失空間信息),用於整合目前爲止全部的空間分佈信息,並決定下一個patch的位置。值得注意的是因爲取得patch的crop操做不可求導,
是使用強化學習中的策略梯度方法(policy gradient)訓練的。
4. Training (訓練方法)
爲了確保GFNet的四個組件按照咱們預期的方式工做,咱們提出了一個三階段的訓練策略,在這裏簡要概述,更多細節能夠參見咱們的paper~
首先,咱們從GFNet中移除
,在每一步均以均勻分佈隨機選擇patch的位置,如下面所示的損失函數訓練
,
和
,使其達到最佳的分類性能,其中
表明交叉熵損失,
和
分別表明
在第
步的預測結果和原始輸入圖片
對應的標籤,
表示訓練集,
表示序列的最大可能長度。
![](http://static.javashuo.com/static/loading.gif)
然後,咱們固定第一步獲得的
,
和
,在網絡中插入一個隨機初始化的
,以強化學習算法(policy gradient)優化如下形式的折扣獎勵函數。其中
爲一個預先定義折扣因子,
爲每次選擇patch位置的獎勵(reward),咱們將其定義爲所選擇的patch所形成的在正確標籤上的confidence的增量,換言之,咱們老是但願
選擇目前的網絡沒有處理過的、對產生正確的預測結果最有幫助的patch。
![](http://static.javashuo.com/static/loading.gif)
最後,咱們固定第二步獲得的
,再以第一步中的損失函數對
,
和
進行最終的微調(Finetune)。
5. Experiments (實驗結果)
在實驗中咱們考慮了兩種設置:
budgeted batch classification,測試數據伴隨有一個計算開銷的預算(budget),網絡須要在這個計算預算內進行推理。在此設置下,咱們使用前面提到的方法,肯定閾值(confidence threshold)並進行自適應推理。
anytime prediction,網絡有可能在任什麼時候候被要求馬上輸出預測結果。在此設置下,咱們不使用自適應推理技術,並假設全部測試樣本的序列長度固定。
下圖爲咱們在不一樣網絡結構上實現GFNet的實驗結果,其中橫軸爲網絡的平均理論計算開銷,縱軸爲準確率,(a-e)爲budgeted batch classification的結果,(f)爲anytime prediction的結果。能夠看出,GFNet明顯地提高了包括MobileNetV三、RegNet和EfficientNet在內的最新網絡結構的推理效率,同等精度下,計算開銷減少達30-40%以上,對於ResNet/DenseNet的增幅可達3倍甚至更高;同等計算開銷下,對MobileNetV3提點2%左右,對ResNet/DenseNet達5-10%以上。
![](http://static.javashuo.com/static/loading.gif)
圖8 GFNet基於不一樣CNN的實驗結果(Accuracy v.s. Multiply-Adds)
GFNet的另外一個顯著優點是,因爲其沒有更改CNN的具體結構,其能夠方便地在移動端或邊緣設備上使用現有的工具部署,且享有和理論結果幾乎等同的實際加速比。下圖爲咱們在一臺iPhone XS Max(就是個人手機)上基於TensorFlow Lite的測試結果:
![](http://static.javashuo.com/static/loading.gif)
圖9 GFNet在一臺iPhone XS Max上的實際測試結果(Accuracy v.s. Latency)
下面是GFNet的一些可視化結果,能夠從中看出,對於比較簡單的樣本,GFNet能夠僅在Glance階段或Focus階段的第一步以很高的confidence獲得正確的結果,對於較爲複雜的樣本,則實現了以不斷關注關鍵區域的形式逐步提高confidence。
![](http://static.javashuo.com/static/loading.gif)
圖10 GFNet的可視化結果
6. Conclusion (結語)
最後總結一下,其實我本人是很是喜歡這項工做的,由於它很是的天然、通用、有效。一方面它很好的模擬了生物(或者說人)識別一張圖片的過程,人眼對圖像數據的認知事實上也是一個先掃視得出一些直覺信息、再逐漸關注關鍵區域的過程。另外一方面GFNet的實際效果也很是顯著,且能在目前最佳的一些模型上進一步提高理論計算效率,並加快實測速度。歡迎你們follow咱們的工做~。
@inproceedings{NeurIPS2020_7866, title = {Glance and Focus: a Dynamic Approach to Reducing Spatial Redundancy in Image Classification}, author = {Wang, Yulin and Lv, Kangchen and Huang, Rui and Song, Shiji and Yang, Le and Huang, Gao}, booktitle = {Advances in Neural Information Processing Systems (NeurIPS)}, year = {2020},}
參考
^[1] http://www.image-net.org/
^[2] https://arxiv.org/pdf/2001.02394.pdf
^[3] https://arxiv.org/pdf/1709.01507.pdf
^[4] https://arxiv.org/pdf/1905.11946.pdf
^[5] https://papers.nips.cc/paper/5542-recurrent-models-of-visual-attention.pdf
^[6] https://arxiv.org/pdf/1910.08485.pdf
編輯:於騰凱
校對:林亦霖