1. 程式人生 > 其它 >基於深度學習的目標檢測演算法綜述

基於深度學習的目標檢測演算法綜述

導言

  目標檢測的任務是找出影象中所有感興趣的目標(物體),確定它們的位置和大小,是機器視覺領域的核心問題之一。由於各類物體有不同的外觀,形狀,姿態,加上成像時光照,遮擋等因素的干擾,目標檢測一直是機器視覺領域最具挑戰性的問題。本文將針對目標檢測(Object Detection)這個機器視覺中的經典任務進行解析。

一,什麼是目標檢測?

  計算機視覺中關於影象識別有四大類任務:

  • 分類——Classification:解決“是什麼”的問題,即給定一張圖片或一段視訊判斷裡面包含什麼類別的目標。
  • 定位——Location:解決“在哪裡”的問題,即定位出這個目標的位置。
  • 檢測——Detection:解決“是什麼,在哪裡”的問題,即定位出這個目標的位置並且知道目標物是什麼
  • 分割——Segmentation:分為例項的分割(Instance-level)和場景分割(Scene-level),解決“每一個畫素屬於哪個目標物或場景”的問題。

二,目標檢測要解決的核心問題

  除了影象分類之外,目標檢測要解決的核心問題是:

  1. 目標可能出現在影象的任何位置
  2. 目標有各種不同的大小
  3. 目標可能有各種不同的形狀

  如果用矩形框來定義目標,則矩形有不同的寬高比。由於目標的寬高比不同,因此採用經典的滑動視窗+影象縮放的方案解決通用目標檢測問題的成本太高

三,目標檢測的應用

  目標檢測在很多領域都有應用需求。其中倍廣為研究的是人臉檢測,行人檢測,車輛檢測等重要目標的檢測。

  行人檢測:行人檢測在視訊監控,人流量統計,自動駕駛中都有重要的地位:智慧輔助駕駛,智慧監控,暴恐檢測(根據面相識別暴恐傾向),移動偵測、區域入侵檢測、安全帽/安全帶檢測

  車輛檢測:車輛檢測在智慧交通,視訊監控,自動駕駛中有重要的第位。車流量統計,車輛違章的自動分析等都離不開它,在自動駕駛中,首先要解決的問題就是確定道路在哪裡,周圍有哪些車、人或障礙物。

  其他應用:交通標誌如交通燈、行駛規則標誌的識別對於自動駕駛也非常重要,我們需要根據紅綠燈狀態,是否允許左右轉、掉頭等標誌確定車輛的行為。

交通標誌檢測

  除了這些常見的檢測之外,很多領域裡也需要檢測自己感興趣的目標。比如工業中材質表面的缺陷檢測,硬刷電路板表面的缺陷檢測等。

表面缺陷檢測

  農業中農作物表面的病蟲害識別也需要用到目標檢測技術:

  人工智慧在醫學中的應用目前是一個熱門話題,醫學影像影象如MRI的腫瘤等病變部位檢測和識別對於診斷的自動化,提供優質的治療具有重要的意義。

四,目標檢測相關演算法

  目標檢測問題意味著我們不僅要用演算法判斷圖片中是不是一輛汽車,還要再途中標記出它的位置,用邊框或紅色方框把汽車圈起來,這就是目標檢測問題。其中“定位”的意思是判斷汽車在圖片中的具體位置。

  近幾年來,目標檢測演算法取得了很大的突破。比較流行的演算法可以分為兩類:

  • 一類是基於Region Proposal的R-CNN系演算法(R-CNN, Fast R-CNN, Faster R-CNN等),它們是two-stage的,需要:1)先演算法產生目標候選框,也就是目標位置, 2)然後再對候選框做分類與迴歸。先進行區域生成,該區域稱之為region proposal(簡稱RP,一個可能包含待檢物體的預選框),再通過卷積神經網路進行樣本分類。任務流程:特徵提取-->生成RP-->分類/定位迴歸。常見two stage目標檢測演算法有:R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN和R-FCN等
  • 另一類是Yolo, SSD這類one-stage演算法,其僅僅使用一個卷積神經網路CNN直接預測不同目標的類別與位置。不用RP,直接在網路中提取特徵來預測物體分類和位置。任務流程:特徵提取-->分類/定位迴歸。常見的one stage目標檢測演算法有:OverFeat, YOLOV1, YOLOV2, YOLOV3, SSD和RetinaNet等

  第一類方法是準確度高一些,但是速度慢,但是第二類演算法是速度快,但是準確性要低一些。這些可以在下圖中看到:

4.1 目標檢測原理

  目標檢測分為兩大系列——RCNN系列和YOLO系列,RCNN系列是基於區域檢測的代表性演算法,YOLO是基於區域提取的代表性演算法,另外還有著名的SSD是基於前兩個系列的改進。

4.1.1 候選區域產生

  很多目標檢測技術都會涉及候選框(bounding boxes)的生成,物理候選框獲取當前主要使用影象分割區域生長技術。區域生長(合併)主要由於檢測影象中存在的物體具有區域性區域相似性(顏色、紋理等)。目標識別與影象分割拘束的發展進一步推動有效提取影象中資訊。

1) 滑動視窗

  通過滑窗法流程圖可以很清晰理解其主要思路:首先對輸入影象進行不同視窗大小的滑窗進行從左往右、從上到下的滑動。每次滑動時候對當前視窗執行分類器(分類器是事先訓練好的)。如果當前視窗得到較高的分類概率,則認為檢測到了物體。對每個不同視窗大小的滑窗都進行檢測後,會得到不同視窗檢測到的物體標記,這些視窗大小會存在重複較高的部分,最後採用非極大值抑制(Non-Maximum Suppression, NMS)的方法進行篩選。最終,經過NMS篩選後獲得檢測到的物體。

  滑窗法簡單易於理解,但是不同視窗大小進行影象全域性搜尋導致效率低下,而且設計視窗大小時候還需要考慮物體的長寬比。所以,對於實時性要求較高的分類器,不推薦使用滑窗法

  2)選擇性搜尋

    什麼是選擇性搜尋?

    滑窗法類似窮舉進行影象子區域搜尋,但是一般情況下影象中大部分子區域是沒有物體的。學者們自然而然想到只對影象中最有可能包含物體的區域進行搜尋以此來提高計算效率。選擇搜尋(selective search, 簡稱SS)方法是當下最為熟知的影象bounding boxes提取演算法,由Koen E. A於2011年提出

    選擇搜尋演算法的主要思想:影象中物體可能存在的區域應該是有某些相似性或者連續性區域的。因此,選擇搜尋基於上面這一想法採用子區域合併的方法進行提取bounding boxes。首先,對輸入影象進行分割演算法產生許多小的子區域。其次,根據這些子區域之間的相似性(相似性標準主要有顏色、紋理、大小等等)進行區域合併,不斷的進行區域迭代合併。每次迭代過程中對這些合併的子區域做bounding boxes(外切矩形),這些子區域外切矩形就是通常所說的候選框。

  

  選擇搜尋流程:

  • step0:生成區域集R
  • step1:計算區域集R裡每個相鄰區域的相似度S={s1, s2,...}
  • step2:找出相似度最高的兩個區域,將其合併為新集,新增進R
  • step3:從S中移除所有與step2中有關的子集
  • step4:計算新集與所有子集的相似度
  • step5:跳至step2,直至S為空

  選擇搜尋優點:

  • 計算效率優於滑窗法
  • 由於採用子區域合併策略,所以可以包含各種大小的疑似物體框
  • 合併區域相似的指標多樣性,提高了檢測物體的概率

4.1.2 資料表示

  經過標記後的樣本資料如下所示:

  預測輸出可以表示為:

  其中,$p_c$為預測結果的置信概率,$b_x, b_y, b_w, b_h$為裱框座標, $C_1, C_2, C_3$為屬於某個類別的概率。通過預測結果,實際結果,構建損失函式。損失函式包含了分類、迴歸兩部分組成。

