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

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

        目標檢測一直是計算機視覺的基礎問題,在 2010 年左右就開始停滯不前了。自 2013 年一篇論文的發表,目標檢測從原始的傳統手工提取特徵方法變成了基於卷積神經網路的特徵提取,從此一發不可收拾。本文將跟著歷史的潮流,簡要地探討「目標檢測」演算法的兩種思想和這些思想引申出的演算法,主要涉及那些主流演算法。

概述 Overview

在深度學習正式介入之前,傳統的「目標檢測」方法都是 區域選擇提取特徵分類迴歸 三部曲,這樣就有兩個難以解決的問題;其一是區域選擇的策略效果差、時間複雜度高;其二是手工提取的特徵魯棒性較差。

雲端計算時代來臨後,「目標檢測」演算法大家族主要劃分為兩大派系,一個是 R-CNN

系兩刀流,另一個則是以 YOLO 為代表的一刀流派。下面分別解釋一下 兩刀流一刀流

兩刀流

顧名思義,兩刀解決問題:

1、生成可能區域(Region Proposal) & CNN 提取特徵
2、放入分類器分類並修正位置

這一流派的演算法都離不開 Region Proposal ,即是優點也是缺點,主要代表人物就是 R-CNN 系。

一刀流

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

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

兩刀流的天平主要傾向

準,
一刀流的天平主要傾向快。

但最後萬劍歸宗,大家也找到了自己的平衡,平衡點的有略微的不同。

接下來我們花開兩朵各表一支,一朵 兩刀流 的前世今生,另一朵 一刀流 的發展歷史。

兩刀流

顧名思義,兩刀解決問題:

1、生成可能區域(Region Proposal) & CNN 提取特徵
2、放入分類器分類並修正位置

這一流派的演算法都離不開 Region Proposal ,即是優點也是缺點,主要代表人物就是 R-CNN 系。

一刀流

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

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

兩刀流的天平主要傾向準,
一刀流的天平主要傾向快。

但最後萬劍歸宗,大家也找到了自己的平衡,平衡點的有略微的不同。

接下來我們花開兩朵各表一支,一朵 兩刀流 的前世今生,另一朵 一刀流 的發展歷史。

兩刀流 R-CNN

R-CNN 其實是一個很大的家族,自從 rbg 大神發表那篇論文,子孫無數、桃李滿天下。在此,我們只探討 R-CNN 直系親屬,他們的發展順序如下:

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

其實說句良心話,最佩服的並不是 rbg 大神,而是提出了 SPP Net 的以何愷明為主的作者們
他們在整個家族進化的過程中,一致暗埋了一條主線:充分榨乾 feature maps 的價值

R-CNN / 2013

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

解決問題一、速度
傳統的區域選擇使用滑窗,每滑一個視窗檢測一次,相鄰視窗資訊重疊高,檢測速度慢。R-CNN 使用一個啟發式方法(Selective search),先生成候選區域再檢測,降低資訊冗餘程度,從而提高檢測速度。

解決問題二、特徵提取
傳統的手工提取特徵魯棒性差,限於如顏色、紋理等 低層次(Low level)的特徵。

該方法將 PASCAL VOC 上的檢測率從 35.1% 提升到 53.7% ,提高了好幾個量級。雖然比傳統方法好很多,但是從現在的眼光看,只能是初窺門徑

SPP Net / 2014

R-CNN 提出後的一年,以何愷明、任少卿為首的團隊提出了 SPP Net ,這才是真正摸到了卷積神經網路的脈絡。也不奇怪,畢竟這些人鼓搗出了 ResNet 殘差網路,對神經網路的理解是其他人沒法比的。

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

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

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

硬傷二、圖片縮放

無論是剪裁(Crop)還是縮放(Warp),在很大程度上會丟失圖片原有的資訊導致訓練效果不好,如上圖所示。直觀的理解,把車剪裁成一個門,人看到這個門也不好判斷整體是一輛車;把一座高塔縮放成一個胖胖的塔,人看到也沒很大把握直接下結論。人都做不到,機器的難度就可想而知了。

何愷明等人發現了這個問題,於是思索有什麼辦法能不對圖片進行變形,將圖片原汁原味地輸入進去學習。

最後他們發現問題的根源是 FC Layer(全連線層)需要確定輸入維度,於是他們在輸入全連線層前定義一個特殊的池化層,將輸入的任意尺度 feature maps 組合成特定維度的輸出,這個組合可以是不同大小的拼湊,如同拼湊七巧板般。

舉個例子,我們要輸入的維度 64∗25664∗256 ,那麼我們可以這樣組合 32∗256+16∗256+8∗256+8∗25632∗256+16∗256+8∗256+8∗256

SPP Net 的出現是如同一道驚雷,不僅減少了計算冗餘,更重要的是打破了固定尺寸輸入這一束縛,讓後來者享受到這一縷陽光。

