李 杜
(蘭州職業技術學院 信息工程學院, 甘肅 蘭州 730070)
近年來,人工智能(AI)技術在各個領域嶄露頭角,在生態學領域的應用更是受到廣泛關注。AI的強大計算能力和智能分析能力幫助人們更深入地認識自然環境,推動環境保護,實現可持續發展的目標。目前已經出現很多成熟的機器視覺或機器學習算法模型,如用于圖像識別的LeNet[1]、AlexNet[2]、GoogLeNet[3]、VGG系列[4]等。利用攝像頭、衛星以及無人機等設備采集的大量數據,結合深度學習算法,通過人工智能的圖像識別技術,能夠更快速、準確地進行野生動植物種群的識別和監測。這為生物多樣性研究提供了全新的手段,也為瀕危物種保護提供了更有力的支持。
水母是海洋等水生環境中常見的浮游生物,是海葵、海蜇、海龜等一些海洋生物的主要食物來源,對于海洋食物鏈的平衡和海洋生態系統的穩定具有重要的作用。為了更好地掌握水母對海洋生態系統的影響,學術界正在開展相關研究,包括監測水母的數量和分布,探討其與氣候變化、海洋污染等環境問題之間的關系,以制訂科學合理的保護和管理策略。
通過強大的圖像識別網絡模型,結合各種硬件平臺精準識別各類水母,并統計不同海洋區域的水母種群變化數據,以便研究人員能夠在分析量化數據后,采用更理想的可持續的方法來管理水母種群,使其在海洋生態系統中發揮其天然的生態功能,同時減少可能的負面影響。這對保護海洋環境、維護地球的生態平衡意義重大。
本文使用ResNet18預訓練模型,通過對Kaggle的Jellyfish Image Dataset公共數據集進行遷移學習[5],規避了大規模數據訓練成本過高的問題,并在此基礎上進行訓練后剪枝[6]操作,獲得了處理速度更快且精度更高的輕量化模型,這將極大地提高不同種類水母的識別精度和效率。
卷積神經網絡(Convolutional Neural Networks,CNN)是一類專門用于處理網絡數據的深度學習模型,廣泛應用于計算機視覺任務,如圖像和視頻識別、圖像分類、物體檢測等。CNN的設計靈感主要來自生物學中視覺系統的工作原理,模擬了人類視覺系統對視覺層次的處理方式。CNN包括的核心模塊有:卷積層、池化層、激活函數和全連接層。
卷積層(Convolutional Layer)利用卷積操作可以有效提取局部特征,通過在輸入數據上滑動卷積核(Filter)來檢測不同的特征,如邊緣、紋理等。池化層(Pooling Layer)用于減小數據尺寸、降低計算復雜度,同時保留重要的信息;常用的池化操作包括最大池化和平均池化。激活函數(Activation Function)通常為引入非線性,使得神經網絡能夠學習復雜的模式;常用的激活函數包括ReLU(Rectified Linear Unit)等。全連接層(Fully Connected Layer)在卷積層之后,用于整合卷積層提取的特征;這一層的神經元與前一層的所有神經元相連,通常用于輸出最終的分類結果。
層與層之間的參數共享和局部連接的特性使得CNN對于圖像等數據的處理更加高效。CNN的特點在于它擁有局部感知域,還可以進行權重共享。權重共享使得網絡學習具有平移不變性,而局部感知域使網絡對局部特征有更好的提取能力。CNN成功應用于圖像數據的有效處理和特征提取能力,使其成為計算機視覺領域的重要工具。除圖像處理外,CNN也被用于處理其他類型的網格數據,如語音識別、自然語言處理等。
AlexNet是一種深度卷積神經網絡,由亞歷克斯·克里切夫斯基(Alex Krizhevsky)、伊利亞·蘇茨克沃(Ilya Sutskever)和杰弗里·辛頓(Geoffrey Hinton)在2012年設計的,它在當時的ImageNet圖像分類挑戰賽中取得了SOTA,標志著深度學習在計算機視覺領域的崛起。AlexNet包含8個學習層,其中有5個卷積層和3個全連接層。AlexNet 在卷積層后引入了局部響應歸一化,這有助于增加模型的泛化能力。此外,為了防止過擬合,AlexNet 引入了隨機失活(Dropout)技術,即在訓練過程中以一定的概率隨機關閉一些神經元,這有助于提高模型的泛化性能。AlexNet 是首個在GPU上進行了大規模并行處理的深度學習模型,這一點也促使了深度學習在工業界的廣泛應用,因為GPU相比于傳統的CPU能夠更有效地處理深度學習任務。
AlexNet的成功奠定了深度學習在計算機視覺領域的地位,啟發了后續許多深度神經網絡的設計。由于硬件和算法的進步,一些后續的模型如VGG、GoogLeNet和ResNet等在結構上進行了更深入的探索,并在性能上取得了更好的結果。
VGG16(Visual Geometry Group 16-layer)問世于2014年,是一款強大的面向機器視覺任務的卷積神經網絡架構,其設計簡單而有效,成為了深度學習領域的經典模型之一。VGG16包含16個學習層,其中包括13個卷積層和3個全連接層。與之前的模型相比,VGG16的深度相對較大,但結構相對更簡單。VGG16采用了統一的卷積核尺寸,即3×3的卷積核,這種設計有助于減少參數數量,并且通過多個較小的卷積層堆疊,網絡可以學習更復雜的特征。在卷積層之后,VGG16使用最大池化層來減小特征圖的尺寸,有助于保留重要的特征并降低計算復雜性。與AlexNet一樣,VGG16采用了線性修正單元(Rectified Linear Unit,ReLU)作為激活函數,增加了網絡的非線性。 類似于AlexNet,VGG16在設計時也考慮了多尺度的特征,通過對輸入圖像進行裁剪和縮放來增加訓練數據的多樣性。VGG16在網絡的頂部包含三個全連接層,最后一個全連接層輸出類別概率。不同于AlexNet中的局部響應歸一化,VGG16中并沒有采用參數共享的方法,這導致了模型的參數量相對較大。
VGG16的設計簡單、清晰,易于理解和實現。盡管它在一些計算資源有限的情況下可能較為昂貴,但它成為了許多后續卷積神經網絡的基礎。繼VGG16成功之后,后續的VGG19等模型也相繼提出。
本文針對水母圖像分類識別任務,基于遷移學習的ResNet18算法,并融合了后訓練剪枝等技術,有效提升了圖像分類識別效率。采用遷移學習的方法解決訓練數據不足的問題。運用ResNet18預訓練網絡模型,利用該網絡模型在大規模數據集上已經學習到的知識,充分利用數據樣本間的相關性,利用水母圖像公共數據集J對ResNet18預訓練模型進行再次訓練,并根據任務需要回歸出相應分類概率值。在取得更新后預訓練模型的基礎上,進行后訓練剪枝操作,通過主動去掉一些分支來降低過擬合的風險,測試時間開銷降低,從而獲得更加輕便的網絡模型,使其能夠更容易地部署在移動電話等弱算力機器上,以方便用戶使用。
在各個領域使用廣泛的機器學習[7]算法通常是根據已有數據集訓練出一個已經獲得知識的網絡模型,再利用該完成訓練的網絡模型對新的數據樣本進行推理預測。而遷移學習是將已經學到的知識,應用到具有一定數據相關性的新任務當中,以較小的學習代價滿足當前任務的需要。這類似人類的思維過程,當我們學會如何駕駛汽車以后,再學習駕駛電動汽車就會得心應手。
1.領域
領域(Domain)是算法模型進行學習的對象。領域的構成主要包括兩個部分:樣本特征空間X及數據樣本的概率分布P(X)。可以用D來表示一個Domain,而用P表示一個概率分布。在遷移學習中,會涉及兩個基本領域:源領域(Source Domain)和目標領域 (Target Domain)。一般用Ds表示源領域,而用Dt表示目標領域。
2.任務
任務(Task)是遷移學習的目標,主要由兩個部分構成:標簽空間Y及其所對應的函數f。如果用Y表示標簽空間,則與Y相對應的學習函數可以用f(·)表示。與之相關的源領域空間和目標領域空間分別由Ys和Yt表示。
3.遷移學習模型
若給定源領域Ds和源任務Ts,以及目標領域Dt和目標任務Tt的情況下,遷移學習的目標則是當Ds≠Dt或Ts≠Tt的情況下,使用由Ds和Ts所獲得的知識,來增強目標學習函數ft(·) 的預測能力。遷移學習的工作流程如圖1所示。
從圖1中可以看出,遷移學習利用在歷史任務中所學習到的知識,具體如樣本數據特征、網絡模型參數等,來進一步拓展在目標任務中的學習效果,最終得到滿足當前任務的網絡模型。

