精度45.9%,推理速度72.9FPS,百度飛槳推出工業級目標檢測模型 PP-YOLO

允中 發自 凹非寺
量子位 編輯 | 公衆號 QbitAI

工業視覺、自動駕駛、安防、新零售等咱們身邊熟知的各行各業都須要目標檢測技術,因爲其很好的平衡了標註成本、檢測精度和速度等,成爲當前智能製造產業升級浪潮中被商業化應用最爲普遍的AI技術之一。html

而實際生產環境對檢測算法的精度、速度、體積等要求每每十分苛刻。git

例如工業質檢,生產線上每每須要毫秒級別的圖片檢測速度,而爲了確保使用廠商收益最大化,還須要儘可能平衡硬件成本和性能。所以,如何在保持高檢測精度的前提下,儘可能提升檢測速度、減少模型體積,成爲這項技術真正深刻工業實際應用的關鍵。github

而目標檢測的王牌家族——YOLO系列模型,做爲單階段目標檢測算法的表明之一,一經出世,便以快速精準的檢測效果而迅速躥紅。其不只在速度上作到真正實時,精度上也能夠達到不少非實時兩階段模型纔有的水平。web

 來自論文《YOLOv3: An Incremental Improvement》算法

而學術界和開源社區中的YOLO擁躉、大神們,並未止步於此, YOLO v四、」YOLO v5」也在今年被相繼推出,它們大量整合了計算機視覺的state-of-the-art技巧,例如在數據加強、錨定框、骨架網絡、訓練方式等維度進行優化,從而達到大幅提高YOLO目標檢測性能的效果。微信

飛槳目標檢測套件PaddleDetection的研發團隊也爲了讓YOLOv3模型在工業實際應用場景擁有更優異的精度與推理速度,以儘可能不增長模型計算量和推理開銷爲前提,探索出了一整套更深度的算法優化祕籍,將原先YOLOv3模型的精度(在COCO test-dev2017數據集)從33.0%提高了12.9個絕對百分點,達到45.9%,處於業界領先行列!而在該精度下,其推理速度在V100上達到了72.9 FPS網絡

也就是說,它在精度預測速度都超越原生的YOLOv4,而且體積更小,實打實的成爲工業應用場景最實用目標檢測模型。而此次華麗變身後的YOLOv3,也被正式命名爲——PP-YOLOapp

以下表所示,在不一樣輸入尺度下PP-YOLO模型與YOLOv4模型在COCO數據集精度和V100推理速度的交手結果。框架

 注:上表中數據均爲在單卡Tesla V100上batch size=1測試結果,TRT-FP16爲使用TensorRT且在FP16上的測試結果,TensorRT版本爲5.1.2.2ide

而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

飛槳團隊也在AIStudio爲你們建立了 PP-YOLO實戰項目,以供開發者快速體驗模型效果:

https://aistudio.baidu.com/aistudio/projectdetail/708923

PP-YOLO的高精度和高推理速度對多快速運動目標檢測的視頻也能夠達到很好的效果。

那PP-YOLO到底採用了哪些優化策略呢?下面我們帶領你們一塊兒來深刻剖析一下飛槳團隊算法優化的 「內功心法」。

1. 基於YOLOv3-DarkNet53的初步優化

原始的YOLOv3模型在COCO minival數據集上精度爲33.0%,PaddleDetection首先加入了Bag of Freebies for Training Object Detection Neural Networks論文中說起的優化策略,在不引入額外計算量的狀況下,精度提高了3.9個百分點,達到38.9%。具體策略以下:

  • Image Mixup(圖像混合):以隨機權重將兩張圖片混合起來,提升網絡在空間上的抗干擾能力。如下圖爲例,將任意兩張圖片加權疊加做爲輸入,訓練過程當中使用的損失爲兩張圖片的損失乘以各自權重的加和。

 來自論文《Bag of Freebies for Training Object Detection Neural Networks》

  • Label Smooth(標籤平滑):經過在真實的分類標籤one-hot編碼中真實類別的1上減去一個小量,非真實標籤的0上加上一個小量,將硬標籤變成一個軟的標籤,起到正則化的做用,防止過擬合,提高模型泛化能力。

  • Synchronize Batch Normalization(同步批歸一化):多卡訓練時,通常實現的批歸一化只統計單卡上均值和方差,而檢測任務中,受顯存的限制,batch size比較小,多卡同步,會使得均值和方差統計的更加準確。

