陳虹伶,張建勛,朱佳寶,鄭集元
(重慶理工大學 計算機科學與工程學院, 重慶 400054)
豬肉因其纖維細軟、結締組織較少等原因[1],一直以來是人們最主要的肉類選擇。2017年全球豬肉產量為11 103.4萬噸,較2015年的10 996.9萬噸增長0.97%。而隨著人們生活水平的不斷提高,消費者對肉質的要求也不斷提高。豬肉不僅要健康,而且要有營養價值和口感。決定豬肉品質的因素有很多,主要包括遺傳、環境等,但其中對于評價整頭豬的肉質最準確的標準還是豬眼肌區域(俗稱里脊肉)[2]脂肪含量的高低情況。當脂肪含量合適且分布均勻時,營養價值高,口感好。而評價其脂肪含量高低情況的2個關鍵指標又是其豬眼肌面積和背膘厚度,豬眼肌面積指豬最后肋骨處背最長肌橫截面的面積,背膘厚度是皮膚到背最長肌的外筋膜的距離。豬背膘厚和眼肌面積與豬瘦肉率直接相關,在豬眼肌區域的質量檢測和評價上作為2項重要的指標參數深受重視,其精確測定具有重要意義。豬眼肌脂肪含量的檢測判斷也就成為判斷豬肉營養價值的一個十分重要的指標,也成為了研究人員的研究重點。
以往對于檢測豬肉脂肪含量的方法通常有以下3類:第1類是感官檢測法,通俗講就是檢測人員根據自己的實踐經驗來判斷豬肉的質量,但缺點是容易受到主觀因素的影響,效率低、精度不高,從而很大范圍限制了該種檢測方法的應用。第2類是理化檢測法,最經典的一種方法為索氏提取法[3],其主要原理是利用脂溶劑抽提。這種方法能夠比較客觀、準確地檢測出與豬肉脂肪相關的參數指標,精度也比較高,但缺點是必須屠宰生豬、進行抽樣檢測,對檢測對象具有很大破壞性。第三類是計算機視覺測定方法,例如超聲波檢測。國外,愛荷華州立大學Hassen等也研究了利用超聲波圖像來活體預測特定品種的豬和牛的肌內脂肪含量,其研究結果顯示:超聲波檢測方法最大的優點就是在不破壞檢測目標的前提下獲得相應的參數指標[4]。但由于該技術的局限性,其方法對于不同豬種的魯棒性不夠[1]。
2013年,有人運用傳統算法,利用灰度共生矩陣算法對豬眼肌B超圖像提取紋理特征量,再將提取的特征向量作為輸入數據,用多項式核函數和RBF核函數以及相應的參數組合設計了支持向量機分類器,從而得到豬眼肌脂肪含量檢測的分類結果[5]。在傳統的機器學習算法中,通常將圖像特征與分類或回歸分開,而且特征的提取規則往往是由人工設定的。實際應用中,當數據量過大且數據較復雜時,這種方式提取到的特征往往并不具有代表性,無法表示不同類別數據間的獨特性,因此也就限制了識別精度。
相對于傳統算法,本文采用深度學習可以從大數據中自動學習特征的表示,其可以包含成千上萬的參數。深層的網絡結構通過一些簡單的非線性映射關系組合以及更高層次的轉換,實現復雜函數的逼近,逐漸由低層到高層,使得特征的表示越來越抽象,對原始數據的刻畫就更本質[6]。通過構建神經網絡可以將特征與回歸優化兩者結合,達到更方便快捷的目的。
基于卷積神經網絡(CNN)的深度學習表現出色,在世界各大計算機視覺挑戰賽中取得了優異的成績[7]。深度卷積神經網絡實現的B超圖像的生豬脂肪含量檢測充分利用了圖形處理器(graphics processing unit,GPU)等現代硬件優勢,實時性更高,模型的泛化能力和魯棒性也得到了顯著增強。因此,深度卷積神經網絡為B超圖像的生豬脂肪含量檢測的應用提供了較好的思路。
本文主要從4個核心方面進行研究:首先是B超圖像的獲取,然后對B超圖像進行預處理,接著開展CNN網絡訓練,最后進行脂肪含量檢測。如圖1所示。
本文的實驗數據來自重慶市畜牧科學研究院歷時2年采集到的135組生豬眼肌B超圖像,采用的B超設備是德國進口獸用全數字B超儀。
每一組數據的獲得,都要經過如下步驟:首先,用B超儀對準生豬的背部,多次獲取眼肌區域的B超圖像,篩選出圖像清晰的作為最終保存的樣本圖像;然后,屠宰該頭生豬,對背部豬眼肌區域肉質進行理化的檢測以及相關的測量,并記錄檢測數據[5]。