圖1 遷移學習的工作示意圖
對于深度網絡模型而言,當網絡層數過深時會存在梯度消失[8]或梯度爆炸的問題。當梯度消失的情況出現時,在反向傳播的過程中,每當向前傳播一層,均需要乘以一個小于1的誤差梯度。可以使用對數據進行標準化處理或者對權重進行初始化以及批量歸一化[9]等方法來解決梯度消失或梯度爆炸問題。此外,深度網絡會出現退化問題(Degradation Problem),而ResNet的提出較好地解決了此問題。
ResNet(殘差網絡)是一種深度卷積神經網絡架構,它主要通過引入殘差塊(Residual Block)來解決深度神經網絡訓練中的梯度消失和梯度爆炸問題。ResNet18是ResNet的一個常見變體,是計算機視覺任務中常用的輕量級深度學習模型之一。
1.殘差結構
ResNet可以由兩種不同的殘差結構組成,其中針對網絡層數較淺的情況(如18層和34層)可以使用殘差塊(Residual Block,圖2左);而對于層數較深的網絡(如50層,101層和152層)則使用瓶頸層(BottleNeck Block,圖2右)。

圖2 兩種殘差單元結構
由圖2可知,Residual Block的參數個數為3×3×64×64 + 3×3×64×64=73,728個,而BottleNeck Block的參數量為1×1×256×64+3×3×64×64+1×1×64×256=69,632個。使用1×1的卷積核對輸入特征數據進行維度大小的升降,以控制參數量。
2.淺層ResNet網絡模型
由于本文側重于模型輕量化的研究,如何使用容量更小、更易部署到移動邊緣設備以達到對水母圖像的快速識別是本文研究的重點,所以選取了網絡層數較淺、參數量較少的ResNet18輕便模型作為本文方案的基礎算法,它的結構如表1所示。

