目標檢測基礎知識介紹
Author:Mr. Sun
Date: 2019.03.16
Location:DaLian university of technology
導語:最近看了很多的關於目標檢測的博客和論文,看的似懂非懂;因此今天開始寫一下自己的學習心得,希望能給需要的人一些幫助。
摘要:
在今天之前我的大部分時間都花在學習圖像的分類上,主要是學習經典的卷積神經網絡(LeNet/AlexNet/NIN/VGG/Google/ResNet)等等,然后利用遷移學習(transfer learning)技術對不同圖像的分類任務(classification)進行訓練(train)。但是,一直以來沒有學習關於目標檢測(object detection)的相關內容,就覺得自己的知識始終是有很大的空缺。因此從今天開始學習目標檢測的相關知識,這篇博客將主要用來記錄一些很基礎的知識或者這個方向的研究現狀和發展趨勢(trend)。
1、計算機視覺(CV,Computer Vision)領域任務是什么?
目前計算機視覺(CV,computer vision)與自然語言處理(Natural Language Process, NLP)及語音識別(Speech Recognition)並列為人工智能(AI,artificial intelligence)·機器學習(ML,machine learning)·深度學習(DL,deep learning)方向的三大熱點方向 。
圖像分類、目標檢測、分割是計算機視覺領域的三大任務。
如何從圖像中解析出可供計算機理解的信息,是機器視覺(Machine Vision)的中心問題。深度學習模型由於其強大的表示能力,加之數據量的積累和計算力的進步,成為機器視覺的熱點研究方向。那么,如何理解一張圖片呢?根據任務的需要,有圖1中所示三個主要的層次:
圖1:機器理解圖像的三個層次
一是分類(Classification),即是將圖像結構化為某一類別的信息,用事先確定好的類別(category)或實例ID來描述圖片。這一任務是最簡單、最基礎的圖像理解任務,也是深度學習模型最先取得突破和實現大規模應用的任務。其中,ImageNet是最權威的評測集,每年的ILSVRC催生了大量的優秀深度網絡結構,為其他任務提供了基礎。在應用領域,人臉、場景的識別等都可以歸為分類任務。
二是檢測(Detection)。分類任務關心整體,給出的是整張圖片的內容描述,而檢測則關注特定的物體目標,要求同時獲得這一目標的類別信息和位置信息(classification + localization)。相比分類,檢測給出的是對圖片前景和背景的理解,我們需要從背景中分離出感興趣的目標,並確定這一目標的描述(類別和位置),因此檢測模型的輸出是一個列表,列表的每一項使用一個數組給出檢出目標的類別和位置(常用矩形檢測框的坐標表示)。
三是分割(Segmentation)。分割包括語義分割(semantic segmentation)和實例分割(instance segmentation),前者是對前背景分離的拓展,要求分離開具有不同語義的圖像部分,而后者是檢測任務的拓展,要求描述出目標的輪廓(相比檢測框更為精細)。分割是對圖像的像素級描述,它賦予每個像素類別(實例)意義,適用於理解要求較高的場景,如無人駕駛中對道路和非道路的分割。
圖像分類(image classification)是將圖像划分(divide)為單個類別,通常對應於圖像中最突出的物體。但是現實世界的很多圖像通常包含的不只是一個物體,此時如果使用圖像分類模型為圖像分配一個單一標簽其實是非常粗糙的,並不准確。對於這樣的情況,就需要目標檢測(object detection)模型,目標檢測模型可以識別一張圖片的多個物體,並可以定位出不同物體(給出邊界框)。目標檢測在很多場景有用,如無人駕駛和安防系統。
2、常用的目標檢測(Object Detection)算法的綜述
常見的經典目標檢測算法如下圖2所示:
圖2:常用的經典目標檢測算法圖
目標檢測的基本思路:同時解決定位(localization) + 識別(Recognition)。
多任務學習,帶有兩個輸出分支。一個分支用於做圖像分類,即全連接+softmax判斷目標類別,和單純圖像分類區別在於這里還另外需要一個“背景”類。另一個分支用於判斷目標位置,即完成回歸任務輸出四個數字標記包圍盒位置(例如中心點橫縱坐標和包圍盒長寬),該分支輸出結果只有在分類分支判斷不為“背景”時才使用。詳細結構如下圖3所示:
圖3:目標檢測的多任務學習結構
傳統的目標檢測框架,主要包括三個步驟:
(1)利用不同尺寸的滑動窗口框住圖中的某一部分作為候選區域;
(2)提取候選區域相關的視覺特征。比如人臉檢測常用的Harr特征;行人檢測和普通目標檢測常用的HOG特征等;
(3)利用分類器進行識別,比如常用的SVM模型。
目前目標檢測領域的深度學習方法主要分為兩類:兩階段(Two Stages)的目標檢測算法;一階段(One Stage)目標檢測算法。
兩階段(Two Stages):首先由算法(algorithm)生成一系列作為樣本的候選框,再通過卷積神經網絡進行樣本(Sample)分類。
常見的算法有R-CNN、Fast R-CNN、Faster R-CNN等等。
一階段(One Stage ):不需要產生候選框,直接將目標框定位的問題轉化為回歸(Regression)問題處理(Process)。
常見的算法有YOLO、SSD等等。
基於候選區域(Region Proposal)的,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;
基於端到端(End-to-End),無需候選區域(Region Proposal)的,如YOLO、SSD。
對於上述兩種方式,基於候選區域(Region Proposal)的方法在檢測准確率和定位精度上占優,基於端到端(End-to-End)的算法速度占優。相對於R-CNN系列的“看兩眼”(候選框提取和分類),YOLO只需要“看一眼”。總之,目前來說,基於候選區域(Region Proposal)的方法依然占據上風,但端到端的方法速度上優勢明顯,至於后續的發展讓我們拭目以待。
3、目標檢測的候選框是如何產生的?
如今深度學習發展如日中天,RCNN/SPP-Net/Fast-RCNN等文章都會談及候選邊界框(Bounding boxes)的生成與篩選策略。那么候選框是如何產生的?又是如何進行篩選的呢?其實物體候選框獲取當前主要使用圖像分割與區域生長技術。區域生長(合並)主要由於檢測圖像中存在的物體具有局部區域相似性(顏色、紋理等)。目標識別與圖像分割技術的發展進一步推動有效提取圖像中信息。
根據目標候選區域的提取方式不同,傳統目標檢測算法可以分為基於滑動窗口的目標檢測算法和基於選擇性搜索的目標檢測算法。滑窗法(Sliding Window)作為一種經典的物體檢測方法,個人認為不同大小的窗口在圖像上進行滑動時候,進行卷積運算后的結果與已經訓練好的分類器判別存在物體的概率。選擇性搜索(Selective Search)是主要運用圖像分割技術來進行物體檢測。
(1)滑動窗口(Sliding Window)
采用滑動窗口的目標檢測算法思路非常簡單,它將檢測問題轉化為了圖像分類問題。其基本原理就是采用不同大小和比例(寬高比)的窗口在整張圖片上以一定的步長進行滑動,然后對這些窗口對應的區域做圖像分類,這樣就可以實現對整張圖片的檢測了。但是這個方法有致命的缺點,就是你並不知道要檢測的目標大小是什么規模,所以你要設置不同大小和比例的窗口去滑動,而且還要選取合適的步長。但是這樣會產生很多的子區域,並且都要經過分類器去做預測,這需要很大的計算量,所以你的分類器不能太復雜,因為要保證速度。接下來,我們看一下滑窗法的物體檢測流程圖如圖4所示:
圖4:滑窗法目標檢測流程圖
(2)選擇性搜索(Selective Search)
滑窗法類似窮舉進行圖像子區域搜索,但是一般情況下圖像中大部分子區域是沒有物體的。學者們自然而然想到只對圖像中最有可能包含物體的區域進行搜索以此來提高計算效率。選擇搜索方法是當下最為熟知的圖像bouding boxes提取算法,其目標檢測的流程圖如下圖5所示。
圖5:選擇性搜索目標檢測流程圖
選擇搜索算法的主要觀點:圖像中物體可能存在的區域應該是有某些相似性或者連續性區域的。因此,選擇搜索基於上面這一想法采用子區域合並的方法進行提取候選邊界框(bounding boxes)。首先,對輸入圖像進行分割算法產生許多小的子區域(大約2000個子區域)。其次,根據這些子區域之間相似性(相似性標准主要有顏色、紋理、大小等等)進行區域合並,不斷的進行區域迭代合並。每次迭代過程中對這些合並的子區域做外切矩形(bounding boxes),這些子區域外切矩形就是通常所說的候選框。
選擇搜索優點:
(a)計算效率優於滑窗法。
(b)由於采用子區域合並策略,所以可以包含各種大小的疑似物體框。
(c)合並區域相似的指標多樣性,提高了檢測物體的概率。
具體細節可參考博客:https://blog.csdn.net/mao_kun/article/details/50576003
https://blog.csdn.net/qq_30638831/article/details/82799739
4、什么是預測框和人工標注框的重合度IOU(Intersection Over Union)?
為了評價Bounding-box Regression模型對目標物體的標注效果,我們提出了預測框和人工標注框重合度IOU的概念。下面簡單介紹一下這個定義:物體檢測需要定位出物體的Bounding-box,就像下面的圖6所示一樣,我們不僅要定位出車輛的Bounding-box 我們還要識別出Bounding-box 里面的物體就是車輛。對於Bounding-box的定位精度,有一個很重要的概念,因為我們算法不可能百分百跟人工標注的數據完全匹配,因此就存在一個定位精度評價公式:IOU(也叫作交並比)。IOU定義了兩個Bounding-box的重疊度,如下圖7所示:
圖6:標注邊界框的汽車 圖7:IOU定義展示圖
矩形框A、B的一個重合度IOU計算公式為:
IOU=(A∩B)/(A∪B)
就是矩形框A、B的重疊面積占A、B並集的面積比例:
IOU=SI/(SA+SB-SI)
5、什么是NMS—非極大值抑制(Non-Maximun Suppression)?
學習R-CNN算法必然要了解一個重要的概念——非極大值抑制(NMS)。比如,我們會從一張圖片中找出N多個可能包含物體的Bounding-box,然后為每個矩形框計算其所屬類別的概率。可以參看下圖8所示。
圖8:找出的多個判斷為汽車類別的邊界矩形框
正如上面的圖片所示,假如我們想定位一個車輛,最后算法就找出了一堆的方框,每個方框都對應一個屬於汽車類別的概率。我們需要判別哪些矩形框是沒用的。采用的方法是非極大值抑制:先假設有6個矩形框,根據分類器類別分類概率做排序,從小到大分別屬於車輛的概率分別為A、B、C、D、E、F。
(1)從最大概率矩形框F開始,分別判斷A~E與F的重疊度IOU是否大於某個設定的閾值;
(2)假設B、D與F的重疊度超過閾值,那么就扔掉B、D;並標記第一個矩形框F,是我們保留下來的。
(3)從剩下的矩形框A、C、E中,選擇概率最大的E,然后判斷E與A、C的重疊度,重疊度大於一定的閾值,那么就扔掉;並標記E是我們保留下來的第二個矩形框。
如此循環往復知道沒有剩余的矩形框,然后找到所有被保留下來的矩形框,就是我們認為最可能包含汽車的矩形框。
R-CNN算法中NMS的具體做法:
假設有20類,2000個建議框,最后輸出向量維數2000*20,則每列對應一類,一行是各個建議框的得分,NMS算法步驟如下:
① 對2000×20維矩陣中每列按從大到小進行排序;
② 從每列最大的得分建議框開始,分別與該列后面的得分建議框進行IoU計算,若IoU>閾值,則剔除得分較小的建議框,否則認為圖像中存在多個同一類物體;
③ 從每列次大的得分建議框開始,重復步驟②;
④ 重復步驟③直到遍歷完該列所有建議框;
⑤ 遍歷完2000×20維矩陣所有列,即所有物體種類都做一遍非極大值抑制;
⑥ 最后剔除各個類別中剩余建議框得分少於該類別閾值的建議框。
6、Region Proposal建議框的Crop/Wrap具體做法?
R-CNN論文中采用的是各向異性縮放,padding=16的精度最高。作者使用了最簡單的一種變換,即無論候選區域是什么尺寸,先在每個建議框周圍context(圖像中context指RoI周邊像素)加上16個像素值為建議框像素平均值的邊框,再直接變形為227×227的大小。
(1)各向異性縮放(非等比縮放)
這種方法很簡單,就是不管圖片的長寬比例,管它是否扭曲,進行縮放就是了,全部縮放到CNN輸入的大小227*227;有比例上的形變扭曲。
(2)各向同性縮放
因為圖片扭曲后,會對后續CNN的訓練精度有影響,於是作者也測試了“各向同性縮放”方案。這個有兩種辦法。
① 直接在原始圖片中,把bounding box的邊界進行擴展延伸成正方形,然后再進行裁剪;如果已經延伸到了原始圖片的外邊界,那么就用bounding box中的顏色均值填充;
② 先把bounding box圖片裁剪出來,然后用固定的背景顏色填充成正方形圖片(背景顏色也是采用bounding box的像素顏色均值);
7、Bounding-box Regression方法
回歸器是線性的,輸入為Alexnet pool5的輸出。Bounding-box回歸認為候選區域和Ground-tTruth之間是線性關系(因為在最后從SVM內確定出來的區域比較接近Ground-Truth,這里近似認為可以線性關系),訓練回歸器的輸入為N對值,,分別為候選區域的框坐標和真實的框坐標,下面在不必要時省略i。這里選用的Proposal必須和Ground Truth的IoU>0.6才算是正樣本。Bounding-box對以及輸入特征如下圖9所示:
圖9:Bounding-box對以及輸入特征
從候選框P到預測框的基本思路如下:
因為我們在分類之后得到候選框P ,其中
和
為候選框的中心點,
和
為候選框的寬高,下面介紹中所有框的定位都用這種定義,即x和y表示中心點坐標,w和h表示框的寬高。我們知道了候選框的表示,那么只要估計出候選框與真實框的平移量和尺度縮放比例,就可以得到我們的估計框了。
回歸模型的訓練階段表示為圖10所示:
圖10:回歸模型的損失函數
根據上述的損失函數模型,求解出最優解權重W,權重乘以pool5的特征得到平移參數和縮放參數。
在邊界回歸的測試階段:
測試階段權重參數已經訓練出來了,上式中
為Alexnet pool5輸出的特征,所以可以求出
這四個變換。然后,利用下圖11的公式求出預測出來包含物體的邊界框。
圖11:求預測邊界框公式