圖1 豬眼肌B超圖像脂肪含量檢測流程
獲取的B超圖像形狀為245×309。根據大量B超圖像可以歸納出眼肌區域都在圖片上部分,為了提高準確性,故對獲取的數據進行預處理。由于活體背膘厚測量起止點位于B超影像中亮白弧線中間點的縱線上,起點為影像中最上端亮白弧線頂部的上緣(通常為弧線的中間),止點為眼肌上緣筋膜層形成的白色亮帶中間點,如圖2所示。本文對活體背膘厚測量時將圖片高截取1/2,寬左截取30 pt,右截取30 pt。將圖片重新統一設置大小為127×249。

圖2 背膘厚度
活體眼肌面積測量起止點位于影像中眼肌筋膜層形成的,近似橢圓形的亮白弧線上,此亮白弧線上的任意一點均可作為起點,止點應與起點完全重合,如圖3所示。由于對眼肌面積測量時不用考慮最上端到眼肌邊緣距離,將圖片高的頂部截取15 pt,底截取1/2,寬左截取30 pt,右截取30 pt。將圖片重新統一設置大小為112×249。
由于深度學習具備需要大數據學習的特征,所以對數據集進行增強,本文利用圖像旋轉10°,左右裁剪30 pt,左右翻轉等方法將135組生豬眼肌B超圖像增加到4 050張,對應以其眼肌面積與背膘厚度作為標簽。數據的比例分配是隨機挑選70%作為訓練集,30%作為測試集。

圖3 眼肌面積
卷積神經網絡是模仿視覺神經中單細胞和復雜細胞的視覺信息處理過程,包含卷積層、激勵層、池化層和全連接層等多層神經網絡[8]。它不需要任何精確的數學表達式來表達輸入和輸出,只需要大量的數據集來學習輸入與輸出之間的映射關系。第1層一般是卷積層,本文設計一個二維卷積層Conv 2D對二維輸入進行滑動窗卷積,其中預測豬眼肌面積時輸入形狀參數為112×249×3,預測背膘厚度時輸入形狀參數為127×249×3。B超圖片為3通道,卷積核的數目為32,卷積核的大小為3×3。設計一個二維池化層MaxPooling2D,其中池化核的參數為2×2。Activation激活層對一個層的輸出施加激活函數。為了從卷積層過渡到全連接層,加入Flatten層來將輸入“壓平”,即把多維的輸入一維化。為了防止過擬合,加入Dropout,在訓練過程中每次更新參數時可以隨機斷開0.5的輸入神經元連接。本文選擇CNN模型時,首先參照人臉關鍵點檢測的模型搭建,最初為3層網絡,再經過一層一層增加網絡層,最后發現5層的卷積神經網絡的損失函數最小,效果最好。
對于學習率,首先選擇0.1,希望損失函數能快速下降,從最開始的4 152很快下降到589,最后下降到17,但是又發現波動比較大。后將學習率逐步調小,直到當學習率為0.01時,用tensorbord顯示損失函數的變化情況,發現最開始下降很明顯,大約在30回合后接近飽和狀態,后面的震蕩和抖動都非常微小。選擇的小批量數據大小,也經過多次測試,按照選擇最快性能提升的小批量數據大小進行優化,最終確定為32。根據在一段時間內損失函數不再下降時就停止,在網絡訓練的時候,初始階段使用10回合不下降規則,然后逐漸地選擇更久的回合,比如20回合不下降就停止,以此類推。
損失函數主要根據預測結果,衡量出模型預測能力的好壞。開始階段,本文選擇常用的MSE作為損失函數,發現損失函數下降波動比較大,易受局外點的影響。接著嘗試Huber,效果也不明顯。又因為log-cosh損失函數是一種應用于回歸問題中的損失函數,計算方式是預測誤差的雙曲余弦的對數。其優點是對于很小的誤差來說,log(cosh(x))與(x2)/2很相近;而對于很大的誤差,則與abs(x)-log2很相近。也就是說,log-cosh損失函數在擁有MSE和Huber的所有優點的同時,還不會受局外點的太多影響,且在每一個點都是二次可導的。經過多次實驗比較最終確定log-cosh損失函數。

