鄭倩,李琦
(內蒙古科技大學信息工程學院,內蒙古 包頭 014010)
近年來,牛的身份識別已被廣泛應用于各種場合,有效識別牛個體有助于牛的保險業務的發展,可以解決理賠牛和承保牛是否匹配的問題[1]。傳統的圖像識別方法主要分為特征提取和分類2 個階段,一般通過提取顏色、形狀和紋理作為圖像的特征,基于牛唇紋的牛身份識別主要是提取紋理特征。 2013 年NOⅤIYANTO 等[2]使用SIFT 方法提取特征實現對牛身份的識別。將涂滿墨水的牛唇部印在白紙上,所提出的匹配細化技術成功地減少了錯誤匹配。2015 年AHMED 等[3]提出了一個基于生物特征不變的加速魯棒特征SURF 的牛唇紋識別系統,目的是使用更少量的特征點來獲得最佳精度,縮短了系統完成識別所需的時間。2018 年,KUSAKUNNIRAN 等[4]提出了基于唇紋圖像的多通道局部二值模式LBP 牛身份識別方法,利用多通道局部二值模式從唇紋圖像中提取特征。目前已有的傳統識別方法和基于紋理的特征提取技術無法在無約束環境下進行動物識別[5]。如今基于深度學習的生物特征識別技術在識別物種或動物個體方面獲得了更多的關注。KUMAR 等[6]利用深度學習方法,使用卷積神經網絡CNN、SDAE 和DBN 分別獲得75.98%、88.46%和95.99%的識別準確率,在牛唇紋識別方面得到了較好的效果。用深度卷積神經網絡提取牛個體突出特征,與數據庫中的特征信息進行對比,從而實現對牛個體的有效識別[7]。深度學習相較于傳統方法,可以更加準確地提取特征信息[8]。
大多數圖像識別方法是利用分類的方法進行識別,在網絡上訓練就要確定待分類的類別,這對于類別種類多且每個類別樣本數較少的識別來說難以訓練出效果好的模型,本文選用孿生神經網絡(Siamese Networ)作為基本的網絡模型。相對于其他的特征提取算法,此模型在穩定性和識別的準確率方面都有較大的提升。
目前還沒有公開的牛唇紋圖像數據集,所以實驗使用自制的數據集,采集自內蒙古自治區的牧場,采集時間分別為2020 年9 月和2021 年6 月,拍攝對象為健康的安格斯牛和西門塔爾牛。實驗所需圖片應有清晰可見的牛唇紋理,所以要求拍攝過程中牛較為穩定。拍攝時間選擇牛在牛架上打耳標前,用3 000 萬像素的相機拍攝牛臉圖像,并標記好耳標號,將采集好的牛臉圖像中的牛唇紋部分裁剪下來保存,建立牛唇紋數據集。裁剪后的圖像如圖1 所示。

圖1 牛唇紋數據集部分圖像
實驗共采集了200 多頭牛的牛唇紋圖像,每頭牛圖像若干張。最終選擇174 頭牛作為數據集,共計13 734 張圖像。
牛唇紋模型的基本結構如圖2 所示,孿生神經網絡主要是輸入2 個需要測試的圖像,利用孿生神經網絡進行特征提取,通過ⅤGG16 訓練得到2 個一維向量,將特征提取后的2 個一維向量相減取絕對值。最后利用全連接層判斷2 張圖片的相似性。若結果接近1,表示輸入進來的圖像相似性高;若結果接近0,表示輸入進來的圖像相似性低。

