深度學(xué)習(xí)之目標(biāo)檢測(cè)中的常用算法
隨著深度學(xué)習(xí)的不斷發(fā)展,深度卷積神經(jīng)網(wǎng)絡(luò)在目標(biāo)檢測(cè)領(lǐng)域中的應(yīng)用愈加廣泛,現(xiàn)已被應(yīng)用于農(nóng)業(yè)、交通和醫(yī)學(xué)等眾多領(lǐng)域。
與基于特征的傳統(tǒng)手工方法相比,基于深度學(xué)習(xí)的目標(biāo)檢測(cè)方法可以學(xué)習(xí)低級(jí)和高級(jí)圖像特征,有更好的檢測(cè)精度和泛化能力。
什么是目標(biāo)檢測(cè)?
目標(biāo)檢測(cè)(Object Detection)的任務(wù)是找出圖像中所有感興趣的目標(biāo)(物體),確定它們的類別和位置,是計(jì)算機(jī)視覺領(lǐng)域的核心問(wèn)題之一。由于各類物體有不同的外觀、形狀和姿態(tài),加上成像時(shí)光照、遮擋等因素的干擾,目標(biāo)檢測(cè)一直是計(jì)算機(jī)視覺領(lǐng)域最具有挑戰(zhàn)性的問(wèn)題。
計(jì)算機(jī)視覺中關(guān)于圖像識(shí)別有四大類任務(wù):
(1)分類-Classification:解決“是什么?”的問(wèn)題,即給定一張圖片或一段視頻判斷里面包含什么類別的目標(biāo)。
(2)定位-Location:解決“在哪里?”的問(wèn)題,即定位出這個(gè)目標(biāo)的的位置。
(3)檢測(cè)-Detection:解決“在哪里?是什么?”的問(wèn)題,即定位出這個(gè)目標(biāo)的位置并且知道目標(biāo)物是什么。
(4)分割-Segmentation:分為實(shí)例的分割(Instance-level)和場(chǎng)景分割(Scene-level),解決“每一個(gè)像素屬于哪個(gè)目標(biāo)物或場(chǎng)景”的問(wèn)題。
所以,目標(biāo)檢測(cè)是一個(gè)分類、回歸問(wèn)題的疊加。
目標(biāo)檢測(cè)的核心問(wèn)題:
(1)分類問(wèn)題:即圖片(或某個(gè)區(qū)域)中的圖像屬于哪個(gè)類別。
(2)定位問(wèn)題:目標(biāo)可能出現(xiàn)在圖像的任何位置。
(3)大小問(wèn)題:目標(biāo)有各種不同的大小。
(4)形狀問(wèn)題:目標(biāo)可能有各種不同的形狀。
目標(biāo)檢測(cè)應(yīng)用
1)人臉檢測(cè):智能門控、員工考勤簽到、智慧超市、人臉支付、車站、機(jī)場(chǎng)實(shí)名認(rèn)證、公共安全
2)行人檢測(cè):智能輔助駕駛、智能監(jiān)控、暴恐檢測(cè)(根據(jù)面相識(shí)別暴恐傾向)、移動(dòng)偵測(cè)、區(qū)域入侵檢測(cè)、安全帽/安全帶檢測(cè)
3)車輛檢測(cè):自動(dòng)駕駛、違章查詢、關(guān)鍵通道檢測(cè)、廣告檢測(cè)(檢測(cè)廣告中的車輛類型,彈出鏈接)
4)遙感檢測(cè):大地遙感,如土地使用、公路、水渠、河流監(jiān)控;農(nóng)作物監(jiān)控;軍事檢測(cè)
目標(biāo)檢測(cè)算法分類
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法主要分為兩類:Two stage 和 One stage。
(1)Tow Stage
先進(jìn)行區(qū)域生成,該區(qū)域稱之為 region proposal(簡(jiǎn)稱 RP,一個(gè)有可能包含待檢物體的預(yù)選框),再通過(guò)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行樣本分類。
任務(wù)流程:特征提取 --> 生成RP --> 分類/定位回歸。
常見 tow stage 目標(biāo)檢測(cè)算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN 和 R-FCN 等。
(2)One Stage
不用 RP,直接在網(wǎng)絡(luò)中提取特征來(lái)預(yù)測(cè)物體分類和位置。
任務(wù)流程:特征提取–> 分類/定位回歸。
常見的 one stage 目標(biāo)檢測(cè)算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD 和 RetinaNet 等。
目標(biāo)檢測(cè)模型
1 R-CNN系列
R-CNN 系列算法指的是R-CNN、Fast-RCNN、Faster-RCNN 等一系列由 R-CNN 算法演變出的算法。
這類算法通常是采用兩個(gè)步驟來(lái)實(shí)現(xiàn)對(duì)目標(biāo)的定位及檢測(cè)的,即定位+檢測(cè)。定位算法通常在 R-CNN 算法中也與很多,詳細(xì)參照主要包括滑動(dòng)窗口模型、和選擇性收索模型等。然后特征分類網(wǎng)絡(luò)一般采用 ResNet 系列模型及 VGG 系列模型。當(dāng)然我們也可嘗試使用 GoogleNet 或者 Inception 系列模型進(jìn)行訓(xùn)練,以提高發(fā)雜分類場(chǎng)景中的分類準(zhǔn)確性。R-CNN系列模型也被稱作為 Two Stage 模型。
(1)R-CNN
R-CNN(全稱 Regions with CNN features) ,是 R-CNN 系列的第一代算法,其實(shí)沒有過(guò)多的使用“深度學(xué)習(xí)”思想,而是將“深度學(xué)習(xí)”和傳統(tǒng)的“計(jì)算機(jī)視覺”的知識(shí)相結(jié)合。比如 R-CNN pipeline 中的第二步和第四步其實(shí)就屬于傳統(tǒng)的“計(jì)算機(jī)視覺”技術(shù)。使用 selective search 提取 region proposals,使用 SVM 實(shí)現(xiàn)分類。
效果:
R-CNN 在 VOC 2007 測(cè)試集上 mAP 達(dá)到 58.5%,打敗當(dāng)時(shí)所有的目標(biāo)檢測(cè)算法。
缺點(diǎn):
- 重復(fù)計(jì)算,每個(gè) region proposal,都需要經(jīng)過(guò)一個(gè) AlexNet 特征提取,為所有的 RoI(region of interest)提取特征大約花費(fèi) 47 秒,占用空間。
- selective search 方法生成 region proposal,對(duì)一幀圖像,需要花費(fèi) 2 秒。
- 三個(gè)模塊(提取、分類、回歸)是分別訓(xùn)練的,并且在訓(xùn)練時(shí)候,對(duì)于存儲(chǔ)空間消耗較大。
(2)Fast R-CNN
Fast R-CNN 是基于 R-CNN 和 SPPnets 進(jìn)行的改進(jìn)。SPPnets,其創(chuàng)新點(diǎn)在于只進(jìn)行一次圖像特征提取(而不是每個(gè)候選區(qū)域計(jì)算一次),然后根據(jù)算法,將候選區(qū)域特征圖映射到整張圖片特征圖中。
改進(jìn):
- 和 RCNN 相比,訓(xùn)練時(shí)間從 84 小時(shí)減少為 9.5 小時(shí),測(cè)試時(shí)間從 47 秒減少為 0.32 秒。在 VGG16 上,F(xiàn)ast RCNN 訓(xùn)練速度是 RCNN 的 9 倍,測(cè)試速度是 RCNN 的 213 倍;訓(xùn)練速度是 SPP-net 的 3 倍,測(cè)試速度是 SPP-net 的 3 倍;
- Fast RCNN 在 PASCAL VOC 2007 上準(zhǔn)確率相差無(wú)幾,約在 66~67% 之間;
- 加入 RoI Pooling,采用一個(gè)神經(jīng)網(wǎng)絡(luò)對(duì)全圖提取特征;
- 在網(wǎng)絡(luò)中加入了多任務(wù)函數(shù)邊框回歸,實(shí)現(xiàn)了端到端的訓(xùn)練。
缺點(diǎn):
- 依舊采用 selective search 提取 region proposal(耗時(shí) 2~3 秒,特征提取耗時(shí) 0.32 秒);
- 無(wú)法滿足實(shí)時(shí)應(yīng)用,沒有真正實(shí)現(xiàn)端到端訓(xùn)練測(cè)試;
- 利用了 GPU,但是 region proposal 方法是在 CPU 上實(shí)現(xiàn)的。
(3)Faster RCNN
經(jīng)過(guò) R-CNN 和 Fast-RCNN 的積淀,Ross B.Girshick 在 2016 年提出了新的 Faster RCNN,在結(jié)構(gòu)上將特征抽取、region proposal 提取, bbox regression,分類都整合到了一個(gè)網(wǎng)絡(luò)中,使得綜合性能有較大提高,在檢測(cè)速度方面尤為明顯。
改進(jìn):
- 在 VOC2007 測(cè)試集測(cè)試 mAP 達(dá)到 73.2%,目標(biāo)檢測(cè)速度可達(dá) 5 幀/秒;
- 提出 Region Proposal Network(RPN),取代 selective search,生成待檢測(cè)區(qū)域,時(shí)間從 2 秒縮減到了 10 毫秒;
- 真正實(shí)現(xiàn)了一個(gè)完全的 End-To-End 的 CNN 目標(biāo)檢測(cè)模型;
- 共享 RPN 與 Fast RCNN 的特征。
缺點(diǎn):
- 還是無(wú)法達(dá)到實(shí)時(shí)檢測(cè)目標(biāo);
- 獲取 region proposal, 再對(duì)每個(gè) proposal 分類計(jì)算量還是較大。
2 YOLO 系列算法的介紹
YOLO 系列算法目前更新到 YOLOv8。
Yolo 系列算法是典型的 one stage 算法,同樣,在算法設(shè)計(jì)上也注重目標(biāo)區(qū)域的檢測(cè)以及特征的分類,這里目標(biāo)區(qū)域的檢測(cè)采用的是和圖像區(qū)域分類定位的方式實(shí)現(xiàn)的。
Yolo 系列算法是一種比較成熟的目標(biāo)檢測(cè)算法框架,基于這種框架的算法還在不斷地迭代中,當(dāng)然解決的問(wèn)題也越來(lái)越細(xì)化,比如候選區(qū)精度、比如小尺度檢測(cè)等。基本上 YoloV3 及以上版本的算法可以在很多場(chǎng)景下得到現(xiàn)實(shí)應(yīng)用。
2023 年 1 月,目標(biāo)檢測(cè)經(jīng)典模型 YOLO 系列再添一個(gè)新成員 YOLOv8,這是 Ultralytics 公司繼 YOLOv5 之后的又一次重大更新。YOLOv8 一經(jīng)發(fā)布就受到了業(yè)界的廣泛關(guān)注,成為了這幾天業(yè)界的流量擔(dān)當(dāng)。
首先帶大家快速了解下 YOLO 的發(fā)展歷史。YOLO(You Only Look Once,你只看一次)是單階段實(shí)時(shí)目標(biāo)檢測(cè)算法的開山之作,力求做到“又快又準(zhǔn)”。
2016 年,Joseph Redmon 發(fā)布了第一版 YOLO(代碼庫(kù)叫做 darknet),但他本人只更新到 YOLOv3,隨后就將 darknet 庫(kù)交給了 Alexey Bochkovskiy、Chien-Yao Wang 等人,即 YOLOv4 和 YOLOv7 作者團(tuán)隊(duì)負(fù)責(zé)。
2020 年,Ultralytics 公司發(fā)布了 YOLOv5 代碼庫(kù),同年百度發(fā)布了 PP-YOLO,2021 年曠視發(fā)布了 YOLOX,2022年百度又發(fā)布了 PP-YOLOE 及 PP-YOLOE+,隨后又有美團(tuán)、OpenMMLab、阿里達(dá)摩院等相繼推出了各自的 YOLO模型版本,就在今年年初 Ultralytics 公司又發(fā)布了 YOLOv8。同時(shí)這些系列模型也在不斷更新迭代。
由此可見 YOLO 系列模型算法始終保持著極高的迭代更新率,并且每一次更新都會(huì)掀起業(yè)界的關(guān)注熱潮。
此次 Ultralytics 從 YOLOv5 到 YOLOv8 的升級(jí),主要包括結(jié)構(gòu)算法、命令行界面、Python API 等,精度上 YOLOv8 相比 YOLOv5 高出一大截,但速度略有下降。
YOLO系列模型選型指南
為了方便統(tǒng)一YOLO系列模型的開發(fā)測(cè)試基準(zhǔn),以及模型選型,百度飛槳推出了 PaddleYOLO 開源模型庫(kù),支持YOLO 系列模型一鍵快速切換,并提供對(duì)應(yīng) ONNX 模型文件,充分滿足各類部署需求。
此外 YOLOv5、YOLOv6、YOLOv7 和 YOLOv8 在評(píng)估和部署過(guò)程中使用了不同的后處理配置,因而可能造成評(píng)估結(jié)果虛高,而這些模型在 PaddleYOLO 中實(shí)現(xiàn)了統(tǒng)一,保證實(shí)際部署效果和模型評(píng)估指標(biāo)的一致性,并對(duì)這幾類模型的代碼進(jìn)行了重構(gòu),統(tǒng)一了代碼風(fēng)格,提高了代碼易讀性。下面的講解內(nèi)容也將圍繞 PaddleYOLO 相關(guān)測(cè)試數(shù)據(jù)進(jìn)行分析。
總體來(lái)說(shuō),選擇合適的模型,要明確自己項(xiàng)目的要求和標(biāo)準(zhǔn),精度和速度一般是最重要的兩個(gè)指標(biāo),但還有模型參數(shù)量、FLOPs 計(jì)算量等也需要考慮。
注:以上DAMO-YOLO、YOLOv6-3.0均使用官方數(shù)據(jù),其余模型均為Paddle復(fù)現(xiàn)版本測(cè)試數(shù)據(jù)。
總之,在這YOLO“內(nèi)卷時(shí)期”要保持平常心,無(wú)論新出來(lái)什么模型,都需要大致了解下改進(jìn)點(diǎn)和優(yōu)劣勢(shì)后再謹(jǐn)慎選擇,針對(duì)自己的需求選適合自己的模型。
3 RTMDet——實(shí)時(shí)目標(biāo)檢測(cè)
目標(biāo)是設(shè)計(jì)一個(gè)高效的實(shí)時(shí)目標(biāo)檢測(cè)器,它超越了YOLO系列(yolov8,yolo-nas沒比較),并且易于擴(kuò)展到許多目標(biāo)識(shí)別任務(wù),如實(shí)例分割和旋轉(zhuǎn)目標(biāo)檢測(cè)。
為了獲得更高效的模型架構(gòu),上海人工智能實(shí)驗(yàn)室的研究團(tuán)隊(duì)研究探索了一種在主干和頸部具有兼容能力的架構(gòu),該架構(gòu)由大內(nèi)核深度卷積組成的基本構(gòu)建塊組成。在動(dòng)態(tài)標(biāo)簽分配中計(jì)算匹配成本時(shí)進(jìn)一步引入軟標(biāo)簽以提高準(zhǔn)確性。再加上更好的訓(xùn)練技術(shù),最終的目標(biāo)檢測(cè)器(名為 RTMDet)在 NVIDIA 3090 GPU 上以 300+ FPS 的速度在 COCO 上實(shí)現(xiàn)了 52.8% 的 AP,優(yōu)于當(dāng)前主流的工業(yè)檢測(cè)器。
RTMDet 不僅僅在目標(biāo)檢測(cè)這一任務(wù)上性能優(yōu)異,在實(shí)時(shí)實(shí)例分割以及旋轉(zhuǎn)目標(biāo)檢測(cè)這兩個(gè)任務(wù)中也同樣達(dá)到了 SOTA 的水平!
RTMDet 針對(duì)各種應(yīng)用場(chǎng)景實(shí)現(xiàn)了tiny/small/medium/large/extra-large模型尺寸的最佳參數(shù)精度權(quán)衡,并在實(shí)時(shí)實(shí)例分割和旋轉(zhuǎn)對(duì)象檢測(cè)方面獲得了最先進(jìn)的性能。
宏觀架構(gòu)。
該研究以《RTMDet: An Empirical Study of Designing Real-Time Object Detectors》為題,于 2022 年 12 月發(fā)布在預(yù)印平臺(tái) arXiv 上。