而目標(biāo)檢測的王牌家族——YOLO系列模型,作為單階段目標(biāo)檢測算法的代表之一,一經(jīng)出世,便以快速精準(zhǔn)的檢測效果而迅速躥紅。其不僅在速度上做到真正實時,精度上也可以達到很多非實時兩階段模型才有的水平。
(來自論文《YOLOv3: An Incremental Improvement》)
而學(xué)術(shù)界和開源社區(qū)中的YOLO擁躉、大神們,并未止步于此, YOLOv4、“YOLO v5”也在今年被相繼推出,它們大量整合了計算機視覺的state-of-the-art技巧,例如在數(shù)據(jù)增強、錨定框、骨架網(wǎng)絡(luò)、訓(xùn)練方式等維度進行優(yōu)化,從而達到大幅提升YOLO目標(biāo)檢測性能的效果。
飛槳目標(biāo)檢測套件PaddleDetection研發(fā)團隊為了讓YOLOv3模型在工業(yè)實際應(yīng)用場景擁有更優(yōu)異的精度與推理速度,以盡量不增加模型計算量和推理開銷為前提,探索出了一整套更深度的算法優(yōu)化秘籍,將原先YOLOv3模型的精度,在COCO test-dev2017數(shù)據(jù)集中,從33.0%提升了12.9個絕對百分點,達到45.9%,處于業(yè)界領(lǐng)先行列!而在該精度下,其推理速度在V100上達到了72.9 FPS。也就是說,它在精度和預(yù)測速度都超越原生的YOLOv4,并且體積更小,實打?qū)嵉某蔀楣I(yè)應(yīng)用場景最實用目標(biāo)檢測模型。而這次華麗變身后的YOLOv3,也被正式命名為——PP-YOLO!
如下表所示,在不同輸入尺度下PP-YOLO模型與YOLOv4模型在COCO數(shù)據(jù)集精度和V100推理速度的交手結(jié)果。
(表中數(shù)據(jù)均為在單卡Tesla V100上batch size=1測試結(jié)果,TRT-FP16為使用TensorRT且在FP16上的測試結(jié)果,TensorRT版本為5.1.2.2)
而PP-YOLO所應(yīng)用的的這套優(yōu)化策略,也可以被嘗試應(yīng)用到該系列的其它模型上,產(chǎn)業(yè)開發(fā)者或者科研人員可借鑒這套優(yōu)化算法展開進一步的探索。而這整套PP-YOLO的優(yōu)化秘籍也被飛槳同學(xué)總結(jié)梳理成了論文,感興趣的開發(fā)者可以參見飛槳公眾號。
飛槳團隊也在AI Studio為大家創(chuàng)建了 PP-YOLO實戰(zhàn)項目,以供開發(fā)者快速體驗?zāi)P托Ч?/p>
PP -YOLO的高精度和高推理速度對多快速運動目標(biāo)檢測的視頻也可以達到很好的效果。
那PP-YOLO到底采用了哪些優(yōu)化策略呢?下面咱們帶領(lǐng)大家一起來深入剖析一下飛槳團隊算法優(yōu)化的 “內(nèi)功心法”。
1. 基于YOLOv3-DarkNet53的初步優(yōu)化
原始的模型在COCO minival數(shù)據(jù)集上精度為33.0%,PaddleDetection首先加入了Bag of Freebies for Training Object Detection Neural Networks論文中提及的優(yōu)化策略,在不引入額外計算量的情況下,精度提升了3.9個百分點,達到38.9%。具體策略如下:
Image Mixup(圖像混合):以隨機權(quán)重將兩張圖片混合起來,提高網(wǎng)絡(luò)在空間上的抗干擾能力。以下圖為例,將任意兩張圖片加權(quán)疊加作為輸入,訓(xùn)練過程中使用的損失為兩張圖片的損失乘以各自權(quán)重的加和。
(來自論文《Bag of Freebies for Training Object Detection Neural Networks》)
Label Smooth(標(biāo)簽平滑):通過在真實的分類標(biāo)簽one-hot編碼中真實類別的1上減去一個小量,非真實標(biāo)簽的0上加上一個小量,將硬標(biāo)簽變成一個軟的標(biāo)簽,起到正則化的作用,防止過擬合,提升模型泛化能力。
Synchronize Batch Normalization(同步批歸一化):多卡訓(xùn)練時,一般實現(xiàn)的批歸一化只統(tǒng)計單卡上均值和方差,而檢測任務(wù)中,受顯存的限制,batch size比較小,多卡同步,會使得均值和方差統(tǒng)計的更加準(zhǔn)確。
2. 更優(yōu)的骨干網(wǎng)絡(luò): ResNet50vd-DCN
骨干網(wǎng)絡(luò)可以說是一個模型的基礎(chǔ),一個優(yōu)秀的骨干網(wǎng)絡(luò)會給模型的性能帶來極大的提升。針對YOLOv3,飛槳研發(fā)人員使用更加優(yōu)異的ResNet50vd-DCN 作為模型的骨干網(wǎng)絡(luò)。它可以被分為ResNet50vd和DCN兩部分來看。
ResNet50vd是指擁有50個卷積層的ResNet-D網(wǎng)絡(luò)。ResNet系列模型是在2015年提出后,在學(xué)術(shù)界和工業(yè)屆得到了廣泛的應(yīng)用,其模型結(jié)構(gòu)也在被業(yè)界開發(fā)者持續(xù)改進,在經(jīng)過了B、C、D三個版本的改進后,最新的ResNet-D結(jié)構(gòu)能在基本不增加計算量的情況下先住提高模型精度。經(jīng)飛槳團隊的多重實驗發(fā)現(xiàn),使用ResNet50vd結(jié)構(gòu)作為骨干網(wǎng)絡(luò),相比于原始的ResNet,可以提高1%-2%的目標(biāo)檢測精度,且推理速度基本保持不變。
而DCN(Deformable Convolution)可變形卷積的特點在于:其卷積核在每一個元素上額外增加了一個可學(xué)習(xí)的偏移參數(shù)。這樣的卷積核在學(xué)習(xí)過程中可以調(diào)整卷積的感受野,從而能夠更好的提取圖像特征,以達到提升目標(biāo)檢測精度的目的。但它會在一定程度上引入額外的計算開銷。經(jīng)過多翻嘗試,PaddleDetection團隊發(fā)現(xiàn)只在ResNet的最后一個stage(C5)增加可變形卷積,是實現(xiàn)引入極少計算量并提升模型精度的最佳策略。
在使用ResNet50vd-DCN作為骨干網(wǎng)絡(luò)后,YOLOv3模型的檢測精度從原先的38.9% 達到39.1%,而推理速度得到了36%的大幅提高(58.2FPS -> 79.2FPS)。
3. 更穩(wěn)定的訓(xùn)練方式:EMA、DropBlock和更大的batch size
為了使PP-YOLO的訓(xùn)練過程有更好的收斂效果,飛槳團隊通過API paddle.optimizer.ExponentialMovingAverage調(diào)用了EMA(Exponential Moving Average)滑動平均功能?;瑒悠骄侵笇?shù)過去一段時間的均值作為新的參數(shù)。相比直接對參數(shù)進行更新,采用滑動平均的方式能讓參數(shù)學(xué)習(xí)過程中變得更加平緩,能有效避免異常值對參數(shù)更新的影響,提升模型訓(xùn)練的收斂效果。
PP-YOLO的優(yōu)化過程中使用了DropBlock算法來減少過擬合。如下圖所示,相比于Dropout算法,DropBlock算法在Drop特征的時候不是以特征點的形式來Drop的,而是會集中Drop掉某一塊區(qū)域,從而更適合被應(yīng)用到目標(biāo)檢測任務(wù)中來提高網(wǎng)絡(luò)的泛化能力。
(來自論文《DropBlock: A regularization method for convolutional networks》)
通過訓(xùn)練過程中的指數(shù)滑動平均和DropBlock策略,結(jié)合適當(dāng)增大訓(xùn)練的batch size(將單卡的batch size調(diào)整到24,8卡總batch size為192,使訓(xùn)練更加穩(wěn)定,獲取更優(yōu)的結(jié)果),YOLOv3此時在COCO minival數(shù)據(jù)集精度提升了2.5%(39.1%->41.4%)。
4. IoU學(xué)習(xí)
對于目標(biāo)檢測任務(wù),IoU是我們常用的評估指標(biāo),即預(yù)測框與真實框的IoU越大,檢測效果越好?;凇八娂此谩钡乃枷?PP-YOLO使用了業(yè)界提出的一種新的Loss——IoU Loss,即在訓(xùn)練過程中使用模型產(chǎn)生的預(yù)測框和真實框求IoU,對其取反并加入到損失計算中,這樣相當(dāng)于在優(yōu)化損失的時候就是在提升IoU。注:在PP-YOLO中,飛槳采用了最基礎(chǔ)的IoU損失計算方法,即IoU Loss = 1 – IoU * IoU 。
另一方面,我們知道YOLOv3模型里的預(yù)測框評分score = objectness score * classification score,即該預(yù)測框處存在目標(biāo)的概率和對應(yīng)目標(biāo)類別的概率的乘積,而此種評分方式并沒有考慮預(yù)測框的定位精度。而目標(biāo)檢測模型都需要對最后的預(yù)測框進行非極大值抑制(NMS),即按照預(yù)測框評分進行排序,然后刪除得分低的框。因此很容易出現(xiàn)如下圖的情況,即IoU低的預(yù)測框因為評分高而在NMS過程中將IoU高的預(yù)測框擠掉了。
而使用IoU Aware可以很好的避免這種情況,即在訓(xùn)練過程中增加一個通道來學(xué)習(xí)預(yù)測框和真實框之間的IoU,在推理過程中,將這個通道學(xué)習(xí)的IoU預(yù)測值也作為評分的因子之一,這樣就能一定程度上避免高IoU預(yù)測框被擠掉的情況,從而提升模型的精度。同時,由于只是輸出層的每個anchor上增加了一個通道,對于推理計算量的增加也基本可以忽略不計。
(來自論文《IoU-aware Single-stage Object Detector for Accurate Localization》)
通過使用上述優(yōu)化方法,模型精度又提升了1.1%(41.4%->42.5%),而對推理速度的影響比較小(79.2FPS -> 74.9FPS)。
5. Grid Sensitive
YOLOv3的檢測原理是將圖片劃分成多個網(wǎng)格,真實框的中心點落在哪個網(wǎng)格上就由哪個網(wǎng)格負責(zé)檢測這個真實框,而推理輸出特征圖中包含預(yù)測框中心坐標(biāo)的logits值,這個值經(jīng)Sigmoid激活后,即表示預(yù)測框中心坐標(biāo)在網(wǎng)格中的相對位置。如下圖所示,預(yù)測框的Px和Py經(jīng)Sigmoid激活后,即表示預(yù)測框中心坐標(biāo)相對真實框中心坐標(biāo)gx和gy的偏移。那么如果這個真實框的中心點剛好落在網(wǎng)格邊緣,則訓(xùn)練過程中趨向于把輸出logit值向正負無窮去學(xué)習(xí),容易導(dǎo)致過擬合。
Grid Sensitive是YOLOv4模型引入的一種優(yōu)化方法,即在計算預(yù)測框中心點在網(wǎng)格內(nèi)的坐標(biāo)時,對輸出logit取sigmoid激活后,再加上一個縮放和偏移,可以保證預(yù)測框中心點能夠有效的擬合真實框剛好落在網(wǎng)格邊線上的情況。
通過加入Grid Sensitive,此輪精度又提升了0.3%(42.5%->42.8%),推理過程中只需要對預(yù)測框解碼時在中心點坐標(biāo)上乘上縮放,再加上偏移即可,因此推理速度幾乎沒有影響(74.9FPS -> 74.8FPS)。
6. 后處理優(yōu)化: Matrix NMS
在推理過程中,NMS還會刪除與得分高的框的重合度大于一定閾值的其它預(yù)測框,這樣對于存在兩個同類別物體重疊的的圖像檢測任務(wù)來說,就會出現(xiàn)一個物體的預(yù)測框把另一個物體的預(yù)測框抑制掉的情況,導(dǎo)致漏檢。
因此又引入了Soft NMS這個概念,其解決思路并不是粗暴的將與得分高的預(yù)測框重合度大于閾值的框直接濾除,而是降低這個預(yù)測框的評分,對預(yù)測框評分的懲罰系數(shù)與這兩個框的重合度,也就是IoU正相關(guān),采用這種軟化的濾除方式就能有效的避免重疊的同類物體預(yù)測框互相沖突的情況,提高檢測的精度。
但引入Soft NMS會使推理速度變慢。因此此輪模型優(yōu)化采用了更優(yōu)的Matrix NMS:一種并行化進行Soft NMS的實現(xiàn)思路。Matrix NMS通過一個矩陣并行運算的方式計算出任意兩個框之間的IoU,例如對某一個預(yù)測框B計算抑制系數(shù)時,Matrix NMS通過矩陣并行方式計算出所有得分高于B的預(yù)測框與預(yù)測框B的IoU,然后根據(jù)這些IOU和得分高于B的預(yù)測框的被抑制概率做近似估算,估算出B的抑制系數(shù),從而實現(xiàn)并行化的計算Soft NMS,在提高檢測精度的同時,避免了推理速度的降低。
使用Matrix NMS后,模型在推理速度幾乎不變的情況下提升0.7%的精度(42.8% -> 43.5%)。
8. 特征提取優(yōu)化: CoordConv, 空間金字塔池化
另外PP-YOLO還引入了兩種幾乎不增加計算量但是能優(yōu)化特征提取的方法。我們知道深度學(xué)習(xí)里的卷積運算是具有平移等變性的,這樣可以在圖像的不同位置共享統(tǒng)一的卷積核參數(shù),但是這樣卷積學(xué)習(xí)過程中是不能感知當(dāng)前特征在圖像中的坐標(biāo)的。CoordConv就是通過在卷積的輸入特征圖中新增對應(yīng)的通道來表征特征圖像素點的坐標(biāo),讓卷積學(xué)習(xí)過程中能夠一定程度感知坐標(biāo)來提升檢測精度。
(來自論文《An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution》)
空間金字塔池化是SPPNet提出的,如下圖所示通過多個不同尺度的池化窗口提取不同尺度的池化特征,把特征組合在一起作為輸出特征,在骨干網(wǎng)絡(luò)提取特征后加入空間金字塔池化,能有效的增加特征的感受野,是一種廣泛應(yīng)用的特征提取優(yōu)化方法。
使用CoordConv和SPP兩種特征提取優(yōu)化方法后,精度進一步提升了0.8%(43.5%->44.3%), 這兩種方式新增的推理計算量并不大,所以推理速度僅有少量下降(74.1FPS -> 72.9FPS)。
9. 更優(yōu)的預(yù)訓(xùn)練模型: SSLD
通過上述優(yōu)化方法,PP-YOLO模型在COCO minival數(shù)據(jù)集上的精度優(yōu)化到了44.3%,V100上預(yù)測速度為72.9FPS。另外飛槳推出的圖像分類端到端套件PaddleClas還提供了ResNet50vd的SSLD知識蒸餾模型及權(quán)重,使ResNet50vd模型在ImageNet上的Top-1分類精度從79.1%優(yōu)化到82.4%,感興趣的同學(xué)可以通過下面的地址了解蒸餾方案。PP-YOLO模型在使用了SSLD知識蒸餾之后更優(yōu)的預(yù)訓(xùn)練權(quán)重進行訓(xùn)練后,COCO minival數(shù)據(jù)集的精度又提升了0.5%(44.3%->44.8%)。
經(jīng)過上述優(yōu)化方法,飛槳的研發(fā)人員又將訓(xùn)練迭代次數(shù)和學(xué)習(xí)率衰減的迭代次數(shù)調(diào)整至和原始YOLOv3模型的迭代次數(shù)一致,也就是訓(xùn)練迭代次數(shù)從25萬次增加到50萬次,對應(yīng)學(xué)習(xí)率衰減的迭代次數(shù)調(diào)整至40萬和45萬,使PP-YOLO模型(如表中的K模型所示)在COCO minival數(shù)據(jù)集精度再次提升0.5% ,達到45.3%,單卡V100上batch size=1時的預(yù)測速度為72.9 FPS。如果使用COCO test_dev2017數(shù)據(jù)集測試,精度將達到45.9%。
后續(xù)工作
考慮到現(xiàn)在工業(yè)、互聯(lián)網(wǎng)等各行各業(yè)需要使用輕量化的模型在移動端、邊緣端部署目標(biāo)檢測模型,PaddleDetection團隊正在進一步優(yōu)化適用于輕量化部署的PP-YOLO,很快也將以開源項目、詳細的使用文檔及快速體驗Demo的組合形式為大家呈現(xiàn)。
課程預(yù)告
百度飛槳為了幫助大家能快速、深入、全面的了解目標(biāo)檢測技術(shù),將于九月中旬特地開設(shè)“目標(biāo)檢測7日打卡營”。資深研發(fā)工程師傾囊相授多年“煉丹”經(jīng)驗,配套真實工業(yè)落地場景案例,最先進的調(diào)優(yōu)方式、訓(xùn)練技巧、優(yōu)化技巧和工業(yè)部署方案,7天帶您一網(wǎng)打盡,千萬不要錯過!