一、《YOLOv3:AnIncrementalImprovement》
1.1、基本信息
-
標題:YOLOv3: An Incremental Improvement
-
作者:Joseph Redmon, Ali Farhadi
-
機構:華盛頓大學(University of Washington)
-
發表時間:2018年
-
代碼地址:Joseph Redmon - Survival Strategies for the Robot Rebellion
論文地址:
?????????[1804.02767] YOLOv3: An Incremental Improvement
????????我們對YOLO進行了一些更新!我們做了一些小的設計更改來使其更好。我們還訓練了這個新的網絡,非常不錯。它比上次稍大,但更加準確。不過它依然很快,請放心。在320x320的情況下,YOLOv3在28.2 mAP中以22毫秒的速度運行,準確性與SSD相當,但快了三倍。當我們查看老舊的5IOUmAP檢測指標時,YOLOv3表現得相當不錯。在Titan X上實現了579AP50,而RetinaNet在198毫秒內實現了575AP50,性能相似,但快了3.8倍。像往常一樣,所有代碼可以在Joseph Redmon - Survival Strategies for the Robot Rebellion上找到。?
1.2、主要內容
核心改進:
????????結合殘差網絡(ResNet)思想,提出新的主干網絡?Darknet-53(53層卷積),兼顧速度與性能。
????????采用?多尺度預測(3種尺度),融合淺層細粒度特征與深層語義特征,提升小目標檢測能力。
????????使用?維度聚類生成錨框(9個聚類,分3個尺度),通過邏輯回歸預測目標存在概率。
性能表現:
????????速度:在Titan X GPU上,320×320分辨率下僅需22毫秒,比RetinaNet快3.8倍。
????????精度:AP50指標達57.9,與RetinaNet(57.5)相當,但速度顯著占優。
????????局限性:高IOU閾值(如AP75)下性能較弱,邊界框精確定位能力不足。
失敗嘗試:
????????線性激活替代sigmoid導致mAP下降。
????????Focal Loss未提升性能(可能與YOLOv3的獨立目標性預測機制沖突)。
????????雙IOU閾值訓練策略效果不佳。
1.3、作用影響
技術貢獻:
????????推動實時目標檢測的實用化,平衡速度與精度,適用于嵌入式設備和實時系統。
????????Darknet-53成為高效主干網絡設計的參考,影響后續輕量化模型(如YOLOv4、YOLOv5)。
行業影響:
????????廣泛應用于安防監控、自動駕駛、工業檢測等對實時性要求高的場景。
????????引發對目標檢測評估指標的反思(如AP50 vs. COCO復雜指標)。
1.4、對未來展望
????????那么,其他那些為視覺研究提供大量資金的人是軍方,他們從來沒有做過任何可怕的事情,比如用新技術殺死很多人,哦等等.....我對大多數使用計算機視覺的人充滿希望,他們只是用它做快樂、好的事情,比如在國家公園里計算斑馬的數量,或者跟蹤它們的貓在家里游蕩。但是計算機視覺已經在被用于有問題的用途,作為研究人員,我們有責任至少考慮我們的工作可能造成的傷害,并考慮減少它的方式。我們欠世界這么多。
二、YOLOV3
????????下圖中可以看到,2018年測試性能的數據集變成了COCO數據集,可以看到 YOLOV3的速度是非常快的,但是它的mAP并不是非常的高(mAP50 95)。
????????下圖中可以看到,當IOU=0.5的時候,即mAP-50時,可以看到YOLOV3的速 度不僅快的,而且還非常準。?
2.1、輸入處理(Input)
????????YOLOV3在輸入上沒做任何的變化。
2.2、骨干網絡(Backbone)
修改骨干網絡為darknet53
?????????YOLOv3的Backbone在YOLOv2的基礎上設計了Darknet-53結構。 Darknet-53結構引入了ResNet的殘差思想,類似于ResNet。
????????同時,darknet53網絡并沒有池化層(池化層指的是下采樣的池化,并不是 全局平均池化)。?
2.3、Neck結構
????????YOLOv3引入了FPN的思想,以支持后面的Head側采用多尺度來對不同size 的目標進行檢測,越精細的grid cell就可以檢測出越精細的目標物體。 YOLOv3設置了三個不同的尺寸,分別是19×19,38×38和76×76,他們之間 的比例為1:2:4。
其中,在Neck結構CBL*5中,5層CBL分別是:1x1,3x3,1x1,3x3,1x1 的卷積。
在Neck結構CBL中,是1x1的卷積。 輸入時608,
經過Backbone的第一個Res8之后,得到的特征張量縮放比為 8:608/8=76,即76x76x256。
經過Backbone的第二個Res8之后,得到的特征張量縮放比為16: 608/1638,即38x38x512。
Concat是在通道上進行相加。
Neck結構的基礎上順勢而為融合了3個尺度,在多個尺度的融合特征圖上分 別獨立做檢測,19x19的檢測大尺寸物體,38x38的檢測中尺寸物體, 76x76的檢測小尺寸物體。
2.4、?檢測頭(Head)
????????255是與Anchor Box有關的,那么在YOLOV3中,Anchor Box的尺寸也是有 聚類算法產生的,經過聚類算法,有9個尺寸的Anchor Box,分別為: (10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90), (156x198),(373x326),YOLOV3會在三個預測特征層上進行預測,所以每 個預測特征層都有3個Anchor Box(按照先后順序排好的,3個為一組,也 就是每個預測特征層有3個Anchor Box)。
特征圖層 | 特征圖大小 | Anchor Box尺寸(修正后) | Anchor Box數量 |
---|---|---|---|
特征圖層1(大目標) | 13x13 | (116x90),(156x198),(373x326) | 13x13x3 |
特征圖層2(中目標) | 26x26 | (30x61),(62x45),(59x119) | 26x26x3 |
特征圖層3(小目標) | 52x52 | (10x13),(16x30),(33x23) | 52x52x3 |
?那么COCO數據集有80類,3x(4+1+80)就得到255了。
三、正負樣本分配
3.1、正樣本分配原則
????????與GT BOX的IOU最大的Anchor Box最為正樣本。 如果一個Anchor Box與GT BOX的IOU不是最大的,但是又大于某個閾值, 那么就丟掉,既不是正樣本又不是負樣本。
3.2、負樣本分配原則
????????除去正樣本和丟棄的樣本剩下的就是負樣本。 如果某個Anchor Box不是正樣本,那么它就沒有定位損失和類別損失, 只有置信度損失。
????????其實我們可以看出來,這種正負樣本分配的方式時有問題的,他會導致正負 樣本數量失衡,從而影響訓練結果,所以在幾年前人們用YOLOV3的時候, 他們選擇正樣本的方式是:只要某個grid cell中的Anchor Box和GT BOX的 IOU大于某個閾值就視為正樣本,這樣正樣本的數量就更多了。
四、損失函數
????????原文中沒有詳細的給出,這里根據源碼給出:
????????YOLOV3的損失函數也包括三部分:定位損失、置信度損失、類別損失。
????????其中定位損失與YOLOV2是完全一致的。
????????但是置信度損失、類別損失采用了邏輯回歸的策略,正常情況下,要實現多 分類是由Softmax+多元交叉熵組成,但是在YOLOV2中,采用的是 Softmax+回歸的思想,這本身就很奇怪了,但是YOLOV3更為震撼,它用了 Softmax+二元交叉熵來解決該問題。
????????損失函數用了多個獨立的用于多標簽分類的Logistic分類器,取消了類別之 間的互斥(即one-hot),可以使網絡更加靈活。YOLOv2使用Softmax+回 歸器,認為一個檢測框只屬于一個類別,每個檢測框分配到概率最大的類 別。但實際場景中一個檢測框可能含有多個物體或者有重疊的類別標簽。 Logistic分類器主要用到Sigmoid函數,可以將輸入約束在0到1的范圍內,當 一張圖像經過特征提取后的某一檢測框類別置信度經過sigmoid函數約束后 如果大于設定的閾值,就表示該檢測框負責的物體屬于該類別。