注:這個時候 FCN 還沒有出現,FCN 是同年 11 月發表的,SPP Net 是 4 月發表的。

Fast R-CNN / 2015

此時,我們的 rbg 大哥也按耐不住了——自己家的孩子,自己養大——於是憋出了一個大招 Fast R-CNN 。取這個名字的意思就是“兒子比爸爸強”,相對於原來的 Slow R-CNN,做了速度上的優化——就是快。

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

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

改進:流水線

原來的 R-CNN 是先對候選框區域進行分類,判斷有沒有物體,如果有則對 Bounding Box 進行精修 迴歸 。這是一個串聯式的任務,那麼勢必沒有並聯的快,所以 rbg 就將原有結構改成並行——在分類的同時,對 Bbox 進行迴歸。

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

Faster R-CNN / 2015

眾人拾柴火焰高,原來 SPP Net 的人馬和 rbg 一起研究憋大招,在 rbg何愷明 綻放完光芒後,任少卿 老哥發出了太陽般的光芒——RPN 的概念讓人不得不服。

神經網路一統天下

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

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

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

那麼怎麼解決這兩個問題呢?

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

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

RPNs 中引入了 anchor 的概念,feature map 中每個滑窗位置都會生成 kanchors,然後判斷 anchor 覆蓋的影象是前景還是背景,同時迴歸 Bbox 的精細位置,預測的 Bbox 更加精確。

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

Mask R-CNN / 2017

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

加一條通道

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

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

作者稱其為 meta algorithm ,即一個基礎的演算法,只要需要「目標檢測」或者「語義分割」都可以使用這個作為 Backbone

小結 / 2018

我們再總結一下 R-CNN 的發家史:

從平臺上講

一開始的跨平臺,到最後的統一到 GPU 內,效率低到效率高。

從結構上講

一開始的序列到並行,從單一資訊流到三條資訊流。

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

一刀流 YOLO & SSD

一刀流的想法就比較暴力,給定一張影象,使用迴歸的方式輸出這個目標的邊框和類別。一刀流最核心的還是利用了分類器優秀的分類效果,首先給出一個大致的範圍(最開始就是全圖)進行分類,然後不斷迭代這個範圍直到一個精細的位置,如上圖從藍色的框框到紅色的框框。

這就是一刀流回歸的思想,這樣做的優點就是快,但是會有許多漏檢。

YOLO / 2015

論文:YOLO

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

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

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

更具體的是如下定義:

Pr(Class_{i}|Object)∗Pr(Object)∗IOU_{pred}^{truth}=Pr(Class_{i})∗IOU_{pred}^{truth}

我們可以從這個定義得知,當框中沒有物體的時候,整個置信度都會變為 0 。

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

SSD / 2015

論文:SSD

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

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

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

除此之外,由於這個 Anchor 是規整形狀的,但是有些物體的擺放位置是千奇百怪的,所以沒有 資料增強 前的效果比增強後的效果差 7 個百分點。直觀點理解,做輕微地角度扭曲讓 Anchor 背後的神經元“看到”更多的資訊。

還有一個重大的進步是結合了不同尺寸大小 Feature Maps 所提取的特徵,然後進行預測。這是 FPN 網路提出前的第一次做 Feature Pyramid 的嘗試,這個特徵圖金字塔結合了不同層的資訊,從而結合了不同 尺寸大小 的特徵資訊。

這個嘗試就大大地提高了識別的精度,且高解析度(尺寸大)的 Feature Map 中含有更多小物體的資訊,也是因為這個原因 SSD 能夠較好的識別小物體。

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

YOLO9000 / 2016

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