2. 更優的骨幹網絡: ResNet50vd-DCN

骨幹網絡能夠說是一個模型的基礎,一個優秀的骨幹網絡會給模型的性能帶來極大的提高。針對YOLOv3,飛槳研發人員使用更加優異的ResNet50vd-DCN 做爲模型的骨幹網絡。它能夠被分爲ResNet50vd和DCN兩部分來看。

ResNet50vd是指擁有50個卷積層的ResNet-D網絡。ResNet系列模型是在2015年提出後,在學術界和工業屆獲得了普遍的應用,其模型結構也在被業界開發者持續改進,在通過了B、C、D三個版本的改進後,最新的ResNet-D結構能在基本不增長計算量的狀況下先住提升模型精度。經飛槳團隊的多重實驗發現,使用ResNet50vd結構做爲骨幹網絡,相比於原始的ResNet,能夠提升1%-2%的目標檢測精度,且推理速度基本保持不變。

而DCN(Deformable Convolution)可變形卷積的特色在於:其卷積核在每個元素上額外增長了一個可學習的偏移參數。這樣的卷積核在學習過程當中能夠調整卷積的感覺野,從而可以更好的提取圖像特徵,以達到提高目標檢測精度的目的。但它會在必定程度上引入額外的計算開銷。通過多翻嘗試,PaddleDetection團隊發現只在ResNet的最後一個stage(C5)增長可變形卷積,是實現引入極少計算量並提高模型精度的最佳策略。

在使用ResNet50vd-DCN做爲骨幹網絡後,YOLOv3模型的檢測精度從原先的38.9% 達到39.1%,而推理速度獲得了36%的大幅提升(58.2FPS -> 79.2FPS)。

3. 更穩定的訓練方式:EMA、DropBlock和更大的batch size

爲了使PP-YOLO的訓練過程有更好的收斂效果,飛槳團隊經過API paddle.optimizer.ExponentialMovingAverage調用了EMA(Exponential Moving Average)滑動平均功能。滑動平均是指將參數過去一段時間的均值做爲新的參數。相比直接對參數進行更新,採用滑動平均的方式能讓參數學習過程當中變得更加平緩,能有效避免異常值對參數更新的影響,提高模型訓練的收斂效果。

PP-YOLO的優化過程當中使用了DropBlock算法來減小過擬合。以下圖所示,相比於Dropout算法,DropBlock算法在Drop特徵的時候不是以特徵點的形式來Drop的,而是會集中Drop掉某一塊區域,從而更適合被應用到目標檢測任務中來提升網絡的泛化能力。

 來自論文《DropBlock: A regularization method for convolutional networks》)

經過訓練過程當中的指數滑動平均和DropBlock策略,結合適當增大訓練的batch size(將單卡的batch size調整到24,8卡總batch size爲192,使訓練更加穩定,獲取更優的結果),YOLOv3此時在COCO minival數據集精度提高了2.5%(39.1%->41.4%)。

4. IoU學習

對於目標檢測任務,IoU是咱們經常使用的評估指標,即預測框與真實框的IoU越大,檢測效果越好。基於「所見即所得」的思想,PP-YOLO使用了業界提出的一種新的Loss——IoU Loss,即在訓練過程當中使用模型產生的預測框和真實框求IoU,對其取反並加入到損失計算中,這樣至關於在優化損失的時候就是在提高IoU。

注:在PP-YOLO中,飛槳採用了最基礎的IoU損失計算方法,即IoU Loss = 1 - IoU * IoU 。

