目標檢測(Object Detection)
本文為課程研討需要,對目標檢測算法進行理論學習,無實戰(zhàn)內容,歡迎交流探討
一、目標檢測的基本概念
(一)什么是目標檢測
目標檢測(Object Detection) 的任務是找出圖像中所有感興趣的目標(物體),不同于分類和回歸問題,目標檢測還需要確定目標在圖像中的位置 (定位),而確定識別目標的類別和位置 (分類和定位),是計算機視覺領域的核心問題之一。
(二)目標檢測的任務
計算機視覺中關于圖像識別有四大類任務:
(1)分類-Classification:解決“是什么?”的問題,即給定一張圖片或一段視頻判斷里面包含什么類別的目標。
(2)定位-Location:解決“在哪里?”的問題,即定位出這個目標的的位置。
(3)檢測-Detection:解決“在哪里?是什么?”的問題,即定位出這個目標的位置并且知道目標物是什么。
(4)分割-Segmentation:解決“每一個像素屬于哪個目標物或場景”的問題。從像素級別回答了“在哪里?是什么”的問題
(如下圖)
(三)目標檢測算法分類
1、傳統(tǒng)目標檢測算法
具體參考:常見經典目標檢測算法
不同于現在的卷積神經網絡可以自動提取高效特征進行圖像表示,以往的傳統(tǒng)目標檢測算法主要基于手工提取特征。
傳統(tǒng)檢測算法流程可概括如下:
1)選取感興趣區(qū)域,選取可能包含物體的區(qū)域
2)對可能包含物體的區(qū)域進行特征提取
3)對提取的特征進行檢測分類
傳統(tǒng)檢測算法局限性:
基于手工提取特征的傳統(tǒng)目標檢測算法主要有以下三個缺點:
1)識別效果不夠好,準確率不高
2)計算量較大,運算速度慢
3)可能產生多個正確識別的結果
(1) Viola Jones Detector
VJ (Viola Jones)檢測器采用滑動窗口的方式以檢查目標是否存在窗口之中,該檢測器看起來似乎很簡單穩(wěn)定,但由于計算量龐大導致時間復雜度極高,為了解決該項問題,檢測器通過合并三項技術極大提高了檢測速度,這三項技術分別是:
1)特征的快速計算方法——積分圖;
2)有效的分類器學習方法——AdaBoost;
3)高效的分類策略——級聯結構的設計。
(2)HOG Detector
HOG(Histogram of Oriented Gradients)檢測器于2005年提出,是當時尺度特征不變性(Scale Invariant Feature Transform)和形狀上下文(Shape Contexts)的重要改進,為了平衡特征不變性(包括平移,尺度,光照等)和非線性(區(qū)分不同的對象類別),通過在均勻間隔單元的密集網格上計算重疊的局部對比度歸一化來提高檢測準確性,因此檢測器是基于本地像素塊進行特征直方圖提取的一種算法,它在目標局部變形和受光照影響下都有很好的穩(wěn)定性。為后期很多檢測方法奠定了重要基礎,相關技術被廣泛應用于計算機視覺各大應用。
(3)DPM Detector
作為VOC 2007-2009目標檢測挑戰(zhàn)賽的冠軍,DPM(Deformable Parts Model)是目標檢測傳統(tǒng)算法中當之無愧的SOTA(State Of The Art)算法。于2008年提出,作了很多改進,因此該算法可以看作的延申算法。算法由一個主過濾器(Root-filter)和多個輔過濾器(Part-filters)組成,通過硬負挖掘(Hard negative mining),邊框回歸(Bounding box regression)和上下文啟動(Context priming)技術改進檢測精度。作為傳統(tǒng)目標檢測算法的SOTA,方法運算速度快,能夠適應物體形變,但它無法適應大幅度的旋轉,因此穩(wěn)定性差。
2、基于深度學習的目標檢測算法
基于手工提取特征的傳統(tǒng)目標檢測算法進展緩慢,性能低下。直到2012年卷積神經網絡(Convolutional Neural Networks, CNNs)的興起將目標檢測領域推向了新的臺階?;贑NNs的目標檢測算法主要有兩條技術發(fā)展路線:Anchor-Based和Anchor-Free方法,其區(qū)別是是否使用Anchor進行訓練和預測;Anchor-based方法則包括一階段和二階段檢測算法,二階段目標檢測算法一般比一階段精度要高,但一階段檢測算法速度會更快,Anchor-Free算法近幾年逐步完善。
(1)Two Stage
先進行區(qū)域生成,該區(qū)域稱之為region proposal(簡稱RP,一個有可能包含待檢物體的預選框),再通過卷積神經網絡進行樣本分類。
任務流程:特征提取 --> 生成RP --> 分類/定位回歸。
常見two stage目標檢測算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。
(2)One Stage
不用RP,直接在網絡中提取特征來預測物體分類和位置。
任務流程:特征提取–> 分類/定位回歸。
常見的one stage目標檢測算法有:OverFeat、YOLO系列、SSD和RetinaNet等。
(3)Anchor-Free
不使用Anchor
主要分如下兩類表示檢測框的方法:
1.基于關鍵點的檢測算法:先檢測目標左上角和右下角點,再通過角點組合形成檢測框。
2.基于中心的檢測算法:直接檢測物體的中心區(qū)域和邊界信息,將分類和回歸解耦為兩個子網格。
(四)目標檢測算法應用
二、目標檢測原理
參考文章:目標檢測(Object Detection)
目標檢測分為兩大系列——RCNN系列和YOLO系列,RCNN系列是基于區(qū)域檢測的代表性算法,YOLO是基于區(qū)域提取的代表性算法,另外還有著名的SSD是基于前兩個系列的改進。
(一)候選區(qū)域的產生
1、滑動窗口
通過滑窗法流程圖可以很清晰理解其主要思路:首先對輸入圖像進行不同窗口大小的滑窗進行從左往右、從上到下的滑動。每次滑動時候對當前窗口執(zhí)行分類器(分類器是事先訓練好的)。如果當前窗口得到較高的分類概率,則認為檢測到了物體。對每個不同窗口大小的滑窗都進行檢測后,會得到不同窗口檢測到的物體標記,這些窗口大小會存在重復較高的部分,最后采用非極大值抑制(Non-Maximum Suppression, NMS)的方法進行篩選。最終,經過NMS篩選后獲得檢測到的物體。
滑窗法簡單易于理解,但是不同窗口大小進行圖像全局搜索導致效率低下,而且設計窗口大小時候還需要考慮物體的長寬比。所以,對于實時性要求較高的分類器,不推薦使用滑窗法。
2、選擇窗口
滑窗法類似窮舉進行圖像子區(qū)域搜索,但是一般情況下圖像中大部分子區(qū)域是沒有物體的。學者們自然而然想到只對圖像中最有可能包含物體的區(qū)域進行搜索以此來提高計算效率。選擇搜索(selective search,簡稱SS)方法是當下最為熟知的圖像bounding boxes提取算法,由Koen E.A于2011年提出。
選擇搜索算法的主要思想:圖像中物體可能存在的區(qū)域應該是有某些相似性或者連續(xù)性區(qū)域的。因此,選擇搜索基于上面這一想法采用子區(qū)域合并的方法進行提取bounding boxes。首先,對輸入圖像進行分割算法產生許多小的子區(qū)域。其次,根據這些子區(qū)域之間相似性(相似性標準主要有顏色、紋理、大小等等)進行區(qū)域合并,不斷的進行區(qū)域迭代合并。每次迭代過程中對這些合并的子區(qū)域做bounding boxes(外切矩形),這些子區(qū)域外切矩形就是通常所說的候選框。
流程如下:
step0:生成區(qū)域集R
step1:計算區(qū)域集R里每個相鄰區(qū)域的相似度S={s1, s2,…}
step2:找出相似度最高的兩個區(qū)域,將其合并為新集,添加進R
step3:從S中移除所有與step2中有關的子集
step4:計算新集與所有子集的相似度
step5:跳至step2,直至S為空
優(yōu)點如下:
1.計算效率優(yōu)于滑窗法
2.由于采用子區(qū)域合并策略,所以可以包含各種大小的疑似物體框
3.合并區(qū)域相似的指標多樣性,提高了檢測物體的概率
(二)數據表示
標記后的樣本:
預測輸出:
(三)效果評估
使用IoU(Intersection over Union,交并比)來判斷模型的好壞。所謂交并比,是指預測邊框、實際邊框交集和并集的比率,一般約定0.5為一個可以接收的值。
(四)非極大值抑制(NMS)
預測結果中,可能多個預測結果間存在重疊部分,需要保留交并比最大的、去掉非最大的預測結果,這就是非極大值抑制(Non-Maximum Suppression,簡寫作NMS)。如下圖所示,對同一個物體預測結果包含三個概率0.8/0.9/0.95,經過非極大值抑制后,僅保留概率最大的預測結果。
三、目標檢測模型
(一)R-CNN系列
參考文章:R-CNN系列算法精講:R-CNN —》Fast R-CNN —》Faster R-CNN 進階之路
R-CNN(全稱Regions with CNN features) ,是R-CNN系列的第一代算法,其實沒有過多的使用“深度學習”思想,而是將“深度學習”和傳統(tǒng)的“計算機視覺”的知識相結合。比如R-CNN pipeline中的第二步和第四步其實就屬于傳統(tǒng)的“計算機視覺”技術。使用selective search提取region proposals,使用SVM實現分類。
1、R-CNN
1) 流程
①預訓練模型。選擇一個預訓練 (pre-trained)神經網絡(如AlexNet、VGG)。
②重新訓練全連接層。使用需要檢測的目標重新訓練(re-train)最后全連接層(connected layer)。
③提取 proposals并計算CNN 特征。利用選擇性搜索(Selective Search)算法提取所有proposals(大約2000幅images),調整(resize/warp)它們成固定大小,以滿足 CNN輸入要求(因為全連接層的限制),然后將feature map 保存到本地磁盤。
④訓練SVM。利用feature map 訓練SVM來對目標和背景進行分類(每個類一個二進制SVM)
⑤邊界框回歸(Bounding boxes Regression)。訓練將輸出一些校正因子的線性回歸分類器
2)效果
R-CNN在VOC 2007測試集上mAP達到58.5%,打敗當時所有的目標檢測算法
3)缺點
①重復計算,每個region proposal,都需要經過一個AlexNet特征提取,為所有的RoI(region of interest)提取特征大約花費47秒,占用空間
②selective search方法生成region proposal,對一幀圖像,需要花費2秒
③三個模塊(提取、分類、回歸)是分別訓練的,并且在訓練時候,對于存儲空間消耗較大
2、SPPNet
論文鏈接:SPPNet
【簡介】 SPPNet[5]提出了一種空間金字塔池化層(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是對于一副圖像分成若干尺度的圖像塊(比如一副圖像分成1份,4份,8份等),然后對每一塊提取的特征融合在一起,從而兼顧多個尺度的特征。SPP使得網絡在全連接層之前能生成固定尺度的特征表示,而不管輸入圖片尺寸如何。當使用SPPNet網絡用于目標檢測時,整個圖像只需計算一次即可生成相應特征圖,不管候選框尺寸如何,經過SPP之后,都能生成固定尺寸的特征表示圖,這避免了卷積特征圖的重復計算。
【性能】 相比于RCNN算法,SPPNet在Pascal-07數據集上不犧牲檢測精度(VOC-07, mAP=59.2%)的情況下,推理速度提高了20多倍。
【不足】 和RCNN一樣,SPP也需要訓練CNN提取特征,然后訓練SVM分類這些特征,這需要巨大的存儲空間,并且多階段訓練的流程也很繁雜。除此之外,SPPNet只對全連接層進行微調,而忽略了網絡其它層的參數。
為了解決以上存在的一些不足,2015年R. Girshick等人提出Fast RCNN
3、Fast R-CNN
Fast R-CNN是基于R-CNN和SPPnets進行的改進。SPPnets,其創(chuàng)新點在于只進行一次圖像特征提取(而不是每個候選區(qū)域計算一次),然后根據算法,將候選區(qū)域特征圖映射到整張圖片特征圖中。
具體見參考文獻
4、Faster R-CNN
經過R-CNN和Fast-RCNN的積淀,Ross B.Girshick在2016年提出了新的Faster RCNN,在結構上將特征抽取、region proposal提取, bbox regression,分類都整合到了一個網絡中,使得綜合性能有較大提高,在檢測速度方面尤為明顯
具體見參考文獻
(二)YOLO系列
參考文章:目標檢測算法綜述
目標檢測(Object Detection)
YOLO系列算法精講:從yolov1至yolov5的進階之路(2萬字超全整理)
1、YOLOv1
在YOLOv1提出之前,R-CNN系列算法在目標檢測領域獨占鰲頭。R-CNN系列檢測精度高,但是由于其網絡結構是雙階段(two-stage)的特點,使得它的檢測速度不能滿足實時性,飽受詬病。為了打破這一僵局,設計一種速度更快的目標檢測器是大勢所趨。
2016年,Joseph Redmon、Santosh Divvala、Ross Girshick等人提出了一種單階段(one-stage)的目標檢測網絡。它的檢測速度非??欤棵肟梢蕴幚?5幀圖片,能夠輕松地實時運行。由于其速度之快和其使用的特殊方法,作者將其取名為:You Only Look Once(也就是我們常說的YOLO的全稱),并將該成果發(fā)表在了CVPR 2016上,從而引起了廣泛地關注。
YOLO 的核心思想就是把目標檢測轉變成一個回歸問題,利用整張圖作為網絡的輸入,僅僅經過一個神經網絡,得到bounding box(邊界框) 的位置及其所屬的類別。
現在看來,YOLOv1的網路結構非常明晰,是一種傳統(tǒng)的one-stage的卷積神經網絡:
網絡輸入:448×448×3的彩色圖片。
中間層:由若干卷積層和最大池化層組成,用于提取圖片的抽象特征。
全連接層:由兩個全連接層組成,用來預測目標的位置和類別概率值。
網絡輸出:7×7×30的預測結果。
(1)檢測策略
YOLOv1采用的是“分而治之”的策略,將一張圖片平均分成7×7個網格,每個網格分別負責預測中心點落在該網格內的目標?;貞浺幌拢贔aster R-CNN中,是通過一個RPN來獲得目標的感興趣區(qū)域,這種方法精度高,但是需要額外再訓練一個RPN網絡,這無疑增加了訓練的負擔。在YOLOv1中,通過劃分得到了7×7個網格,這49個網格就相當于是目標的感興趣區(qū)域。通過這種方式,我們就不需要再額外設計一個RPN網絡,這正是YOLOv1作為單階段網絡的簡單快捷之處!
具體實現過程如下:
1.將一幅圖像分成 S×S個網格(grid cell),如果某個 object 的中心落在這個網格中,則這個網格就負責預測這個object。
2.每個網格要預測 B 個bounding box,每個 bounding box 要預測 (x, y, w, h) 和 confidence 共5個值。
3.每個網格還要預測一個類別信息,記為 C 個類。
4.總的來說,S×S 個網格,每個網格要預測 B個bounding box ,還要預測 C 個類。網絡輸出就是一個 S × S × (5×B+C) 的張量。在實際過程中,YOLOv1把一張圖片劃分為了7×7個網格,并且每個網格預測2個Box(Box1和Box2),20個類別。所以實際上,S=7,B=2,C=20。那么網絡輸出的shape也就是:7×7×30。
(2)目標損失函數
損失由三部分組成,分別是:坐標預測損失、置信度預測損失、類別預測損失。
使用的是差方和誤差。需要注意的是,w和h在進行誤差計算的時候取的是它們的平方根,原因是對不同大小的bounding
box預測中,相比于大bounding box預測偏一點,小box預測偏一點更不能忍受。而差方和誤差函數中對同樣的偏移loss是一樣。
為了緩和這個問題,作者用了一個比較取巧的辦法,就是將bounding box的w和h取平方根代替原本的w和h。
定位誤差比分類誤差更大,所以增加對定位誤差的懲罰,使λcoord=5。
在每個圖像中,許多網格單元不包含任何目標。訓練時就會把這些網格里的框的“置信度”分數推到零,這往往超過了包含目標的框的梯度。從而可能導致模型不穩(wěn)定,訓練早期發(fā)散。因此要減少了不包含目標的框的置信度預測的損失,使
λnoobj=0.5
(3)優(yōu)點:
1.YOLO檢測速度非??臁藴拾姹镜腨OLO可以每秒處理 45 張圖像;YOLO的極速版本每秒可以處理150幀圖像。這就意味著 YOLO 可以以小于 25 毫秒延遲,實時地處理視頻。對于欠實時系統(tǒng),在準確率保證的情況下,YOLO速度快于其他方法。
2.YOLO 實時檢測的平均精度是其他實時監(jiān)測系統(tǒng)的兩倍。
3.遷移能力強,能運用到其他的新的領域(比如藝術品目標檢測)。
(4)局限:
1.YOLO對相互靠近的物體,以及很小的群體檢測效果不好,這是因為一個網格只預測了2個框,并且都只屬于同一類。
2.由于損失函數的問題,定位誤差是影響檢測效果的主要原因,尤其是大小物體的處理上,還有待加強。(因為對于小的bounding boxes,small error影響更大)
3.YOLO對不常見的角度的目標泛化性能偏弱。
2、YOLOv2
2017年,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基礎上,進行了大量改進,提出了 YOLOv2 和 YOLO9000。重點解決YOLOv1召回率和定位精度方面的不足。
YOLOv2 是一個先進的目標檢測算法,比其它的檢測器檢測速度更快。除此之外,該網絡可以適應多種尺寸的圖片輸入,并且能在檢測精度和速度之間進行很好的權衡。
相比于YOLOv1是利用全連接層直接預測Bounding Box的坐標,YOLOv2借鑒了Faster R-CNN的思想,引入Anchor機制。利用K-means聚類的方法在訓練集中聚類計算出更好的Anchor模板,大大提高了算法的召回率。同時結合圖像細粒度特征,將淺層特征與深層特征相連,有助于對小尺寸目標的檢測。
YOLO9000 使用 WorldTree 來混合來自不同資源的訓練數據,并使用聯合優(yōu)化技術同時在ImageNet和COCO數據集上進行訓練,能夠實時地檢測超過9000種物體。由于 YOLO9000 的主要檢測網絡還是YOLOv2,所以這部分以講解應用更為廣泛的YOLOv2為主。
具體見參考文獻:YOLO系列算法精講:從yolov1至yolov5的進階之路(2萬字超全整理)
3、YOLOv3
2018年,作者 Redmon 又在 YOLOv2 的基礎上做了一些改進。特征提取部分采用darknet-53網絡結構代替原來的darknet-19,利用特征金字塔網絡結構實現了多尺度檢測,分類方法使用邏輯回歸代替了softmax,在兼顧實時性的同時保證了目標檢測的準確性。
從YOLOv1到YOLOv3,每一代性能的提升都與backbone(骨干網絡)的改進密切相關。在YOLOv3中,作者不僅提供了darknet-53,還提供了輕量級的tiny-darknet。如果你想檢測精度與速度兼具,可以選擇darknet-53作為backbone;如果你希望達到更快的檢測速度,精度方面可以妥協(xié),那么tiny-darknet是你很好的選擇。總之,YOLOv3的靈活性使得它在實際工程中得到很多人的青睞!
具體見參考文獻:YOLO系列算法精講:從yolov1至yolov5的進階之路(2萬字超全整理)
4、YOLOv4
具體見參考文獻:YOLO系列算法精講:從yolov1至yolov5的進階之路(2萬字超全整理)
5、YOLOv5
具體見參考文獻:YOLO系列算法精講:從yolov1至yolov5的進階之路(2萬字超全整理)
6、SSD
SSD的英文全名是Single Shot MultiBox Detector,Single shot說明SSD算法屬于one-stage方法,MultiBox說明SSD算法基于多框預測。
SSD是一種非常優(yōu)秀的one-stage目標檢測方法,one-stage算法就是目標檢測和分類是同時完成的,其主要思路是利用CNN提取特征后,均勻地在圖片的不同位置進行密集抽樣,抽樣時可以采用不同尺度和長寬比,物體分類與預測框的回歸同時進行,整個過程只需要一步,所以其優(yōu)勢是速度快。
但是均勻的密集采樣的一個重要缺點是訓練比較困難,這主要是因為正樣本與負樣本(背景)極其不均衡(參見Focal Loss),導致模型準確度稍低。
1)主干網絡
具體實現請見參考文獻:睿智的目標檢測23——Pytorch搭建SSD目標檢測平臺
(三)Anchor-Free系列
具體參考:AnchorFree系列算法詳解
去除Anchor后如何表示檢測框呢?
Anchor-based方法中通過Anchor和對應的編碼信息來表示檢測框。對應的編碼信息換言之也就是偏移量。
Anchor Free目前主要分如下兩類表示檢測框的方法:
1.基于關鍵點的檢測算法:先檢測目標左上角和右下角點,再通過角點組合形成檢測框。
2.基于中心的檢測算法:直接檢測物體的中心區(qū)域和邊界信息,將分類和回歸解耦為兩個子網格。
!在這里插入圖片描述文章來源:http://www.zghlxwxcb.cn/news/detail-786319.html
參考文獻
1.目標檢測(Object Detection)
2.常見經典目標檢測算法
3.CNN筆記:通俗理解卷積神經網絡
4.目標檢測算法綜述
5.AnchorFree系列算法詳解
6.睿智的目標檢測23——Pytorch搭建SSD目標檢測平臺
7.YOLO系列算法精講:從yolov1至yolov5的進階之路(2萬字超全整理)文章來源地址http://www.zghlxwxcb.cn/news/detail-786319.html
到了這里,關于目標檢測(Object Detection)學習筆記(概述與傳統(tǒng)算法與基于深度學習算法)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!