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

百度AI發表於2020-08-21

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

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

例如工業質檢,生產線上往往需要毫秒級別的圖片檢測速度,而為了確保使用廠商收益最大化,還需要儘量平衡硬體成本和效能。因此,如何在保持高檢測精度的前提下,儘量提高檢測速度、減小模型體積,成為這項技術真正深入工業實際應用的關鍵。

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

而目標檢測的王牌家族——YOLO 系列模型,作為單階段目標檢測演算法的代表之一,一經出世,便以快速精準的檢測效果而迅速躥紅。其不僅在速度上做到真正實時,精度上也可以達到很多非實時兩階段模型才有的水平。

精度45.9%,推理速度72.9FPS,百度飛槳推出工業級目標檢測模型 PP-YOLO
▲ 來自論文《YOLOv3: An Incremental Improvement》
而學術界和開源社群中的 YOLO 擁躉、大神們,並未止步於此,YOLOv4、YOLOv5 也在今年被相繼推出,它們大量整合了計算機視覺的 state-of-the-art 技巧,例如在資料增強、錨定框、骨架網路、訓練方式等維度進行最佳化,從而達到大幅提升 YOLO 目標檢測效能的效果。

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

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

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

如下表所示,在不同輸入尺度下 PP-YOLO 模型與 YOLOv4 模型在 COCO 資料集精度和 V100 推理速度的交手結果。

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

▲ 注:上表中資料均為在單卡 Tesla V100 上 batch size=1 測試結果,TRT-FP16 為使用 TensorRT 且在 FP16 上的測試結果,TensorRT 版本為5.1.2.2
而 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

PP-YOLO 的高精度和高推理速度對多快速運動目標檢測的影片也可以達到很好的效果。

那 PP-YOLO 到底採用了哪些最佳化策略呢?下面我們們帶領大家一起來深入剖析一下飛槳團隊演算法最佳化的 “內功心法”。

一、基於 YOLOv3-DarkNet53 的初步最佳化

原始的 YOLOv3 模型在 COCO minival 資料集上精度為33.0%,PaddleDetection 首先加入了 Bag of Freebies for Training Object Detection Neural Networks 論文中提及的最佳化策略,在不引入額外計算量的情況下,精度提升了3.9個百分點,達到38.9%。具體策略如下:

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

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

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

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

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

二、更優的骨幹網路ResNet50vd-DCN

骨幹網路可以說是一個模型的基礎,一個優秀的骨幹網路會給模型的效能帶來極大的提升。針對 YOLOv3,飛槳研發人員使用更加優異的 ResNet50vd-DCN 作為模型的骨幹網路。它可以被分為 ResNet50vd 和 DCN 兩部分來看。

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

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

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

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

三、穩定的訓練方式EMA、DropBlock 和更大的 batch size

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

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

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

▲ 來自論文《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%)。

四、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 上增加了一個通道,對於推理計算量的增加也基本可以忽略不計。

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

▲ 來自論文《IoU-aware Single-stage Object Detector for Accurate Localization》
透過使用上述最佳化方法,模型精度又提升了1.1%(41.4%->42.5%),而對推理速度的影響比較小(79.2FPS->74.9FPS)。

五、Grid Sensitive

YOLOv3 的檢測原理是將圖片劃分成多個網格,真實框的中心點落在哪個網格上就由哪個網格負責檢測這個真實框,而推理輸出特徵圖中包含預測框中心座標的 logits 值,這個值經 Sigmoid 啟用後,即表示預測框中心座標在網格中的相對位置。

如下圖所示,預測框的 Px 和 Py 經 Sigmoid 啟用後,即表示預測框中心座標相對真實框中心座標 gx 和 gy 的偏移。那麼如果這個真實框的中心點剛好落在網格邊緣,則訓練過程中趨向於把輸出 logit 值向正負無窮去學習,容易導致過擬合。

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

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

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

六、後處理最佳化: 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%)。

七:特徵提取最佳化CoordConv,空間金字塔池化

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

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

▲ 來自論文《An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution》
空間金字塔池化是 SPPNet 提出的,如下圖所示透過多個不同尺度的池化視窗提取不同尺度的池化特徵,把特徵組合在一起作為輸出特徵,在骨幹網路提取特徵後加入空間金字塔池化,能有效的增加特徵的感受野,是一種廣泛應用的特徵提取最佳化方法。

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

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

八:更優的預訓練模型: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.9FPS。如果使用 COCO test_dev2017 資料集測試,精度將達到45.9%。

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

九:後續工作

考慮到現在工業、網際網路等各行各業需要使用輕量化的模型在移動端、邊緣端部署目標檢測模型,PaddleDetection 團隊正在進一步最佳化適用於輕量化部署的 PP-YOLO,很快也將以開源專案、詳細的使用文件及快速體驗 Demo 的組合形式為大家呈現。

課程預告

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

感興趣的同學歡迎加入 PP-YOLO 微信群,與更多深度學習開發者交流與探討技術。可新增微信15711058002並備註“YOLO”,飛槳小哥哥拉你入群~

如果您覺得 PP-YOLO 對您帶來了一些啟發或者確實實用的話,也歡迎您可以給 PaddleDetection 專案點亮 Star。

·飛槳官網地址·

https://www.paddlepaddle.org.cn/

·PP-YOLO AI Studio專案地址·

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

·飛槳 PaddleDetection 專案地址·

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

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

·飛槳開源框架專案地址·

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

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

*以上鍊接可複製貼上至瀏覽器開啟

相關文章