1. 程式人生 > >YOLO——基於迴歸的目標檢測演算法

YOLO——基於迴歸的目標檢測演算法

YOLO: You Only Look Once:Unified, Real-Time Object Detection

    這篇論文的內容並不多,核心思想也比較簡單,下面相當於是對論文的翻譯!

    YOLO是一個可以一次性預測多個Box位置和類別的卷積神經網路,能夠實現端到端的目標檢測和識別,其最大的優勢就是速度快。事實上,目標檢測的本質就是迴歸,因此一個實現迴歸功能的CNN並不需要複雜的設計過程。YOLO沒有選擇滑窗或提取proposal的方式訓練網路,而是直接選用整圖訓練模型。這樣做的好處在於可以更好的區分目標和背景區域,相比之下,採用proposal訓練方式的Fast-R-CNN常常把背景區域誤檢為特定目標

。當然,YOLO在提升檢測速度的同時犧牲了一些精度。下圖所示是YOLO檢測系統流程:1.將影象Resize到448*448;2.執行CNN;3.非極大抑制優化檢測結果。有興趣的童鞋可以按照http://pjreddie.com/darknet/install/的說明安裝測試一下YOLO的scoring流程,非常容易上手。接下來將重點介紹YOLO的原理。

 5.1 一體化檢測方案

    YOLO的設計理念遵循端到端訓練和實時檢測。YOLO將輸入影象劃分為S*S個網格,如果一個物體的中心落在某網格(cell)內,則相應網格負責檢測該物體。在訓練和測試時,每個網路預測B個bounding boxes,每個bounding box對應5個預測引數,即bounding box的中心點座標(x,y),寬高(w,h),和置信度評分。這裡的置信度評分(Pr(Object)*IOU(pred|truth))綜合反映基於當前模型bounding box記憶體在目標的可能性Pr(Object)和bounding box預測目標位置的準確性IOU(pred|truth)。

如果bouding box內不存在物體,則Pr(Object)=0。如果存在物體,則根據預測的bounding box和真實的bounding box計算IOU,同時會預測存在物體的情況下該物體屬於某一類的後驗概率Pr(Class_i|Object)。假定一共有C類物體,那麼每一個網格只預測一次C類物體的條件類概率Pr(Class_i|Object), i=1,2,...,C;每一個網格預測B個bounding box的位置。即這B個bounding box共享一套條件類概率Pr(Class_i|Object), i=1,2,...,C。基於計算得到的Pr(Class_i|Object),在測試時可以計算某個bounding box類相關置信度:Pr(Class_i|Object)*Pr(Object)*IOU(pred|truth)=Pr(Class_i)*IOU(pred|truth)。如果將輸入影象劃分為7*7網格(S=7),每個網格預測2個bounding box (B=2),有20類待檢測的目標(C=20),則相當於最終預測一個長度為S*S*(B*5+C)=7*7*30的向量,從而完成檢測+識別任務,整個流程可以通過下圖理解。

 5.1.1 網路設計

    YOLO網路設計遵循了GoogleNet的思想,但與之有所區別。YOLO使用了24個級聯的卷積(conv)層和2個全連線(fc)層,其中conv層包括3*3和1*1兩種Kernel,最後一個fc層即YOLO網路的輸出,長度為S*S*(B*5+C)=7*7*30.此外,作者還設計了一個簡化版的YOLO-small網路,包括9個級聯的conv層和2個fc層,由於conv層的數量少了很多,因此YOLO-small速度比YOLO快很多。如下圖所示我們給出了YOLO網路的架構。

