吳夢茹,謝秋菊*,李 欣,劉洪貴
(1.東北農(nóng)業(yè)大學(xué) 電氣與信息學(xué)院,黑龍江 哈爾濱 150030;2.東北農(nóng)業(yè)大學(xué) 動物科學(xué)技術(shù)學(xué)院,黑龍江 哈爾濱 150030)
伴隨著規(guī)模化養(yǎng)殖生產(chǎn)的快速發(fā)展,福利化生豬養(yǎng)殖方式引起人們極大的重視[1]。群體化的飼養(yǎng)過程中,對生豬個體自動識別是實現(xiàn)疾病預(yù)防和健康養(yǎng)殖的關(guān)鍵。以往的豬只個體識別方式主要包括佩戴耳標、豬身涂抹顏色進行標記等[2],然而這些方式均會對豬造成不同程度的應(yīng)激反應(yīng)。
隨著計算機視覺不斷向前發(fā)展,國內(nèi)外學(xué)者紛紛開始使用圖像和視頻技術(shù)來探究一種非接觸式生豬個體識別方法[3-5]。例如,Naoki等[6]提出特征空間方法進行豬臉識別,通過手動裁剪面部圖像并對重要部位進行分割,對16個類別的識別率達到了97.9%,但是其方法無法實現(xiàn)自動化的豬臉特征提取。相比于機器學(xué)習(xí),深度學(xué)習(xí)憑借深度的網(wǎng)絡(luò)結(jié)構(gòu)能夠更好地提取圖像特征,進而達到更優(yōu)的分類效果。2018年Hansen等[7]以實際農(nóng)場的豬臉作為數(shù)據(jù)集,使用自身搭建的基于卷積神經(jīng)網(wǎng)絡(luò)分類模型進行測試,較好地完成豬臉識別,并通過加權(quán)梯度類激活熱力圖(Grad-CAM)證明了網(wǎng)絡(luò)特征的提取來源。秦興等[8]利用雙線性卷積神經(jīng)網(wǎng)絡(luò)進行生豬面部特征提取,在其測試圖像集上達到了95.73%的識別準確率。王榮等[2]利用改進的86層多尺度網(wǎng)絡(luò)結(jié)構(gòu)進行豬臉識別,通過對比7組不同環(huán)境下的測試數(shù)據(jù),所提出模型的識別率均高于其他網(wǎng)絡(luò)。為了更好地在有限的豬臉數(shù)據(jù)集基礎(chǔ)上提取豬的面部特征,謝碧森等[9]在VGG16的基礎(chǔ)上使用遷移學(xué)習(xí)技術(shù)來識別家豬圖像,在經(jīng)過微調(diào)后其準確率達84%。然而,上述這些豬臉識別方法主要關(guān)注于面部特征的提取、融合以及模型的搭建,而未關(guān)注不同圖像預(yù)處理方法對豬臉識別效果的影響,也未能根據(jù)不同網(wǎng)絡(luò)模型下臉部特征提取效果、模型收斂速度等因素相互作用對整個識別方法造成的性能影響。
因此,本文綜合考慮影響特征提取效果、模型收斂速度的因素,基于不同深度學(xué)習(xí)模型,以豬的面部圖像作為研究對象建立豬臉識別模型,以養(yǎng)殖場采集的豬臉圖像作為數(shù)據(jù)集,對建立的不同深度模型在不同的數(shù)據(jù)預(yù)處理方法下進行訓(xùn)練及測試,通過比對不同方法的識別效果,以期為實現(xiàn)精準化養(yǎng)殖中個體識別提供可靠參考。
本研究數(shù)據(jù)集來源于黑龍江省亞布力林業(yè)局生豬養(yǎng)殖基地,在自然條件下,隨機選取6只成年種豬進行了拍攝。豬只在生長過程中面部變化較大,所提取特征會有所差別,但隨著豬只的成年其面部不會再發(fā)生較大變化,因此適合作為豬臉識別的研究目標。由于該場對所有豬只均采用分欄管理,當(dāng)豬在定位欄中進食時,使用普通的智能手機從不同方向捕獲豬臉以獲取多角度的面部數(shù)據(jù)。與此同時,為保證豬只個體識別的實用性,采集過程并未對樣本面部進行任何清潔處理。其中,每頭豬的拍攝時長均為2min,采用30幀/秒(FPS)的采樣率和1280×720像素的分辨率。在獲取豬的視頻數(shù)據(jù)后,使用OpenCV對視頻流進行分幀,每5幀間隔完成一次圖像的獲取工作,每頭豬均可獲得700張的圖像數(shù)據(jù)。
由于截取的數(shù)據(jù)集中會存在一些圖像模糊、不包含或只有部分豬臉等無法使用的圖像數(shù)據(jù),因此,需要先通過手動方式對數(shù)據(jù)集進行初步篩選。為防止因視頻獲取圖片數(shù)據(jù)集中相鄰圖片相似度過高的問題,以結(jié)構(gòu)相似性(SSIM)[10]作為一種全參考的圖像質(zhì)量評價指標來對兩張圖像之間的相似性進行衡量。本文將SSIM的閾值范圍設(shè)為0.6,即當(dāng)兩張圖片的SSIM指標值低于0.6時認為兩張圖片不同并得以保留。
為適應(yīng)訓(xùn)練模型的輸入大小,將1280×720像素大小的圖片按比例縮放為256×256像素大小的圖片進行統(tǒng)一輸入,邊緣之處用黑色進行填充,以防止因豬臉變形而影響后續(xù)網(wǎng)絡(luò)對于特征的提取。按比例縮放前后豬臉的效果如圖1所示。
圖1 按比例縮放前后效果
應(yīng)用限制對比度自適應(yīng)直方圖均衡化(CLAHE)是在自適應(yīng)直方圖均衡化(AHE)基礎(chǔ)上進行的優(yōu)化,通過對每個小區(qū)域塊都使用對比度限制,從而克服自適應(yīng)直方圖均衡化(AHE)過度放大噪音的問題。直方圖均衡化處理可以使得圖像的灰度級范圍拉開或灰度分布更加均勻,進而增大反差。為了探究本研究數(shù)據(jù)集經(jīng)過灰度與CLAHE相結(jié)合的方式處理后是否仍能表現(xiàn)出優(yōu)于彩色圖像的豬只分類效果,本文將設(shè)計三組對比實驗,分別采用彩色(RGB)、灰度(Grayscale)以及灰度和CLAHE(Grayscale+CLAHE)相結(jié)合的方法來對豬臉數(shù)據(jù)集分別進行相應(yīng)的預(yù)處理工作。其中,未處理前、經(jīng)過AHE和CLAHE分別處理后的效果,如圖2所示。圖2 D則是三者像素在整個亮度區(qū)間的分布,可以明顯看出,經(jīng)CLAHE處理后的豬臉灰度圖像輪廓以及毛發(fā)特征更加的明顯。
圖2 不同處理后的效果圖
實際養(yǎng)殖環(huán)境中豬只行為比較活躍,個體在識別過程中可能面臨著臉部圖像被欄桿或污漬遮擋、面部角度不同等多變環(huán)境問題的挑戰(zhàn)。因此,為增強模型的健壯性,本研究對已采集到的數(shù)據(jù)集共使用了三種離線增強方式,對圖片進行翻轉(zhuǎn),隨機旋轉(zhuǎn)30°,模擬隨機遮擋三種方式實現(xiàn)數(shù)據(jù)擴充。數(shù)據(jù)增強后的示例如圖3所示。
圖3 數(shù)據(jù)增強前后的示例圖
本文使用的是包含6頭豬的256×256像素大小的圖像數(shù)據(jù)集,將每頭豬均視為一類則共計6個類別(記作P1-P6),經(jīng)離線數(shù)據(jù)增強后,原數(shù)據(jù)集由經(jīng)SSIM篩選后的2611張圖片擴充到10444張。訓(xùn)練集(Training set)、驗證集(Validation set)和測試集(Test set)的劃分比例為6:2:2,如表1所示。其中,訓(xùn)練集用于模型的訓(xùn)練,而驗證集得出的分類準確率用于模型訓(xùn)練過程中參數(shù)調(diào)整的參考指標,最后測試集則用來對各個模型的性能進行評估。
表1 數(shù)據(jù)集劃分
深層的網(wǎng)絡(luò)有助于挖掘數(shù)據(jù)中深層的特征,可以使得網(wǎng)絡(luò)擁有更強大的性能,因此本研究采用深度學(xué)習(xí)模型進行豬臉識別方法的研究。而卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)是計算機視覺的應(yīng)用中幾乎都在使用的一種深度學(xué)習(xí)模型,其基本結(jié)構(gòu)包括輸入層、輸出層和多個隱藏層,如圖4所示。輸入層主要用于輸入圖像信息的獲??;隱藏層主要進行特征提取然后調(diào)整權(quán)重;輸出層則用來對接隱藏層并將模型結(jié)果進行輸出。本文將在同一數(shù)據(jù)集下建立基于GoogleNet、ResNet、SE-ResNet、DenseNet的四種模型,探索較優(yōu)的豬臉識別方法。其中,為了更好地對比這四組模型網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)良,本文將四組模型的參數(shù)量進行了一定調(diào)整,使得每個模型參數(shù)量被精簡到同一數(shù)量級范圍內(nèi),再使用同一數(shù)據(jù)集對模型進行訓(xùn)練和測試。
圖4 模型結(jié)構(gòu)
2.2.1 GoogleNet
GoogleNet采用了一些創(chuàng)新性的設(shè)計,通過加入1×1卷積和Inception等結(jié)構(gòu)來增加網(wǎng)絡(luò)的非線性以及實現(xiàn)不同尺度特征的提取[11]。Inception結(jié)構(gòu)如圖5所示。
圖5 Inception結(jié)構(gòu)
本文在不改變GoogleNet網(wǎng)絡(luò)層數(shù)的前提下,將標準化的豬臉數(shù)據(jù)由輸入層輸入網(wǎng)絡(luò),經(jīng)9層的Inception model結(jié)構(gòu)來對不同尺度的面部特征進行提取,并在訓(xùn)練過程中完成整個隱藏層的權(quán)值調(diào)整工作,最后在輸出層完成豬只個體的分類。由于本文所采集到的豬臉數(shù)據(jù)集較小,使用過多的卷積核來進行特征的提取存在著參數(shù)量過多、訓(xùn)練時間過長等問題,為避免出現(xiàn)這些問題,本文對GoogleNet卷積核的個數(shù)進行了適當(dāng)?shù)恼{(diào)整,模型具體細節(jié)如表2所示。
表2 GoogleNet網(wǎng)絡(luò)結(jié)構(gòu)
2.2.2 ResNet
ResNet通過批量標準化(Batch Normalization,BN)[12]和殘差塊(Residual Block)解決了因網(wǎng)絡(luò)層數(shù)加深而導(dǎo)致的梯度消失或者爆炸以及退化問題[13-14]。本文建立了具有3層結(jié)構(gòu)ResNet模型,其殘差結(jié)構(gòu)如圖6所示。由于殘差結(jié)構(gòu)的存在,模型訓(xùn)練過程中所提取到的淺層豬臉特征可直接傳遞給深層網(wǎng)絡(luò)并與之結(jié)合,有助于網(wǎng)絡(luò)模型得到更好的效果。
圖6 殘差結(jié)構(gòu)[14]
本文在ResNet50模型基礎(chǔ)上對相應(yīng)卷積核進行了微調(diào),調(diào)整后的模型ResNET結(jié)構(gòu)如表3所示。
表3 ResNet網(wǎng)絡(luò)結(jié)構(gòu)
2.2.3 SE-ResNet
SE-ResNet是在ResNet模型的基礎(chǔ)之上引入了SE單元模塊,進而構(gòu)建了整個網(wǎng)絡(luò)的架構(gòu)[15-17]。圖7為SEInception模塊結(jié)構(gòu)。對于本文中尺寸為256×256×3的彩色豬臉特征圖,首先通過全局平均池化對每個特征分布進行壓縮,得到1×1×3的實數(shù)數(shù)列;然后引入兩個全連接層,通過ReLU激活函數(shù)與sigmiod門控制機制,獲得各通道間相關(guān)性,完成特征的重新標定。
圖7 SE-Inception模塊
2.2.4 DenseNet
稠密連接網(wǎng)絡(luò)(DenseNet)的主體由交替串聯(lián)的稠密塊(Denseblock)和過渡塊(Transition block)構(gòu)成[18]。不同于ResNet從網(wǎng)絡(luò)的深度方面改進網(wǎng)絡(luò)的結(jié)構(gòu)來提高表達能力,DenseNet則是通過特征圖重用的方式來探索網(wǎng)絡(luò)的潛能[19],減少了參數(shù)。在本文建立的DenseNet模型進行豬臉識別訓(xùn)練的過程中,網(wǎng)絡(luò)中每一層的輸入變成所有前面層的疊加(concat),然后把它的特征圖傳遞給所有接下來的網(wǎng)絡(luò)層,這樣可以實現(xiàn)豬只面部特征的重用,加深網(wǎng)絡(luò)的學(xué)習(xí)。本文建立的DenseNet網(wǎng)絡(luò)結(jié)構(gòu),如表4所示。
表4 DenseNet網(wǎng)絡(luò)結(jié)構(gòu)
為獲得最優(yōu)的訓(xùn)練模型,在使用訓(xùn)練集對網(wǎng)絡(luò)訓(xùn)練時,統(tǒng)一采用自適應(yīng)矩陣估計算法對模型進行優(yōu)化,損失值的計算則采用交叉熵損失函數(shù)。初始學(xué)習(xí)率設(shè)置為0.0001,監(jiān)控驗證集準確率從而動態(tài)觸發(fā)學(xué)習(xí)率衰減策略,每次調(diào)整為上一次的十分之一。每次迭代包含的樣本數(shù)為32,整個訓(xùn)練過程共迭代50次。
本文所有方法程序運行環(huán)境均為Python3.7.6、Tensorflow-GPU 2.3.0,操作系統(tǒng)為win10 64位,硬件平臺CPU為Intel i7-9700 3.0GHZ,內(nèi)存為32G,顯卡為NVIDIA GTX1660,6G顯存。
在模型訓(xùn)練過程中,統(tǒng)一使用三通道的彩色圖片數(shù)據(jù)集進行訓(xùn)練并對精簡后的 GoogleNet、ResNet、SEResNet和DenseNet這4種不同深度模型的豬臉識別方法進行評估。將準確率(Accuracy)和損失值(Loss)作為性能評價的重要指標,在50個迭代周期內(nèi),觀察并對比4組不同網(wǎng)絡(luò)模型中這兩個指標的變化。模型損失值和準確率兩個評價指標的變化情況如圖8所示。從圖8中可以看出,隨著迭代次數(shù)的增加,模型訓(xùn)練集的準確率均呈現(xiàn)上升趨勢,損失值均呈現(xiàn)下降趨勢,最終二者在一定范圍內(nèi)震蕩并達到穩(wěn)定。與其他3組模型相比較而言,精簡后的DenseNet在訓(xùn)練集上的表現(xiàn)性能最優(yōu)。在20個迭代周期后便可達到收斂,其準確率在98%左右震蕩,損失函數(shù)值則在0.09左右震蕩。而其他模型30個迭代周期內(nèi)雖然也能達到收斂但準確率不高,而且訓(xùn)練過程震蕩幅度過大。
圖8 不同模型訓(xùn)練過程中訓(xùn)練集的準確率和損失值變化
為檢驗已訓(xùn)練模型在測試集上的分類效果,本文采用混淆矩陣作為各模型性能評價指標,測試集使用的是未參與訓(xùn)練的彩色豬臉圖片。在測試集中6頭豬即6個分類一共2091張圖片。各模型測試的混淆矩陣如圖9所示。通過對各個模型的混淆矩陣進行對比可知,DenseNet在訓(xùn)練完成后對于6組豬臉數(shù)據(jù)的分類效果最好,2091個測試集中有31張豬臉圖像出現(xiàn)了分類錯誤。根據(jù)混淆矩陣對各個模型的精確率(Precision)、召回率(Recall)以及特異率(Specificity)進行計算并求取平均值,其結(jié)果如表5所示,DenseNet在對6組豬的測試集圖片數(shù)據(jù)分類時平均精確率、平均召回率以及平均特異率分別為98.47%、98.45%和99.70%,明顯優(yōu)于其他模型。
圖9 各個模型混淆矩陣
表5 各個模型精確率、召回率和特異率
由此可見,DenseNet在新的測試圖片上也能表現(xiàn)出超過其他模型的優(yōu)良性能,可以很好地實現(xiàn)豬個體識別。
本研究在保留彩色圖像的基礎(chǔ)上又分別使用灰度化和CLAHE這兩種方式分別對數(shù)據(jù)集進行了處理,共形成彩色圖片(RGB)、灰度圖片(Grayscale)、經(jīng) CLAHE處理的灰度圖片(Grayscale+CLAHE)這三組不同的豬臉數(shù)據(jù)集。為遵循單一變量原則,將這三組數(shù)據(jù)集作為自變量分別放入同一種模型(DenseNet)中進行訓(xùn)練、測試,觀察該模型在不同數(shù)據(jù)集下訓(xùn)練速度和測試集準確率的變化情況。DenseNet在三種預(yù)處理方式下測試集準確率和損失值,如表6所示。訓(xùn)練過程中準確率(Accuracy)和損失值(Loss)變化,如圖10所示。
表6 不同處理方式的損失值和準確率
圖10 不同處理方式的準確率和損失值
由圖10可以看出,模型迭代不到20次其損失值就已達到穩(wěn)定,比使用RGB數(shù)據(jù)集收斂速度更快一些,由此可知將圖片數(shù)據(jù)集進行灰度化可以加快模型的收斂。這是由于拍攝環(huán)境復(fù)雜性和家豬膚色的相似性,使用彩色圖像會受到明亮度等多種因素的影響[20],而使用灰度圖像可以迫使模型在訓(xùn)練過程中更專注于豬臉本身圖案特征的提取而非顏色。經(jīng)CLAHE處理后豬只面部會更加清晰,毛發(fā)等特征也會更加明顯,有利于模型的學(xué)習(xí),進而在測試集上分類效果要比灰度處理方式更好一些。但相比于彩色處理測試集高達98.52%的準確率,剩余兩種預(yù)處理方式準確率要差一些。如若實際養(yǎng)殖場景中光照條件比較差,采用灰度與CLAHE圖片預(yù)處理方式則可以為其提供一種良好的解決方案。
(1)本文以豬場采集的豬臉視頻作為數(shù)據(jù)集,通過SSIM指標和離線方式分別對數(shù)據(jù)進行篩選和增強后,建立的DenseNet模型在測試集上識別精度最高可達98.52%,為探索非接觸式豬個體識別提供參考。
(2)在不改變模型結(jié)構(gòu)的基礎(chǔ)上,對DenseNet卷積核個數(shù)進行微調(diào),不僅可以保證較好的分類效果,還可以大幅度減少參數(shù)量,進而縮短模型的訓(xùn)練時間。
(3)對圖像進行灰度化處理可以加速模型的收斂速度,使用灰度化與CLAHE相結(jié)合的數(shù)據(jù)預(yù)處理方式雖不如彩色圖像分類準確率高,但其在光照條件較差的養(yǎng)殖場地有很好的應(yīng)用前景。
(4)SSIM對于初步的篩選至關(guān)重要。由視頻流分幀獲取數(shù)據(jù)集后,原數(shù)據(jù)集中很多圖片是高相似度的圖像,這些質(zhì)量不高的圖像不利于模型的訓(xùn)練。