1. 程式人生 > >YOLOv3 目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2018)

YOLOv3 目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2018)

論文名稱:《 YOLOv3: An Incremental Improvement 》

論文下載:https://pjreddie.com/media/files/papers/YOLOv3.pdf

論文程式碼:   https://github.com/pjreddie/darknet


一、演算法特點:

1、基本思想:

YOLO系演算法的思想都是,首先通過特徵提取網路對輸入影象提取特徵,得到一定大小的特徵圖(比如13*13),然後將輸入影象劃分網格成13*13個單元格,接著如果Ground Truth中某個目標的中心座標落在哪個單元格中,那麼就由該單元格來預測該目標,每個單元格都會預測固定數量的邊界框(v1中是2個,v2中是5個,v3中是3個),這幾個邊界框中只有和Ground Truth的IOU最大的邊界框才會被選定用來預測該目標。

預測得到的輸出特徵圖有兩個維度是提取到的特徵,其中一個維度是平面,比如13*13,還有一個維度是深度,比如B*(5+C)(v1中是(B*5+C)),其中B表示每個單元格預測的邊界框的數量,C表示邊界框的對應的類別數(對於VOC資料集是20),5表示4個座標資訊和1個邊界框置信得分(Objectness Score)。

YOLO v3的模型比之前複雜不少,在速度和精度上的提升也非常明顯(如圖1-1),同時可以通過改變模型的結構來權衡速度與精度:

 

1-1  YOLOv3 和其他演算法的效能對比

2、定位資訊預測:

   (1)初始化:

    YOLOv3繼續採用YOLO v2中的K-means聚類的方式來做Anchor Box的初始化,這種先驗知識對於邊界框的預測幫助很大,YOLOv3在COCO資料集上,按照輸入影象的尺寸為416*416,得到9種聚類結果:(10*13); (16*30); (33*23); (30*61); (62*45); (59*119); (116*90); (156*198); (373*326)。

(2)預測:

YOLOv3延續了YOLOv2的做法,採用公式(1-1),其中(tx,ty,tw,th)就是模型的預測輸出(網路學習目標),具體計算方式參看YOLOv2總結。(cx,cy) 是單元格的座標偏移量(以單元格邊長為單位),(pw,ph)是預設的Anchor Box的邊長,(bx,by,bw,bh)就是最終得到的預測出的邊界框的中心座標和寬高。

式(1-1)

3、類別資訊預測:

YOLOv3將之前版本的單標籤分類改進為多標籤分類,網路結構上將原來用於單標籤分類的Softmax分類器(Detection層的啟用函式,其前一層採用Linear作為啟用函式,其他卷積層採用LeakyRelu作為啟用函式,這一點和前兩版相同)換成用於多標籤分類的Logistic分類器。

a Softmax分類器效果                                                                            b Logistic分類器效果
1-2  Softmax 分類器( YOLOv2 )和 Logistic 分類器( YOLOv3 )示意圖:( a )、( b

YOLOv2網路中的Softmax分類器,認為一個目標只屬於一個類別,通過輸出Score大小,使得每個框分配到Score最大的一個類別。但在一些複雜場景下,一個目標可能屬於多個類(有重疊的類別標籤),因此YOLOv3用多個獨立的Logistic分類器替代Softmax層解決多標籤分類問題,且準確率不會下降。

在訓練過程中,使用二元交叉熵損失(Binary Cross-Entropy Loss)作為損失函式(Loss Function)來訓練類別預測(v1和v2均採用了基於平方和的損失函式)。

Logistic分類器主要用到Sigmoid函式,該函式可以將輸入約束在0到1的範圍內,當一張影象經過特徵提取後的某一邊界框類別置信度經過sigmoid函式約束後如果大於0.5,就表示該邊界框負責的目標屬於該類。

4、多尺度特徵融合(針對小目標):

低層的特徵語義資訊比較少,但是目標位置資訊準確;高層的特徵語義資訊比較豐富,但是目標位置資訊比較粗略。

1-2  YOLOv2 (上)和 YOLOv3 (下)中的特徵融合思想

YOLOv2網路結構中有一個特殊的轉換層(Passthrough Layer),假設最後提取的特徵圖的大小是13*13,轉換層的作用就是將前面的26*26的特徵圖和本層的13*13的特徵圖進行

堆積(擴充特徵維資料量),而後進行融合,再用融合後的特徵圖進行檢測。這麼做是為了加強演算法對小目標檢測的精確度。為達更好效果,YOLOv3將這一思想進行了加強和改進。

1-3  YOLOv3 的多尺度預測

YOLO v3採用(類似FPN)上取樣(Upsample)和融合做法,融合了3個尺度(13*13、26*26和52*52),在多個尺度的融合特徵圖上分別獨立做檢測,最終對於小目標的檢測效果提升明顯。(有些演算法採用多尺度特徵融合的方式,但是一般是採用融合後的單一特徵圖做預測,比如YOLOv2,FPN不一樣的地方在於其預測是在不同特徵層進行的。)

在YOLOv3中, Anchor Box由5個變為9個,其初始值依舊由K-means聚類演算法產生。每個尺度下分配3個Anchor Box,每個單元格預測3個Bounding Box(對應3個Anchor Box)。每個單元格輸出(1+4+C)*3個值(4個定位資訊、1個置信度得分和C個條件類別概率),這也是每個尺度下最終輸出的特徵張量的深度(Depth)。

雖然YOLO v3中每1個單元格預測3個邊界框,但因為YOLO v3採用了多尺度的特徵融合,所以邊界框的數量要比之前版本多很多(每個尺度下都需要預測相同數量的邊界框)。以輸入影象為416*416為例,YOLOv2中一張圖片需要預測13*13*5=845個邊界框,而YOLOv3中需要預測(13*13+26*26+52*52)*3=10647個邊界框。

  1-4  Residual 結構示意圖

YOLOv3一方面採用全卷積(YOLOv2中採用池化層做特徵圖的下采樣, v3中採用卷積層來實現),另一方面引入殘差(Residual)結構,如圖1-4。Res結構可以很好的控制梯度的傳播,避免出現梯度消失或者爆炸等不利於訓練的情形。這使得訓練深層網路難度大大減小,因此才可以將網路做到53層,精度提升比較明顯。(YOLO v2中是類似VGG的直筒型網路結構,層數過多會引起梯度問題,導致不易收斂,檢測準確率下降,所以Darknet-19僅19層)。                         

1-5  Darknet-53 結構示意圖

5、網路結構(基於Darknet-53):

Darknet-53是特徵提取網路,YOLOv3使用了其中的卷積層(共53個,位於各個Res層之前)來提取特徵,而多尺度特徵融合和檢測支路並沒有在該網路結構中體現,因此補畫在網路結構圖中(如圖1-5所示),檢測支路採用的也是全卷積的結構,其中最後一個卷積層的卷積核個數是255,是針對COCO資料集的80類:3*(80+4+1)=255。

YOLOv3在網路訓練方面還是採用YOLOv2中的多尺度訓練(Multi-Scale Training)方法。同時仍然採用了一連串的3*3、1*1卷積,3*3的卷積負責增加特徵圖通道數(Channels),而1*1的卷積負責壓縮3*3卷積後的特徵表示。

YOLOv3的完整網路結構示意圖如圖1-6所示,

其中左半部分是Darknet-53網路,下面詳細分析。

1-6   YOLOv3 網路結構示意圖( VOC 資料集)

(1)卷積層:

YOLOv3網路的輸入畫素為416*416,通道數為3的圖片(Random引數置1時可以自適應以32為基礎的變化)。每一個卷積層都會對輸入資料進行BN操作。每個卷積層卷積採用32個卷積核,每個卷積核大小為3*3,步伐為1。

(2)Res層:

一共選用五種具有不同尺度和深度的Res層,它們只進行不同層輸出間的求殘差操作。

(3)Darknet-53結構:

從第0層一直到74層,一共有53個卷積層,其餘為Res層。作為YOLOv3進行特徵提取的主要網路結構,Darknet使用一系列的3*3和1*1的卷積的卷積層(這些卷積層是從各主流網路結構選取效能比較好的卷積層進行整合得到。)

(4)YOLO層(對應v2中的Region層):

從75層到105層為YOLOv3網路的特徵融合層,分為三個尺度(13*13、26*26和52*52),每個尺度下先堆積不同尺度的特徵圖,而後通過卷積核(3*3和1*1)的方式實現不同尺度特徵圖之間的區域性特徵融合,(YOLOv2中採用FC層實現全域性特徵融合)。最終輸出的是特徵圖是深度為75的張量(3*(1+4+20)=75),其中20是VOC資料集的類別數。

  • 最小尺度YOLO層(13*13):

A.輸入:13*13的特徵圖 ,一共1024個通道;

B.操作:進行一系列卷積操作,特徵圖大小不變,通道數減少為75個;

C.輸出:輸出13*13大小的特徵圖,75個通道,然後在此基礎上進行分類和定位迴歸。

  • 中尺度YOLO層(26*26):

A.輸入:對79層的13*13、512通道的特徵圖進行卷積操作,生成13*13、256通道

的特徵圖,然後進行上取樣,生成26*26、256通道的特徵圖,然後將其與61層的26*26、512通道的中尺度特徵圖進行合併;

B.操作:進行一系列卷積操作,特徵圖大小不變,通道數最後減少為75個。

C.輸出:26*26大小的特徵圖,75個通道,然後在此進行分類和定位迴歸。

  • 最大尺度YOLO層(52*52):

A.輸入:對91層的26*26、256通道的特徵圖進行卷積操作,生成26*26、128通道的特徵圖,然後進行上取樣生成52*52、128通道的特徵圖,然後將其與36層的52*52、256通道的中尺度特徵度合併;

B.操作:進行一系列卷積操作,特徵圖大小不變,通道數最後減少為75個;

C.輸出:52*52大小的特徵圖,75個通道,然後在此進行分類和位置迴歸。

1-7   YOLOv3 網路結構的日誌資訊( COCO 資料集)

二、效能分析:

以下關於YOLOv3的效能上的對比實驗:

從表1-1中可以看出,Darknet-53比Darknet-19效果好很多,同時在效果更好的情況下,是resnet-101效率的1.5倍,幾乎與Resnet-152的效果相同的情況下,保持2倍於Resnet-152的效率。

1-1  不同網路在 ImageNet 資料集上的效能和精度對比

從表1-2中可以看出,YOLOv2對於小目標的檢測效果比較差。YOLOv3在檢測時通過引入多尺度特徵融合,使得APs比YOLOv2高出不少,表明對小目標檢測有更好效能。

1-2  不同目標檢測演算法在的檢測效能對比

從表1-3中可以看出,在保證相同Map的情況下,YOLOv3在檢測速度上具有較大優勢。

表1-3  YOLOv3 和其他演算法在檢測精度與速度上的對比