5.1.2 訓練

    作者訓練YOLO網路是分步驟進行的:首先,作者從上圖網路中取出前20個conv層,然後自己添加了一個average pooling層和一個fc層,用1000類的 ImageNet資料與訓練。在ImageNet2012上用224*224d的影象訓練後得到的top5準確率是88%。然後,作者在20個預訓練好的conv層後添加了4個新的conv層和2個fc層,並採用隨即引數初始化這些新新增的層,在fine-tune新層時,作者選用448*448影象訓練。最後一個fc層可以預測物體屬於不同類的概率和bounding box中心點座標x,y和寬高w,h。Boundingbox的寬高是相對於影象寬高歸一化後得到的,Bounding box的中心位置座標是相對於某一個網格的位置座標進行過歸一化,因此x,y,w,h均介於0到1之間。

    在設計Loss函式時,有兩個主要的問題:1.對於最後一層長度為7*7*30長度預測結果,計算預測loss通常會選用平方和誤差。然而這種Loss函式的位置誤差和分類誤差是1:1的關係。2.整個圖有7*7個網格,大多數網格實際不包含物體(當物體的中心位於網格內才算包含物體),如果只計算Pr(Class_i),很多網格的分類概率為0,網格loss呈現出稀疏矩陣的特性,使得Loss收斂效果變差,模型不穩定。為了解決上述問題,作者採用了一系列方案:

    1.增加bounding box座標預測的loss權重,降低bounding box分類的loss權重。座標預測和分類預測的權重分別是λcoord=5,λnoobj=0.5.

    2.平方和誤差對於大和小的bounding box的權重是相同的,作者為了降低不同大小bounding box寬高預測的方差,採用了平方根形式計算寬高預測loss,即sqrt(w)和sqrt(h)。

    訓練Loss組成形式較為複雜,這裡不作列舉,如有興趣可以參考作者原文慢慢理解體會。

5.1.3 測試

    作者選用PASAL VOC影象測試訓練得到的YOLO網路,每幅圖會預測得到98個(7*7*2)個bouding box及相應的類概率。通常一個cell可以直接預測出一個物體對應的bounding box,但是對於某些尺寸較大或靠近影象邊界的物體,需要多個網格預測的結果通過非極大抑制處理生成。雖然YOLO對於非極大抑制的依賴不及R-CNN和DPM,但非極大抑制確實可以將mAP提高2到3個點。

 5.2 方法對比

    作者將YOLO目標檢測與識別方法與其他幾種經典方案進行比較可知:

    DPM(Deformable parts models): DPM是一種基於滑窗方式的目標檢測方法,基本流程包括幾個獨立的環節:特徵提取,區域劃分,基於高分值區域預測bounding box。YOLO採用端到端的訓練方式,將特徵提取、候選框預測,非極大抑制及目標識別連線在一起,實現了更快更準的檢測模型。

    R-CNN:R-CNN方案分需要先用SeletiveSearch方法提取proposal,然後用CNN進行特徵提取,最後用SVM訓練分類器。如此方案,誠繁瑣也!YOLO精髓思想與其類似,但是通過共享卷積特徵的方式提取proposal和目標識別。另外,YOLO用網格對proposal進行空間約束,避免在一些區域重複提取Proposal,相較於SeletiveSearch提取2000個proposal進行R-CNN訓練,YOLO只需要提取98個proposal,這樣訓練和測試速度怎能不快?

    Fast-R-CNN、Faster-R-CNN、Fast-DPM: Fast-R-CNN和Faster-R-CNN分別替換了SVMs訓練和SelectiveSeach提取proposal的方式,在一定程度上加速了訓練和測試速度,但其速度依然無法和YOLO相比。同理,將DPM優化在GPU上實現也無出YOLO之右。

5.3 實驗

5.3.1 實時檢測識別系統對比

5.3.2 VOC2007準確率比較

5.3.3 Fast-R-CNN和YOLO錯誤分析

    如圖所示,不同區域分別表示不同的指標:

Correct:正確檢測和識別的比例,即分類正確且IOU>0.5

Localization:分類正確,但0.1<IOU<0.5

Similar:類別相似,IOU>0.1

Other:分類錯誤,IOU>0.1

Background: 對於任何目標IOU<0.1

    可以看出,YOLO在定位目標位置時準確度不及Fast-R-CNN。YOLO的error中,目標定位錯誤佔據的比例最大,比Fast-R-CNN高出了10個點。但是,YOLO在定位識別背景時準確率更高,可以看出Fast-R-CNN假陽性很高(Background=13.6%,即認為某個框是目標,但是實際裡面不含任何物體)。

