1. 程式人生 > >深度學習之物體檢測——YOLO(一)_介紹

深度學習之物體檢測——YOLO(一)_介紹

##YOLO網路結構

YOLO把檢測問題看成是端到端的迴歸問題。把輸入圖片劃分成一個個的小格子,讓物體中心點所在的格子負責檢測到該物體。
YOLO採用的是GoogLeNet結構,但是用1*1和3*3的卷積層來替代GoogLeNet的inception層。網路結構如下:

這裡寫圖片描述

每個卷積層後面都會跟著leaky ReLu非線性層。第一個全連線層後面也跟著leaky ReLU非線性層。對於一張圖片,輸出的維度是7*7*30(YOLO為每個格子為每個格子預測一個概率分佈,並且預測2個box以及每個box的置信度):

這裡寫圖片描述

輸出的box是(x_center, y_center, width, height),x_center和y_center是相對於格子的位移並且用格子的長寬進行歸一化,width和height用448進行歸一化,所以這四個值的範圍是[0,1]。

訓練

卷積層預訓練

取YOLO的前20個卷積層,然後加上一個平均池化層和一個全連線層,在ImageNet 1000-class資料上進行訓練。作者講他訓練了大約一週的時間。

損失函式

YOLO會為每個格子預測多個box,但我們希望訓練時只有一個box為每個物體負責。責任box是和物體的真實box的IOU最大的box。
訓練誤差包含下面三種誤差:

  • 座標誤差:表示對物體負責的格子中的責任box和真實box標記之間的誤差

  • 置信度誤差:表示每個預測box的置信度和真實置信度之間的誤差。
    目標置信度的表示式如下:

    C^=Pr(Object)IOUtruthpred={0box
    box
    IOUtruthpredboxbox
    (1)

置信度不僅給出預測的box是否包含物體的資訊,而且還給出了預測的box的準確度。作者在文中提到大多數的格子中是不包含物體的,這些格子中的box置信度應該向0趨近,這個目標帶來的梯度有可能會比包含物體的格子帶來的梯度更大。所以在損失函式中增加box的座標預測損失,減少不包含物體的box的置信度預測損失,即在公式(2)中引入的係數λcoord=5λnoobj=0.5

  • 類別誤差:表示為責任格子預測的類別概率分佈和真實的概率分佈之間的誤差

誤差表示式

λcoordi=0S2j=0B1objij[(xix^i)2+(
yiy^i)2+(wiw^i)2+(hih^i)2]
+i=0S2j=0B1objij(CiC^i)2+λnoobji=0S2j=0B1noobjij(CiC^i)2+i=0S21objicclasses(pi(c)p^i(c))2
(2)

1obji表示是否為責任格子;1obj