讀yolo目標識別算法有感

圖像識別算法是計算機視覺的基礎算法,例如VGG,GoogLeNet,ResNet等,這類算法主要是判斷圖片中目標的種類。目標檢測算法和圖像識別算法類似,但是目標檢測算法不僅要識別出圖像中的物體,還需要獲得圖像中物體的大小和位置,使用座標的形式表示出來。而對於目標檢測算法來說,它的輸出值更像是這樣:

 

其中:

  • pc 爲1時代表有物體被檢測到,反之,沒有物體被檢測到,因此其他的輸出值可以被忽略
  • bx 目標的x座標值 爲目標的左上角到物體中心的相對座標
  • by 目標的y座標值 爲目標的右下角到物體中心的相對座標值
  • bh 區域框bounding box的高
  • bw 區域框bounding box的寬

c1、c2、c3是目標屬於分別表示三種物體出現的的概率,基於此,我們可以使用滑動窗口對整張圖片進行處理來定位目標。就像是用一個放大鏡去圖像的每個區域去查找是否包含目標。

我們會使用滑動窗口時,許多計算都是重複性計算,我們可以使用卷積神經網絡的思想。可以使用卷積計算代替滑動窗口。這裏的窗口是固定的,如果需要檢測不同大小的物體,需要不同大小的很多的窗口,這也就是是YOLO算法需要解決的重要問題。至於目標檢測的用處,現在最大的場景就是無人駕駛,在無人駕駛中,需要實時檢測出途中的人、車、物體、信號燈、交通標線等,再通過融合技術將各類傳感器獲得的數據提供給控制中心進行決策。而目標檢測相當於無人駕駛系統的眼睛。

下面說說YOLO的思想。

YOLO是You Only Look Once的縮寫。這也是爲了特別突出YOLO區別於兩階段算法的特點,從名字就可以感受到,YOLO算法速度很快,事實上也是如此。可以看出在同樣的設備上,YOLO可以達到45幀每秒的速度。在YOLO中,目標圖片被劃分爲Grid CellAnchor Box使得YOLO可以檢測出同一個grid cell中包含多個物體的情況。Anchor box爲標籤增加了更多的緯度。如果我們可以對每個物體對應一個anchor box來標識。爲了解釋方便,這裏我們只使用兩個anchor box。介紹了YOLO中的一些基本概念後,我們先看看YOLO是如何進行目標檢測的。假設我們已經訓練出了YOLO的模型:第一輸入待檢測的圖片,對圖片進行一系列的處理,使得圖片的規格符合數據集的要求。第二,通過模型計算獲得預測輸出,假如使用的是19*19的grid cell數目,5個anchor box, 80個分類,於是輸出的緯度爲(1,19,19,5,80+5)。第三,對於輸出值進行處理,過濾掉得分低的值,輸出值中的Pc 在原論文中被稱爲confidence 而C被稱爲 probs,得分爲confidence * probs,可以看出,所謂的得分就是含有目標的概率值。第四,同一個物體可能會有多個grid cell預測到,那麼同一個物體就會有多個bouding box,我們需要留下具有最高pc值的預測值,將其他的預測值過濾掉。如何判斷多個bounding box預測的是同一個物體呢,這裏就需要使用IOU算法。最後得到的值就是圖片中被預測的目標的類型和位置值,再經過一系列計算和轉換變成圖片上的真實座標值,使用工具畫到原圖上。

yolo v1的缺點在於bbox的定位不準,精度低,對於小物體的檢測效果不好,yolo v1對於小物體的檢測效果較差,yolo v2借鑑了Faster-RCNN和SSD的思想,在不同層次的特徵圖上獲取不同分辨率的特徵。

Yolov2有的改進:

  • 移除Dropout
  • 使用了更高分辨率的分類器.
  • 學習faster rcnn一類的算法,引入了anchor。
  • 作者也丟棄了之前在yolo v1中使用全連接來進行預測,因爲全連接層參數較多,也會丟失一些空間信息,採用卷積網絡來替換,這樣yolo v2是一個全卷積的網絡結構。
  • 使用直接的定位預測。
  • 使用細粒度特徵。
  • 使用了多尺度的訓練。

Faster

很多的detection frameworks把vgg作爲backbone來提取突破特徵,但是vgg的效果一般,而且參數較多,作者爲yolo v2設計了一個新的backbone叫做Darknet-19(有19個卷積層)。Darknet-19在imagenet上獲得了比vgg更好的top-5準確率。

Stronger

這一部分主要講的是如何利用wordtree聯合訓練分類和檢測任務,使得yolo v2可以檢測training data中沒有出現過的類別,

Yolo v3

yolo v3也就是把一些視覺這塊最新的思想融入了yolo的框架之中,作者也在論文中表示最近都在玩推特,但是yolo v3的效果確實非常的好,接下來就看看作者在yolo v3上做了哪些改進。

3.1.bbox預測:

yolov3對每個bounding box通過邏輯迴歸預測一個物體的得分,如果預測的這個bounding box與真實的邊框值大部分重合且比其他所有預測的要好,那麼這個值就爲1.如果overlap沒有達到一個閾值(yolov3中這裏設定的閾值是0.5),那麼這個預測的bounding box將會被忽略,也就是會顯示成沒有損失值。

3.2.多標籤分類:

在yolo v2中對於每個bbox的類別預測使用的是softmax,但在yolo v3中使用了sigmoid,主要是爲了應對多標籤分類的問題。

3.3.多尺度預測:

這裏借鑑了SSD和FPN的思想,提取多個feature map並且利用低層的高分辨率信息和高層的語義信心融合後進行預測。

3.4.新的back-bone網絡:

新設計了一個網絡Darknet53,該網絡學習了resnet的residual block,並且採用了SSD的思想輸出多個feature map,規模也比yolo v2的Darknet13大。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章