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