YOLO 模型入門觀念 === ###### tags: `GDG on Campus FCU 2024/25` {%youtube mA7w-Td9o-Y %} ::: spoiler 目錄 Contents [TOC] ::: ## What is YOLO? 2015提出單階段(one-stage)目標檢測網路 全稱 You Only Look Once 意指只需看一眼照片就能完成物件影像辨識和定位 實現快速實時目標檢測 將目標檢測問題轉化為一個回歸問提,並將圖像分成固定網格 每個網格單元負責預測該區域內的物體 ### 單階段目標檢測網路 基於深度學習 使用卷積深度網路(CNN)提取特徵、進行分類 更快推理速度 單一前項傳播中完成目標檢測任務 無需生成候選區域及通過密集的網格/錨框 直接預測目標的類別和位置 ### 回歸問題 給定輸入變量和一組連續輸出變量 建立函數預測輸出變量的值 目標預測連續的輸出值 ## YOLO 模型發展歷程 截至 2024 11月已發行多個版本 最新版本為 YOLOv11 ### v1 相較傳統目標檢測方法,採用全新的設計思路和網路結構 實現**端對端**的目標檢測 - 網路結構:採用**CNN**作為基礎結構 - 單次預測:將目標視為一個**回歸問題** - 網格劃分:輸入圖像固定大小**網格劃分**,為每個網格單元預測邊界框和類別置信度 - **特徵融合**:**多層**卷積操作,在不同層次的特徵圖上進行目標檢測,實現對不同尺度目標的檢測 - **損失函數**:使用多任務損失函數,包含邊界框座標損失、目標類別損失、置信度損失 - **訓練和優化**:採用 **隨機梯度下降(SGD)** 等優化算法進行訓練,通過在大規模資料及上進行反向傳播和參數更新 - **速度與準確性權衡**:模型通過犧牲一定的檢測準確性,換取更快的檢測速度,適用於實時目標檢測 ### v2 提升準確性和性能 - 網路結構優化:採用更深、寬的結構、引入殘差連接和批量歸一化等技術,提高學習能力和穩定性 - 批量歸一化:有助於加速收斂速度和提高模型的泛化能力 - 多尺度預測:通過在不同層次的特徵圖上進行目標檢測,提高對不同尺度目標的檢測能力 - Anchor Boxes:用於預測不同尺度和長寬比的目標邊界框,提高模型對目標形狀和尺寸的適應性 - Darknet-19:相較v1較為**輕量化**,減少模型參數量和計算量,提高訓練和推理效率 - 調整損失函數:加入適應權重的損失函數,使模型更加關注難以訓練的樣本,提高檢測準確性 - 訓練策略改進:採用更多的數據增強技術和更長的訓練時間,提高泛化能力和穩定性 ### v3 - 網路結構改進:Darknet-53,53個卷積層、無池化層 - 多尺度預測 - Feature Pyramid Network:在不同層次特徵圖上獲取豐富的語意信息 - 更多、更合適的Anchor Box - 跨層連接:低層特徵圖可以獲取高層特徵圖的語意信息,提高對小目標的檢測能力 - 預訓練策略改進 - 後處理優化:對非極大值抑制(NMS)算法進行優化 - 非極大值抑制(NMS):目標檢測中的一種後處理技術,用於在多個檢測框(bouding boxes) 中去除冗余或重疊框。主要作用提升檢測的精確性和結果的簡潔性 ### v4 - 網路結構改進:**CSPDarknets53** - CSPDarknets53:在Darnet53基礎上改進,引入Cross Stage Partial Network(CSPNet)結構,將特徵圖劃分為兩部分,部分特徵通過殘差塊傳遞,另一部分直接進入後續網路。有效減紹模型計算量和內存占用,同時優化梯度流,提升網路學習能力和推理效率 - Backbone網路優化:採用CSPNet和Spatial Pyramid Pooling(SPP)等技術優化骨幹網路結構,提升特徵提取的效率和品質 - Pyramid Pooling:通過多尺度池化提取全局上下文信息,增強對物體大小和空間關係的理解 - 多尺度池化:深度學習中用於處理特徵圖的技術。旨在捕捉數據的不同尺度特徵。通過多個不同大小的池化窗口對特徵圖進行處理,從而獲得多層次的信息 - 加強數據增強策略:CutMix和Mosaic等技術 - Mish 激活函數:提升模型的非線性擬合能力,加速模型收斂 - Bag of Freebies 和 Bag of Specials:分別用於優化訓練過程和模型結構 - 更強的模型魯棒性:引入更多正規化技術,如DropBlock和DropPath等 - 優化的訓練策略 ### v5 - 輕量化的模型結構:S、M、L、X四個版本,對應不同模型大小和計算資源需求 - 模型結構改進:引入CSPNet和Scaled-YOLOv4 - 數據增強和訓練策略:CutMix、MixUp等技術 - 自動混合精度訓練:(單精度(FP32)和半精度(FP16))通過混合精度計算和參數更新,提升模型訓練速度和效率 - 模型部署和推理優化:引入一鍵部署和ONNX模型導出等技術 - 集成學習:將多個訓練好的模型進行集成 ### v6 - 模型改進 - Backbone:小型模型使用RepBlock+結構重參數化,大型模型採用CSPStackRep Block - Neck:基於PAN拓樸,用RepBlock替換CSP-Block - Head:引入Decoupled Head結構、精簡設計 - 標籤分配:採用SimOTA算法動態分配正樣本,引入TAL,統一分類分數和預測框質量度量 - Anchor-free檢測:採用無錨點範式,簡化解碼邏輯 - 分類損失:使用VariFocal Loss,不對稱處理正負樣本 - 回歸損失:採用SIOU/GIOU損失,考慮方相匹配性 - 自我蒸餾:知識蒸餾技術,最小化教師和學生模型間的KL散度 - 量化技術: - RepOpt-VGG網路:改善數據分布 - PTQ-敏感度分析:部分量化,跳過敏感層 - QAT-量化節點插入:優化模型結構 - CWD自蒸餾:FP32模型為教師,int8模型為學生 ### v7 - 網路結構改進:採用更深的網路結構 - 數據增強:增加隨機裁剪、隨機旋轉 - 激活函數:Swish激活函數 ### v8 - Anchor-free:拋棄以往的Anchor-Base,使用Anchor-free的思想 - 損失函數:VFL Loss作為分類損失,OFL Loss + CIOU Loss作為分類損失 - 樣本匹配:拋棄以往的IOU匹配或者單邊比例的分配方式,而是使用Task-Alligned Assigner匹配方式 - Backbone:CSP思想,替換成C2模塊,實現近一步輕量化。依舊使用了YOLOv5架構中使用的SPPF模塊 - PAN-FPN:依舊使用PAN思想,不過通過對比v5與v8的結構圖可以看到,v8將v5中的PAN-FPN上採樣階段中的卷積結構刪除了,同時也將C3模塊替換為C2模塊 ### v9 - PGI:引入PGI技術,有效保留網路層間關鍵數據,提升梯度可靠性和模型性能 - GELAN架構:通過GELAN,提升參數利用率和計算效率,適應多樣化應用 - 信息瓶頸應對:通過PGI減少信息丟失 - 可逆函數應用:使用可逆函數降低深層網路信息退化,保留關鍵檢測數據 - 輕量級模型優化:特別強化輕量級模型,減少信息丟失 - 性能提升:在MS COCO資料及上超越v7,尤其在輕量級模型中表現更佳 - 效率與精度平衡:和v7 AF相比,參數和計算需求大幅減少,精度相當,顯示效率顯著提升 - 大型模型新標準:為大型模型設定新標準,參數和計算需求減少,精度提高 ### v10 - Rank-guided Block設計:根據Stage的重要性動態調整模型結構 - 大核卷積:在深層CIB節中使用大卷積和,增加視野域,提升模型表現 - Partial Self-Attention:在排名低的Stage中使用,減少計算複雜性和內存占用 - 實驗結果:在保持相似AP(Average Precision, 平均精度)的同時,減少模型參數量和延遲 - MS-Free架構:減少Inference階段的計算時間 - Consistent Dual Label Assignment:通過結合One to many和One to one 兩個Head進行訓練,優化網路 - 輕量級分類Head:簡化分類Head結構,降低計算量,提高效率 - 空間-通道解耦下采樣:調整卷積曾為Pointwise的Separable Convolution,減少參數量 ### v11 - C3k2機制:替代v8中的C2f結構,尤其在網路淺層中應用 - C2PSA注意力機制:在C2機制中嵌入多頭注意力機制,提升特徵識別能力 - 檢測頭改進:在檢測頭㡪部替換兩個DWConv,減少參數量和計算量 - 模型深度和寬度調整:對模型的深度和寬度參數進行了調整,以彌補小模型規模帶來的性能損失 - 網路結構優化 - 參數調整:對深度和寬度參數進行大幅度調整,以達到更好的性能和效率平衡 - DWConv應用:在檢測頭中增加兩個DWConv(深度可分離卷積),減少了模型的參數量和計算量,同時保持模型性能 - 損失函數不變:仍採用CIOU作為邊界框回歸損失函數