表1 ResNet18網絡結構
本文所用網絡結構中,FLOPS為1.8×109,Conv2的第一層為實線殘差結構(輸入圖像的高、寬和通道數都發生了變化),其通過最大池化進行下采樣后會得到維度大小為[56,56,64]的特征圖,恰好是實線殘差結構(輸入特征矩陣與輸出特征矩陣維度未發生改變,故可直接進行Add操作)所要求的輸入特征矩陣Shape。而Conv3的第一層為虛線殘差結構,輸入特征矩陣Shape為[56,56,64],而輸出特征矩陣Shape則是[28,28,128]。
3.批量歸一化
BN的目標是將一個批次樣本(Batch)特征映射(Feature Map)的每個通道維度都滿足均值為0、方差為1的標準正態分布,以便加速網絡學習的收斂并提高準確率。在對各個通道進行具體處理時,通過計算得到μ和σ2向量,即一個均值和方差對應一批Feature Map的同一個通道。
理論上需要對整個訓練集的特征圖進行計算,再實施標準化處理,但對于大型數據集而言,顯然是不實際的,所以在對網絡進行訓練的過程中需要持續計算每個Batch的均值和方差,然后使用移動平均記錄統計后的均值和方差。在訓練完成后,可以近似地將所統計的均值和方差等同于整個訓練集的均值和方差。最后,在驗證及預測環節,使用統計得到的均值和方差的近似結果進行標準化操作。該過程可以用公式表示如下:
(1)
(2)
(3)
(4)
首先,通過(1)(2)計算出各個Channel(一批數據xi、同一個通道)所對應的均值μ和方差σ2,再由(3)(4)(引入ε可以防止分母為0),最終使用學習到的參數γ和β分別對方差和均值進行調整,得到均值0、方差1的符合標準正態分布的數據yi。
4.后訓練剪枝
本文在對水母小規模數據集進行微調(Fine-Tuning)訓練所得模型的基礎上,為了使得到的模型更加輕量化,使用后訓練剪枝的方法減少模型的計算量并使得模型更適合在資源受限的環境中部署。具體步驟如下:
(1) 模型微調:對預訓練ResNet18模型進行Fine-Tuning。在微調期間,模型將在水母數據集上進行進一步訓練。微調的目的是進一步優化模型,使其適應水母圖像識別任務。
(2)訓練后剪枝:完成微調后,剪枝操作被引入。剪枝的目的是去除模型中冗余的參數(權重)或神經元,達到模式輕量化。通常,剪枝操作會基于一些準則,例如權重的大小或梯度的大小。
后訓練剪枝的優勢是能夠在模型訓練完成后通過去除冗余參數來提高模型的效率,降低計算和存儲成本。剪枝有導致一定性能損失的可能。但總體而言,后訓練剪枝是深度學習模型優化的一種策略,使得模型更適用于實際應用中的資源受限環境。相關核心代碼如下:
tensor_to_module_metadata = get_tensor_to_module_metadata(spec.tensor_to_metadata)
tensor_to_inputs_weight_indices = spec.tensor_to_inputs_weight_indices
tensor_to_outputs_weight_indices = spec.tensor_to_outputs_weight_indices
tensor_to_input_activation_indices = spec.tensor_to_input_activation_indices
for tensor_id, module_metadata in tensor_to_module_metadata.items():
module_metadata = tensor_to_module_metadata[tensor_id]
metadata = spec.tensor_to_metadata[tensor_id]
for param in metadata.non_tracers:
if len(param.shape) >0:
module = module_metadata.get('module', None)
pruned = generate_pruned_weight(
weight=param.data,
input_weight_indices=tensor_to_inputs_weight_indices.get(
tensor_id, [None])[0],
output_weight_indices=tensor_to_outputs_weight_indices.get(
tensor_id, [None])[0],
module=module,
)
param.data = pruned
if tensor_id in tensor_to_input_activation_indices:
insert_subselection(
module_metadata,
tensor_to_input_activation_indices[tensor_id],
is_not_ane=is_not_ane,
baseline=baseline,
channel_axis=metadata.channel_axis,
)
本文采用Jellyfish Image Dataset公共數據集的圖像樣本作為訓練和測試對象。該數據集包含6種分類的水母圖像,它們分別為:Barrel_Jellyfish、Blue_Jellyfish、Compass_Jellyfish、Lions_Mane_Jellyfish、Mauve_Stinger_Jellyfish和Moon_Jellyfish。每種水母圖像均有150張訓練樣本和10張以內的驗證和測試樣本,且每張圖像樣本為224×224像素大小的RGB圖像,屬于小規模數據集。其樣本示例如圖3所示。

