YOLO v2 檢測原理

2021-08-23 12:21:58 字數 3062 閱讀 3560

v2版本的優化目標:改善召回率,提公升定位精度,保證分類準確度。

yolov2相比yolov1的改進:

v2在每乙個卷積之後增加了bn層,提高了網路訓練的速度,加快了收斂,消除了對其他正則化的依賴,且正則化效果更好,使調參更簡單,即使去掉dropout層也不會產生過擬合。

v1先使用224×224的解析度在imagenet上fine tune,而後為了提高定位精度,更改解析度為448×448後,在voc2007上繼續訓練,這在一定程度上干擾了fine tune的網路,需要重新調整引數適應新的解析度。

v2直接使用448×448的解析度在imagenet上fine tune 10個epoch,一開始就使用了更高的解析度。

anchor boxes其實就是有可能存在物體的候選區域,這裡的anchor boxes其實是yolov2從fast-rcnn系列檢測演算法借鑑來的。在fast-rcnn中,先通過區域建議網路(rpn,僅含卷積層,不含全連線層)**出潛在含物體的anchor boxes(候選區域)的偏移(注意是偏移而不是座標)和置信度,再從這些挑出的anchor boxes中去檢測物體。

作者在v2中發現自己在v1中吐槽過的rpn步驟效果還是蠻不錯的,並且通過**boxes的偏移量而不是座標值可以簡化問題,使網路更容易訓練。

v2中去掉了全連線層,使用卷積來**anchor boxes,並且去掉了v1網路中的乙個池化層,以提高卷積輸出的解析度。

v2網路的輸入解析度更改為416×416而不是448×448,這樣做是為了下取樣32倍之後最終的得到的特徵圖大小是奇數×奇數(416下取樣32是13,448下取樣32是14),這樣13×13的特徵圖有中心單元格,這個技巧一定程度上提公升了檢測效率。這13×13的特徵圖類似於v1中的7×7的分割區域,13×13中的每個畫素點負責**9個anchor boxes(候選區域),這樣在v2中每張上最多可以有13×13×9=1521個候選boxes,在v1中這個值是7×7×2=98個boxes。

採用anchor box讓yolo的精確度稍微下降,但是增加了在單張上目標的檢測數量(可超過一千個),也提高了召回率(由81%提公升到88%)。

dimension clusters(維度聚類),yolo v2中的這個改進是關於初始anchor boxes的大小和數量的。之前使用anchor box的系統都是手動設定初始box的大小的,v2中作者使用k-means聚類的方法在訓練集的物體邊框資料集(注意不是影象本身,而是邊框的資料)上得到了不同數量個box,並作了對比實驗,聚類的box多了,會導致模型的計算量增大,錯誤率公升高,box少了會導致召回率降低。

經過實驗,作者確定在他的訓練資料集上聚類數量是5的時候是乙個準確率和召回率的平衡值。

總之,作者在維度聚類這個點上優化了anchor boxes的賦值方式,包括數量和box大小,通過在訓練資料上的物體的邊框資料集上經過5個分類的k-means的聚類,得到5個初始anchor boxes的大小。

所以咱們訓練的時候,最好也根據自己的訓練集的特點,生成自己的anchor boxes資料,作者的資料是 anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52。

經典的fast-rcnn演算法中對anchor boxes位置的**是通過偏移量定義的,作者認為這種計算方式是不受約束的,需要訓練很長時間才能穩定**到可感知的偏移,並且最大的弊端是導致模型的不穩定,特別是在前幾輪迭代過程中。

yolov2不去**boxes的偏移,而是採用跟yolov1中類似的方式,**boxes相對於網格單元位置的座標,並通過邏輯啟用函式將座標值約束在[0,1]。

通過這個「相對座標」到「絕對座標」的優化,yolov2訓練更容易,引數更容易學習,網路更穩定。

v1的輸入是448×448,v2中加入了anchor boxes,輸入尺寸變成了416×416(為了獲得奇數×奇數特徵圖),yolo v2作者同時希望v2版本在不同尺寸輸入上都可以穩健檢測,所以作者在訓練過程上進行了優化。

不同於固定輸入網路的尺寸的方法,作者在訓練過程中每經過10個epoch之後就會隨機選擇新的尺寸。yolo網路尺寸更改使用的引數為32,每次把影象擴大或縮小32的倍數大小,最小的尺寸為320 * 320,最大的尺寸為608 * 608。接著按照輸入尺寸調整網路進行訓練。

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

以往的網路框架多是以vgg網路為基礎提取特徵的,vgg網路的複雜度有些冗餘,運算量很大,224 * 224的進行一次前向傳播,其卷積層就需要多達306.9億次浮點數運算。

yolo v2使用了新的分類網路,是在googlenet網路基礎上改進的,比vgg-16更快,一次前向傳播僅需85.2億次運算,精度略低於vgg,使用了較多的3×3卷積,在每一次maxpool層之後都把特徵通道數擴充至兩倍,網路最後使用的是平均池化,最終的網路結構包含了19個卷積層,5個最大池化層,乙個平均池化層,特徵提取網路(命名為darknet-19)具體結構如下:

作者在darknet-19網路上訓練了224×224和448×448解析度的imagenet資料,達到分類top-1準確率76.5%,top-5準確率93.3%。

v2的訓練網路去掉了darknet-19的最後乙個卷積層,增加了3個卷積核大小是3×3的卷積層,特徵維度是1024,並且在每乙個上述卷積層後面跟乙個1 * 1的卷積層,輸出維度是預先定義的檢測的物體的類別數量。

對於voc資料集,從**出的每個網格單元(13×13,共169個網格)中**5個boxes,每個box包含5個座標值和20個類別,所以每個網格總共是5 * (5+20)= 125個輸出維度,對於整個的輸出是13×13×125維的tensor。同時也新增了轉移層(passthrough layer ),從最後那個3 * 3 * 512的卷積層連到倒數第二層,使模型有了細粒度特徵。

目標檢測 YOLOv2總結

以下為筆記相關鏈結 推薦使用鏈結閱讀 yolov2個人總結 01.yolo v2 題目 yolo 9000 better,faster,stronger 作者 joseph redmon yolo系列的主要作者 四個問題 要解決什麼問題?在yolov1的基礎上解決小目標檢測精度 定位資訊錯誤及綜合性...

YOLOV2演算法筆記

yolov2演算法詳解部落格 一 better 1.對每一層都做了歸一化 2.先利用分類資料對網路進行訓練,然後遷移學習。3.不再和yolov1那樣直接 bounding box,yolov2中開始利用ancher box,4.dimension clusters,利用k means聚類的方式,發現...

Caffe(12) 實現YOLOv2目標檢測

darknet轉caffe中有很多潛在的問題,在yolov1 v2 v3幾個網路中有一些特殊的層。要在caffe中跑yolo,就得在caffe中原始碼實現這些層。這些層的caffe原始碼實現可以在網上找到很多。yolo特殊層的caffe框架實現 yolov1 detection層 原始碼實現 yol...