另外一方面,咱們知道YOLOv3模型裏的預測框評分score = objectness score * classification score,即該預測框處存在目標的機率和對應目標類別的機率的乘積,而此種評分方式並無考慮預測框的定位精度。而目標檢測模型都須要對最後的預測框進行非極大值抑制(NMS),即按照預測框評分進行排序,而後刪除得分低的框。所以很容易出現以下圖的狀況,即IoU低的預測框由於評分高而在NMS過程當中將IoU高的預測框擠掉了。

而使用IoU Aware能夠很好的避免這種狀況,即在訓練過程當中增長一個通道來學習預測框和真實框之間的IoU,在推理過程當中,將這個通道學習的IoU預測值也做爲評分的因子之一,這樣就能必定程度上避免高IoU預測框被擠掉的狀況,從而提高模型的精度。同時,因爲只是輸出層的每一個anchor上增長了一個通道,對於推理計算量的增長也基本能夠忽略不計。

 來自論文《IoU-aware Single-stage Object Detector for Accurate Localization》

經過使用上述優化方法,模型精度又提高了1.1%(41.4%->42.5%),而對推理速度的影響比較小(79.2FPS -> 74.9FPS)。

5. Grid Sensitive

YOLOv3的檢測原理是將圖片劃分紅多個網格,真實框的中心點落在哪一個網格上就由哪一個網格負責檢測這個真實框,而推理輸出特徵圖中包含預測框中心座標的logits值,這個值經Sigmoid激活後,即表示預測框中心座標在網格中的相對位置。以下圖所示,預測框的Px和Py經Sigmoid激活後,即表示預測框中心座標相對真實框中心座標gx和gy的偏移。那麼若是這個真實框的中心點恰好落在網格邊緣,則訓練過程當中趨向於把輸出logit值向正負無窮去學習,容易致使過擬合。

Grid Sensitive是YOLOv4模型引入的一種優化方法,即在計算預測框中心點在網格內的座標時,對輸出logit取sigmoid激活後,再加上一個縮放和偏移,能夠保證預測框中心點可以有效的擬合真實框恰好落在網格邊線上的狀況。

經過加入Grid Sensitive,此輪精度又提高了0.3%(42.5%->42.8%),推理過程當中只須要對預測框解碼時在中心點座標上乘上縮放,再加上偏移便可,所以推理速度幾乎沒有影響(74.9FPS -> 74.8FPS)。

6. 後處理優化: Matrix NMS

在推理過程當中,NMS還會刪除與得分高的框的重合度大於必定閾值的其它預測框,這樣對於存在兩個同類別物體重疊的的圖像檢測任務來講,就會出現一個物體的預測框把另外一個物體的預測框抑制掉的狀況,致使漏檢。

所以又引入了Soft NMS這個概念,其解決思路並非粗暴的將與得分高的預測框重合度大於閾值的框直接濾除,而是下降這個預測框的評分,對預測框評分的懲罰係數與這兩個框的重合度,也就是IoU正相關,採用這種軟化的濾除方式就能有效的避免重疊的同類物體預測框互相沖突的狀況,提升檢測的精度。

但引入Soft NMS會使推理速度變慢。所以此輪模型優化採用了更優的Matrix NMS:一種並行化進行Soft NMS的實現思路。Matrix NMS經過一個矩陣並行運算的方式計算出任意兩個框之間的IoU,例如對某一個預測框B計算抑制係數時,Matrix NMS經過矩陣並行方式計算出全部得分高於B的預測框與預測框B的IoU,而後根據這些IOU和得分高於B的預測框的被抑制機率作近似估算,估算出B的抑制係數,從而實現並行化的計算Soft NMS,在提升檢測精度的同時,避免了推理速度的下降。

使用Matrix NMS後,模型在推理速度幾乎不變的狀況下提高0.7%的精度(42.8% -> 43.5%)。

7. 特徵提取優化: CoordConv, 空間金字塔池化

