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