1. 程式人生 > >YOLOv2 論文筆記

YOLOv2 論文筆記

最近部落格下很多人請求Caffe 程式碼,受人所託,已經不再提供,且關閉本文評論,望請見諒

概述

時隔一年,YOLO(You Only Look Once: Unified, Real-Time Object Detection)從v1版本進化到了v2版本,作者在darknet主頁先行一步放出原始碼,論文在我們等候之下終於在12月25日釋出出來,本文對論文重要部分進行了翻譯理解工作,不一定完全對,如有疑問,歡迎討論。博主如果有新的理解,也會更新文章。

新的YOLO版本論文全名叫“YOLO9000: Better, Faster, Stronger”,主要有兩個大方面的改進:

第一,作者使用了一系列的方法對原來的YOLO多目標檢測框架進行了改進,在保持原有速度的優勢之下,精度上得以提升

。VOC 2007資料集測試,67FPS下mAP達到76.8%,40FPS下mAP達到78.6%,基本上可以與Faster R-CNN和SSD一戰。這一部分是本文主要關心的地方。

第二,作者提出了一種目標分類與檢測的聯合訓練方法,通過這種方法,YOLO9000可以同時在COCO和ImageNet資料集中進行訓練,訓練後的模型可以實現多達9000種物體的實時檢測。這一方面本文暫時不涉及,待後面有時間再補充。

回顧YOLOv1

YOLOv2始終是在v1版本上作出的改進,我們先簡單回顧YOLOv1的檢測步驟:

這裡寫圖片描述

(1) 給個一個輸入影象,首先將影象劃分成7 * 7的網格。

(2) 對於每個網格,每個網格預測2個bouding box(每個box包含5個預測量)以及20個類別概率,總共輸出7×7×(2*5+20)=1470個tensor

(3) 根據上一步可以預測出7 * 7 * 2 = 98個目標視窗,然後根據閾值去除可能性比較低的目標視窗,再由NMS去除冗餘視窗即可。

YOLOv1使用了end-to-end的迴歸方法,沒有region proposal步驟,直接回歸便完成了位置和類別的判定。種種原因使得YOLOv1在目標定位上不那麼精準,直接導致YOLO的檢測精度並不是很高。

YOLOv2精度的改進(Better)

先來一個總覽圖,看看它到底用了多少技巧,以及這些技巧起了多少作用:

這裡寫圖片描述

Batch Normalization

CNN在訓練過程中網路每層輸入的分佈一直在改變, 會使訓練過程難度加大,但可以通過normalize每層的輸入解決這個問題。新的YOLO網路在每一個卷積層後新增batch normalization,通過這一方法,mAP獲得了2%的提升。batch normalization 也有助於規範化模型,可以在捨棄dropout優化後依然不會過擬合。

High Resolution Classifier

目前的目標檢測方法中,基本上都會使用ImageNet預訓練過的模型(classifier)來提取特徵,如果用的是AlexNet網路,那麼輸入圖片會被resize到不足256 * 256,導致解析度不夠高,給檢測帶來困難。為此,新的YOLO網路把解析度直接提升到了448 * 448,這也意味之原有的網路模型必須進行某種調整以適應新的解析度輸入。

對於YOLOv2,作者首先對分類網路(自定義的darknet)進行了fine tune,解析度改成448 * 448,在ImageNet資料集上訓練10輪(10 epochs),訓練後的網路就可以適應高解析度的輸入了。然後,作者對檢測網路部分(也就是後半部分)也進行fine tune。這樣通過提升輸入的解析度,mAP獲得了4%的提升。

Convolutional With Anchor Boxes

之前的YOLO利用全連線層的資料完成邊框的預測,導致丟失較多的空間資訊,定位不準。作者在這一版本中借鑑了Faster R-CNN中的anchor思想,回顧一下,anchor是RNP網路中的一個關鍵步驟,說的是在卷積特徵圖上進行滑窗操作,每一箇中心可以預測9種不同大小的建議框。看到YOLOv2的這一借鑑,我只能說SSD的作者是有先見之明的。