圖3 Jellyfish Image Dataset圖像樣本示例
該圖像數據集的樣本水母外觀變化十分多樣,且由于這些圖像是在水下拍攝所得,所以圖像中一般都會不同程度地包含噪聲信息,使得圖像識別算法面臨不小的挑戰,因此該水母圖像識別任務具有相當難度。
本文使用一個具有兩層卷積層和一層池化層的CNN并選取成熟網絡模型AlexNet、Vgg16及ResNet18的預訓練模型,使用Jellyfish Image Dataset進行訓練或者Fine-Tuning。通過量化指標和訓練曲線變化趨勢,選定相應的網絡模型,作為本文對水母圖像分類進行遷移學習的基本方法。不同方法的30輪Fine-Tuning曲線變化情況如圖4至圖7所示。

圖4 在簡單CNN上的訓練曲線變化圖

圖5 在AlexNet上的Fine-Tuning曲線變化圖
由圖4至圖7可以看出,在用本文所搭建的簡單CNN對水母數據集進行訓練的過程中,訓練曲線(圖中實線)與驗證曲線(圖中虛線)相對于采用其他方法更加擬合,但由于其最終訓練精度和驗證精度較低,其準確率僅為41%,無法完全滿足任務需要,故無法采用。
而AlexNet、Vgg16及ResNet18所達到的準確率分別為59%、77%和79%,其中對ResNet18的30輪訓練量化細節如表2所示。
在此三種網絡模型中,ResNet18的訓練曲線相對于其他兩者也更加擬合,故本文采用Fine-Tuning后的ResNet18網絡模型作為本文的基礎方法。

圖6 在Vgg16上的Fine-Tuning曲線變化圖

圖7 在ResNet18上的Fine-Tuning曲線變化圖

表2 對ResNet18的30輪訓練情況量化表
為了獲得更加輕便的ResNet18,本文在Fine-Tuning后的ResNet18網絡模型基礎之上,進行結構化剪枝操作,最終所得的模型參數量由初始的11,179,590個降至4,340,314個。本文通過從訓練、驗證及測試數據集中選取10次圖像樣本,且每次放回并隨機選取16張圖像樣本,計算預測結果的平均測試精度,最終得到82%的準確率,證明該模型可以有效滿足水母圖像識別任務的需要。幾種方法的相關指標量化結果如表3所示。

表3 不同方法相關指標量化對比表
本文針對水母圖像識別任務,將ResNet18預訓練模型固有的知識體系通過小規模公共數據集Jellyfish Image Dataset進行遷移學習,在Fine-Tuning成本很小的情況下,使得ResNet18網絡模型更適合水母圖像識別任務,并在達到較高識別精度的前提下,實現了模型輕量化的目標,在水生物智能監測與水生態保護領域具有一定的實用價值和學術參考意義。