1.8M超輕量目標檢測模型NanoDet,比YOLO快,上線兩天Star量超200

2020-12-06 機器之心Pro

機器之心報導

項目作者:RangiLyu

如何把 anchor-free 模型移植到移動端或嵌入式設備?這個項目對單階段檢測模型三大模塊(Head、Neck、Backbone)進行輕量化,得到模型大小僅 1.8m、速度超快的輕量級模型 NanoDet-m。

目標檢測一直是計算機視覺領域的一大難題,其目標是找出圖像中的所有感興趣區域,並確定這些區域的位置和類別。目標檢測中的深度學習方法已經發展了很多年,並出現了不同類型的檢測方法。

目前,深度學習目標檢測方法主要分為兩大類,分別是兩階段式和單階段式目標檢測算法。兩階段式目標檢測框架首先生成候選區域,然後將其分類成不同的目標類別,代表模型有 R-CNN、Fast R-CNN 等;單階段式目標檢測框架將目標檢測任務視為一個統一的端到端回歸問題,代表模型有 MultiBox、YOLO、SSD 等。這類框架通常結構更簡單,檢測速度也更快。

深度學習目標檢測方法還可劃分為 Anchor-base 和 Anchor-free 兩大類,今年又出現了將Transformer 用於目標檢測的嘗試,各種方法百花齊放。但是,在移動端目標檢測算法上,YOLO 系列和 SSD 等 Anchor-base 的模型一直佔據主導地位。

近日,GitHub 上出現了一個項目 nanodet,它開源了一個移動端實時的 Anchor-free 檢測模型,希望能夠提供不亞於 YOLO 系列的性能,而且同樣方便訓練和移植。該項目上線僅兩天,Star 量已經超過 200。

項目地址:https://github.com/RangiLyu/nanodet

NanoDet 模型介紹

NanoDet 是一個速度超快和輕量級的移動端 Anchor-free 目標檢測模型。該模型具備以下優勢:

超輕量級:模型文件大小僅 1.8m;

速度超快:在移動 ARM CPU 上的速度達到 97fps(10.23ms);

訓練友好:GPU 內存成本比其他模型低得多。GTX1060 6G 上的 Batch-size 為 80 即可運行;

方便部署:提供了基於 ncnn 推理框架的 C++ 實現和 Android demo。

模型性能

目前開源的 NanoDet-m 模型在 320x320 輸入解析度的情況下,整個模型的 Flops 只有 0.72B,而 yolov4-tiny 則有 6.96B,小了將近十倍。模型的參數量也只有 0.95M,權重文件在使用 ncnn optimize 進行 16 位存儲之後,只有 1.8mb。

儘管模型非常的輕量,但是它的性能不容小覷。在與其他模型進行比較時,項目作者選擇使用 COCO mAP (0.5:0.95) 作為評估指標,兼顧檢測和定位的精度,在 COCO val 5000 張圖片上測試,並且沒有使用 Testing-Time-Augmentation。在這種設置下,320 解析度輸入能夠達到 20.6 的 mAP,比 tiny-yolov3 高 4 分,只比 yolov4-tiny 低 1 個百分點。在將輸入解析度與 YOLO 保持一致,都使用 416 輸入的情況下,NanoDet 與 yolov4-tiny 得分持平。具體結果如下表所示:

以上性能基於 ncnn 和麒麟 980 (4xA76+4xA55) ARM CPU 獲得。

此外,項目作者將 ncnn 部署到手機(基於 ARM 架構的 CPU 麒麟 980,4 個 A76 核心和 4 個 A55 核心)上之後跑了一下 benchmark,模型前向計算時間只要 10 毫秒左右,而 yolov3 和 v4 tiny 均在 30 毫秒的量級。在安卓攝像頭 demo app 上,算上圖片預處理、檢測框後處理以及繪製檢測框的時間,NanoDet 也能輕鬆跑到 40+FPS。

NanoDet 和 yolov4-tiny 的性能對比。

最後,該項目提供了 Android demo、C++ demo 和 Python demo。NanoDet 在安卓端的目標檢測結果如下所示:

NanoDet 方法

NanoDet 是一種 FCOS 式的單階段 anchor-free 目標檢測模型,它使用 ATSS 進行目標採樣,使用 Generalized Focal Loss 損失函數執行分類和邊框回歸(box regression)。

據項目作者介紹,該項目的主要目的是希望開源一個移動端實時的 Anchor-free 檢測模型,能夠提供不亞於 YOLO 系列的性能,並且方便訓練和移植。為此,他參考了以下研究:

最終得到的 NanoDet 模型架構如下:

損失函數

項目作者想要實現一個 FCOS 式的 anchor-free 目標檢測模型,但將 FCOS 輕量化處理時,由於 FCOS 的 centerness 分支在輕量級的模型上很難收斂,模型效果不如預期。