這裡寫圖片描述

為了引入anchor boxes來預測bounding boxes,作者在網路中果斷去掉了全連線層。剩下的具體怎麼操作呢?首先,作者去掉了後面的一個池化層以確保輸出的卷積特徵圖有更高的解析度。然後,通過縮減網路,讓圖片輸入解析度為416 * 416,這一步的目的是為了讓後面產生的卷積特徵圖寬高都為奇數,這樣就可以產生一個center cell。作者觀察到,大物體通常佔據了影象的中間位置, 就可以只用中心的一個cell來預測這些物體的位置,否則就要用中間的4個cell來進行預測,這個技巧可稍稍提升效率。最後,YOLOv2使用了卷積層降取樣(factor為32),使得輸入卷積網路的416 * 416圖片最終得到13 * 13的卷積特徵圖(416/32=13)。

加入了anchor boxes後,可以預料到的結果是召回率上升,準確率下降。我們來計算一下,假設每個cell預測9個建議框,那麼總共會預測13 * 13 * 9 = 1521個boxes,而之前的網路僅僅預測7 * 7 * 2 = 98個boxes。具體資料為:沒有anchor boxes,模型recall為81%,mAP為69.5%;加入anchor boxes,模型recall為88%,mAP為69.2%。這樣看來,準確率只有小幅度的下降,而召回率則提升了7%,說明可以通過進一步的工作來加強準確率,的確有改進空間。

Dimension Clusters(維度聚類)

作者在使用anchor的時候遇到了兩個問題,第一個是anchor boxes的寬高維度往往是精選的先驗框(hand-picked priors),雖說在訓練過程中網路也會學習調整boxes的寬高維度,最終得到準確的bounding boxes。但是,如果一開始就選擇了更好的、更有代表性的先驗boxes維度,那麼網路就更容易學到準確的預測位置。

和以前的精選boxes維度不同,作者使用了K-means聚類方法類訓練bounding boxes,可以自動找到更好的boxes寬高維度。傳統的K-means聚類方法使用的是歐氏距離函式,也就意味著較大的boxes會比較小的boxes產生更多的error,聚類結果可能會偏離。為此,作者採用的評判標準是IOU得分(也就是boxes之間的交集除以並集),這樣的話,error就和box的尺度無關了,最終的距離函式為:

這裡寫圖片描述

作者通過改進的K-means對訓練集中的boxes進行了聚類,判別標準是平均IOU得分,聚類結果如下圖:

這裡寫圖片描述

可以看到,平衡複雜度和IOU之後,最終得到k值為5,意味著作者選擇了5種大小的box維度來進行定位預測,這與手動精選的box維度不同。結果中扁長的框較少,而瘦高的框更多(這符合行人的特徵),這種結論如不通過聚類實驗恐怕是發現不了的。

當然,作者也做了實驗來對比兩種策略的優劣,如下圖,使用聚類方法,僅僅5種boxes的召回率就和Faster R-CNN的9種相當。說明K-means方法的引入使得生成的boxes更具有代表性,為後面的檢測任務提供了便利。

這裡寫圖片描述

Direct location prediction(直接位置預測)

那麼,作者在使用anchor boxes時發現的第二個問題就是:模型不穩定,尤其是在早期迭代的時候。大部分的不穩定現象出現在預測box的 (x,y) 座標上了。在區域建議網路中,預測 (x,y) 以及 txty 使用的是如下公式:

這裡寫圖片描述

後來修改博文時,發現這個公式有誤,作者應該是把加號寫成了減號。理由如下,anchor的預測公式來自於Faster-RCNN,我們來看看人家是怎麼寫的:

這裡寫圖片描述

公式中,符號的含義解釋一下:x 是座標預測值,xa 是anchor座標(預設固定值),x 是座標真實值(標註資訊),其他變數 ywh 以此類推,t 變數是偏移量。然後把前兩個公式變形,就可以得到正確的公式:

x=(txwa)+xay=(tywa)+ya
這個公式的理解為:當預測 tx=1,就會把box向右邊移動一定距離(具體為anchor box的寬度),預測 tx=1,就會把box向左邊移動相同的距離。

這個公式沒有任何限制,使得無論在什麼位置進行預測,任何anchor boxes可以在影象中任意一點結束(我的理解是,tx 沒有數值限定,可能會出現anchor檢測很遠的目標box的情況,效率比較低。正確做法應該是每一個anchor只負責檢測周圍正負一個單位以內的目標box)。模型隨機初始化後,需要花很長一段時間才能穩定預測敏感的物體位置。

在此,作者就沒有采用預測直接的offset的方法,而使用了預測相對於grid cell的座標位置的辦法,作者又把ground truth限制在了0到1之間,利用logistic迴歸函式來進行這一限制。

這裡寫圖片描述

現在,神經網路在特徵圖(13 *13 )的每個cell上預測5個bounding boxes(聚類得出的值),同時每一個bounding box預測5個坐值,分別為 tx,ty,tw,th,to ,其中前四個是座標,to是置信度。如果這個cell距離影象左上角的邊距為 (cx,cy) 以及該cell對應box(bounding box prior)的長和寬分別為 (pw,ph),那麼預測值可以表示為:

這裡寫圖片描述

這幾個公式參考上面Faster-RCNN和YOLOv1的公式以及下圖就比較容易理解。tx,ty 經sigmod函式處理過,取值限定在了0~1,實際意義就是使anchor只負責周圍的box,有利於提升效率和網路收斂。σ 函式的意義沒有給,但估計是把歸一化值轉化為圖中真實值,使用 e 的冪函式是因為前面做了 ln 計算,因此,σ(tx)是bounding box的中心相對柵格左上角的橫座標,σ(ty)是縱座標,σ(to)是bounding box的confidence score。

定位預測值被歸一化後,引數就更容易得到學習,模型就更穩定。作者使用Dimension Clusters和Direct location prediction這兩項anchor boxes改進方法,mAP獲得了5%的提升。

這裡寫圖片描述

Fine-Grained Features(細粒度特徵)

上述網路上的修改使YOLO最終在13 * 13的特徵圖上進行預測,雖然這足以勝任大尺度物體的檢測,但是用上細粒度特徵的話,這可能對小尺度的物體檢測有幫助。Faser R-CNN和SSD都在不同層次的特徵圖上產生區域建議(SSD直接就可看得出來這一點),獲得了多尺度的適應性。這裡使用了一種不同的方法,簡單添加了一個轉移層( passthrough layer),這一層要把淺層特徵圖(解析度為26 * 26,是底層解析度4倍)連線到深層特徵圖。

這裡寫圖片描述

這個轉移層也就是把高低兩種解析度的特徵圖做了一次連結,連線方式是疊加特徵到不同的通道而不是空間位置,類似於Resnet中的identity mappings。這個方法把26 * 26 * 512的特徵圖連線到了13 * 13 * 2048的特徵圖,這個特徵圖與原來的特徵相連線。YOLO的檢測器使用的就是經過擴張的特徵圖,它可以擁有更好的細粒度特徵,使得模型的效能獲得了1%的提升。(這段理解的也不是很好,要看到網路結構圖才能清楚)

補充:關於passthrough layer,具體來說就是特徵重排(不涉及到引數學習),前面26 * 26 * 512的特徵圖使用按行和按列隔行取樣的方法,就可以得到4個新的特徵圖,維度都是13 * 13 * 512,然後做concat操作,得到13 * 13 * 2048的特徵圖,將其拼接到後面的層,相當於做了一次特徵融合,有利於檢測小目標。

Multi-Scale Training

原來的YOLO網路使用固定的448 * 448的圖片作為輸入,現在加入anchor boxes後,輸入變成了416 * 416。目前的網路只用到了卷積層和池化層,那麼就可以進行動態調整(意思是可檢測任意大小圖片)。作者希望YOLOv2具有不同尺寸圖片的魯棒性,因此在訓練的時候也考慮了這一點。