圖2 Siamese-ⅤGG16 模型結構圖
Siamese 網絡也叫孿生神經網絡,網絡主要由2 個相同的模型分支子網絡構成,分支網絡主要用來訓練輸入圖像的特征信息,再根據特征信息相比較計算出相似度。孿生神經網絡有X1和X2這2 個輸入,這2個輸入使用的是同一個神經網絡W,也就是權值共享。利用神經網絡將2 個輸入映射到新的空間,形成輸入,在新的空間可表示為GW(X1)、GW(X2)。通過Loss計算評價2 個輸入的相似度。訓練孿生網絡時,訓練參數為2 張輸入圖像及標簽,通過輸入圖像類型來給定標簽值,輸入為同一類別時標簽記為1,反之記為0。因為孿生神經網絡有著特殊的結構,其輸入是一組樣本數據,可以是2 張同一類別的圖片,也可以是2張不同類別的樣本,這樣可以擴充網絡輸入的數量。
Siamese 網絡模型的分支子網絡由ⅤGGNet 組成,ⅤGGNet 模型是由SIMONYAN 等在2014 年提出的,其中ⅤGG16 模型結構包括卷積層、最大池化層和Flatten 層,可以分為5 個卷積Block 部分,每個Block又由卷積層和最大池化層組成,隨著卷積層一層層運算,最后一個Block 將輸出的特征層平鋪成一維數據用于分類。使用(Binary Cross Entropy,BCE)作為損失函數,利用損失函數對輸出圖像的每個像素進行預測分類,求目標與預測值之間的差距,實現圖像識別。
Siamese-ⅤGG16 網絡模型的訓練是基于深度學習,框架為TensorFlow2 框架,使用Ubundu16.04.1 操作系統,并使用cuDNN 庫加速GPU 計算。本文研究的模型是用Python 語言實現的。
首先向孿生神經網絡模型輸入圖像,經過多層網絡訓練,Conv1-2 包括2 次3×3 卷積網絡,1 次2×2最大池化,輸出的特征層為64 通道;Conv3-4 包括2次3×3 卷積網絡,1 次2×2 最大池化,輸出的特征層為128 通道;Conv5-7 包括3 次3×3 卷積網絡,1 次2×2 最大池化,輸出的特征層為256 通道;Conv8-10包括3 次3×3 卷積網絡,1 次2×2 最大池化,輸出的特征層為512 通道;Conv11-13 包括3 次3×3 卷積網絡,1 次2×2 最大池化,輸出的特征層為512 通道。然后對結果進行平鋪,最后進行2 次神經元為4 608的全連接層全連接,連接到數據集類別的維度上,用于分類。模型的損失函數采用交叉熵函數,將全連接層加入Dropout 層防止過擬合。Relu 函數作為非線性激活函數,池化方式為平均池化,使用Adam 優化算法優化模型,牛唇紋理圖像數據集中訓練集占90%、測試集占10%。
本文使用所選用的模型,在自建的牛唇紋圖像數據集上,完成了不同Batch_Size 大小、不同學習率情況下的實驗,并將對應的實驗結果進行分析。
不同學習率下的loss 曲線如圖3 所示。不同學習率下的準確率數值如圖4 所示。

圖3 不同學習率下的loss 曲線圖

圖4 不同學習率下的準確率數值圖
通過實驗對比發現,隨著Batch_size 增大,訓練速度提高,內存占用率增加。當其他參數不變,學習率LR為0.01 時,loss 曲線出現震蕩的現象;當LR為0.000 1 時,損失函數減小過快導致過擬合。最終模型參數Batch_size 的大小設置為32,LR設置為1e-3,迭代輪數epoch 為100。在一定的epoch 下,損失降為0.5以下,訓練集loss 曲線和驗證集loss 曲線都趨于平緩,最后趨于穩定。結果顯示,該牛唇紋識別模型能夠很好地比較出輸入圖片的相似性,具有較好的識別率,最終識別準確率為98.9%。
根據訓練之后的模型,輸入2 張圖片進行預測,實驗效果驗證如圖5 所示。從圖可以看出,同一頭牛的不同牛唇紋圖像相似度接近于100%;不同頭牛的牛唇紋圖片相似度低,更接近于0。通過以上實驗結果可知,結合這種訓練方式,Siamese-ⅤGG16 模型對牛唇紋圖片相似性的判斷有很好的效果,在牛唇紋識別方面可以獲得更高的準確率。

圖5 實驗效果驗證