最終,NanoDet 使用了李翔等人提出的 Generalized Focal Loss 損失函數。該函數能夠去掉 FCOS 的 Centerness 分支,省去這一分支上的大量卷積,從而減少檢測頭的計算開銷,非常適合移動端的輕量化部署。

圖源:https://arxiv.org/pdf/2006.04388.pdf

檢測頭輕量化

找到合適的損失函數後,如何使其在輕量級模型上發揮作用呢?

首先需要優化的是檢測頭。

FCOS 系列使用了共享權重的檢測頭,即對 FPN 出來的多尺度 Feature Map 使用同一組卷積預測檢測框,然後每一層使用一個可學習的 Scale 值作為係數,對預測出來的框進行縮放。

圖源:https://openaccess.thecvf.com/content_ICCV_2019/papers/Tian_FCOS_Fully_Convolutional_One-Stage_Object_Detection_ICCV_2019_paper.pdf

這麼做的好處是能夠將檢測頭的參數量降低為不共享權重狀態下的 1/5。這對於光是檢測頭就擁有數百通道卷積的大模型來說非常有用,但是對於輕量化模型來說,共享權重檢測頭並沒有很大的意義。由於移動端模型推理由 CPU 執行計算,共享權重並不會帶來推理過程的加速,而且在檢測頭非常輕量的情況下,共享權重使其檢測能力進一步下降,因此項目作者認為選擇對每一層特徵使用一組卷積比較合適

同時,FCOS 系列在檢測頭上使用了 Group Normalization(GN)作為歸一化方式,GN 對比 BN(Batch Normalization)有很多好處,但是卻有一個缺點:BN 在推理時能夠將其歸一化的參數直接融合進卷積中,可以省去這一步計算,而 GN 則不行。為了能夠節省歸一化操作的時間,項目作者選擇將 GN 替換為 BN

FCOS 的檢測頭使用了 4 個 256 通道的卷積作為一個分支,也就是說在邊框回歸和分類兩個分支上一共有 8 個 c=256 的卷積,計算量非常大。為了將其輕量化,項目作者首先選擇用深度可分離卷積替換普通卷積,並且將卷積堆疊的數量從 4 個減少為 2 組。在通道數上,將 256 維壓縮至 96 維,之所以選擇 96,是因為需要將通道數保持為 8 或 16 的倍數,能夠享受到大部分推理框架的並行加速。

最後,項目作者借鑑了 YOLO 系列的做法,將邊框回歸和分類使用同一組卷積進行計算,然後 split 成兩份。最終得到的輕量化檢測頭如下圖所示:

FPN 層改進

目前針對 FPN 的改進有許多,如 EfficientDet 使用了 BiFPN,YOLO v4 和 v5 使用了 PAN,除此之外還有 BalancedFPN 等等。BiFPN 雖然性能強大,但是堆疊的特徵融合操作會導致運行速度降低,而 PAN 只有自上而下和自下而上兩條通路,非常簡潔,是輕量級模型特徵融合的好選擇。

原版的 PAN 和 YOLO 系列中的 PAN 都使用了 stride=2 的卷積進行大尺度 Feature Map 到小尺度的縮放。而該項目出於輕量化的考慮,選擇完全去掉 PAN 中的所有卷積,只保留從骨幹網絡特徵提取後的 1x1 卷積來進行特徵通道維度的對齊,上採樣和下採樣均使用插值來完成。與 YOLO 使用的 concatenate 操作不同,項目作者選擇將多尺度的 Feature Map 直接相加,使整個特徵融合模塊的計算量變得非常小。

最終得到的極小版 PAN 結構非常簡單:

NanoDet 使用的超輕量 PAN(圖源:https://zhuanlan.zhihu.com/p/306530300)

骨幹網絡

項目作者選擇使用 ShuffleNetV2 1.0x 作為骨幹網絡,他去掉了該網絡的最後一層卷積,並且抽取 8、16、32 倍下採樣的特徵輸入到 PAN 中做多尺度的特徵融合。整個骨幹模型使用了 Torchvision 提供的代碼,能夠直接加載 Torchvision 上提供的 imagenet 預訓練權重,對加快模型收斂起到很大幫助。

目前,項目作者已將 Pytorch 訓練代碼、基於 NCNN 的 Linux 和 Windows C++ 部署代碼以及 Android 攝像頭 Demo 全部開源,並在 Readme 中提供了詳細教程,參見項目 GitHub 主頁。

知乎連結:https://zhuanlan.zhihu.com/p/306530300

相關焦點

  • 從R-CNN到YOLO,一文帶你了解目標檢測模型(附論文下載)
    https://github.com/xiaolonw/adversarial-frcnnFaster R-CNN2015年,一個來自微軟的團隊(任少卿,何愷明,Ross Girshick和孫劍)發現了一種叫做「Faster R-CNN」的網絡結構,基於區域建議網絡進行實時目標檢測,重複利用多個區域建議中相同的CNN結果,幾乎把邊框生成過程的運算量降為
  • 使用Yolov5進行端到端對象檢測
    現在,Ultralytics已經發布了YOLOv5,具有可比的AP和比YOLOv4更快的推斷時間。這就產生了許多疑問:新版本是否保證了與YOLOv4相似的準確性?無論答案是什麼,這絕對是目標檢測界發展速度的一個標誌。
  • 1.3MB的超輕YOLO算法!全平臺通用,準確率接近YOLOv3,速度快45%
    此外,作者還推出了超輕YOLO的「加大版」,同樣只需要3.5MB,就能實現比YOLOv3更好的目標檢測效果。那麼,這麼輕的網絡,檢測效果怎麼樣?1.3MB的超輕YOLO檢測效果下圖是一隻快速跑動的動物,可以看見,算法預測這隻動物為雞(chicken)的概率是95%。不僅在動物檢測上,對於人的檢測效果也不錯。
  • 1.3MB的超輕YOLO算法!全平臺通用,準確率接近YOLOv3,速度快上45%丨...
    此外,作者還推出了超輕YOLO的「加大版」,同樣只需要3.5MB,就能實現比YOLOv3更好的目標檢測效果。那麼,這麼輕的網絡,檢測效果怎麼樣?此外也能看見,YOLO不僅能檢測行人和動物,類似於餐桌和瓶子這樣的目標物體也能檢測出來。當然,桌上還有其他的瓶子,不過沒有檢測出來。而這樣的檢測效果,只需要1.3MB大小的YOLO-Fastest模型,相比於3.0MB的MobileNet-YOLOv3,參數少了65%,速度還要快上45%。
  • 從零開始PyTorch項目:YOLO v3目標檢測實現
    機器之心編譯目標檢測是深度學習近期發展過程中受益最多的領域。隨著技術的進步,人們已經開發出了很多用於目標檢測的算法,包括 YOLO、SSD、Mask RCNN 和 RetinaNet。在本教程中,我們將使用 PyTorch 實現基於 YOLO v3 的目標檢測器,後者是一種快速的目標檢測算法。該教程一共有五個部分,本文包含其中的前三部分。
  • 【科研進展】石墨烯和超材料的組合,可實現對電磁波進行超快實時...
    材料結構和仿真方法圖1生動地說明了基於兩個正交扭曲SRRs的所提出的超材料的典型單元胞。該超原子單元由鋁(Al)製成,厚度為200 nm,底部組裝了折射率為3.42的矽襯底。金屬-石墨烯超材料的概念可以通過不同類型的結構實現,但在本文中,選擇這種簡單的SRR結構是因為其裂縫與活性石墨烯層材料之間存在完美的電相互作用。
  • 當前最佳的YOLOv4是如何煉成的?細數那些小細節
    這個目標檢測任務的 SOTA 模型究竟有何創新?這篇解讀文章為你一一拆解。目標檢測在近幾年開始發展成熟,但即便如此,競爭依舊激烈。如下所示,YOLOv4 宣稱已經實現了當前最前沿技術的準確度,同時還能維持較高的處理幀率。
  • 手機端上線,破解高架區域偏航檢測難題,高德提出工業級輕量模型ERNet
    傳統的偏航檢測方法(在手機地圖中)主要依賴 GNSS 系統提供的車輛位置和行駛方向信息。一般地,如果車輛的位置(或方向)距離規劃路線連續地超過T_d米或(T_a角度),一次偏航事件可以被檢測出,如下圖 1 所示。圖 1:傳統偏航檢測方法可以在中間圖(距離超出T_d)和右側圖(角度超過T_a)檢測出偏航事件。
  • 一周極客科技盤點 | 超逼真的 3D 人體解剖模型;AlphaGo 上線教學...
    超逼真的 3D 人體解剖模型格拉斯哥大學虛擬可視化學院正在和一流的醫院和大學合作,完成目前最精確和詳細的頭頸模型。3D 虛擬模型具有超高的解析度,可以跟用戶完全互動,能在各種環境和平臺使用。學生可以在場景中和模型互動,這個場景像 IMAX 影院一樣;也能在平板電腦、筆記本電腦或行動裝置上進行單人學習。
  • .| 超逼真的 3D 人體解剖模型;AlphaGo 上線教學工具教人下棋...
    超逼真的 3D 人體解剖模型格拉斯哥大學虛擬可視化學院正在和一流的醫院和大學合作,完成目前最精確和詳細的頭頸模型。3D 虛擬模型具有超高的解析度,可以跟用戶完全互動,能在各種環境和平臺使用。學生可以在場景中和模型互動,這個場景像 IMAX 影院一樣;也能在平板電腦、筆記本電腦或行動裝置上進行單人學習。
  • 推進2 μm波段超快光纖雷射邁向實用化
    特別是在1 μm和1.5 μm波段處,鎖模光纖雷射器的輸出功率、脈衝寬度、脈衝能量、峰值功率等指標已得到充分的提升,並且飛秒鎖模光纖雷射已初步進入工業實用化階段,市面上也出現大量的實用化鎖模光纖雷射器產品。
  • MMDetection新版本V2.7發布,支持DETR,還有YOLOV4在路上!
    最近CV界最大的新聞就是transformer的應用,這其中最火的就是Facebook提出的基於transformer的目標檢測模型DETR(https
  • Facebook AI的DETR,一種基於Transformer的目標檢測方法
    今天,Facebook開源了一個這樣的框架,DETR(DEtection TRansformer)在本文中,我們將快速了解目標檢測的概念,然後直接研究DETR及其帶來的好處。目標檢測在計算機視覺中,目標檢測是一項任務,我們希望我們的模型將對象與背景區分開,並預測圖像中存在的對象的位置和類別。
  • 雷射、啁啾脈衝放大、超快光學和諾貝爾獎
    本文將重點介紹這種「產生高強度超短光學脈衝的方法」和超快光學之間的關係.超快光學是利用光學手段研究微觀粒子在原子分子尺度上的超快動力學和瞬態現象的物理學分支; 從某種意義上講可以看作是19世紀以來高速攝影發展起來的概念與20世紀60年代出現的雷射光源結合的產物.
  • 一種納米級超低噪音微測輻射熱計
    據麥姆斯諮詢報導,芬蘭阿爾託大學(Aalto University)的研究人員現已推出一種納米級微測輻射熱計,他們聲稱它比其它低噪聲測輻射熱計快十倍,本底噪聲低十倍,並且尺寸小於10 μm(doi:10.1038 / s42005-019-0225-6)。該研究小組表示,該器件能夠探測的熱能變化低至0.3 ev,而熱時間常數僅為30 μs。
  • 破解高架區域偏航檢測難題,高德提出工業級輕量模型ERNet
    傳統的偏航檢測方法(在手機地圖中)主要依賴 GNSS 系統提供的車輛位置和行駛方向信息。一般地,如果車輛的位置(或方向)距離規劃路線連續地超過T_d米或(T_a角度),一次偏航事件可以被檢測出,如下圖 1 所示。圖 1:傳統偏航檢測方法可以在中間圖(距離超出T_d)和右側圖(角度超過T_a)檢測出偏航事件。
  • 誰說超跑只能看看?自己動手組裝一輛也很帥!
    上個周末,答哥在家沒擼電影,因為答哥把老闆珍藏了很久的一個Bugatti Chiron樂高模型給搶來了,3599個零件,不到兩天的時間,答哥這老胳膊老腿都累壞了才好不容易完成組裝。憑藉其4.0升雙渦輪增壓V8發動機爆發出607 kW和800N·m的恐怖數據,邁凱倫塞納GTR成為麥拿輪有史以來最快的非一級方程式賽車。
  • 高精密加工推動超快雷射的發展
    在這方面,以皮秒和飛秒雷射器為代表的超快雷射器相較於納秒脈衝雷射器更具有優勢。超快雷射器的超短脈衝,能以較低的脈衝能量獲得極高的峰值功率,使其在工業市場上獲得越來越廣泛的應用。IPG利用在脈衝光纖雷射器領域積累的尖端技術及豐富經驗,不斷加大對超快領域的研發,特別針對材料微加工研發了一系列超快光纖雷射器,在易於操作性、靈活性、穩固性、可靠性及體積等方面均取得了長足進步。
  • YOLO,一種簡易快捷的目標檢測算法
    YOLO全稱You Only Look Once,是一個十分容易構造目標檢測算法,出自於CVPR2016關於目標檢測的方向的一篇優秀論文(https://arxiv.org/abs/1506.02640 ),本文會對YOLO的思路進行總結並給出關鍵代碼的分析,在介紹YOLO前,不妨先看看其所在的領域的發展歷程。
  • 誰說超跑只能看看?自己動手組裝一輛也很帥!_易車網
    上個周末,答哥在家沒擼電影,因為答哥把老闆珍藏了很久的一個Bugatti Chiron樂高模型給搶來了,3599個零件,不到兩天的時間,答哥這老胳膊老腿都累壞了才好不容易完成組裝。