不同於固定輸入網路的圖片尺寸的方法,作者在幾次迭代後就會微調網路。沒經過10次訓練(10 epoch),就會隨機選擇新的圖片尺寸。YOLO網路使用的降取樣引數為32,那麼就使用32的倍數進行尺度池化{320,352,…,608}。最終最小的尺寸為320 * 320,最大的尺寸為608 * 608。接著按照輸入尺寸調整網路進行訓練。

這種機制使得網路可以更好地預測不同尺寸的圖片,意味著同一個網路可以進行不同解析度的檢測任務,在小尺寸圖片上YOLOv2執行更快,在速度和精度上達到了平衡。

在小尺寸圖片檢測中,YOLOv2成績很好,輸入為228 * 228的時候,幀率達到90FPS,mAP幾乎和Faster R-CNN的水準相同。使得其在低效能GPU、高幀率視訊、多路視訊場景中更加適用。

在大尺寸圖片檢測中,YOLOv2達到了先進水平,VOC2007 上mAP為78.6%,仍然高於平均水準,下圖是YOLOv2和其他網路的成績對比:

這裡寫圖片描述
這裡寫圖片描述

Further Experiments

作者在VOC2012上對YOLOv2進行訓練,下圖是和其他方法的對比。YOLOv2精度達到了73.4%,並且速度更快。同時YOLOV2也在COCO上做了測試(IOU=0.5),也和Faster R-CNN、SSD作了成績對比。總的來說,比上不足,比下有餘。

這裡寫圖片描述

相關推薦

YOLOv2 論文筆記

(最近部落格下很多人請求Caffe 程式碼,受人所託,已經不再提供,且關閉本文評論,望請見諒) 概述 時隔一年,YOLO(You Only Look Once: Unified, Real-Time Object Detection)從v1版本進化到了v

論文筆記(1)--(YOLOv2)YOLO9000:Better,Faster,Stronger

論文連結:https://arxiv.org/abs/1612.08242 主要包括三個部分:Better,Faster,Stronger,其中前面兩部分基本上講的是YOLO v2,最後一部分講的是YOLO9000。 Better 這部分細節很多,要詳細瞭解的話還是需要

YOLOv2--論文學習筆記(演算法詳解)

主要包括三個部分:Better,Faster,Stronger,其中前面兩部分基本上講的是YOLO v2,最後一部分講的是YOLO9000。 Better 這部分細節很多,要詳細瞭解的話還是需要結合原始碼來看。 本篇論文是YOLO作者為了改進原有的YOLO演

論文筆記:目標追蹤-CVPR2014-Adaptive Color Attributes for Real-time Visual Tracking

exploit orm dom ons tail red 最好 早期 形式化 基於自適應顏色屬性的目標追蹤 Adaptive Color Attributes for Real-Time Visual Tracking 基於自適應顏色屬性的實時視覺追蹤 3月講的第一

論文筆記之 SST: Single-Stream Temporal Action Proposals

ron 我們 裁剪 只需要 lock proposal 數據 function 性能 SST: Single-Stream Temporal Action Proposals 2017-06-11 14:28:00   本文提出一種 時間維度上的 proposal

Selective Search for Object Recognition 論文筆記【圖片目標分割】

line 單個 介紹 images 分層 什麽 但是 如果 抽樣 這篇筆記,僅僅是對選擇性算法介紹一下原理性知識,不對公式進行推倒. 前言: 這篇論文介紹的是,如果快速的找到的可能是物體目標的區域,不像使用傳統的滑動窗口來暴力進行區域識別.這裏是使用算法從多個維度對找

Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波

structure 分布 的確 tlab bolt 期望 有一個 尋找 mean Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波 自己平時看了一些論文,但老感覺看完過後就會慢慢的淡忘,某一天重新拾起來的時候又好像沒有

Semi-supervised Segmentation of Optic Cup in Retinal Fundus Images Using Variational Autoencoder 論文筆記

