常見的目標檢測算法介紹


2018-12-05 21:12:15

一、滑動窗口目標檢測

首先通過卷積神經網絡訓練一個分類器,然后使用不同尺度的窗口去裁剪輸入圖片進行分類。我們期望的結果是通過不同的窗口可以將需要檢測的物體完全覆蓋到,此時分類器輸出的置信值會大於閾值,這個時候我們就認為已經成功檢測到一個物體,並且得到了其位置信息。

滑動窗口算法的缺點是很明顯的就是計算量非常大,如果采用粗粒度的框進行框選,雖然可以減少計算量,但是毫無疑問會降低算法精度。

 

 二、R-CNN系列 - Two Stage目標檢測算法

以上提到的滑動窗口算法運行過慢的原因之一就是有很多裁剪下來的窗口是明顯不符合條件的窗口,而這些窗口也將被傳給分類器進行分類,為什么我們不能對這些窗口先進行一下過濾再進行分類操作呢?

1)Region Proposal : R-CNN

R-CNN即Region CNN,就是不再對滑動窗口產生的所有圖片進行分類,而是只在一些特定的候選框上進行分類操作。早期的R-CNN挑選候選框的方式是通過一些圖像的特征如顏色,紋理,邊緣等信息來尋找可能存在目標物體的候選框,這些候選框被稱為ROI,即Region of Interest,大概會產生2000個感興趣的區域,然后使用分類器對這些ROIs進行分類操作。

R-CNN輸出為label + bounding box,也就是說這個網絡並不直接使用ROI的box作為最后的區域坐標,而是會對這個區域進行一次回歸,得到預測的值。

2)Fast RCNN : R-CNN網絡的問題就是運行速度還是太慢了,如果我們有 2000 個候選區域,且每一個都需要獨立地饋送到 CNN 中,那么對於不同的 ROI,我們需要重復提取 2000 次特征,這個是非常浪費時間的。另外,由於CNN網絡的輸入圖像尺寸必須是固定的某一個大小(否則全連接時沒法計算),故R-CNN中對大小形狀不同的候選框,進行了裁剪和縮放,使得他們達到相同的尺寸。這個操作既浪費時間,又容易導致圖像信息丟失和形變。

Fast R-CNN針對這兩個問題做了相應的改進。

  • FCN,一次性對所有提取得到的圖片進行預測,大大提高了速度。
  • ROI pooling層,使用ROI Pooling從而不需要對圖像進行裁剪,很好的解決了這個問題。ROI pooling的思路是,如果最終我們要生成MxN的圖片,那么先將特征圖水平和豎直分為M和N份,然后每一份取最大值,輸出MxN的特征圖。這樣就實現了固定尺寸的圖片輸出了。ROI pooling層位於卷積后,全連接前。

Fast R-CNN 的訓練速度是 R-CNN 的 10 倍,推斷速度是后者的 150 倍。

3)Faster R-CNN : Fast R-CNN 依賴於外部候選區域方法,如選擇性搜索。但這些算法在 CPU 上運行且速度很慢。在測試中,Fast R-CNN 需要 2.3 秒來進行預測,其中 2 秒用於生成 2000 個 ROI。Faster R-CNN 采用與 Fast R-CNN 相同的設計,只是它用內部深層網絡代替了候選區域方法。新的候選區域網絡(RPN)在生成 ROI 時效率更高,並且以每幅圖像 10 毫秒的速度運行。

主要分為四個步驟

  1. 卷積層。原始圖片先經過conv-relu-pooling的多層卷積神經網絡,提取出特征圖。供后續的RPN網絡和全連接層使用。faster R-CNN不像R-CNN需要對每個子圖進行卷積層特征提取,它只需要對全圖進行一次提取就可以了,從而大大減小了計算時間。

  2. RPN層,region proposal networks。RPN層用於生成候選框,並利用softmax判斷候選框是前景還是背景,從中選取前景候選框(因為物體一般在前景中),並利用bounding box regression調整候選框的位置,從而得到特征子圖,稱為proposals。

  3. ROI層,fast R-CNN中已經講過了ROI層了,它將大小尺寸不同的proposal池化成相同的大小,然后送入后續的全連接層進行物體分類和位置調整回歸

  4. 分類層。利用ROI層輸出的特征圖proposal,判斷proposal的類別,同時再次對bounding box進行regression從而得到精確的形狀和位置。


