摘要:隨著人工智能技術的日新月異,神經網絡模型的復雜性與精細度正以空前的速度增長。卷積神經網絡(Convolu?tional Neural Networks, CNN) ,作為深度學習領域的關鍵技術之一,其在圖像識別、目標檢測等任務中展現出卓越性能。鑒于CNN在深度、廣度及模塊多樣性上的顯著特點,本文聚焦于ultralytics的YOLOv8這一前沿開源目標檢測項目,深入剖析其網絡架構的核心組成與工作原理,并結合項目源碼闡述關鍵層(如卷積層、池化層、殘差連接層、上采樣層、連接層) 的功能及其可訓練參數的計算方法。
關鍵詞:卷積神經網絡;YOLOv8;網絡架構;可訓練參數
中圖分類號:TP391.4 文獻標識碼:A
文章編號:1009-3044(2025)09-0025-04 開放科學(資源服務) 標識碼(OSID) :
0 引言
目標檢測作為計算機視覺領域研究的重點和熱點。自2016 年Joseph Redmon 首次提出YOLO(Youonly Look Once) 算法以來,經過持續演進、深度迭代與持續優化,現已發展到第10個版本-YOLOv10。隨著版本的升級,模型網絡架構逐漸優化,參數量逐步增加,檢測速度更快,算法精度更高,結構設計更加靈活。毛少華[1]等人詳細分析了YOLOv1~YOLOv8的算法原理,歸納了各個版本的損失函數及其改進,并對其應用場景進行分類。王鑫杰[2]等人對YOLOv1~YO?LOv6算法的創新點、優點和局限性進行描述。周晉偉[3]等人將YOLO系列算法與已有物體檢測算法進行對比,總結了YOLO的特點,指出YOLOv算法未來的發展趨勢。徐彥威[4]等人對YOLOv1~YOLOv9的網絡架構、損失函數進行對比分析。隨著技術的發展,YOLO 目標檢測算法速度更快,精度更高,廣泛應用于自動駕駛、工業檢測、安防多個領域。
本文主要介紹CNN的常見模塊:卷積層和批量歸一化層(Batch Normalization Layer,BN Layer) ,并以YOLOv8為例,分析YOLOv8的網絡結構和詳細計算各個模塊的可訓練參數。
1 CNN 關鍵層功能解析
卷積神經網絡的整體架構分為輸入層、卷積層、池化層和全連接層[5]。神經網絡的復雜性決定了其參數的設定,其中部分參數會在訓練過程中動態調整與優化,以適應學習任務的需求,例如:卷積權重參數(在PyTorch框架中表現為Conv1d/2d/3d函數和批量歸一化函數) 。部分參數被設定為固定值,不會在訓練過程進行更新,包括池化層、激活函數以及損失函數等組件的參數,它們保持恒定不變。
隨著神經網絡深度和廣度的擴展,其結構日益復雜,泛化能力顯著提升。在此背景下,模型的可訓練參數數量成為評估模型性能與復雜度的關鍵指標。本文以PyTorch這一流行的人工智能框架為例,將深入探討卷積層(Convolutional Layer) 和批量歸一化層的具體應用、功能實現以及參數計算方式,以助力更高效的模型設計與優化。
1.1 Conv卷積
在Pytorch框架中,卷積層通常使用以下函數實現:nn.Conv1d/2d/3d、nn.ConvTranspose1d/2d/3d、nn.La?zyConv1d/2d/3d、nn. LazyConvTranspose1d/2d/3d、nn.Unfold/fold函數。在目標檢測領域,以nn.Conv2d最為常用。其函數原型及參數說明如下:
torch. nn. Conv2d(in_channels, out_channels, ker?nel_size,stride=1,padding=0,dilation=1,groups=1,bias=True,padding_mode=′zeros′,device=None,dtype=None)
Conv2d的權重參數計算公式:
可訓練參數=(輸入通道數/組數) ×卷積寬度×卷積高度×輸出通道數 (1)
根據不同的配置參數(如卷積核大小、步長、填充方式等) ,常見卷積模式如圖1所示。
1.2 BN批量歸一化
批量歸一化是一種加速深度網絡訓練的技術。它通過減少內部協變量位移(Internal Covariate Shift) 來提升訓練速度和模型性能,改善梯度傳播,強化模型的泛化性能。歸一化技術衍生出BatchNorm、Layer?Norm、InstanceNorm、GroupNorm四種模式。Yuxin Wu,Kaimin He[6]對這四種歸一化技術原理進行深入分析,如圖2所示。在Pytorch框架中,這些函數實現為nn.BatchNorm1d/2d/3d、nn.LazyBatchNorm1d/2d/3d、nn.In?stanceNorm1d/2d/3d、nn.GroupNorm等。
其函數原型與參數說明如下:
torch.nn.BatchNorm2d(num_features,eps=1e05,mo?mentum=0.1, affine=True, track_running_stats=True, de?vice=None,dtype=None)
BatchNorm2d 中包含可訓練參數,參數計算公式為:
權重參數=輸入參數×2 (3)
2 YOLOv8模型架構
根據RangeKing@github 繪制的YOLOv8 的網絡架構圖,其整體結構分為Backbone、Neck、Head三部分。Backbone負責提取特征,主要由卷積模塊(Con?Module)、CSPLayer_2Conv 以及SPPF 三類模塊組成;Neck主要負責多尺寸特征的融合,通過Shotcut層連接Backbone部分Stage Layer2/3/4的輸出以提升特征表現能力。Head 部分采用解藕頭結構(Decoupled-Head) ,由卷積模塊和Conv2d組成,負責邊界框回歸和分類任務的損失計算。
3 網絡結構參數說明
YOLOv8n的網絡框架總共包含23個模塊,可訓練參數模塊17個,無可訓練參數6個,神經網絡225 層。當目標檢測數量為80時,全部參數3 157 200個,可訓練參數3 157 184個。
根據官方提供的配置文件,以YOLOv8.yaml 為例,文件中提供了nc、scales、backbone、head四類配置參數。具體含義如下:
nc:目標檢測數量
scales:模型深度和寬度縮放因子,第一列控制模型深度,第三列控制模型寬度,第三列控制模型最大通道數。其中n→YOLOv8n模型,s→YOLOv8s模型,m→YOLOv8m 模型,l→YOLOv8l 模型、x→YO?LOv8x模型。
backbone:backbone網絡骨架的參數,對文件中四種類型數據格式進行說明。
Head:head部分神經網絡的組成部分。有nn.Upsample、Concat、C2f、Conv、Detect五種成分。其中,C2f與Conv的參數釋義與Backbone一致。其他三種釋義如下。
4 訓練參數計算
YOLOv8的主要包含Conv、C2f、SPPF、Upsample、Concat、Detect六類模塊,均繼承自nn.Module類。其中,Upsample和Concat模塊無可訓練參數。Conv模塊包含一個二維卷積層、一個批量歸一化層和一個激活函數。C2f 模塊包含兩個Conv 對象和一個多層的Bottleneck結構,其層數對應backbone和head參數中的重復次數。Bottleneck模塊由兩個Conv對象組成,當shotcut值為True且輸入參數c1、c2相等時進行殘差連接。SPPF由兩個Conv對象和一個二維最大池化層組成。各層的詳細可訓練參數計算方式如表9所示。
5 總結
本文詳細分析了YOLOv8的神經網絡架構,介紹了22個模塊的可訓練參數計算方法。通過對各模塊可訓練參數的計算,為YOLO的架構優化、參數調整以及模型的輕量化部署提供指導。作為 one-stage 檢測算法的典型代表[7]。YOLO系列算法經過不斷地發展,在目標檢測、圖像分割、姿態估計、視覺跟蹤等工業領域得到廣泛應用。未來,隨著技術的進一步發展,YOLO 算法在更多領域將展現出巨大的潛力和價值。