另外PP-YOLO還引入了兩種幾乎不增長計算量可是能優化特徵提取的方法。咱們知道深度學習裏的卷積運算是具備平移等變性的,這樣能夠在圖像的不一樣位置共享統一的卷積核參數,可是這樣卷積學習過程當中是不能感知當前特徵在圖像中的座標的。CoordConv就是經過在卷積的輸入特徵圖中新增對應的通道來表徵特徵圖像素點的座標,讓卷積學習過程當中可以必定程度感知座標來提高檢測精度。

 來自論文《An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution》

空間金字塔池化是SPPNet提出的,以下圖所示經過多個不一樣尺度的池化窗口提取不一樣尺度的池化特徵,把特徵組合在一塊兒做爲輸出特徵,在骨幹網絡提取特徵後加入空間金字塔池化,能有效的增長特徵的感覺野,是一種普遍應用的特徵提取優化方法。

使用CoordConv和SPP兩種特徵提取優化方法後,精度進一步提高了0.8%(43.5%->44.3%), 這兩種方式新增的推理計算量並不大,因此推理速度僅有少許降低(74.1FPS -> 72.9FPS)。

8. 更優的預訓練模型: SSLD

經過上述優化方法,PP-YOLO模型在COCO minival數據集上的精度優化到了44.3%,V100上預測速度爲72.9FPS。另外飛槳推出的圖像分類端到端套件PaddleClas還提供了ResNet50vd的SSLD知識蒸餾模型及權重,使ResNet50vd模型在ImageNet上的Top-1分類精度從79.1%優化到82.4%,感興趣的同窗能夠經過下面的地址瞭解PaddleClas SSLD蒸餾方案。PP-YOLO模型在使用了SSLD知識蒸餾以後更優的預訓練權重進行訓練後,COCO minival數據集的精度又提高了0.5%(44.3%->44.8%)。

PaddleClas SSLD的文檔地址:

https://paddleclas.readthedocs.io/zh_CN/latest/advanced_tutorials/distillation/distillation.html#ssld

通過上述優化方法,飛槳的研發人員又將訓練迭代次數和學習率衰減的迭代次數調整至和原始YOLOv3模型的迭代次數一致,也就是訓練迭代次數從25萬次增長到50萬次,對應學習率衰減的迭代次數調整至40萬和45萬,使PP-YOLO模型(如表中的K模型所示)在COCO minival數據集精度再次提高0.5% ,達到45.3%,單卡V100上batch size=1時的預測速度爲72.9 FPS。若是使用COCO test_dev2017數據集測試,精度將達到45.9%。

後續工做

考慮到如今工業、互聯網等各行各業須要使用輕量化的模型在移動端、邊緣端部署目標檢測模型,PaddleDetection團隊正在進一步優化適用於輕量化部署的PP-YOLO,很快也將以開源項目、詳細的使用文檔及快速體驗Demo的組合形式爲你們呈現。

課程預告

百度飛槳爲了幫助你們能快速、深刻、全面的瞭解目標檢測技術,將於九月中旬特意開設「目標檢測7日打卡營」。資深研發工程師傾囊相授多年「煉丹」經驗,配套真實工業落地場景案例,最早進的調優方式、訓練技巧、優化技巧和工業部署方案,7天帶您一網打盡,千萬不要錯過!

感興趣的同窗歡迎掃碼加入PP-YOLO微信羣,與更多深度學習開發者交流與探討技術。

如掃碼失敗,可添加微信15711058002,飛槳小哥哥拉你入羣~

更多飛槳的相關內容,請參閱如下內容。

官網地址:https://www.paddlepaddle.org.cn

飛槳PaddleDetection項目地址:

GitHub: https://github.com/PaddlePaddle/PaddleDetection

Gitee: https://gitee.com/paddlepaddle/PaddleDetection

若是您以爲PP-YOLO對您帶來了一些啓發或者確實實用的話,也歡迎您能夠給PaddleDetection項目點亮Star。

飛槳開源框架項目地址:

GitHub: https://github.com/PaddlePaddle/Paddle

Gitee: https://gitee.com/paddlepaddle/Paddle

喜歡就點「在看」吧 !


本文分享自微信公衆號 - 視學算法(visualAlgorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索