作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網

主要分為四個步驟

  • 卷積層,原始圖片先經過conv-relu-pooling的多層卷積神經網絡,提取出特征圖。供后續的RPN網絡和全連接層使用。faster R-CNN不像R-CNN需要對每個子圖進行卷積層特征提取,它只需要對全圖進行一次提取就可以了,從而大大減小了計算時間。
  • RPN層,region proposal networks。RPN層用於生成候選框,並利用softmax判斷候選框是前景還是背景,從中選取前景候選框(因為物體一般在前景中),並利 bounding box regression調整候選框的位置,從而得到特征子圖,稱為proposals。
  • ROI層,fast R-CNN中已經講過了ROI層了,它將大小尺寸不同的proposal池化成相同的大小,然后送入后續的全連接層進行物體分類和位置調整回歸
  • 分類層,利用ROI層輸出的特征圖proposal,判斷proposal的類別,同時再次對bounding box進行regression從而得到精確的形狀和位置。

R-CNN系列的性能圖:

 

三、YOLO、SSD - One Stage目標檢測算法

由於CNN網絡的輸入圖像尺寸必須是固定的某一個大小(否則全連接時沒法計算),故R-CNN中對大小形狀不同的候選框,進行了裁剪和縮放,使得他們達到相同的尺寸。這個操作既浪費時間,又容易導致圖像信息丟失和形變。fast R-CNN在全連接層之前插入了ROI pooling層,從而不需要對圖像進行裁剪,很好的解決了這個問題。

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網
由於CNN網絡的輸入圖像尺寸必須是固定的某一個大小(否則全連接時沒法計算),故R-CNN中對大小形狀不同的候選框,進行了裁剪和縮放,使得他們達到相同的尺寸。這個操作既浪費時間,又容易導致圖像信息丟失和形變。fast R-CNN在全連接層之前插入了ROI pooling層,從而不需要對圖像進行裁剪,很好的解決了這個問題。

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網

基於區域的檢測器是很准確的,但需要付出性能的代價。采用One Stage的算法的效率往往要好於two stage算法,因為one stage可以一次性得到邊界框和類別。

1)YOLO : You Only Look Once

針對於two-stage目標檢測算法普遍存在的運算速度慢的缺點,yolo創造性的提出了one-stage。也就是將物體分類和物體定位在一個步驟中完成。yolo直接在輸出層回歸bounding box的位置和bounding box所屬類別,從而實現one-stage。通過這種方式,yolo可實現45幀每秒的運算速度,完全能滿足實時性要求

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網

針對於two-stage目標檢測算法普遍存在的運算速度慢的缺點,yolo創造性的提出了one-stage。也就是將物體分類和物體定位在一個步驟中完成。yolo直接在輸出層回歸bounding box的位置和bounding box所屬類別,從而實現one-stage。通過這種方式,yolo可實現45幀每秒的運算速度,完全能滿足實時性要求。其網絡結構如下:

YOLO主要分為三個部分:卷積層,目標檢測層,NMS篩選層。

卷積層:采用Google inceptionV1網絡,對應到上圖中的第一個階段,共20層。這一層主要是進行特征提取,從而提高模型泛化能力。但作者對inceptionV1進行了改造,他沒有使用inception module結構,而是用一個1x1的卷積,並聯一個3x3的卷積來替代。(可以認為只使用了inception module中的一個分支,應該是為了簡化網絡結構)

采用Google inceptionV1網絡,對應到上圖中的第一個階段,共20層。這一層主要是進行特征提取,從而提高模型泛化能力。但作者對inceptionV1進行了改造,他沒有使用inception module結構,而是用一個1x1的卷積,並聯一個3x3的卷積來替代。(可以認為只使用了inception module中的一個分支,應該是為了簡化網絡結構)

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網
主要分為三個部分:卷積層,目標檢測層,NMS篩選層

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網

