┊文章閱讀:次
單階段目標(biāo)檢測界的扛把子--YOLO,以其“又快又好的效果”在學(xué)術(shù)及產(chǎn)業(yè)界全面風(fēng)靡。自20年下半年YOLOv4、YOLOv5、PP-YOLO、YOLO-Fastest和YOLOv4 Tiny等等輪番轟炸、掀起“YOLO狂潮”后,時隔半年,超越Y(jié)OLOv5的PP-YOLOv2和1.3M超超超輕量級的PP-YOLO tiny一起來了!!!
圖 1 PP-YOLOv2和其他目標(biāo)檢測器性能對比
如圖1可見,PP-YOLOv2在同等速度下,精度超越Y(jié)OLOv5!相較20年發(fā)布的PP-YOLO,v2版本在COCO 2017 test-dev上的精度提升了3.6,由45.9提升到了49.5;在640640的輸入尺寸下,FPS達(dá)到68.9FPS,而采用TensorRT加速的話,FPS更是達(dá)到了106.5!這樣的性能,超越了當(dāng)前所有同等計算量下的檢測器,包括YOLOv4-CSP和YOLOv5l!
而如果將骨架網(wǎng)絡(luò)從ResNet50更換為ResNet101,PP-YOLOv2的優(yōu)勢則更為顯著:mAP達(dá)到50.3,速度比同計算量的YOLOv5x高出了15.9。
不僅如此,與PP-YOLOv2一同面世的,還有體積只有1.3M的PP-YOLO Tiny,比YOLO-Fastest更輕、更快!這樣超超超輕量的算法面世,更是很好的滿足了產(chǎn)業(yè)里大量邊緣、輕量化、低成本芯片上使用目標(biāo)檢測算法的種種訴求!
PP-YOLOv2:產(chǎn)業(yè)最實用的目標(biāo)檢測器
關(guān)注百度飛槳的小伙伴可能還記得,PP-YOLOhttps://arxiv.org/abs/2007.12099是在YOLOv3的基礎(chǔ)上,采用了一整套優(yōu)化策略,在幾乎不增加模型參數(shù)和計算量FLOPs的前提下,提升檢測器的精度得到的極高性價比mAP 45.9,72.9FPS的單階段目標(biāo)檢測器。
而PP-YOLOv2,是以PP-YOLO為基線模型進(jìn)行了一系列的延展實驗得到的。下面,就讓我們來一起看看具體是哪些策略給PP-YOLO帶來了進(jìn)一步的優(yōu)化提升呢?
1、采用Path Aggregation Network路徑聚合網(wǎng)絡(luò)設(shè)計Detection Net
YOLO系列的一大通病,是對不同尺幅的目標(biāo)檢測效果欠佳,因此,PP-YOLOv2第一個優(yōu)化的嘗試是設(shè)計一個可以為各種尺度圖像構(gòu)建高層語義特征圖的檢測頸detection neck。不同于PP-YOLO采用FPN來從下至上的構(gòu)建特征金字塔,PP-YOLOv2采用了FPN的變形之一—PANPath Aggregation Network來從上至下的聚合特征信息。而采用PAN構(gòu)建的detection neck可以由圖2看到。
圖2PP-YOLOv2 Detection Neck的結(jié)構(gòu)
2、采用Mish激活函數(shù)
Mish激活函數(shù)被很多實用的檢測器采用,并擁有出色的表現(xiàn),例如YOLOv4和YOLOv5都在骨架網(wǎng)絡(luò)backbone的構(gòu)建中應(yīng)用mish激活函數(shù)。而對于PP-YOLOv2,我們傾向于仍然采用原有的骨架網(wǎng)絡(luò),因為它的預(yù)訓(xùn)練參數(shù)使得網(wǎng)絡(luò)在ImageNet上top-1準(zhǔn)確率高達(dá)82.4。所以我們把mish激活函數(shù)應(yīng)用在了detection neck而不是骨架網(wǎng)絡(luò)上。
3、更大的輸入尺寸
增加輸入尺寸直接帶來了目標(biāo)面積的擴(kuò)大。這樣,網(wǎng)絡(luò)可以更容易捕捉到小尺幅目標(biāo)的信息,得到更高的性能。然而,更大的輸入會帶來更多的內(nèi)存占用。所以在使用這個策略的同時,我們需要同時減少Batch Size。在具體實驗中,我們將Batch Size減少了一倍,從每個GPU 24張圖像減少到每個GPU 12張圖像,并將最大輸入從608擴(kuò)展到768。輸入大小均勻地從[320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768]獲取。
4、IoU Aware Branch
在YOLOv3中,將分類概率和objectness相乘作為最終的檢測置信度,但卻沒有考慮定位置信度。為了解決這一問題,我們將objectness與定位置信度IoU綜合起來,使用下面的公式來計算出一個新的objectness:
而以上這一系列優(yōu)化策略對網(wǎng)絡(luò)的改進(jìn)效果分別是怎樣的呢?通過消融實驗得到的圖表我們可以清晰的看到,以上PAN、MISH和輸入尺寸的增大都帶來了一些計算量的增加,但mAP卻得到了顯著的提升。
而優(yōu)化后的PP-YOLOv2的完整性能測試及與YOLOv4、YOLOv5全系列算法的比較如下表,PP-YOLOv2R50計算量相當(dāng)于YOLOv5l,PP-YOLOv2R101計算量相當(dāng)于YOLOv5x??梢钥吹?PP-YOLOv2的性能超越了當(dāng)前所有同等計算量下的檢測器!
值得注意的是:不管是PP-YOLO還是PP-YOLOv2,都是在尋找在產(chǎn)業(yè)實踐中最高性價比的目標(biāo)檢測方案,而不是單純的以提升單階段目標(biāo)檢測的精度去堆網(wǎng)絡(luò)和策略。論文中也特別提到,是以實驗報告的角度來為業(yè)界開發(fā)者展示更多網(wǎng)絡(luò)優(yōu)化的方法,這些策略也可以被應(yīng)用在其他網(wǎng)絡(luò)的優(yōu)化上,希望在給業(yè)界開發(fā)者帶來更好的網(wǎng)絡(luò)的同時,也帶來更多的算法優(yōu)化啟發(fā)。
PPYOLO Tiny:1.3M超超超輕量目標(biāo)檢測算法
在當(dāng)前移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、車聯(lián)網(wǎng)等行業(yè)迅猛發(fā)展的背景下,邊緣設(shè)備上直接部署目標(biāo)檢測的需求越來越旺盛。生產(chǎn)線上往往需要在極低硬件成本的硬件例如樹莓派、FPGA、K210等芯片上部署目標(biāo)檢測算法。而我們常用的手機(jī)App,也很難直接在終端采用超過6M的深度學(xué)習(xí)算法。
如何在盡量不損失精度的前提下,獲得體積更小、運(yùn)算速度更快的算法呢?
得益于PaddleSlim飛槳模型壓縮工具的能力,體積僅為1.3M的PPYOLO Tiny誕生了!
那PP-YOLO Tiny具體采用了哪些優(yōu)化策略呢?
首先,PP-YOLO Tiny沿用了PP-YOLO系列模型的spp,iou loss, drop block, mixup, sync bn等優(yōu)化方法,并進(jìn)一步采用了近10種針對移動端的優(yōu)化策略:
1、更適用于移動端的骨干網(wǎng)絡(luò):
骨干網(wǎng)絡(luò)可以說是一個模型的核心組成部分,對網(wǎng)絡(luò)的性能、體積影響巨大。PPYOLO Tiny采用了移動端高性價比骨干網(wǎng)絡(luò)MobileNetV3。
2、更適用移動端的檢測頭head:
除了骨干網(wǎng)絡(luò),PP-YOLO Tiny的檢測頭head部分采用了更適用于移動端的深度可分離卷積Depthwise Separable Convolution,相比常規(guī)的卷積操作,有更少的參數(shù)量和運(yùn)算成本,更適用于移動端的內(nèi)存空間和算力。
3、去除對模型體積、速度有顯著影響的優(yōu)化策略:
在PPYOLO中,采用了近10種優(yōu)化策略,但并不是每一種都適用于移動端輕量化網(wǎng)絡(luò),比如iou aware和matrix nms等。這類Trick在服務(wù)器端容易計算,但在移動端會引入很多額外的時延,對移動端來說性價比不高,因此去掉反而更適當(dāng)。
4、使用更小的輸入尺寸
為了在移動端有更好的性能,PP-YOLO Tiny采用320和416這兩種更小的輸入圖像尺寸。并在 PaddleDetection2.0中提供tools/anchor_cluster.py腳本,使用戶可以一鍵式的獲得與目標(biāo)數(shù)據(jù)集匹配的Anchor。例如,在COCO數(shù)據(jù)集上,我們使用320320尺度重新聚類了anchor,并對應(yīng)的在訓(xùn)練過程中把每batch圖片的縮放范圍調(diào)整到192-512來適配小尺寸輸入圖片的訓(xùn)練,得到更高性能。
5、召回率優(yōu)化
在使用小尺寸輸入圖片時,對應(yīng)的目標(biāo)尺寸也會被縮小,漏檢的概率會變大,對應(yīng)的我們采用了如下兩種方法來提升目標(biāo)的召回率:
a.原真實框的注冊方法是注冊到網(wǎng)格里最匹配的anchor上,優(yōu)化后還會同時注冊到所有與該真實框的IoU不小于0.25的anchor上,提高了真實框注冊的正例。
b.原來所有與真實框IoU小于0.7的anchor會被當(dāng)錯負(fù)例,優(yōu)化后將該閾值減小到0.5,降低了負(fù)例比例。
通過以上增加正例、減少負(fù)例的方法,彌補(bǔ)了在小尺寸上的正負(fù)例傾斜問題,提高了召回率。
6、更大的batch size
往往更大的Batch Size可以使訓(xùn)練更加穩(wěn)定,獲取更優(yōu)的結(jié)果。在PP-YOLO Tiny的訓(xùn)練中,單卡batch size由24提升到了32,8卡總batch size=832=256,最終得到在COCO數(shù)據(jù)集上體積4.3M,精度與預(yù)測速度都較為理想的模型。
7、量化后壓縮
最后,結(jié)合Paddle Inference和Paddle Lite預(yù)測庫支持的后量化策略,即在將權(quán)重保存成量化后的int8數(shù)據(jù)。這樣的操作,是模型體積直接壓縮到了1.3M,而預(yù)測時使用Paddle Lite加載權(quán)重,會將int8數(shù)據(jù)還原回float32權(quán)重,所以對精度和預(yù)測速度?乎沒有任何影響。
通過以上一系列優(yōu)化,我們就得到了1.3M超超超輕量的PP-YOLO tiny模型,而算法可以通過Paddle Lite直接部署在麒麟990等輕量化芯片上,預(yù)測效果也非常理想。
以上所有PP-YOLOv2和PPYOLO Tiny的代碼實現(xiàn),均在PaddleDetection飛槳目標(biāo)檢測開發(fā)套件中開源提供:github.com/paddlepaddle/paddledetection
還在等什么?趕緊來實際上手體驗一下吧!也歡迎感興趣的小伙伴參與共建!
課程預(yù)告
百度飛槳為了幫助大家能快速、深入、全面的了解目標(biāo)檢測技術(shù),將于5月13、14日特地開設(shè)“目標(biāo)檢測2日直播課”。由資深研發(fā)工程師傾囊相授多年“煉丹”經(jīng)驗,配套真實工業(yè)落地場景案例,最先進(jìn)的調(diào)優(yōu)方式、訓(xùn)練技巧、優(yōu)化技巧和工業(yè)部署方案一網(wǎng)打盡,千萬不要錯過~感興趣的同學(xué)歡迎加入QQ交流群:1136406895,了解更多課程及產(chǎn)品動態(tài)。
Copyright @ 2013-2020 中國福建網(wǎng) 版權(quán)所有
聯(lián)系我們
免責(zé)聲明:本站為非營利性網(wǎng)站,部分圖片或文章來源于互聯(lián)網(wǎng)如果無意中對您的權(quán)益構(gòu)成了侵犯,我們深表歉意,請您聯(lián)系,我們立即刪除。