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