陳虹伶,張建勛,朱佳寶,鄭集元
(重慶理工大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院, 重慶 400054)
豬肉因其纖維細(xì)軟、結(jié)締組織較少等原因[1],一直以來是人們最主要的肉類選擇。2017年全球豬肉產(chǎn)量為11 103.4萬噸,較2015年的10 996.9萬噸增長(zhǎng)0.97%。而隨著人們生活水平的不斷提高,消費(fèi)者對(duì)肉質(zhì)的要求也不斷提高。豬肉不僅要健康,而且要有營養(yǎng)價(jià)值和口感。決定豬肉品質(zhì)的因素有很多,主要包括遺傳、環(huán)境等,但其中對(duì)于評(píng)價(jià)整頭豬的肉質(zhì)最準(zhǔn)確的標(biāo)準(zhǔn)還是豬眼肌區(qū)域(俗稱里脊肉)[2]脂肪含量的高低情況。當(dāng)脂肪含量合適且分布均勻時(shí),營養(yǎng)價(jià)值高,口感好。而評(píng)價(jià)其脂肪含量高低情況的2個(gè)關(guān)鍵指標(biāo)又是其豬眼肌面積和背膘厚度,豬眼肌面積指豬最后肋骨處背最長(zhǎng)肌橫截面的面積,背膘厚度是皮膚到背最長(zhǎng)肌的外筋膜的距離。豬背膘厚和眼肌面積與豬瘦肉率直接相關(guān),在豬眼肌區(qū)域的質(zhì)量檢測(cè)和評(píng)價(jià)上作為2項(xiàng)重要的指標(biāo)參數(shù)深受重視,其精確測(cè)定具有重要意義。豬眼肌脂肪含量的檢測(cè)判斷也就成為判斷豬肉營養(yǎng)價(jià)值的一個(gè)十分重要的指標(biāo),也成為了研究人員的研究重點(diǎn)。
以往對(duì)于檢測(cè)豬肉脂肪含量的方法通常有以下3類:第1類是感官檢測(cè)法,通俗講就是檢測(cè)人員根據(jù)自己的實(shí)踐經(jīng)驗(yàn)來判斷豬肉的質(zhì)量,但缺點(diǎn)是容易受到主觀因素的影響,效率低、精度不高,從而很大范圍限制了該種檢測(cè)方法的應(yīng)用。第2類是理化檢測(cè)法,最經(jīng)典的一種方法為索氏提取法[3],其主要原理是利用脂溶劑抽提。這種方法能夠比較客觀、準(zhǔn)確地檢測(cè)出與豬肉脂肪相關(guān)的參數(shù)指標(biāo),精度也比較高,但缺點(diǎn)是必須屠宰生豬、進(jìn)行抽樣檢測(cè),對(duì)檢測(cè)對(duì)象具有很大破壞性。第三類是計(jì)算機(jī)視覺測(cè)定方法,例如超聲波檢測(cè)。國外,愛荷華州立大學(xué)Hassen等也研究了利用超聲波圖像來活體預(yù)測(cè)特定品種的豬和牛的肌內(nèi)脂肪含量,其研究結(jié)果顯示:超聲波檢測(cè)方法最大的優(yōu)點(diǎn)就是在不破壞檢測(cè)目標(biāo)的前提下獲得相應(yīng)的參數(shù)指標(biāo)[4]。但由于該技術(shù)的局限性,其方法對(duì)于不同豬種的魯棒性不夠[1]。
2013年,有人運(yùn)用傳統(tǒng)算法,利用灰度共生矩陣算法對(duì)豬眼肌B超圖像提取紋理特征量,再將提取的特征向量作為輸入數(shù)據(jù),用多項(xiàng)式核函數(shù)和RBF核函數(shù)以及相應(yīng)的參數(shù)組合設(shè)計(jì)了支持向量機(jī)分類器,從而得到豬眼肌脂肪含量檢測(cè)的分類結(jié)果[5]。在傳統(tǒng)的機(jī)器學(xué)習(xí)算法中,通常將圖像特征與分類或回歸分開,而且特征的提取規(guī)則往往是由人工設(shè)定的。實(shí)際應(yīng)用中,當(dāng)數(shù)據(jù)量過大且數(shù)據(jù)較復(fù)雜時(shí),這種方式提取到的特征往往并不具有代表性,無法表示不同類別數(shù)據(jù)間的獨(dú)特性,因此也就限制了識(shí)別精度。
相對(duì)于傳統(tǒng)算法,本文采用深度學(xué)習(xí)可以從大數(shù)據(jù)中自動(dòng)學(xué)習(xí)特征的表示,其可以包含成千上萬的參數(shù)。深層的網(wǎng)絡(luò)結(jié)構(gòu)通過一些簡(jiǎn)單的非線性映射關(guān)系組合以及更高層次的轉(zhuǎn)換,實(shí)現(xiàn)復(fù)雜函數(shù)的逼近,逐漸由低層到高層,使得特征的表示越來越抽象,對(duì)原始數(shù)據(jù)的刻畫就更本質(zhì)[6]。通過構(gòu)建神經(jīng)網(wǎng)絡(luò)可以將特征與回歸優(yōu)化兩者結(jié)合,達(dá)到更方便快捷的目的。
基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的深度學(xué)習(xí)表現(xiàn)出色,在世界各大計(jì)算機(jī)視覺挑戰(zhàn)賽中取得了優(yōu)異的成績(jī)[7]。深度卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的B超圖像的生豬脂肪含量檢測(cè)充分利用了圖形處理器(graphics processing unit,GPU)等現(xiàn)代硬件優(yōu)勢(shì),實(shí)時(shí)性更高,模型的泛化能力和魯棒性也得到了顯著增強(qiáng)。因此,深度卷積神經(jīng)網(wǎng)絡(luò)為B超圖像的生豬脂肪含量檢測(cè)的應(yīng)用提供了較好的思路。
本文主要從4個(gè)核心方面進(jìn)行研究:首先是B超圖像的獲取,然后對(duì)B超圖像進(jìn)行預(yù)處理,接著開展CNN網(wǎng)絡(luò)訓(xùn)練,最后進(jìn)行脂肪含量檢測(cè)。如圖1所示。
本文的實(shí)驗(yàn)數(shù)據(jù)來自重慶市畜牧科學(xué)研究院歷時(shí)2年采集到的135組生豬眼肌B超圖像,采用的B超設(shè)備是德國進(jìn)口獸用全數(shù)字B超儀。
每一組數(shù)據(jù)的獲得,都要經(jīng)過如下步驟:首先,用B超儀對(duì)準(zhǔn)生豬的背部,多次獲取眼肌區(qū)域的B超圖像,篩選出圖像清晰的作為最終保存的樣本圖像;然后,屠宰該頭生豬,對(duì)背部豬眼肌區(qū)域肉質(zhì)進(jìn)行理化的檢測(cè)以及相關(guān)的測(cè)量,并記錄檢測(cè)數(shù)據(jù)[5]。
圖1 豬眼肌B超圖像脂肪含量檢測(cè)流程
獲取的B超圖像形狀為245×309。根據(jù)大量B超圖像可以歸納出眼肌區(qū)域都在圖片上部分,為了提高準(zhǔn)確性,故對(duì)獲取的數(shù)據(jù)進(jìn)行預(yù)處理。由于活體背膘厚測(cè)量起止點(diǎn)位于B超影像中亮白弧線中間點(diǎn)的縱線上,起點(diǎn)為影像中最上端亮白弧線頂部的上緣(通常為弧線的中間),止點(diǎn)為眼肌上緣筋膜層形成的白色亮帶中間點(diǎn),如圖2所示。本文對(duì)活體背膘厚測(cè)量時(shí)將圖片高截取1/2,寬左截取30 pt,右截取30 pt。將圖片重新統(tǒng)一設(shè)置大小為127×249。
圖2 背膘厚度
活體眼肌面積測(cè)量起止點(diǎn)位于影像中眼肌筋膜層形成的,近似橢圓形的亮白弧線上,此亮白弧線上的任意一點(diǎn)均可作為起點(diǎn),止點(diǎn)應(yīng)與起點(diǎn)完全重合,如圖3所示。由于對(duì)眼肌面積測(cè)量時(shí)不用考慮最上端到眼肌邊緣距離,將圖片高的頂部截取15 pt,底截取1/2,寬左截取30 pt,右截取30 pt。將圖片重新統(tǒng)一設(shè)置大小為112×249。
由于深度學(xué)習(xí)具備需要大數(shù)據(jù)學(xué)習(xí)的特征,所以對(duì)數(shù)據(jù)集進(jìn)行增強(qiáng),本文利用圖像旋轉(zhuǎn)10°,左右裁剪30 pt,左右翻轉(zhuǎn)等方法將135組生豬眼肌B超圖像增加到4 050張,對(duì)應(yīng)以其眼肌面積與背膘厚度作為標(biāo)簽。數(shù)據(jù)的比例分配是隨機(jī)挑選70%作為訓(xùn)練集,30%作為測(cè)試集。
圖3 眼肌面積
卷積神經(jīng)網(wǎng)絡(luò)是模仿視覺神經(jīng)中單細(xì)胞和復(fù)雜細(xì)胞的視覺信息處理過程,包含卷積層、激勵(lì)層、池化層和全連接層等多層神經(jīng)網(wǎng)絡(luò)[8]。它不需要任何精確的數(shù)學(xué)表達(dá)式來表達(dá)輸入和輸出,只需要大量的數(shù)據(jù)集來學(xué)習(xí)輸入與輸出之間的映射關(guān)系。第1層一般是卷積層,本文設(shè)計(jì)一個(gè)二維卷積層Conv 2D對(duì)二維輸入進(jìn)行滑動(dòng)窗卷積,其中預(yù)測(cè)豬眼肌面積時(shí)輸入形狀參數(shù)為112×249×3,預(yù)測(cè)背膘厚度時(shí)輸入形狀參數(shù)為127×249×3。B超圖片為3通道,卷積核的數(shù)目為32,卷積核的大小為3×3。設(shè)計(jì)一個(gè)二維池化層MaxPooling2D,其中池化核的參數(shù)為2×2。Activation激活層對(duì)一個(gè)層的輸出施加激活函數(shù)。為了從卷積層過渡到全連接層,加入Flatten層來將輸入“壓平”,即把多維的輸入一維化。為了防止過擬合,加入Dropout,在訓(xùn)練過程中每次更新參數(shù)時(shí)可以隨機(jī)斷開0.5的輸入神經(jīng)元連接。本文選擇CNN模型時(shí),首先參照人臉關(guān)鍵點(diǎn)檢測(cè)的模型搭建,最初為3層網(wǎng)絡(luò),再經(jīng)過一層一層增加網(wǎng)絡(luò)層,最后發(fā)現(xiàn)5層的卷積神經(jīng)網(wǎng)絡(luò)的損失函數(shù)最小,效果最好。
對(duì)于學(xué)習(xí)率,首先選擇0.1,希望損失函數(shù)能快速下降,從最開始的4 152很快下降到589,最后下降到17,但是又發(fā)現(xiàn)波動(dòng)比較大。后將學(xué)習(xí)率逐步調(diào)小,直到當(dāng)學(xué)習(xí)率為0.01時(shí),用tensorbord顯示損失函數(shù)的變化情況,發(fā)現(xiàn)最開始下降很明顯,大約在30回合后接近飽和狀態(tài),后面的震蕩和抖動(dòng)都非常微小。選擇的小批量數(shù)據(jù)大小,也經(jīng)過多次測(cè)試,按照選擇最快性能提升的小批量數(shù)據(jù)大小進(jìn)行優(yōu)化,最終確定為32。根據(jù)在一段時(shí)間內(nèi)損失函數(shù)不再下降時(shí)就停止,在網(wǎng)絡(luò)訓(xùn)練的時(shí)候,初始階段使用10回合不下降規(guī)則,然后逐漸地選擇更久的回合,比如20回合不下降就停止,以此類推。
損失函數(shù)主要根據(jù)預(yù)測(cè)結(jié)果,衡量出模型預(yù)測(cè)能力的好壞。開始階段,本文選擇常用的MSE作為損失函數(shù),發(fā)現(xiàn)損失函數(shù)下降波動(dòng)比較大,易受局外點(diǎn)的影響。接著嘗試Huber,效果也不明顯。又因?yàn)閘og-cosh損失函數(shù)是一種應(yīng)用于回歸問題中的損失函數(shù),計(jì)算方式是預(yù)測(cè)誤差的雙曲余弦的對(duì)數(shù)。其優(yōu)點(diǎn)是對(duì)于很小的誤差來說,log(cosh(x))與(x2)/2很相近;而對(duì)于很大的誤差,則與abs(x)-log2很相近。也就是說,log-cosh損失函數(shù)在擁有MSE和Huber的所有優(yōu)點(diǎn)的同時(shí),還不會(huì)受局外點(diǎn)的太多影響,且在每一個(gè)點(diǎn)都是二次可導(dǎo)的。經(jīng)過多次實(shí)驗(yàn)比較最終確定log-cosh損失函數(shù)。
表1 網(wǎng)絡(luò)模型結(jié)構(gòu)超參數(shù)
因?yàn)镃PU的內(nèi)部結(jié)構(gòu)異常復(fù)雜,而GPU面對(duì)的則是類型高度統(tǒng)一的、相互無依賴的大規(guī)模數(shù)據(jù)和不需要被打斷的純凈的計(jì)算環(huán)境。所以GPU在大規(guī)模并發(fā)計(jì)算中越來越突出,應(yīng)用范圍逐漸變得廣泛,成為近年來的熱點(diǎn)話題之一。CPU與GPU呈現(xiàn)不同的結(jié)構(gòu),如圖4、5所示。
圖4 CPU結(jié)構(gòu)
圖5 GPU結(jié)構(gòu)
其中,綠色的是計(jì)算單元,橙紅色的是存儲(chǔ)單元,黃色的是控制單元。在計(jì)算速度方面,GPU已經(jīng)遠(yuǎn)遠(yuǎn)走在了 CPU的前面,且 GPU的價(jià)格也相對(duì)較低,使得運(yùn)用 GPU進(jìn)行科學(xué)運(yùn)算具有很高的性價(jià)比[9]。同時(shí),在大數(shù)據(jù)中可以利用SLI技術(shù)使用多個(gè)顯卡同時(shí)進(jìn)行科學(xué)運(yùn)算,計(jì)算能力得到成倍提高。
根據(jù)預(yù)測(cè)出的眼肌面積與背膘厚度與給定的公式進(jìn)行計(jì)算,從而得出豬肉脂肪含量評(píng)估豬肉的質(zhì)量。
本文將基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)實(shí)驗(yàn)?zāi)P团c最先進(jìn)的方法進(jìn)行比較,包括支持向量機(jī)算法設(shè)計(jì)的實(shí)驗(yàn)?zāi)P秃虰P神經(jīng)網(wǎng)絡(luò)[4]算法實(shí)驗(yàn)?zāi)P?。為了公平比較,本文在相同的輸入標(biāo)記下測(cè)試卷積神經(jīng)網(wǎng)絡(luò)實(shí)驗(yàn)?zāi)P?、支持向量機(jī)算法設(shè)計(jì)的實(shí)驗(yàn)?zāi)P秃虰P神經(jīng)網(wǎng)絡(luò)算法實(shí)驗(yàn)?zāi)P?。?shí)驗(yàn)數(shù)據(jù)一共獲得135組豬眼肌B超圖像以及對(duì)應(yīng)的已檢測(cè)脂肪含量數(shù)據(jù)。將數(shù)據(jù)增廣為4 050組,隨機(jī)將其中3 000組用于訓(xùn)練,剩余1 050組用于測(cè)試。這里,BP神經(jīng)網(wǎng)絡(luò)算法實(shí)驗(yàn)?zāi)P蛯⑤斎牍?jié)點(diǎn)數(shù)設(shè)計(jì)為12個(gè),輸出節(jié)點(diǎn)設(shè)計(jì)為3個(gè),將輸出層的每1個(gè)結(jié)點(diǎn)的輸出值設(shè)為0或1,將訓(xùn)練數(shù)據(jù)集分為脂肪含量過低、脂肪含量合適、脂肪含量過高3類,隱含層設(shè)計(jì)為1層,層內(nèi)的結(jié)點(diǎn)數(shù)確定為25個(gè),正確識(shí)別率可達(dá)60%。支持向量機(jī)算法設(shè)計(jì)的實(shí)驗(yàn)?zāi)P蛯⒂?xùn)練數(shù)據(jù)集分為脂肪含量過低、脂肪含量合適、脂肪含量過高3類,每2類樣本設(shè)計(jì)1個(gè)SVM進(jìn)行訓(xùn)練,每2個(gè)分類設(shè)計(jì)1個(gè)SVM進(jìn)行訓(xùn)練,將2類分別記為1和-1,正確識(shí)別率可達(dá)89%。而卷積神經(jīng)網(wǎng)絡(luò)實(shí)驗(yàn)?zāi)P筒捎?層卷積層、5層池化層和2層全連接層,為了提高網(wǎng)絡(luò)對(duì)豬眼肌B超圖像脂肪含量檢測(cè)分類的準(zhǔn)確率,在實(shí)驗(yàn)中本文設(shè)定網(wǎng)絡(luò)的學(xué)習(xí)速率為0.01,損失函數(shù)為L(zhǎng)og-cosh,batch-size取32。在實(shí)驗(yàn)中本文用 3 000組訓(xùn)練樣本數(shù)據(jù)集對(duì)網(wǎng)絡(luò)進(jìn)行反復(fù)訓(xùn)練,經(jīng)過訓(xùn)練后網(wǎng)絡(luò)達(dá)到穩(wěn)定,正確識(shí)別率可達(dá)95%。3種實(shí)驗(yàn)?zāi)P偷淖R(shí)別率見表2。
表2 BP神經(jīng)網(wǎng)絡(luò)、SVM與CNN識(shí)別率比較
本文基于深度學(xué)習(xí)的豬眼肌脂肪含量檢測(cè)實(shí)驗(yàn)硬件平臺(tái)為Intel(R)core(TM)i5-6400 CPU E7500 @ 2.70 GHz 2.71 GHz;內(nèi)存為8.00 GB;操作系統(tǒng)為Windows 10,64位。因?yàn)橛?xùn)練數(shù)據(jù)比較大,花費(fèi)時(shí)間較長(zhǎng)。為提高數(shù)據(jù)處理能力,本文在后來的實(shí)驗(yàn)中應(yīng)用了GPU加速器,采用的GPU為NVIDIA GEFORCE GTX 1080、內(nèi)存為8.00 GB、GPU的核心頻率為1 607/1 733 MHz。二者的實(shí)驗(yàn)情況比較見表3。
表3 CNN模型在CPU與GPU下的時(shí)間比較
本文采用基于深度學(xué)習(xí)的B超生豬脂肪含量檢測(cè)方法是無損檢測(cè)方法。首先,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理;然后,構(gòu)建神經(jīng)網(wǎng)絡(luò)CNN模型,將圖片導(dǎo)入模型進(jìn)行訓(xùn)練,利用回歸算法預(yù)測(cè)出豬眼肌面積和背膘厚度;最后,根據(jù)公式計(jì)算出豬肉脂肪含量。結(jié)合提取特征與預(yù)測(cè),更方便、高效,準(zhǔn)確率也更高。限于現(xiàn)在的條件,未來可以在以下兩個(gè)方面做進(jìn)一步加強(qiáng):第一,本文所提供的數(shù)據(jù)集只有135組生豬眼肌篩選后比較清晰的B超圖片,數(shù)據(jù)集比較有限,普遍性不夠高,今后應(yīng)進(jìn)一步擴(kuò)大數(shù)據(jù)集;第二,除了對(duì)生豬脂肪含量進(jìn)行檢測(cè),基于深度學(xué)習(xí)的B超脂肪含量檢測(cè)方法還可以為其他領(lǐng)域提供檢測(cè)思路,如牛肉、羊肉,甚至運(yùn)動(dòng)員的脂肪含量檢測(cè),進(jìn)一步拓展本文的應(yīng)用價(jià)值。