表1 網絡模型結構超參數
因為CPU的內部結構異常復雜,而GPU面對的則是類型高度統一的、相互無依賴的大規模數據和不需要被打斷的純凈的計算環境。所以GPU在大規模并發計算中越來越突出,應用范圍逐漸變得廣泛,成為近年來的熱點話題之一。CPU與GPU呈現不同的結構,如圖4、5所示。

圖4 CPU結構

圖5 GPU結構
其中,綠色的是計算單元,橙紅色的是存儲單元,黃色的是控制單元。在計算速度方面,GPU已經遠遠走在了 CPU的前面,且 GPU的價格也相對較低,使得運用 GPU進行科學運算具有很高的性價比[9]。同時,在大數據中可以利用SLI技術使用多個顯卡同時進行科學運算,計算能力得到成倍提高。
根據預測出的眼肌面積與背膘厚度與給定的公式進行計算,從而得出豬肉脂肪含量評估豬肉的質量。
本文將基于深度學習的卷積神經網絡實驗模型與最先進的方法進行比較,包括支持向量機算法設計的實驗模型和BP神經網絡[4]算法實驗模型。為了公平比較,本文在相同的輸入標記下測試卷積神經網絡實驗模型、支持向量機算法設計的實驗模型和BP神經網絡算法實驗模型。實驗數據一共獲得135組豬眼肌B超圖像以及對應的已檢測脂肪含量數據。將數據增廣為4 050組,隨機將其中3 000組用于訓練,剩余1 050組用于測試。這里,BP神經網絡算法實驗模型將輸入節點數設計為12個,輸出節點設計為3個,將輸出層的每1個結點的輸出值設為0或1,將訓練數據集分為脂肪含量過低、脂肪含量合適、脂肪含量過高3類,隱含層設計為1層,層內的結點數確定為25個,正確識別率可達60%。支持向量機算法設計的實驗模型將訓練數據集分為脂肪含量過低、脂肪含量合適、脂肪含量過高3類,每2類樣本設計1個SVM進行訓練,每2個分類設計1個SVM進行訓練,將2類分別記為1和-1,正確識別率可達89%。而卷積神經網絡實驗模型采用5層卷積層、5層池化層和2層全連接層,為了提高網絡對豬眼肌B超圖像脂肪含量檢測分類的準確率,在實驗中本文設定網絡的學習速率為0.01,損失函數為Log-cosh,batch-size取32。在實驗中本文用 3 000組訓練樣本數據集對網絡進行反復訓練,經過訓練后網絡達到穩定,正確識別率可達95%。3種實驗模型的識別率見表2。

表2 BP神經網絡、SVM與CNN識別率比較
本文基于深度學習的豬眼肌脂肪含量檢測實驗硬件平臺為Intel(R)core(TM)i5-6400 CPU E7500 @ 2.70 GHz 2.71 GHz;內存為8.00 GB;操作系統為Windows 10,64位。因為訓練數據比較大,花費時間較長。為提高數據處理能力,本文在后來的實驗中應用了GPU加速器,采用的GPU為NVIDIA GEFORCE GTX 1080、內存為8.00 GB、GPU的核心頻率為1 607/1 733 MHz。二者的實驗情況比較見表3。

表3 CNN模型在CPU與GPU下的時間比較
本文采用基于深度學習的B超生豬脂肪含量檢測方法是無損檢測方法。首先,對數據進行預處理;然后,構建神經網絡CNN模型,將圖片導入模型進行訓練,利用回歸算法預測出豬眼肌面積和背膘厚度;最后,根據公式計算出豬肉脂肪含量。結合提取特征與預測,更方便、高效,準確率也更高。限于現在的條件,未來可以在以下兩個方面做進一步加強:第一,本文所提供的數據集只有135組生豬眼肌篩選后比較清晰的B超圖片,數據集比較有限,普遍性不夠高,今后應進一步擴大數據集;第二,除了對生豬脂肪含量進行檢測,基于深度學習的B超脂肪含量檢測方法還可以為其他領域提供檢測思路,如牛肉、羊肉,甚至運動員的脂肪含量檢測,進一步拓展本文的應用價值。