PaddleDetection是基於飛槳核心框架構建的目標檢測開發套件,覆蓋主流目標檢測演算法,並提供豐富的預訓練模型,幫助開發者快速搭建出各種檢測任務框架,高質量完成各類目標檢測任務。PaddleDetection採用模組化設計,解耦了檢測常用的元件,非常方便開發者按需組合並擴充套件新的演算法。
小目標檢測
(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.5、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技術之一。
實際生產環境對檢測演算法的精度、速度、體積等要求往往十分苛刻。例如工業質檢,生產線上往往需要毫秒級別的圖片檢測速度,而為了確保使用廠商收益最大化,還需要儘量平衡硬體成本和效能。因此,如何在保持高檢測精度的前提下,儘量提高檢測速度、減小模型體積,成為這項技術真正深入工業實際應用的關鍵。為了匹配工業實際應用,百度視覺團隊探索出了一整套更深度的演算法最佳化秘籍: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或提出寶貴建議!
如果您想詳細瞭解更多飛槳的相關內容,請參閱以下文件。
·官網地址·
https://www.paddlepaddle.org.cn/
·飛槳開源框架專案地址·
GitHub:
https://github.com/PaddlePaddle/Paddle
Gitee:
https://gitee.com/paddlepaddle/ Paddle