4.1.3 效果評估

  使用IoU(Intersection over Union, 交併比)來判斷模型的好壞。所謂交併比,是指預測邊框、實際邊框交績和並集的比率,一般約定0.5為一個可以接受的值。

4.1.4 非極大值抑制

  預測結果中,可能多個預測結果間存在重疊部分,需要保留交併比最大的、去掉非最大的預測結果,這就是非極大值抑制(Non-Maximum Suppression, 簡寫作NMS)。如下圖所示,對同一個物體預測結果包含三個概率0.8/0.9/0.95,經過非極大值抑制後,僅保留概率最大的預測結果。

4.2 目標檢測模型

4.2.1 R-CNN系列

1) R-CNN

  定義:R-CNN(全稱Regions with CNN features),是R-CNN系列的第一代演算法,其實沒有過多的使用“深度學習”思想,而是將“深度學習”和傳統的“計算機視覺”的知識相結合。比如R-CNN pipeline中的第二步和第四步其實就屬於傳統的“計算機視覺”技術。使用selective search提取region proposals,使用SVM實現分類。

  流程:

  • 預訓練模型:選擇一個預訓練(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)。訓練將輸出一些校正因子的線性迴歸分類器

  效果:

  • R-CNN在VOC 2007測試集上mAP達到58.5%,打敗當時所有的目標檢測演算法

  缺點:

  • 重複計算,每個region proposal,都需要經過一個AlexNet特徵提取,為所有的RoI(region of interest)提取特徵大約花費47秒,佔用空間
  • selective search方法生成region proposal,對一幀影象,需要花費2秒
  • 三個模組(提取、分類、迴歸)是分別訓練的,並且在訓練時候,對於儲存空間消耗較大

4.2.2 YOLO系列

1)YOLOv1(2016)

  YOLO(You Only Look Once)是繼RCNN,fast-RCNN之後,Ross Girshick針對DL目標檢測速度問題提出的另一種框架,其核心思想是生成Rol+目標檢測兩階段(two-stage)演算法用一套網路的一階段(one-stage)演算法替代,直接在輸出層迴歸bounding box的位置和所屬類別。

  之前的物體檢測方法首先需要大量可能包含待檢測物體的先驗框,然後用分類器判斷每個先驗框對應的邊界框裡是否包含待檢測物體,以及物體所屬類別的概率或者置信度,同時需要後處理修正邊界框,最後基於一些準則過濾掉之心度不高和重疊度較高的邊界框,進而得到檢測結果。這種基於先產生候選區再檢測的方法雖然有相對較高的檢測準確度,但執行速度較慢。

  YOLO創造性的將物體檢測任務直接當作迴歸問題(regression problem)來處理,將候選區和檢測兩個階段合二為一。只需一眼就能知道每張影象中有那些物體以及物體的位置。下圖展示了各物體檢測系統的流程圖

  實際上,YOLO並沒有真正去掉候選區,而是採用了預定義候選區的方法,也就是將圖片劃分為7*7個網格,每個網格允許預測出兩個邊框,總共49*2個bounding box,可以理解為98個候選區,它們很粗略地覆蓋了圖片地整個區域。YOLO以降低mAP為代價,大幅提升了時間效率。

  每個網格單元預測這些框地2個邊界框和置信度分數。這些置信度分數反映了該模型對框是否包含目標地可靠程度,以及它預測框的準確程度。置信度定義為:$Pr(Object) * IOU_{pred}^{truth}$。如果該單元格中不存在目標,則置信度分數應為零。否則,我們虛妄置信度分數等於預測框與真實值之間聯合部分的交集(IOU)。

轉載:https://mp.weixin.qq.com/s?__biz=MzU4MjQ3MDkwNA==&mid=2247483731&idx=1&sn=237c52bc9ddfe65779b73ef8b5507f3c&chksm=fdb69cc4cac115d2ca505e0deb975960a792a0106a5314ffe3052f8e02a75c9fef458fd3aca2#rd

https://blog.csdn.net/electech6/article/details/95240278

https://blog.csdn.net/yegeli/article/details/109861867