str 很好 流程 Coding 測試 eat www tin nal MICCAI 2017年論文 Overview: 視杯視盤精確分割後,就可以計算杯盤比了,杯盤比是青光眼疾病的主要manifestation。以往的方法往往采用監督學習的方法,這樣需要大量的精確像素

論文筆記之:Collaborative Deep Reinforcement Learning for Joint Object Search

region format es2017 join sid col str bottom respond Collaborative Deep Reinforcement Learning for Joint Object Search CVPR 2017 Motiva

論文筆記-Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

mach default rap lin -s rnn alias for wrap 針對機器翻譯,提出 RNN encoder-decoder. encoder與decoder是兩個RNN,它們放在一起進行參數學習,最大化條件似然函數。 網絡結構: 註意輸入語句與

論文筆記-Sequence to Sequence Learning with Neural Networks

map tran between work down all 9.png ever onf 大體思想和RNN encoder-decoder是一樣的,只是用來LSTM來實現。 paper提到三個important point: 1)encoder和decoder的LSTM

論文筆記-Deep Interest Network for Click-Through Rate Prediction

圖片 res 興趣 log through deep pre 出發 amp 重點:認為不同的廣告會觸發用戶的興趣點不同導致user embedding隨之改變。 DIN網絡結構如下圖右邊 DIN的出發點:認為不同的廣告會觸發用戶的興趣點不同導致user embedd

論文筆記-DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

contain feature 比較 san date res 離散 edi post 針對交叉(高階)特征學習提出的DeepFM是一個end-to-end模型,不需要像wide&deep那樣在wide端人工構造特征。 網絡結構: sparse feature

論文筆記-Item2Vec- Neural Item Embedding for Collaborative Filtering

href resource 數據 per con doc 訂單 優化 div 將word2vec思想拓展到序列item的2vec方法並運用到推薦系統中,實質上可以認為是一種cf 在word2vec中,doc中的word是具有序列關系的,優化目標類似在max對數似然函數

論文筆記-Neural Machine Translation by Jointly Learning to Align and Translate

tps idt 個人理解 att date eight default con ati 提出attention機制,用於機器翻譯。 背景:基於RNN的機器翻譯 基本思路是首先對語言x進行編碼encoder,然後解碼decoder為語言y。encoder和decoder可

論文筆記-Wide & Deep Learning for Recommender Systems

wiki body pos ear recommend sys con 損失函數 wrapper 本文提出的W&D是針對rank環節的模型。 網絡結構: 本文提出的W&D是針對rank環節的模型。 網絡結構: wide是簡單的線性模型,但

論文筆記-Personal Recommendation Using Deep Recurrent Neural Networks in NetEase

use clas max onf 一位 url base 輸入 ont 思路:利用RNN對用戶瀏覽順序建模,利用FNN模擬CF,兩個網絡聯合學習 RNN網絡結構: 輸出層的state表示用戶瀏覽的某一頁面,可以看做是一個one-hot表示,state0到3是依次瀏覽的

論文筆記-Joint Deep Modeling of Users and Items Using Reviews for Recommendation

一個 solved default view http ati onf 評分 分享 基本思路:利用用戶和商品的評論構建CNN預測評分。 網絡結構: user review網絡與 item review網絡結構一致,僅就前者進行說明 從user review tex

論文筆記】T Test

nor thum pan n-1 統計學 for nes 其它 align 用來算兩組數的差別大小 只要是一種叫做p-value的 就是說假如你測定一個實驗的p-value是5%也就是說你有95%的信心確定這個實驗它是正確的在正規的實驗裏 只有當p-value小於5%的時候

論文筆記:Fast(er) RCNN

這也 物體檢測 因此 sele 疑惑 修正 width 輸入 重點 在 RCNN 初步試水取得成功後,研究人員又迅速跟進,針對 RCNN 中的幾點不足提出改進,接連推出了 fast-rcnn 和 faster-rcnn。關於這兩篇論文,網上相關的文章實在是多如牛毛,因此,本