目標檢測層:先經過4個卷積層和2個全連接層,最后生成7x7x30的輸出。先經過4個卷積層的目的是為了提高模型泛化能力。yolo將一副448x448的原圖分割成了7x7個網格,每個網格要預測兩個bounding box的坐標(x,y,w,h)和box內包含物體的置信度confidence,以及物體屬於20類別中每一類的概率(yolo的訓練數據為voc2012,它是一個20分類的數據集)。所以一個網格對應的參數為(4x2+2+20) = 30。如下圖:

NMS篩選層:篩選層是為了在多個結果中(多個bounding box)篩選出最合適的幾個,這個方法和faster R-CNN 中基本相同。都是先過濾掉score低於閾值的box,對剩下的box進行NMS非極大值抑制,去除掉重疊度比較高的box(NMS具體算法可以回顧上面faster R-CNN小節)。這樣就得到了最終的最合適的幾個box和他們的類別。

先經過4個卷積層和2個全連接層,最后生成7x7x30的輸出。先經過4個卷積層的目的是為了提高模型泛化能力。yolo將一副448x448的原圖分割成了7x7個網格,每個網格要預測兩個bounding box的坐標(x,y,w,h)和box內包含物體的置信度confidence,以及物體屬於20類別中每一類的概率(yolo的訓練數據為voc2012,它是一個20分類的數據集)。所以一個網格對應的參數為(4x2+2+20) = 30。如下圖

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網

YOLO算法的缺點:

對於圖片中比較小的物體,效果很差。這其實是所有目標檢測算法的通病,SSD對它有些優化,我們后面再看。

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網
  • 每個網格只對應兩個bounding box,當物體的長寬比不常見(也就是訓練數據集覆蓋不到時),效果很差。
  • 原始圖片只划分為7x7的網格,當兩個物體靠的很近時,效果很差。
  • 最終每個網格只對應一個類別,容易出現漏檢(物體沒有被識別到)。
  • 對於圖片中比較小的物體,效果很差。這其實是所有目標檢測算法的通病,SSD對它有些優化,我們后面再看。

2)SSD : Single Shot MultiBox Detector

Single Shot MultiBox Detector

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網

Faster R-CNN准確率mAP較高,漏檢率recall較低,但速度較慢。而yolo則相反,速度快,但准確率和漏檢率不盡人意。SSD綜合了他們的優缺點,對輸入300x300的圖像,在voc2007數據集上test,能夠達到58 幀每秒( Titan X 的 GPU ),72.1%的mAP。

SSD網絡結構如下圖:

SSD網絡結構如下圖

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網

卷積層:SSD論文采用了VGG16的基礎網絡,其實這也是幾乎所有目標檢測神經網絡的慣用方法。先用一個CNN網絡來提取特征,然后再進行后續的目標定位和目標分類識別。

目標檢測層:這一層由5個卷積層和一個平均池化層組成。去掉了最后的全連接層。SSD認為目標檢測中的物體,只與周圍信息相關,它的感受野不是全局的,故沒必要也不應該做全連接。SSD的特點如下:

  • 多尺寸feature map上進行目標檢測。每一個卷積層,都會輸出不同大小感受野的feature map。在這些不同尺度的feature map上,進行目標位置和類別的訓練和預測,從而達到多尺度檢測的目的,可以克服yolo對於寬高比不常見的物體,識別准確率較低的問題。而yolo中,只在最后一個卷積層上做目標位置和類別的訓練和預測。這是SSD相對於yolo能提高准確率的一個關鍵所在。
  • 多個anchors,每個anchor對應4個位置參數和21個類別參數。

NMS篩選層:和yolo的篩選層基本一致,同樣先過濾掉類別概率低於閾值的default box,再采用NMS非極大值抑制,篩掉重疊度較高的。只不過SSD綜合了各個不同feature map上的目標檢測輸出的default box。

和yolo的篩選層基本一致,同樣先過濾掉類別概率低於閾值的default box,再采用NMS非極大值抑制,篩掉重疊度較高的。只不過SSD綜合了各個不同feature map上的目標檢測輸出的default box。

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網
Single Shot MultiBox Detector

作者:紫衣仙女
鏈接:https://www.imooc.com/article/37757
來源:慕課網


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM