yolo + yolov2 + yolov3 隨筆總結(差異、相同、改進)

博客爲隨筆筆記類,便於加深理解以及比較各模型不同。若想要系統學習yolo系列,建議閱讀論文或詳解博客

 

PS: 

!!!!yolo的bounding box和ssd的anchor box不一樣!!!他不是在圖中每一個座標點生成了一系列的盒子,這個盒子我們把它叫做Anchor,也就是先驗盒子!!yolo,沒有先驗的概念,而是將圖片分成了一系列的格子!! 而這個格子直接預測到的目標的定位的框就是我們所說的bounding box,boungbox的信息直接用途中的格子表示  如: 

 

 

他沒有anchor 也沒有default 

 

 

正文: 

 

yolo核心思想:利用整張圖作爲網絡的輸入,直接在輸出層迴歸bounding box的位置和其所屬類別。yolo利用全圖作爲context信息,背景錯誤比較少。 

 

yolo將一幅圖分成s×s個格子(grid cell),如果某個object的中心落在這個格子,那麼這個網格就負責這個object。 

 

每個網格負責預測b個bounding box。每一個boundbox包含了x y h w自身的位置信息以及一個confidence。這個con代表了所預測的box中含有object的置信度以及這個box預測的有多準兩種信息。計算如下: 

 

其中,如果有object落在一個grid cell裏,第一項取1,否則取0。第二項則是bounding box和 gt box之間的IOU 

 

每個bounding box要預測5個值,而每個網格還要預測一個類別信息。記爲C類。則S×S個網格每個網格要預測B個boundbox還要預測C個catagories。輸出就是:S x S x (5*B+C)的一個tensor。  

 

此處注意:class信息是針對每個網格的,confidence信息是針對bounding box的(這也是之後要改進的地方) 

 

網絡如下: 

 

 

損失函數共包含5個部分: 

 

在這個損失中: 只有當某個網格中右object時纔對class error進行懲罰 

只有當某個box prediction對某個gt box負責時,纔會對corrd error進行懲罰。而是否負責則根據IOU值推算。 

 

 

 

 

yolo v2: 

V2借鑑了faster的思想,引入了anchor,就像之前說的yolo需要改進的地方,bounding box對一個格子多個目標的預測能力很差。並且刪除了yolo的全連接層,使用anchor預測bounging box 

 

模型如下: 

 

網絡使用了darknet19  具體如下: 

 

其網絡設計對於v1沒有太大改變,主要是: 

 

在每個卷積層後引入BN層,代替dropout,加速收斂。 

移除全連接層。 

在16層開始分爲兩條路徑,將底層特徵連接到高層,提高模型性能。 

 

使用Anchor: 

 

每個anchor包括25個信息,是否有目標,目標位置,目標種類。 

計算如下: 

。其中每個cell包括5個anchor,這5個anchor具有不同尺寸的預設,該預設可以通過手動指定。也可通過在訓練集上獲得。在v2中,預設尺寸是通過在測試集上進行類聚獲得的。 

 

 

 

yolo v3: 

 

yolov3 對於檢測兩個距離很近的物體,又或者是距離很近的不同類物體魯棒性很好,全面超越SSD512。 

v1  v2都不如SSD300 

總的來說 v3比v2性能提高很大,但速度卻沒有下降,況且對於小目標魯棒性很強。 

 

yolo v3對於yolo以及v2的改變: 

 

loss不同:作者v3替換了v2的softmax loss 變成logistic loss,而且每個ground truth只匹配一個先驗框。 

 

網絡結構改變: 由darknet19變爲darknet53,跳層現象越來越普遍,使用殘差結構。 

 

激活不同:激活函數由softmax改爲sigmoid 

 

anchor不同:anchor的數量由5個變爲3個,提高了IOU 

 

detection的策略不同:v2只有一個detection,v3一下變成了3個,分別是一個下采樣的,feature map爲13*13,還有2個上採樣的eltwise sum,feature map爲26*26,52*52,也就是說v3的416版本已經用到了52的feature map,而v2把多尺度考慮到訓練的data採樣上,最後也只是用到了13的feature map,這應該是對小目標影響最大的地方。 

 

backbone不同:這和上一點是有關係的,v2的darknet-19變成了v3的darknet-53,爲啥呢?就是需要上採樣啊,卷積層的數量自然就多了,另外作者還是用了一連串的3*3、1*1卷積,3*3的卷積增加channel,而1*1的卷積在於壓縮3*3卷積後的特徵表示,這波操作很具有實用性,一增一減,效果棒棒。 

 

 

結構如下: 

 

 

 

網絡可能沒有使用pool 直接使用conv stride=2進行下采樣 

 

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