講道理,YOLO9000 更像是 SSD 加了一些 Trick ,而並沒有什麼本質上的進步:

    相關推薦

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

            目標檢測一直是計算機視覺的基礎問題,在 2010 年左右就開始停滯不前了。自 2013 年一篇論文的發表,目標檢測從原始的傳統手工提取特徵方法變成了基於卷積神經網路的特徵提取,從此一發不可收拾。本文將跟著歷史的潮流,簡要地探討「目標檢測」演算法的兩種思想和這些

    基於深度學習目標檢測演算法綜述(一)(截止20180821)

    參考:https://zhuanlan.zhihu.com/p/40047760 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技

    基於深度學習目標檢測演算法綜述(三)(截止20180821)

    參考:https://zhuanlan.zhihu.com/p/40102001 基於深度學習的目標檢測演算法綜述分為三部分: 1. Two/One stage演算法改進。這部分將主要總結在two/one stage經典網路上改進的系列論文,包括Faster R-CNN、YOLO、SSD等經

    基於深度學習目標檢測演算法綜述(二)(截止20180821)

    參考:https://zhuanlan.zhihu.com/p/40020809 基於深度學習的目標檢測演算法綜述分為三部分: 1. Two/One stage演算法改進。這部分將主要總結在two/one stage經典網路上改進的系列論文,包括Faster R-CNN、YOLO、SSD等經

    學習筆記之——基於深度學習目標檢測演算法

            國慶假期閒來無事~又正好打算入門基於深度學習的視覺檢測領域,就利用這個時間來寫一份學習的博文~本博文主要是本人的學習筆記與調研報告(不涉及商業用途),博文的部分來自我團隊的幾位成員的調研報告(由於隱私關係,不公告他們的名字了哈~),同時結合

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

    想了解深度學習的小夥伴們,看一下! 以後自己學深度學習了,再來看此貼! 只能發一個連結了: https://mp.weixin.qq.com/s?__biz=MzU4Nzc0NDI1NA==&mid=2247483731&idx=1&sn=37667093807751

    基於深度學習目標檢測演算法綜述(一)

    前言 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技術。從最初2013年提出的R-CNN、OverFeat

    基於深度學習目標檢測演算法綜述(二)

    前言 基於深度學習的目標檢測演算法綜述分為三部分: 1. Two/One stage演算法改進。這部分將主要總結在two/one stage經典網路上改進的系列論文,包括Faster R-CNN、YOLO、SSD等經典論文的升級版本。 2. 解決方案。這部分論文對物體檢

    基於深度學習目標檢測演算法綜述:常見問題及解決方案

    導讀:目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技術。從最初 2013 年提出的 R-CNN

    基於深度學習目標檢測演算法及其在醫學影像中的應用

    (自己寫的,需要轉載請聯絡作者,或者標明出處呀) 摘要:目標檢測是計算機視覺中一個重要問題,在行人跟蹤、車牌識別、無人駕駛等領域都具有重要的研究價值。近年來,隨著深度學習對影象分類準確度的大幅度提高,基於深度學習的目標檢測演算法逐漸成為主流。本文介紹了目前發展迅猛的深度

    基於深度學習目標檢測演算法綜述(三)

    轉自:https://zhuanlan.zhihu.com/p/40102001 基於深度學習的目標檢測演算法綜述(一) 基於深度學習的目標檢測演算法綜述(二) 基於深度學習的目標檢測演算法綜述(三) 本文內容原創,作者:美圖雲視覺技術部 檢測團隊,轉載請註明出處  

    基於深度學習目標檢測演算法綜述(二)—Two/One stage演算法改進之R-FCN

    基於深度學習的目標檢測演算法綜述(一):https://blog.csdn.net/weixin_36835368/article/details/82687919 目錄 1、Two stage 1.1 R-FCN:Object Detection via Region-based

    深度學習目標檢測RCNN學習筆記(5):faster rcnn

    轉載:http://blog.csdn.net/u011534057/article/details/51247371 reference link:http://blog.csdn.net/shenxiaolu1984/article/details/51152614

    深度學習目標檢測RCNN學習筆記(1):Rich feature hierarchies for accurate object detection and semantic segmentat

    轉載:http://blog.csdn.net/u011534057/article/details/51218218 rcnn主要作用就是用於物體檢測,就是首先通過selective search 選擇2000個候選區域,這些區域中有我們需要的所對應的物體的bound

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

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

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

    摘要 目標檢測是計算機視覺的一個重要分支,其目的是準確判斷影象或視訊中的物體類別並定位。傳統的目標檢測方法包括這三個步驟:區域選擇、提取特徵和分類迴歸,這樣的檢測方法存在很多問題,現已難以滿足檢測對效能和速度的要求。基於深度學習的目標檢測方法摒棄了傳統檢測演算法適應性不高、對背景模型的更新要

    深度學習目標檢測RCNN學習筆記(10):SSD:Single Shot MultiBox Detector

    之前一直想總結下SSD,奈何時間緣故一直沒有整理,在我的認知當中,SSD是對Faster RCNN RPN這一獨特步驟的延伸與整合。總而言之,在思考於RPN進行2-class分類的時候,能否借鑑YOLO並簡化faster rcnn在21分類同時整合faster rcnn中anchor boxes實現m

    乾貨 | 基於深度學習目標檢測演算法綜述

    Original url: 精品文章,第一時間送達 來源:美圖雲視覺技術部 轉自:美團技術,未經允許不得二次轉載 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標

    基於深度學習目標檢測演算法:Faster R-CNN

    問題引入:         R-CNN、SPP net、Fast R-CNN等目標檢測演算法,它們proposals都是事先通過selecetive search方法得到。然而,這一過程將耗費大量的時間,從而影響目標檢測系統的實時性。Faster R-CNN針對這一問題,提

    深度學習目標檢測 RCNN學習筆記(11):R-FCN: Object Detection via Region-based Fully Convolutional Networks

    轉自:http://blog.csdn.NET/shadow_guo/article/details/51767036 作者代季峰 1,14年畢業的清華博士到微軟亞洲研究院的視覺計算組,CVPR 16 兩篇一作的會議主持人同時公佈了原始碼~ 2 1. 簡介