基於深度學習的目標檢測算法調研

0 目標檢測的任務概述

如何從圖像中解析出可供計算機理解的信息,是機器視覺的中心問題。理解圖像,有三個主要的層次:

理解圖像

  1. 一是分類(Classification),即是將圖像結構化爲某一類別的信息,用事先確定好的類別(string)來描述圖片。這一任務是最簡單、最基礎的圖像理解任務,也是深度學習模型最先取得突破和實現大規模應用的任務。
  2. 二是檢測(Detection)。檢測則關注特定的物體目標,要求同時獲得這一目標的類別信息和位置信息。相比分類,檢測需要從背景中分離出感興趣的目標,並確定這一目標的類別和位置。
  3. 三是分割(Segmentation)。分割包括語義分割(semantic segmentation)和實例分割(instance segmentation),前者要求分離開具有不同語義的圖像部分,而後者是檢測任務的拓展,要求描述出目標的輪廓(相比檢測框更爲精細)。分割是對圖像的像素級描述,它賦予每個像素類別意義,適用於理解要求較高的場景,如無人駕駛中對道路和非道路的分割。

1 基於深度學習的「目標檢測」算法

深度學習時代來臨後,「目標檢測」算法大家族主要劃分爲兩大派系,一個是 R-CNN 系兩刀流派,另一個則是以 YOLO 爲代表的一刀流派。下面分別解釋一下 兩刀流一刀流:

兩刀流

顧名思義,兩刀解決問題。其實兩刀流 更符合人們解決圖像問題的思路:

  1. 生成候選區域(Region Proposal)
  2. 放入分類器分類並微調邊框位置

這種流派的算法都離不開 Region Proposal(候選區域生成) ,即是優點也是缺點,主要代表人物就是 R-CNN 系。

一刀流

顧名思義,一刀解決問題,直接對預測的目標物體進行迴歸
迴歸解決問題簡單快速,主要代表人物是 YOLOSSD


兩種流派的不同:

  • 兩刀流主要傾向準,
  • 一刀流主要傾向快。

無論 兩刀流 還是 一刀流,他們都是在同一個天平下選取一個平衡點、或者選取一個極端—— 要麼準,要麼快。

1.1 兩刀流 R-CNN

R-CNN 其實是一個很大的家族,桃李滿天下。在此,我們只探討 R-CNN 直系親屬,他們的發展順序如下:

