來源:OpenCV與AI深度學習
YOLO (You Only Look Once) 是一系列實時對象檢測機器學習算法。對象檢測是一項計算機視覺任務,它使用神經網絡對圖像中的對象進行定位和分類。這項任務的應用范圍很廣,從醫學成像到自動駕駛汽車。多種機器學習算法用于對象檢測,其中一種是卷積神經網絡 (CNN)。
CNN 是任何 YOLO 模型的基礎,研究人員和工程師使用這些模型執行對象檢測和分割等任務。YOLO 模型是開源的,它們在該領域得到了廣泛的應用。這些模型從一個版本到另一個版本都在改進,從而提高了準確性、性能和附加功能。本文將探討整個 YOLO 家族,我們將從原始到最新開始,探索它們的架構、用例和演示。
YOLOv1
在引入 YOLO 對象檢測之前,研究人員使用了基于卷積神經網絡 (CNN) 的方法,如 R-CNN 和 Fast R-CNN。這些方法使用兩步過程來預測邊界框,然后使用回歸對這些框中的對象進行分類。這種方法速度緩慢且占用大量資源,但 YOLO 模型徹底改變了對象檢測。當 Joseph Redmon 和 Ali Farhadi 于 2016 年開發第一個 YOLO 時,它通過新的增強架構克服了傳統對象檢測算法的大部分問題。
最初的 YOLO 架構由 24 個卷積層和 2 個完全連接的層組成,其靈感來自用于圖像分類的 GoogLeNet 模型。YOLOv1 方法在當時是第一個。
網絡的初始卷積層從圖像中提取特征,而全連接層預測輸出概率和坐標。這意味著邊界框和分類都在一個步驟中進行。這個一步式流程簡化了操作并實現了實時效率。此外,YOLO 體系結構還使用了以下優化技術。
Leaky ReLU 激活:Leaky ReLU 有助于防止“垂死的 ReLU”問題,即神經元在訓練過程中可能會卡在不活躍的狀態。
Dropout 正則化:YOLOv1 在第一個全連接層之后應用 dropout 正則化,以防止過擬合。
數據增強
如何工作的?
YOLO 模型的本質是將對象檢測視為回歸問題。YOLO 方法是將單個卷積神經網絡 (CNN) 應用于完整圖像。此網絡將圖像劃分為多個區域,并預測每個區域的邊界框和概率。
這些邊界框由預測概率加權。然后,可以對這些權重進行閾值處理,以僅顯示高分檢測。
YOLOv1 將輸入圖像劃分為一個網格 (SxS),每個網格單元負責預測其內部對象的邊界框和類概率。每個邊界框預測都包含一個置信度分數,指示框中存在對象的可能性。研究人員使用交并比 (IOU) 等技術計算置信度分數,該技術可用于篩選預測。盡管 YOLO 方法新穎且速度很快,但它面臨一些限制,如下所示。
泛化:YOLOv1 難以檢測在訓練中無法準確看到的新對象。
空間約束:在 YOLOv1 中,每個網格單元格只能預測兩個框,并且只能有一個類,這使得它難以處理成群出現的小對象,例如鳥群。
損失函數限制:YOLOv1 損失函數在小邊界框和大邊界框中處理錯誤的方式相同。大框中的小錯誤通常是可以的,但小錯誤對 IOU 的影響要大得多。
定位錯誤:YOLOv1 的一個主要問題是準確性,它經常錯誤地定位對象在圖像中的位置。
現在我們已經介紹了 YOLO 的基本機制,讓我們看看研究人員如何在下一個版本中升級此模型的功能。
YOLOv2
YOLO9000在 YOLOv1 發布一年后推出,以解決當時對象檢測數據集的局限性。YOLO9000之所以這樣命名,是因為它可以檢測 9000 多個不同的對象類別。這在準確性和泛化性方面具有變革性。
YOLO9000 背后的研究人員提出了一種獨特的聯合訓練算法,該算法可以根據檢測和分類數據訓練對象檢測器。這種方法利用標記的檢測圖像來學習精確定位對象,并使用分類圖像來增加其詞匯量和魯棒性。
通過組合來自不同數據集的特征進行分類和檢測,YOLO9000 顯示出比其前身 YOLOv1 有很大的改進。YOLO9000 被宣布為更好、更強、更快。
分層分類:YOLO9000 中使用的一種基于 WordTree 結構的方法,允許增加對看不見對象的泛化,并增加對象的詞匯量或范圍。
架構變化:YOLO9000引入了一些變化,例如使用批量規范化來加快訓練和穩定性、使用錨框或滑動窗口方法,并使用 Darknet-19 作為主干。Darknet-19 是一個具有 19 層的 CNN,旨在準確和快速。
聯合訓練:一種算法,允許模型利用分層分類框架并從分類和檢測數據集(如 COCO 和 ImageNet)中學習。
不過,YOLO 系列繼續改進,接下來我們來看看 YOLOv3。
YOLOv3
幾年后,YOLO 背后的研究人員提出了下一個版本 YOLOv3。雖然 YOLO9000 是一種最先進的模型,但對象檢測通常有其局限性。提高準確性和速度始終是對象檢測模型的目標之一,這也是 YOLOv3 的目標,在這里和那里進行少量調整,我們就會得到性能更好的模型。
改進從邊界框開始,雖然它仍然使用滑動窗口方法,但 YOLOv3 有一些增強。YOLOv3 引入了多尺度預測,它可以在三種不同尺度上預測邊界框。這意味著可以更有效地檢測不同大小的物體。除其他改進外,這讓 YOLO 重新回到了最先進模型的地圖上,并在速度和準確性之間進行了權衡。
如圖所示,YOLOv3 使用平均精度均值 (mAP-50) 指標提供了最佳的速度和準確性之一。此外,YOLOv3 還引入了其他改進,如下所示。
骨干網:YOLOv3 使用更好、更大的 CNN 骨干網,即 Darknet-53,它由 53 層組成,是 Darknet-19 和深度學習殘差網絡 (Resnets) 之間的混合方法,但比 ResNet-101 或 ResNet-152 更高效。
跨尺度預測:YOLOv3 預測三種不同尺度的邊界框,類似于特征金字塔網絡。這使模型能夠更有效地檢測各種大小的對象。
分類器:使用獨立的 Logistic 分類器代替 softmax 函數,允許每個盒子有多個標簽。
數據集:研究人員僅在 COCO 數據集上訓練 YOLOv3。
此外,雖然不太重要,但 YOLOv3 修復了 YOLOv2 中的一個小數據加載錯誤,這幫助了大約 2 mAP 點。接下來,讓我們看看 YOLO 模型是如何演變成 YOLOv4 的。
YOLOv4
延續 YOLO 系列的傳統,YOLOv4 引入了多項改進和優化。讓我們更深入地了解 YOLOv4 機制。
結構
最顯著的變化是 3 部分架構,雖然 YOLOv4 仍然是一個單階段的目標檢測網絡,但架構涉及 3 個主要組件,即 backbone、head 和 neck。這種架構拆分是 YOLO 發展過程中非常重要的一步。在 YOLO 中,backbone、head 和 neck 都有自己的功能。
主干是特征提取部分,通常是跨層學習特征的 CNN。然后,neck 對從 backbone 的不同級別提取的特征進行細化和組合,從而創建豐富且信息豐富的特征表示。最后,head 執行實際預測,并輸出邊界框、類概率和對象性分數。
對于 YOLOv4,研究人員將以下組件用于 backbone、neck 和 head。
主干網:CSPDarknet53 是一個卷積神經網絡和對象檢測主干網,它使用使用跨階段部分網絡 (CSPNet) 策略的 DarkNet-53。
Neck:修改后的空間金字塔池化 (SPP) 和路徑聚合網絡 (PAN) 用于 YOLOv4,從而產生更精細的特征提取、更好的訓練和更好的性能。
頭部:YOLOv4 采用 YOLOv3 的(基于錨點的)架構作為 YOLOv4 的頭部。
這并不是 YOLOv4 引入的全部,在優化和選擇正確的方法和技術方面還有很多工作,讓我們接下來探索這些。
優化
正如研究人員在論文中介紹的那樣,YOLOv4 模型帶有兩袋方法:免費贈品袋 (BoF) 和特價袋 (BoS)。這些方法對 YOLOv4 的性能很有幫助,在本節中,我們將探討研究人員使用的重要方法。
馬賽克數據增強:這種數據增強方法將 4 張訓練圖像合二為一,使模型能夠學習在更廣泛的上下文中檢測對象,并減少對大小批量的需求。研究人員將其用作骨干訓練的 BoF 的一部分。
自我對抗訓練 (SAT):一種兩階段數據增強技術,其中網絡欺騙自己并修改輸入圖像以認為沒有對象。然后,它在這個修改后的圖像上進行訓練,以提高穩健性和泛化性。研究人員將其用作檢測器或網絡頭的 BoF 的一部分。
跨小批量歸一化 (CmBN):交叉迭代批量歸一化 (CBN) 的修改版,使訓練更適合單個 GPU。研究人員用作探測器 BoF 的一部分。
改進的空間注意力模塊 (SAM):研究人員將原始 SAM 從空間注意力修改為點注意力,增強了模型在不增加計算成本的情況下專注于重要特征的能力。用作 BoS 的一部分,作為網絡檢測器的附加塊。
然而,這還不是全部,YOLOv4 在 BoS 和 BoF 中使用了許多其他技術,例如作為 BoS 一部分的骨干網的 Mish 激活和跨級部分連接 (CSP)。所有這些優化修改為 YOLOv4 帶來了最先進的性能,尤其是在速度和準確性方面。
YOLOv5
雖然 YOLOv5 沒有附帶專門的研究論文,但該模型給所有開發人員、工程師和研究人員留下了深刻的印象。YOLOv5 在 YOLOv4 之后幾個月推出,沒有太大的改進,但速度略快。Ultralytics 設計的 YOLOv5 更易于實現,并且具有多種語言支持的更詳細的文檔,最值得注意的是 YOLOv5 基于 Pytorch 構建,使其易于開發人員使用。
與此同時,它的前輩稍微難以實現。Ultralytics 宣布 YOLOv5 為世界上最受歡迎的視覺 AI,此外,YOLOv5 還具有一些很棒的功能,例如用于模型導出的不同格式、用于使用您自己的數據進行訓練的訓練腳本,以及多種訓練技巧,如測試時增強 (TTA) 和模型集成。
易用性、持續更新、龐大的社區和良好的文檔使 YOLOv5 成為完美的緊湊型模型,它可以在輕量級硬件上運行,并且幾乎實時地提供不錯的準確性。YOLO 模型在 YOLOv5 到 YOLOv6 之后繼續發展,讓我們在下一節中探討一下。
YOLOv6
YOLOv6 是 YOLO 系列中的一次重大演變,它引入了一些關鍵的架構和訓練變化,以實現速度和準確性之間的更好平衡。值得注意的是,YOLOv6 以專注于工業應用而著稱。這種工業重點提供了部署就緒型網絡,并更好地考慮了實際環境的約束。
在速度和準確性之間取得平衡,它可以在常用硬件上運行,例如 Tesla T4 GPU,這使得在工業環境中部署對象檢測比以往任何時候都更容易。YOLOv6 并不是當時唯一可用的模型,還有 YOLOv5、YOLOX 和 YOLOv7 都是高效探測器部署的競爭候選者?,F在,讓我們討論一下 YOLOv6 引入的變化。
Backbone:研究人員使用 EfficientRep 構建主干,EfficientRep 是一種硬件感知型 CNN,具有用于小型模型(N 和 S)的 RepBlock,以及用于大型模型(M 和 L)的 CSPStackRep Block。
Neck:使用 Rep-PAN 拓撲,使用 RepBlock 或 CSPStackRep 塊增強 YOLOv4 和 YOLOv5 中修改后的 PAN 拓撲。這提供了來自主干網不同級別的更高效的特征聚合。
Head:YOLOv6 引入了 Efficient Decoupled Head,簡化了設計以提高效率。它采用混合通道策略,減少了中間 3×3 卷積層的數量,并與 backbone 和 neck 一起縮放寬度。
YOLOv6 還整合了其他幾種技術來提高性能。
標簽分配:利用任務對齊學習 (TAL) 來解決分類和框回歸任務之間的錯位。
Self-Distillation:它將 Self-Distillation 應用于分類和回歸任務,進一步提高了準確性。
損失函數:它使用 VariFocal Loss 進行分類,并結合使用 SIoU 和 GIoU Loss 進行回歸。
YOLOv6 代表了一種經過改進和增強的對象檢測方法,它建立在其前輩的優勢之上,同時引入了創新的解決方案來應對實際部署的挑戰。它專注于效率、準確性和工業適用性,使其成為工業應用的寶貴工具。
YOLOv7
雖然從技術上講,YOLOv6 是在 YOLOv7 之前引入的,但 YOLOv6 的生產版本是在 YOLOv7 之后推出的,并在性能上超越了它。然而,YOLOv7 引入了一個新穎的概念,稱其為可訓練的免費贈品袋 (BoF)。這包括一系列細粒度的改進,而不是徹底的改革。
這些改進主要集中在優化訓練過程和增強模型學習有效表示的能力,而不會顯著增加計算成本。以下是 YOLOv7 引入的一些主要功能。
模型重新參數化:YOLOv7 提出了一個有計劃的重新參數化模型,這是一種適用于不同網絡中的層的策略,具有梯度傳播路徑的概念。
動態標簽分配:使用多個輸出層訓練模型會帶來一個新問題:“如何為不同分支的輸出分配動態目標?為了解決這個問題,YOLOv7 引入了一種新的標簽分配方法,稱為粗到細鉛引導標簽分配。
擴展和復合縮放:YOLOv7 為對象檢測器提出了“擴展”和“復合縮放”方法,可以有效地利用參數和計算。
YOLOv7 專注于精細的細化和優化策略,以增強實時對象檢測器的性能。它強調可訓練的免費贈品袋、深度監督和架構改進,從而在不犧牲速度的情況下顯著提高準確性,使其成為 YOLO 系列中的寶貴進步。然而,進化繼續產生 YOLOv8,這是我們接下來的主題。
YOLOv8
YOLOv8 是 YOLO 系列實時對象檢測器的迭代版本,在準確性和速度方面提供尖端性能。但是,YOLOv8 沒有官方論文,但與 YOLOv5 類似,這是一個用戶友好的增強型 YOLO 對象檢測模型。YOLOv8 由 Ultralytics 開發,引入了新功能和優化,使其成為各種應用中各種對象檢測任務的理想選擇。以下是其功能的快速概述。
高級 Backbone 和 Neck 架構
無錨分體式 Ultralytics 頭:YOLOv8 采用無錨分體式 Ultralytics 頭,與基于錨的方法相比,這有助于提高準確性和更高效的檢測過程。
優化的準確性-速度權衡
除此之外,YOLOv8 還是 Ultralytics 維護良好的模型,提供了多種模型,每個模型都專門用于計算機視覺中的特定任務,如檢測、分割、分類和姿勢檢測。由于 YOLOv8 通過 Ultralytics 庫易于使用,讓我們在演示中嘗試一下。
YOLOv8 模型在各種基準測試數據集中實現了 SOTA 性能。例如, YOLOv8n 模型在 COCO 數據集上實現了 37.3 的 mAP (平均精度均值),在 A100 TensorRT 上實現了 0.99 毫秒的速度。接下來,讓我們看看 YOLO 家族是如何通過 YOLOv9 進一步演變的。
YOLOv9
與其前輩相比,YOLOv9 采用了不同的方法,直接解決了深度神經網絡中的信息丟失問題。它引入了可編程梯度信息 (PGI) 的概念和一種稱為廣義高效層聚合網絡 (GELAN) 的新架構,以應對信息瓶頸并確保訓練期間可靠的梯度流。
研究人員之所以引入 YOLOv9,是因為現有的方法忽略了這樣一個事實,即當輸入數據進行逐層特征提取和空間變換時,會丟失大量信息。這種信息丟失會導致梯度不可靠,并阻礙模型學習準確表示的能力。
YOLOv9 引入了 PGI,這是一種通過使用輔助可逆分支生成可靠梯度的新方法。此輔助分支為計算目標函數提供了完整的輸入信息,從而確保用于更新網絡權重的梯度信息量更大。輔助分支的可逆性質確保在前饋過程中不會丟失任何信息。
YOLOv9 還提出了 GELAN 作為一種新的輕量級架構,旨在最大化信息流并促進獲取相關信息以進行預測。GELAN 是 ELAN 架構的通用版本,利用任何計算塊,同時保持效率和性能。研究人員基于梯度路徑規劃設計了它,確保了通過網絡的高效信息流。
YOLOv9 通過關注信息流和梯度質量,為對象檢測提供了全新的視角。PGI 和 GELAN 的推出使 YOLOv9 有別于其前身。這種對深度神經網絡中信息處理基礎知識的關注可以提高性能,并更好地解釋對象檢測中學習過程。
YOLOv10
YOLOv10 的推出對于實時端到端對象檢測具有革命性意義。YOLOv10 超越了之前的所有速度和精度基準,實現了真正的實時對象檢測。YOLOv10 無需使用 NMS 檢測進行非極大值抑制 (NMS) 后處理。
這不僅提高了推理速度,還簡化了部署過程。YOLOv10 引入了一些關鍵功能,例如無 NMS 培訓和整體設計方法,使其在所有指標上都表現出色。
無 NMS 檢測:YOLOv10 提供了一種基于一致雙重分配的新穎無 NMS 訓練策略。它采用雙標簽分配(一對多和一對一)和一致的匹配指標,在訓練期間提供豐富的監督,同時在推理過程中消除 NMS。在推理過程中,僅使用 1 對 1 頭,從而實現無 NMS 檢測。
整體效率-精度驅動設計:YOLOv10 采用整體方法進行模型設計,優化各種組件以提高效率和準確性。它引入了輕量級分類頭、空間通道解耦下采樣和秩導向塊設計,以降低計算成本。
YOLO11:體系結構增強功能
YOLO11 于 2024 年 9 月發布。它經歷了一系列架構改進,并專注于在不犧牲準確性的情況下提高計算效率。
它引入了 C3k2 塊和 C2PSA 塊等新型組件,有助于改進特征提取和處理。這會導致性能略好,但模型的參數要少得多。以下是 YOLO11 的主要功能。
C3k2 模塊:YOLO11 引入了 C3k2 模塊,這是一種跨階段部分 (CSP) 瓶頸的計算高效實現。它取代了 backbone 和 neck 中的 C2f 塊,并采用兩個較小的卷積而不是一個大型卷積,從而減少了處理時間。
C2PSA 模塊:在 Spatial Pyramid Pooling – Fast (SPPF) 模塊之后引入跨階段部分空間注意力 (C2PSA) 模塊,以增強空間注意力。這種注意力機制使模型能夠更有效地關注圖像中的重要區域,從而有可能提高檢測準確性。
有了這個,我們討論了整個 YOLO 系列的對象檢測模型。但有一件事告訴我,進化不會就此止步,創新將繼續,我們將在未來看到更好的表現。
YOLO 模型的未來
YOLO 系列一直在突破計算機視覺的界限。它已經從一個簡單的架構演變成一個復雜的系統。每個版本都引入了新的功能并擴展了支持的任務范圍。
展望未來,提高準確性、速度和多任務能力的趨勢可能會繼續下去。潛在的發展領域包括以下內容。
改進的可解釋性:使模型的決策過程更加透明。
增強的穩健性:使模型對具有挑戰性的條件更具彈性。
高效部署:針對各種硬件平臺優化模型。
YOLO 模型的進步對各個行業都有重大影響。YOLO 執行實時對象檢測的能力有可能改變我們與視覺世界的交互方式。但是,解決道德考慮和潛在偏見很重要。確保公平、問責和透明對于負責任的創新至關重要。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.