文章目錄
- 一、YOLOV3
- 1、網絡結構
- 1.1 整體結構
- 1.2 主干網絡
- 1.3 特征輸出
- 1.4 特征融合
- FPN(Feature Pyramid Networks)
- FPN 融合
- 上采樣融合
- 2、多尺度預測
- 3、損失函數
- 4、性能對比
一、YOLOV3
YOLOv3(You Only Look Once v3)是YOLO系列中的第三代版本,旨在提高目標檢測的精度和速度。YOLOv3通過一些創新和改進使得其在速度和精度上有顯著提升。
- YOLOv3 論文地址:【https://arxiv.org/pdf/1804.02767】
- YOLOv3 論文中文翻譯地址:【https://blog.csdn.net/yegeli/article/details/109751358】
- YOLOv3 最顯著的改進就是在 3 個尺度上以相同的方式進行目標的檢測,每種 3 個錨框,共 9 個。這使其可以檢測到不同規模的目標
1、網絡結構
1.1 整體結構
-
輸入層:輸入圖像尺寸為 416×416×3,表示輸入的是一個RGB圖像,大小為416x416像素。
- 416×416×3:
416
是圖像的高度和寬度,3
是顏色通道(RGB)。
- 416×416×3:
-
Darknet53:是YOLOv3的特征提取網絡,相比于YOLOv2使用的Darknet19,它更加深度,包含了 53個卷積層,并且去除了全連接層(FC層)。
-
- 主要通過 殘差連接(residual connections) 來防止梯度消失。
- 這一部分負責提取圖像的高層特征。
-
-
CBL(卷積+批歸一化+激活函數)
- CBL = Conv + Batch Normalization + Leaky ReLU
- Conv:卷積層,用于提取局部特征。
- Batch Normalization:標準化每一層的輸入,減少訓練時的協方差偏移,提高訓練穩定性。
- Leaky ReLU:作為激活函數,Leaky ReLU可以避免ReLU激活函數中出現的“死亡神經元”問題,允許有小的負值輸出。
- CBL = Conv + Batch Normalization + Leaky ReLU
-
resunit(殘差單元):由 CBL 和 Add 操作組成。
- Add 操作:實現了殘差連接,將輸入特征直接與輸出特征相加,避免信息丟失,保持深層網絡訓練的有效性。
- 該部分幫助網絡通過跳躍連接學習殘差,從而增強梯度傳播,解決深層網絡中梯度消失的問題。
- Add 操作:實現了殘差連接,將輸入特征直接與輸出特征相加,避免信息丟失,保持深層網絡訓練的有效性。
-
resn(殘差模塊):resn 是 Yolov3 中的大組件,n 表示這個 Res-block 里含有多少個 Res-unit,組成如下:
- 一個 padding
- 一個 CBL
- N 個殘差組件
-
concat(拼接操作)
- 將 Darknet-53 的中間層和后面的某一層的上采樣進行張量拼接,達到多尺度特征融合的目的。這與殘差層的 add 操作是不一樣的,拼接會擴充張量維度,而 add 直接相加不會導致張量維度的改變,例如 104×104×128 和 104×104×128 拼接,結果是 104×104×256
-
上采樣:上采樣(Upsampling)是一個關鍵的技術,用于實現多尺度特征融合,從而提高模型對不同尺度目標的檢測能力
- 多尺度特征融合:YOLOv3 在多個尺度上進行目標檢測,通過上采樣將低分辨率的特征圖放大到高分辨率,與更高分辨率的特征圖進行融合,從而捕捉到更多的細節信息,有助于模型更好地檢測不同尺度的目標,尤其是小
-
多尺度輸出
- 網絡在三個不同尺度上進行目標檢測:
- 13×13×255:高層特征圖,適用于檢測大物體。
- 26×26×255:中層特征圖,適用于中等尺寸的物體。
- 52×52×255:低層特征圖,適用于檢測小物體。
- 每個特征圖的輸出大小為
H×W×(B×5 + C)
,其中H×W
是特征圖的大小,B
是每個格子上的預測框數,5
是每個框的屬性(中心點坐標、寬高和置信度),C
是類別數。
- 網絡在三個不同尺度上進行目標檢測:
1.2 主干網絡
- 輸入層
- 輸入尺寸:
416×416×3
,表示輸入的是一個416x416的RGB圖像。 - 卷積層 1:第一個卷積層有 32個3x3的濾波器,該層的輸出尺寸為
256×256
,也就是圖像經過卷積處理后的尺寸。
- 特征提取(多層卷積)
- 第二層卷積:輸入尺寸
208×208×64
,進行卷積操作后輸出尺寸為128×128
。 - 第3層卷積:接著進行一個 1x1卷積,輸出
128×128
。 - 殘差塊(Residual):接下來,應用了一個 3x3的卷積,通過殘差連接(skip connection)優化特征圖的傳遞,輸出仍為
128×128
。
- 更深層的卷積塊
- 通過多次卷積塊的堆疊,網絡逐步提取圖像的高層特征。
104×104×128
經過3x3卷積
和1x1卷積
后輸出64×64
。- 重復類似的操作,輸出逐步減小,特征圖的深度逐漸增大。
- 中間特征提取
- 特征圖尺寸:
- 通過更深的網絡,特征圖進一步縮小到
52×52×256
和26×26×512
。
- 通過更深的網絡,特征圖進一步縮小到
- 在這個階段,網絡繼續通過卷積層提取更多抽象的特征,并通過 殘差單元(Residual Unit) 來加深網絡。
- 輸出特征圖
- 在輸出階段,YOLOv3會通過三個不同尺度的特征圖進行目標檢測:
- Scale 1: 對應
13×13×1024
特征圖,適合檢測大物體。 - Scale 2: 對應
26×26×512
特征圖,適合檢測中等物體。 - Scale 3: 對應
52×52×256
特征圖,適合檢測小物體。
- Scale 1: 對應
- YOLO Detection
- 最后的輸出層包括 卷積操作(
Conv
),用于生成最終的預測框和類別概率。 - Softmax層:用于歸一化類別的輸出,確保輸出的概率和為1。
1.3 特征輸出
。YOLOv3采用了 多尺度檢測(Multi-Scale Detection),通過三個不同尺寸的特征圖來捕捉不同大小的物體。
Scale 3 — 大物體檢測(52×52×255
)
- 輸出尺寸:
52×52×255
,即每個格子(52x52
)上有 255 個值,包含 4個坐標(bounding box位置)、1個置信度(bounding box是否包含物體)、和 80個類別的概率。 - 適用于檢測 小物體,尤其是在較高層的特征圖中。
Scale 2 — 中物體檢測(26×26×255
)
- 輸出尺寸:
26×26×255
,這個特征圖對應較小的物體,包含與Scale 3類似的信息。 - 用于檢測中等大小的物體,網絡在這里提取到的特征較為復雜,但分辨率較低。
Scale 1 — 小物體檢測(13×13×255
)
- 輸出尺寸:
13×13×255
,這個特征圖是最小的,適用于檢測 大物體。 - 適用于捕捉較大物體的特征,因為其分辨率最低,但每個格子對應的區域較大,能夠涵蓋更大的物體。
- 特征融合的方式:
- 在YOLOv3中,不同尺度的特征圖被 逐層融合。這通過將較小特征圖的高分辨率特征與較大特征圖的深層次特征進行結合,增強了網絡對不同尺度目標的敏感性。
1.4 特征融合
在目標檢測任務中,不同尺度的目標(如遠處的小人和近處的大車)對特征提取的要求不同:
- 小物體檢測: 小物體的特征通常較為細節化,并且位于圖像的較低層次。低分辨率的特征圖無法充分表達這些細節,因此需要將高分辨率的特征圖與低分辨率特征圖融合,才能更好地捕捉小物體的特征。
- 大物體檢測: 大物體通常占據較大的區域,因此低分辨率的特征圖能夠更好地捕捉大物體的信息。通過融合較高層次的特征(如13×13的特征圖)與層次的細節特征(如52×52的特征圖),可以顯著提升對大物體的檢測精度。
FPN(Feature Pyramid Networks)
是一種常用的特征融合技術,它通過利用從不同深度網絡層次提取的特征來增強網絡的多尺度特征表達能力。FPN 主要用于 從淺層到深層 融合特征,以更好地檢測各種尺度的物體。
FPN 的主要目標是通過 自上而下的路徑 和 自下而上的路徑 來融合不同尺度的特征圖。這一過程有助于提升檢測小物體和大物體的能力。
- 自上而下(Top-down)路徑
- 自上而下路徑通過對高層特征圖進行 上采樣,將其逐漸恢復到較低層次的尺寸(高分辨率),使得它們能夠與較低層的特征圖結合。
- 這個過程通常通過 轉置卷積(Deconvolution) 或 上采樣(Upsampling) 來完成。
- 這樣高層的抽象特征可以被引入到低層的具體特征中,增加對小物體的敏感性。
- 自下而上(Bottom-up)路徑
- 自下而上路徑是通過 卷積操作 來提取低層的特征圖,使其逐步變得更加抽象,增強對大物體的表達能力。
- 低層特征圖的尺寸較大,但在細節上更為豐富,適合檢測小物體。自下而上的路徑逐漸減少特征圖的空間尺寸并增加通道數。
- 融合(融合上下層的特征)
- 自上而下路徑和自下而上的路徑相結合時,FPN通過 特征拼接 或 加法操作,將來自不同層次的信息融合在一起。
- 這種融合的目的是整合淺層的高分辨率細節和深層的抽象信息,從而形成更具辨識度和多尺度特征表達的特征圖。
- 卷積層和檢測
- 在每個融合后的特征圖上,FPN通常會執行卷積操作,以進一步提取多尺度的信息。
- 最終,這些特征圖會送入檢測頭進行目標檢測任務,生成邊界框和類別預測。
在YOLOv3中:
- 三尺度輸出:YOLOv3在三個不同尺度的特征圖上進行目標檢測,這和FPN的目標非常相似。
- 特征融合:在YOLOv3中,較高層次的特征圖會進行上采樣,然后與低層次的特征圖進行拼接,以便融合不同層次的特征信息。
觀察下面四張圖:
-
圖 a:特征化圖像金字塔
-
當我們要檢測不同的尺度目標時,需要把圖像送入不同的尺度
-
需要根據不同的尺度圖片一次進行預測
-
需要多少個不同尺度就需要預測多少次,效率較低
-
-
圖 b:單特征映射
-
得到一個特征圖并進行預測
-
特征丟失,對于小目標效果不好
-
-
圖 c:金字塔特征層次結構
-
把圖像傳給 backbone,在傳播的過程中分別進行預測
-
相互之間獨立,特征沒有得到充分利用
-
-
圖 d:特征金字塔網絡
- 不是簡單的在不同特征圖上進行預測
- 會對不同的特征圖進行融合后再進行預測
FPN 融合
- 和前面描述的一樣,為了進一步降低模型的復雜度進而提升速度,YOLOv3 選擇了重用主干網絡所提取的不同尺寸的特征圖,主要是 8 倍、16 倍以及 32 倍下采樣的特征圖,同時采用了 FPN 的設計思想,分別對 16 倍、32 倍以及各自上采樣后的結果進行了融合,但是也對其進行了一定的改進,在傳統的 FPN 中,特征圖通常是通過 加法(Add) 來進行融合的。但在 YOLOv3 中,作者選擇使用 通道拼接(Concatenate) 來代替加法操作,這是為了:
- 增加特征圖的通道數:使得模型能夠捕捉到更多的信息
- 避免信息丟失:加法操作可能會導致某些重要信息被掩蓋,而拼接則保留了所有原始信息
- 1×1 卷積完成通道的一致性
- 2×up(上采樣)完成尺寸的一致性
上采樣融合
- 特征融合更有利于檢測各種尺寸的物體,下圖是特征融合架構圖:
2、多尺度預測
在傳統的目標檢測任務中,網絡往往在一個固定尺度上進行預測。但實際應用中,目標的尺寸差異很大,因此,如果只在一個尺度的特征圖上進行預測,可能無法準確檢測到小物體或大物體。多尺度預測(Multi-Scale Prediction)通過在多個尺度的特征圖上同時進行預測,解決了這一問題。多尺度預測可以讓網絡在不同的特征圖上做出預測,從而能夠同時捕捉到不同尺寸物體的特征。
在YOLOv3中,多尺度預測 是通過在不同尺度的特征圖上同時進行目標檢測來實現的。具體來說,YOLOv3有三個不同尺寸的特征圖,每個特征圖都會進行目標檢測預測。這種設計使得YOLOv3能夠在處理不同大小的物體時表現得更加精確和高效。
YOLOv3的多尺度預測流程:
- 特征提取:YOLOv3首先通過Darknet-53提取特征,得到多個尺寸的特征圖(例如:
52x52x256
、26x26x512
、13x13x1024
)。 - 上采樣:較高層(低分辨率)特征圖通過上采樣操作增大其尺寸,以便與較低層(高分辨率)的特征圖進行融合。
- 拼接:將不同尺度的特征圖進行拼接(concatenate),將細節信息和高層抽象信息結合在一起,從而獲得更豐富的特征表示。
- 預測:在三個不同尺度的特征圖上,網絡分別進行目標檢測預測,包括邊界框、類別、置信度等。
- 13×13×255:用于大物體的檢測。
- 26×26×255:用于中物體的檢測。
- 52×52×255:用于小物體的檢測。
多尺度預測的輸出:
YOLOv3的每個尺度的輸出形狀為 H×W×(B×5 + C)
,其中:
H×W
是特征圖的空間尺寸。B
是每個網格(grid)單元中預測的邊界框數量(YOLOv3中通常是3個框)。- 每個框包含 4個位置參數(
x, y, w, h
),1個置信度(bounding box是否包含物體),以及 C個類別概率(每個物體類別的概率,YOLOv3使用80個類別)。
3、損失函數
在目標檢測任務中,損失函數 是用于評估模型預測與真實標簽之間差異的重要指標。對于YOLOv3模型來說,損失函數的設計要同時考慮物體的定位(位置損失)、置信度(置信度損失)以及類別(類別損失)的預測。YOLOv3的損失函數是由三部分組成的:定位損失、置信度損失和類別損失。
- 定位損失(Localization Loss)
- 置信度損失(Confidence Loss)
- 類別損失(Classification Loss)
1.定位損失是指預測的邊界框和真實邊界框之間的差異。它反映了模型對物體位置的預測誤差。
- 計算方式: YOLOv3使用 均方誤差(MSE) 來衡量預測框與真實框之間的差距。具體來說,定位損失包括以下四個部分:
- 中心點誤差:預測框的中心點(
x
,y
)與真實框的中心點之間的誤差。 - 寬度誤差:預測框的寬度(
w
)與真實框的寬度之間的誤差。 - 高度誤差:預測框的高度(
h
)與真實框的高度之間的誤差。 - IoU損失(Intersection over Union):YOLOv3還通過 IoU損失 來計算預測框與真實框的重疊度,作為定位損失的一個重要組成部分。
- 中心點誤差:預測框的中心點(
2.置信度損失衡量了模型對每個邊界框是否包含物體的預測能力。YOLOv3會預測每個格子是否包含目標物體(置信度)。置信度損失是基于 二元交叉熵 來計算的,包含兩種情況:
- 物體存在時的置信度:如果該框中有物體,模型應該預測較高的置信度。
- 物體不存在時的置信度:如果該框沒有物體,模型的置信度應該接近0。
3.類別損失衡量了模型預測的物體類別與真實類別之間的差異。YOLOv3采用 交叉熵損失(cross-entropy loss)來計算預測的類別概率與真實類別標簽之間的差異。
4、性能對比
- AP50:IoU 閾值為 0.5 時的 AP 測量值
- AP75:IoU 閾值為 0.75 時的 AP 測量值
- APs:對于小目標的 AP 值
- APm:對于中等目標的 AP 值
- APL:對于大目標的 AP 值