R-CNN -> SPP Net -> Fast R-CNN -> Faster R-CNN -> Mask R-CNN`

下面對其分別簡單介紹:

1.1.1 R-CNN / 2013

論文:Rich feature hierarchies for accurate object detection and semantic segmentation

羅斯的這篇論文,這個模型,是利用卷積神經網絡來做「目標檢測」的開山之作,其意義深遠不言而喻。

R-CNN

解決問題一、速度

傳統的區域選擇使用滑窗,每滑一個窗口檢測一次,相鄰窗口信息重疊高,檢測速度慢。R-CNN 使用一個啓發式方法(Selective search),先生成候選區域再檢測,降低信息冗餘程度,從而提高檢測速度。

解決問題二、特徵提取

傳統的手工提取特徵魯棒性差,限於如顏色、紋理等 低層次(Low level)的特徵。使用CNN 提取高維特徵,免去手工提取特徵工作。

1.1.2 SPP Net / 2014

論文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

儘管 之前提出的 R-CNN 效果不錯,但是他還有兩個硬傷:

硬傷一、算力冗餘

先生成候選區域,再對區域進行卷積,這裏有兩個問題:其一是候選區域會有一定程度的重疊,對相同區域進行重複卷積;其二是每個區域進行新的卷積需要新的存儲空間。

何愷明等人意識到這個可以優化,於是把先生成候選區域再卷積,變成了先卷積後生成區域。“簡單地”改變順序,化腐朽爲神奇,不僅減少存儲量而且加快了訓練速度。

硬傷二、圖片縮放

undefined

由於FC Layer(全連接層)需要確定輸入維度。

無論是剪裁(Crop)還是縮放(Warp)等預處理,在很大程度上會丟失圖片原有的信息導致訓練效果不好,如上圖所示。把一座高塔縮放成一個胖胖的塔,人看到也沒很大把握直接下結論。

何愷明等人發現了這個問題,他們在輸入全連接層前定義一個特殊的池化層,將輸入的任意尺度 feature maps 組合成特定維度的輸出,這個組合可以是不同大小的拼湊,如同拼湊七巧板般。

SPP Net 的出現,不僅減少了計算冗餘,更重要的是打破了固定尺寸輸入這一束縛。

1.1.3 Fast R-CNN / 2015

論文:Fast R-CNN

此時,R-CNN的原作者自己 也按耐不住了——自己家的孩子,自己養大——於是。憋出了一個大招 Fast R-CNN

取這個名字的意思就是“一代更比一代強”,相對於原來的 Slow R-CNN,做了速度上的優化——就是快。

在這篇論文中,引用了 SPP Net 的工作,並且致謝其第一作者何愷明。

縱觀全文,最大的建樹就是將原來的串行結構改成並行結構

Fast R-CNN

原來的 R-CNN 是先對候選框區域進行分類,判斷有沒有物體,如果有則對 Bounding Box 進行精修 迴歸 。

這是一個串聯式的任務,那麼勢必沒有並聯的快,所以 rbg 就將原有結構改成並行——在分類的同時,對 Bbox 進行迴歸。

這一改變將 Bbox 和 Clf 的 loss 結合起來變成一個 Loss 一起訓練,並吸納了 SPP Net 的優點,最終不僅加快了預測的速度,而且提高了精度。

1.1.4 Faster R-CNN / 2015

論文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

在 Faster R-CNN 前,我們生產候選區域都是用的一系列啓發式算法,基於 Low Level 特徵生成區域。這樣就有兩個問題:

第一個問題 是生成區域的靠譜程度隨緣,而 兩刀流 算法正是依靠生成區域的靠譜程度——生成大量無效區域則會造成算力的浪費、少生成區域則會漏檢;

第二個問題 是生成候選區域的算法是在 CPU 上運行的,而我們的訓練在 GPU 上面,跨結構交互必定會有損效率。

於是乎,任少卿等人提出了一個 Region Proposal Networks 的概念,利用神經網絡自己學習去生成候選區域。

Region Proposal Networks

這種生成方法同時解決了上述的兩個問題,神經網絡可以學到更加高層、語義、抽象的特徵,生成的候選區域的可靠程度大大提高;可以從上圖看出 RPNs 和 RoI Pooling 共用前面的卷積神經網絡——將 RPNs 嵌入原有網絡,原有網絡和 RPNs 一起預測,大大地減少了參數量和預測時間。

兩刀流 的兩刀併入同一個網絡,這一操作足夠載入史冊了。

1.1.5 Mask R-CNN / 2017

論文:Mask R-CNN

時隔一年,何愷明團隊再次更新了 R-CNN 家族,改進 Faster R-CNN 並使用新的 backbone 和 FPN 創造出了 Mask R-CNN

我們縱觀發展歷史,發現 SPP Net 升級爲 Fast R-CNN 時結合了兩個 loss ,也就是說網絡輸入了兩種信息去訓練,結果精度大大提高了。何愷明他們就思考着再加一個信息輸入,即圖像的 Mask ,信息變多之後會不會有提升呢?

加一條通道

於是乎 Mask R-CNN 就這樣出來了,不僅可以做「目標檢測」還可以同時做「語義分割」,將兩個計算機視覺基本任務融入一個框架。沒有使用什麼 trick ,性能卻有了較爲明顯的提升,這個升級的版本讓人們不無嘖嘖驚歎。

1.1.6 二刀流小結

從結構上講

undefined

一開始的串行到並行,從單一信息流到三條信息流。

從最開始 50s 一張圖片的到最後 200ms 一張圖片,甚至可以達到 6 FPS 的高精度識別,無不彰顯着人類的智慧。

1.2 一刀流 YOLO

一刀流最核心的還是利用了分類器優秀的分類效果,首先給出一個大致的範圍(最開始就是全圖)進行分類,然後不斷迭代這個範圍直到一個精細的位置,這樣做的優點就是快,但是會有許多漏檢。

1.2.1 YOLO / 2015

論文:YOLO

YOLO

YOLO 就是使用迴歸這種做法的典型算法。

首先將圖片 Resize 到固定尺寸,然後通過一套卷積神經網絡,最後接上 FC 直接輸出結果,這就他們整個網絡的基本結構。

更具體地做法,是將輸入圖片劃分成一個 SxS 的網格,每個網格負責檢測網格里面的物體是啥,並輸出 Bbox Info 和 置信度。這裏的置信度指的是 該網格內含有什麼物體 和 預測這個物體的準確度。

undefined

這個想法其實就是一個簡單的分而治之想法,將圖片卷積後提取的特徵圖分爲 SxS 塊,然後利用優秀的分類模型對每一塊進行分類,將每個網格處理完使用 NMS (非極大值抑制)的算法去除重疊的框,最後得到我們的結果。

1.2.2 SSD / 2015

YOLO 這樣做的確非常快,但是問題就在於這個框有點大,就會變得粗糙——小物體就容易從這個大網中漏出去,因此對小物體的檢測效果不好。

所以 SSD 就在 YOLO 的主意上添加了 Faster R-CNN 的 Anchor 概念,並融合不同卷積層的特徵做出預測。

SSD

我們從上圖就可以很明顯的看出這是 YOLO 分治網絡 和 Faster R-CNN Anchor 的融合,這就大大提高了對小物體的檢測。這裏作者做實驗也提到和 Faster R-CNN 一樣的結果,這個 Anchor 的數量和形狀會對性能造成較大的影響。

除此之外,和 YOLO 最大的區別是,SSD 沒有接 FC 減少了大量的參數量、提高了速度。

1.2.3 YOLO9000 / 2016

論文:YOLO9000: Better, Faster, Stronger

到了 SSD ,迴歸方法的目標檢測應該獨步武林了,但是 YOLO 的作者不服氣,升級做了一個 YOLO9000 ——號稱可以同時識別 9000 類物體的實時監測算法。

YOLO9000 更像是 SSD 加了一些 Trick :

  • Batch Normalization
  • High resolution classifier 448*448 pretrain
  • Convolution with anchor boxes
  • Dimension clusters
  • Multi-Scale Training every 10 batch {320,……608}
  • Direct location prediction
  • Fine-Grained Features
  • 加了 BN 層,擴大輸入維度,使用了 Anchor,訓練的時候數據增強…

所以YOLO9000 和 SSD 可以歸爲一類。

2 總結

在「目標檢測」中有兩個指標:快(Fast) 和 準(Accurate)。

一刀流代表的是快,但是最後在快和準中找到了平衡,第一是快,第二是準。
兩刀流代表的是準,雖然沒有那麼快但是也有 6 FPS 可接受的程度,第一是準,第二是快。

兩類算法都有其適用的範圍,比如說實時快速動作捕捉,一刀流更勝一籌;複雜、多物體重疊,兩刀流當仁不讓。沒有不好的算法,只有合適的使用場景。

此外,後面的論文中可以看到,兩種類型的模型也在互相吸收彼此的優點,這也使得兩者的界限更爲模糊。

參考:

  1. 《基於深度學習的「目標檢測」算法綜述》https://zhuanlan.zhihu.com/p/33981103
  2. 《乾貨 | 目標檢測入門,看這篇就夠了》https://zhuanlan.zhihu.com/p/34142321
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章