5.3.4 VOC2012準確率比較

    由於YOLO在目標檢測和識別是處理背景部分優勢更明顯,因此作者設計了Fast-R-CNN+YOLO檢測識別模式,即先用R-CNN提取得到一組bounding box,然後用YOLO處理影象也得到一組bounding box。對比這兩組bounding box是否基本一致,如果一致就用YOLO計算得到的概率對目標分類,最終的bouding box的區域選取二者的相交區域。Fast-R-CNN的最高準確率可以達到71.8%,採用Fast-R-CNN+YOLO可以將準確率提升至75.0%。這種準確率的提升是基於YOLO在測試端出錯的情況不同於Fast-R-CNN。雖然Fast-R-CNN_YOLO提升了準確率,但是相應的檢測識別速度大大降低,因此導致其無法實時檢測。

    使用VOC2012測試不同演算法的mean Average Precision,YOLO的mAP=57.9%,該數值與基於VGG16的RCNN檢測演算法準確率相當。對於不同大小影象的測試效果進行研究,作者發現:YOLO在檢測小目標時準確率比R-CNN低大約8~10%,在檢測大目標是準確率高於R-CNN。採用Fast-R-CNN+YOLO的方式準確率最高,比Fast-R-CNN的準確率高了2.3%。

5.4 總結

    YOLO是一種支援端到端訓練和測試的卷積神經網路,在保證一定準確率的前提下能影象中多目標的檢測與識別。

相關推薦

YOLO——基於迴歸目標檢測演算法

YOLO: You Only Look Once:Unified, Real-Time Object Detection     這篇論文的內容並不多,核心思想也比較簡單,下面相當於是對論文的翻譯!     YOLO是一個可以一次性預測多個Box位置和類別的卷積神經網

基於深度學習的目標檢測演算法綜述(一)(截止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等經

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

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

Yolo-lite:實時的適用於移動裝置的目標檢測演算法(比ssd和mobilenet更快)

YOLO-LITE: A Real-Time Object Detection Algorithm Optimized for Non-GPU Computers 論文:Yolo-lite paper 專案:Yolo-lite 摘要:   作者提出了一種可以應用於行動式裝置中執行的

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

想了解深度學習的小夥伴們,看一下! 以後自己學深度學習了,再來看此貼! 只能發一個連結了: 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. 解決方案。這部分論文對物體檢

目標檢測演算法另一分支的發展(one stage檢測演算法):YOLO、SSD、YOLOv2/YOLO 9000、YOLOv3

目標檢測可以理解為是物體識別和物體定位的綜合,不僅僅要識別出物體屬於哪個分類,更重要的是得到物體在圖片中的具體位置。 目前的目標檢測演算法分為兩類: 一類是two-stage,two-stage檢測演算法將檢測問題劃分為兩個階段,首先產生候選區域(region proposals),然後

理解yolo系列目標檢測演算法

在計算機視覺任務中,如果說做的最成熟的是影象識別領域,那麼緊隨其後的應該就是目標檢測了。筆者接觸目標檢測也有一段時間了,用mobilenet_ssd演算法做過手機端的實時目標檢測,也用faster-rcnn做過伺服器端的二維碼檢測,儘管一直都知道yolo的效果也

常用目標檢測演算法:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

一、目標檢測常見演算法         object detection,就是在給定的圖片中精確找到物體所在位置,並標註出物體的類別。所以,object detection要解決的問題就是物體在哪裡以及是什麼的整個流程問題。

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

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

深度學習(四)——目標檢測演算法YOLO的訓練和檢測過程的基本思路介紹

      基礎知識掌握情況決定研究的高度,我們剛開始接觸深度學習時,一般都是看到別人的概括,這個方法很好能讓我們快速上手,但是也有一個很大的缺點, 知識理解的不透徹,導致我們對演算法優化時一頭霧水。我也是抱著知識總結的思想開始自己的深度學習知識精髓的探索,也希望能從中幫助到

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

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

在iOS上實現YOLO目標檢測演算法

YOLOv2簡介 yolov2的輸入為416x416,然後通過一些列的卷積、BN、Pooling操作最後到13x13x125的feature map大小。其中13x13對應原圖的13x13網格,如下圖所示。 125來自5x(5+20),表示每一個

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

轉自: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

論文 | 基於CNN的目標檢測演算法

近十年來,多目標檢測的進展主要的是基於SIFT和HOG。但當在觀察PASCAL VOC object detection的比賽結果時發現,比賽結果在2010-2012年之間進展緩慢。隨著CNN(卷積神經網路)在ImageNet(影象識別比賽)上大獲成功,本文作者考慮是否能將CNN在影象識別比賽中的結果應用到目

【計算機視覺】基於Shading Model(對光照變化一定不變性)的運動目標檢測演算法

光照模型(Shading Model)在很多論文中得到了廣泛的應用,如robust and illumination invariant change detection based on linear dependence for surveillance applic