基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

本教程由深度學習中文社區(Studydl.com)持續發佈與更新, 本系列其餘教程地址見文章末尾.

前言

自從2012年的ILSVRC競賽中基於CNN的方法一鳴驚人之後,CNN已成為圖像分類、檢測和分割的神器。其中在圖像檢測的任務中,R-CNN系列是一套經典的方法,從最初的R-CNN到後來的Fast R-CNN, Faster R-CNN 和今年的Mask R-CNN, 我們可以看到CNN在圖像檢測中是如何一點一點提高的。下面我們將一道回顧R-CNN家族的發展史,瞭解這些方法的演變和這個演變過程中的那些富有創意的想法。

R-CNN 系列的四篇文章如下:

  1. R-CNN: https://arxiv.org/abs/1311.2524
  2. Fast R-CNN: https://arxiv.org/abs/1504.08083
  3. Faster R-CNN: https://arxiv.org/abs/1506.01497
  4. Mask R-CNN: https://arxiv.org/abs/1703.06870

圖像的檢測任務是從一個複雜場景的圖像中找到不同的物體,並且給出各個物體的邊界框。圖像檢測的三個著名的數據集是PASCAL VOC,ImageNet和微軟COCO. PASCAL VOC包含20個物體的類別,而ImageNet包含一千多種物體類別,COCO有80中物體類別和150萬個物體實例。

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

PASCAL VOC目標檢測

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

COCO目標檢測和實例分割

1. R-CNN

R-CNN的思路是很直觀的三步曲:

1,得到若干候選區域;

2, 對每個候選區域分別用CNN分類;

3,對每個候選區域分別進行邊框預測。

在R-CNN出現之前,目標檢測的流行思路是先從圖像中得到一些候選區域,再從候選區域中提取一些特徵,然後利用一個分類器對這些特徵進行分類。分類的結果和候選區域的邊界框就可以作為目標檢測的輸出。一種得到候選區域的方法是Selective Search, 該方法可以得到不同尺度的候選區域,每個候選區域是一個聯通的區域。如下圖中,左邊得到的是較小的候選區域,右邊是較大的候選區域,在該尺度下包含了整個人的區域。

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

Selective Search得到不同尺度的候選區域

R-CNN的想法是,既然CNN在圖像分類任務中的表現很好,可以自動學習特徵,何不用它來對每個候選區域進行特徵提取呢?於是R-CNN在Selective Search得到的候選區域的基礎上,將每個候選區域縮放到一個固定的大小,並且作為AlexNet(ImageNet 2012圖像分類競賽的冠軍)的輸入,依次對這些區域進行特徵提取,然後再使用支持向量機對各個區域的特徵分別進行分類。R-CNN的過程如下:

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

R-CNN示意圖

這樣就能得到一個檢測的結果了。但是Slelective Search得到的候選區域並不一定和目標物體的真實邊界相吻合,因此R-CNN提出對物體的邊界框做進一步的調整,使用一個線性迴歸器來預測一個候選區域中物體的真實邊界。該回歸器的輸入就是候選區域的特徵,而輸出是邊界框的座標。

R-CNN的效果很不錯,比VOC 2012的最好的結果提高了30%的準確度。但是問題就是太慢,主要有三方面原因:1,候選區域的生成是一個耗時的過程;2,對候選區域特徵提取需要在單張圖像上使用AlexNet 2000多次; 3, 特徵提取、圖像分類、邊框迴歸是三個獨立的步驟,要分別進行訓練,測試過程中的效率也較低。

2, Fast R-CNN

為了解決R-CNN中效率低的問題,Fast R-CNN想,一張圖像上要使用AlexNet 2000多次來分別得到各個區域的特徵,但很多區域都是重合的,可否避免這些重複計算,只在一張圖像上使用一次AlexNet,然後再得到不同區域的特徵呢?

於是Fast R-CNN提出了一個ROI Pooling的方法,先對輸入圖像使用一次CNN前向計算,得到整個圖像的特徵圖,再在這個特徵圖中分別取提取各個候選區域的特徵。由於候選區域的大小不一樣,而對應的特徵需要要具有固定的大小,因此該方法對各個候選區域分別使用POI Pooling, 其做法

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

Fast R-CNN示意圖, 將每個候選區域分成h x w大小的格子做pooling

Fast R-CNN的第二點創意是把之前獨立的三個步驟(特徵提取、分類和迴歸)放到一個統一的網絡結構中。該網絡結構同時預測一個候選區域的物體類別和該物體的邊界框,使用兩個全連接的輸出層分別進行類別預測和邊框預測(如下圖所示),將這兩個任務進行同時訓練,利用一個聯合代價函數:

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

公式中的兩項分別是classification loss 和regression loss。

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

特徵提取-分類-迴歸聯合網絡

使用VGG16作為特徵提取網絡,Fast R-CNN在測試圖像上的處理時間比R-CNN快了200多倍,並且精度更高。如果不考慮生成候選區域的時間,可以達到實時檢測。生成候選區域的Selective Search算法處理一張圖像大概需要2s的時間,因此成為該方法的一個瓶頸。

本文就介紹到這裡, 下一篇文章將為大家介紹Faster R-CNN與Mask R-CNN.

本系列教程文章地址:

本系列已發表如下教程,點擊文末了解更多按鈕繼續閱讀, 同時關注我可在第一時間獲得最新教程.

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN

基於深度學習的目標檢測算法詳解(一):R-CNN與Fast R-CNN


分享到:


相關文章: