近日,百度視覺團隊藉助PaddleDetection在計算機視覺頂會ECCV 2020 (European Conference on Computer Vision,歐洲計算機視覺國際會議)比賽中,斬獲兩個賽道冠軍,分別是Tiny Object Detection和目標檢測領域最權威的比賽COCO。git
下載安裝命令
## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
PaddleDetection是基於飛槳核心框架構建的目標檢測開發套件,覆蓋主流目標檢測算法,並提供豐富的預訓練模型,幫助開發者快速搭建出各類檢測任務框架,高質量完成各種目標檢測任務。PaddleDetection採用模塊化設計,解耦了檢測經常使用的組件,很是方便開發者按需組合並擴展新的算法。github
PaddleDetection產品結構算法
通過不斷打磨優化,PaddleDetection的YOLO v3系列模型性能大幅加強,新增多款IoU(Interp over Union)、損失函數、以及多種強大的目標檢測模型,套件總體豐富度再次提高。下面咱們一塊兒深度探究一下冠軍團隊的模型優化思路。網絡
小目標檢測架構
(Tiny Object Detection)框架
小目標檢測任務使用TinyPerson數據集,包括794張訓練圖片,每張圖片中包括上百個小目標人物。任務的目標是評估測試圖片中Tiny大小(20*20~40*40像素)的人體目標的AP(Average Precision)。模塊化
百度視覺團隊的開發同窗研究了幾種常見的兩階段檢測器:Faster R-CNN、FPN、Deformable R-CNN、Cascade R-CNN等,從而探查其對不一樣IoU閾值的檢測標準的適合性。函數
算法優化方法主要分爲四個部分:數據加強、訓練策略改進、模型改進和模型融合。性能
1. 數據加強學習
一般無人機採集的人羣數據集,如Semantic Drone Dataset、Stanford Drone Dataset ,因爲數據集數量較小,很難達到快速收斂和較好的檢測效果。百度視覺團隊採用額外的同類數據來進行同尺度預訓練,從而提升模型對同等先驗知識的理解,提升模型的檢測能力。經過加入數據加強策略,提高2%至3%。
2. 訓練策略改進
對於無人機航拍收集的數據,不一樣圖像的原始尺寸和目標的相對尺寸有所不一樣,致使檢測器對有些圖像的理解困難。在訓練過程當中,咱們隨機地將輸入圖像的大小調整爲原始大小的0.五、1.5倍、1.5倍,解決尺度差別問題。在改進訓練策略之後,由57.9%提高至65.38%。
3. 模型改進
對於傳統的二階段檢測器,如R-CNN和FPN系列,一般使用ResNet系列網絡做爲骨幹網絡。爲了改進此種系列檢測器,對於FPN檢測器,P3層爲微小物體的檢測提供了相對應尺度的特徵。然而,P3層的不足在於它具備較少的語義信息。所以用PAFPN代替FPN,提升了網絡的語義識別能力。與普通的FPN相比,PAFPN增長了一條自下而上的路徑,從而提升了基於提議的實例分割框架中的信息流。此外,在下采樣模塊中,使用「carafe」下采樣方法代替原來的卷積模塊下采樣方法,而後使用可變形卷積模塊。在上採樣模塊中,還使用可變形卷積模塊代替原來的卷積模塊對特徵進行上採樣。改進後的PAFPN,提高了1.5%。
4. 模型融合
對於難度較大的無人機航拍的小目標檢測任務,單尺度單模型顯然沒法知足圖像的複雜以及低信噪比特性,所以,百度視覺團隊考慮使用多尺度多模型實現高精度檢測。對於模型融合方法,採用具備不一樣骨幹網絡(Res2Net, ResNet200,ResNeXt101,SENet154等)的Cascade R-CNN檢測器進行融合。對於每一個模型,預測了NMS後的邊界框。給每一個模型一個0到1區間的標量權重。全部權重總和爲1,每一個模型的盒子的可信度分數乘以其權重,最後合併來自全部模型的框並運行原始的NMS,添加來自不一樣模型的分數而不是隻保留最高的一個。依次順序使用NMS的修改合併了不一樣IoU閾值的預測框。最終,模型的達到了72.23%。
經過以上的優化策略,百度視覺團隊在Tiny Object Detection比賽中得到冠軍,領先第二名0.8%。
COCO Object Detection
COCO是目前學術界最權威的檢測和實例分割比賽。COCO數據集中包括11萬條訓練數據,涵蓋80個類別。COCO目標檢測和實例分割任務中三個關鍵優化策略:
-
強大的目標檢測分支
-
增強版FPN模塊和增強版header
-
Two pipeline策略
1. 強大的目標檢測分支
比賽中,咱們用效果優良的Cascade Mask R-CNN和HTC網絡做爲基礎網絡,在這些基礎網絡上,加入更多改進策略來提高檢測效果。
首先,用PaddlePaddle框架下的ImageNet的蒸餾模型做爲預訓練模型,訓練object365數據集的檢測模型;並用這個訓練好的object365檢測模型做爲預訓練模型,來訓練相同網絡結構的COCO模型,這樣能夠在檢測任務上得到顯著提高的效果。對於具體的網絡結構來講,採用Res2net200模型、CBResnet200、SE154模型做爲檢測模型的backbone。其中,Res2net200的檢測模型在單尺度下mAP能夠達到56.2%。
其次,使用增強版的FPN模塊來提高網絡效果,Acfpn網絡來加強檢測能力,該模型能夠解決高分辨率輸入上特徵圖分辨率與感覺域之間的矛盾,Acfpn包括兩個模塊,加入Acfpn後,box mAP增長了0.8%。除了AC-FPN,咱們還使用DetectoRS中的RFP網絡,RFP網絡將反饋鏈接添加到自底向上的主幹層中,這個在HTC-R50上使box mAP提高4.2%。
除了增強版的FPN模塊,還使用了non-local算子和數據加強策略。non-local算子用於描述距離像素之間的關聯,輸出特徵圖的每一個元素都會受到全部輸入特徵圖的影響;同時,還根據COCO數據集的特性,使用了隨機擦除的數據加強策略,即在圖像中隨機選取一個矩形區域,在訓練中對其像素進行隨機擦除,這樣能夠下降過擬合的風險,並提升模型對於遮擋目標檢測的魯棒性。
2. 增強版FPN模塊和增強版header
爲了提升模型最終mask的準確率,咱們使用了加強版的header模塊。在加強版header模塊中,使用HTC的header做爲基礎header。在此基礎上,用加強的雙網絡box header來代替原有的box header。除此以外,mask header分支整合了rescoring信息、實際座標信息和邊緣信息,組合成了加強版的header。
原始的HTC的box header只有兩個全卷積層用於目標框的迴歸和分類,而加強版的雙分支box header使用兩個分支,分別預測框的座標和類別。爲了提升效率, 沒有用太重的head結構,只使用一個bottleblock模塊代替第一個卷積層,其餘的卷積層不變;而對於分割rescoring分支,爲了不計算量過大,只在最後一個階段加入分割rescoring分支,並用rescoring分支的結果取代原有的box分值賦給mask;而邊緣分割分支,是在mask header裏融入了邊緣信息,來提高mask mAP。
3. Two pipeline策略
爲了有效利用多個檢測網絡的結果,將檢測網絡的結果看成候選框輸入到分割網絡的head前,最終獲得實例分割網絡的最終mask結果,經過這種two pipeline策略,mask mAP增加3.1%。
基於上述優化算法,百度視覺團隊在COCO object detection track中一舉奪魁。
PP-YOLO
除了在學術界不斷突破創新,取得好成績外,飛槳目標檢測套件PaddleDetection在工業界一樣發揮着巨大的做用。工業視覺、自動駕駛、安防、新零售等咱們身邊熟知的各行各業都須要應用目標檢測技術。因爲其很好的平衡了標註成本、檢測精度和速度等,成爲當前智能製造產業升級浪潮中被商業化應用最爲普遍的AI技術之一。
PaddleDetection在各領域的工業應用
實際生產環境對檢測算法的精度、速度、體積等要求每每十分苛刻。例如工業質檢,生產線上每每須要毫秒級別的圖片檢測速度,而爲了確保使用廠商收益最大化,還須要儘可能平衡硬件成本和性能。所以,如何在保持高檢測精度的前提下,儘可能提升檢測速度、減少模型體積,成爲這項技術真正深刻工業實際應用的關鍵。爲了匹配工業實際應用,百度視覺團隊探索出了一整套更深度的算法優化祕籍:PP-YOLO,模型精度更高,體積更小。
PP-YOLO是YOLO v3的「華麗變身」,即便對檢測視頻中很是快速運動的目標也能夠達到很好的效果。PP-YOLO將YOLO v3的精度(在COCO test-dev2017數據集)從33.0%提高了12.9個絕對百分點,達到45.9%,處於業界領先行列!而在該精度下,其推理速度在V100上達到了72.9 FPS。也就是說,它在精度和預測速度都超越原生的YOLO v4,而且體積更小,實打實的成爲工業應用場景最實用目標檢測模型。
通過一系列算法優化,咱們將訓練迭代次數和學習率衰減的迭代次數調整至和原始YOLO v3模型的迭代次數一致,從25萬次增長到50萬次,對應學習率衰減的迭代次數調整至40萬和45萬,PP-YOLO模型在COCO minival數據集精度可達到45.3%,單卡V100上batch size=1時的預測速度爲72.9 FPS。若是使用COCO test_dev2017數據集測試,精度將達到45.9%。
以下表所示,在不一樣輸入尺度下PP-YOLO模型與YOLO v4模型在COCO數據集精度和V100推理速度的交手結果。
PP-YOLO所應用的的這套優化策略,也能夠被嘗試應用到該系列的其它模型上,產業開發者或者科研人員可借鑑這套優化算法展開進一步的探索。而這整套PP-YOLO的優化祕籍也被飛槳團隊總結梳理成了論文,感興趣的開發者能夠參見下面的連接閱讀原文。
PP-YOLO論文:
https://arxiv.org/abs/2007.12099
PP-YOLO文檔:
https://github.com/PaddlePaddle/PaddleDetection/tree/release/0.4/configs/ppyolo
飛槳團隊在AI Studio爲你們建立了 PP-YOLO實戰項目,以供開發者快速體驗模型效果:
https://aistudio.baidu.com/aistudio/projectdetail/708923
更多PaddleDetection開源代碼和參考文檔,可登陸以下地址獲取:
https://github.com/PaddlePaddle/PaddleDetection
歡迎你們給咱們點Star、Fork或提出寶貴建議!
下載安裝命令
## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu