張艦艦
(杭州電子科技大學計算機學院,浙江 杭州 310018)
肥胖是許多國家人們的健康問題之一,也是許多疾病的誘因。計算卡路里攝入量是對抗肥胖的解決方案之一。傳統(tǒng)的飲食記錄方法由于非常需要人與人之間的互動,因此不夠準確。需要一個自動識別系統(tǒng),該系統(tǒng)能夠準確估算用戶的卡路里攝入量。當前,智能手機能夠跟蹤膳食并估算其卡路里。
和其他物體一樣,食物也有不同的特征,例如形狀、顏色和質(zhì)地。通常從食物圖像中提取手工制作的特征,例如顏色直方圖、定向梯度直方圖(HOG)、尺度不變特征變換(SIFT)、局部二值模式(LBP)、Gabor濾波器和特征包(BoF),然后將它們輸入線性或非線性分類器中,以確定食物的類別。手工制作的描述符表示能力有限。因此無法在特征空間中正確區(qū)分食物,因為不同類別的特征可能會相互重疊。所以人們需要一個能夠充分表達其特征的描述符,來學習食品的最重要和最有區(qū)別的特征。最近卷積神經(jīng)網(wǎng)絡在ImageNet數(shù)據(jù)集上取得了令人印象深刻的結(jié)果。一個卷積神經(jīng)網(wǎng)絡通常由幾個卷積和池化層組成,這使其比手工制作的方法具有更大的表示能力。從另一個角度看,卷積網(wǎng)絡的卷積和池化層學習了用于分類的區(qū)分特征。
在ImageNet數(shù)據(jù)集上表現(xiàn)令人印象深刻的那些大型卷積神經(jīng)網(wǎng)絡模型,都需要大量的內(nèi)存。但是食品識別系統(tǒng)通常在微機(有限的內(nèi)存)上運行。內(nèi)存需求少、計算成本低的卷積神經(jīng)網(wǎng)絡模型將更適合像智能手機這樣的微機。而經(jīng)典網(wǎng)絡AlexNet[1]、GoogLeNet[2]、ResNet[3]和VGGNet[4]分別具有57M、6M、24M和138M這樣較大的參數(shù)量。
Kong等[5]開發(fā)了一個名為DietCam的應用程序,該應用程序使用食物圖像的多個視圖來識別食物的類型。它從多個角度(每個食物6個角度)評估食物攝入量。另外,他們根據(jù)形狀將食物分為規(guī)則形狀和不規(guī)則形狀2類。第1類食品具有一定的形狀,例如水果、漢堡包和比薩餅。第2類食品具有可變形的形狀,例如面條、面食和沙拉。在這項工作中,他們提出了規(guī)則形狀食品的算法,利用高斯區(qū)域檢測器和SIFT作為描述符。Kawano等[6]提出了一種移動食品識別系統(tǒng),該系統(tǒng)首先要求用戶繪制邊界框使用GrubCut分割食物區(qū)域。然后用子窗口搜索(ESS)來估計食物區(qū)域的預期方向。最后提取顏色直方圖和基于SURF的特征包,并使用χ2核的線性支持向量機對食物分類。
另外,Anthimopoulos等[7]使用BoF方法對11種食物分類。具體來說,他們使用分層次的k-均值聚類建立10000個Visual Words,并使用BoF方法表示食物。然后使用線性支持向量機對食物進行分類。并且他們的食物識別系統(tǒng)可估計糖尿病患者膳食中的碳水化合物含量。
Anthimopoulos等[8]開發(fā)了一種系統(tǒng),該系統(tǒng)使用金字塔均值漂移濾波和區(qū)域增長算法對食物區(qū)域進行分割。然后通過顏色直方圖和局部二值模式對分割后的區(qū)域進行描述,最后使用SVM將圖像分類為6大類。
Matsuda等[9]提出了一種利用多種排序法的食品統(tǒng)計量來識別多種食品的方法。首先使用DPM(Deformable Part Models)、圓形檢測器和JSEG區(qū)域分割方法對候選區(qū)域進行檢測。然后使用HOG、SIFT、CSIFT、顏色直方圖和Gabor濾波器提取候選區(qū)域的特征。最后用MKL-SVM對100種食物進行分類。
He等[10]提出了DietCam方法,該方法包括成分檢測和食品分類。利用可變形零件模型和紋理驗證模型的組合來檢測食品成分,然后用多核支持向量機進行分類。與其他傳統(tǒng)方法一樣,Duan等[11]利用SIFT和Gabor描述符作為食物圖像特征,并使用k-均值進行特征聚類,還使用云計算來提高食品識別的性能。
Zhang等[12]提出了一個由5個卷積池層組成的網(wǎng)絡。在收集的水果數(shù)據(jù)集和UECFood-100數(shù)據(jù)集上分別達到了80.8%和60.9%的準確性。Wang等[13]提出了一種基于UPMC Food-100數(shù)據(jù)集上的食品配方自動識別系統(tǒng)。用BoW和OverFeat特征提取器提取視覺特征。然后使用TF-IDF來實現(xiàn)文本功能。最后融合視覺和紋理特征后輸入到SVM分類器。
同樣,Kawano等[14]提出了一種可以實時識別30種食品成分的系統(tǒng),可以推薦與所識別成分相關的食譜。在這項研究中,使用BoF和顏色直方圖作為描述符,并使用線性核SVM作為分類器來識別食品成分。從不同的角度來看,Xu等[15]利用地理位置以及餐廳的外部信息來進行食物識別,使用上下文信息,例如食材、烹飪方式和餐廳特定的菜肴。
Simonyan等[4]提出了一個非常深的網(wǎng)絡,它由19層組成,只有3×3的卷積濾波器。結(jié)果表明,通過增加網(wǎng)絡深度,可以顯著提高性能。Hassannejad等[16]將Inception模塊中3×3的卷積核變成了一個1×3和一個3×1的卷積核,這樣做能大大降低參數(shù)的個數(shù),對計算性能的要求大大降低,從而提高訓練的效率,使其更加接近移動系統(tǒng)的要求。
Sermanet等[17]表明將卷積神經(jīng)網(wǎng)絡中間層生成的特征圖連接到分類階段可以作為更高級的特征并能提高準確性。Maas等[18]提出的LReLU激活函數(shù)與標準ReLU功能不同,并且使用LReLU激活函數(shù)的網(wǎng)絡與常規(guī)ReLU激活函數(shù)相比,準確率有所提高。He等[19]提出了一種新的激活函數(shù),稱為參數(shù)整流線性單元(PReLU),該函數(shù)在不增加額外計算成本的情況下提高了分類精度。為了處理任意大小的圖像,He等[20]提出了空間金字塔池化(SPP),其中網(wǎng)絡中的最后一個特征圖被分為1、4、16等多個區(qū)域。然后將特征串聯(lián)起來形成特征向量,并將它們輸入分類層,這些SPP層可以提高所提出網(wǎng)絡的性能。
即使使用ReLU、LReLU、PReLU等激活函數(shù)訓練非常深的網(wǎng)絡仍然很耗時。Ioffe等[21]表明,由于訓練階段需要較小的學習率和更適合的初始化參數(shù),因此每一層分布的變化都會增加訓練時間,這種現(xiàn)象稱為內(nèi)部協(xié)變量偏移問題。他們通過歸一化每一層的輸出和線性縮放以及改變歸一化的輸出來解決該問題,就像ResNet網(wǎng)絡體系結(jié)構(gòu)中需要用大量批處理規(guī)范化來訓練較深的網(wǎng)絡。Clevert等[22]提出了指數(shù)線性(ELU)激活函數(shù),實驗表明此激活函數(shù)可顯著提高訓練速度。
基于以上分析,本文提出一種卷積神經(jīng)網(wǎng)絡模型,如圖1所示。雖然提出的網(wǎng)絡較深,但網(wǎng)絡是由一些相似的Block塊控制的,即由一些基本的構(gòu)造塊組成,其中每個塊由具有不同感受野的卷積層和池化層組成。第1個基本塊由3個卷積層,分別為7×7、5×5和3×3大小的卷積核組成。這些卷積層的特征圖通過通道連接起來。然后將連接后的特征輸入卷積核大小為1×1的卷積層。該卷積層的作用是將特征在同一空間位置進行非線性組合。
C(s,n,d)表示該卷積層包含n個大小為s×s、步長為d的卷積核,P(s,s,d)表示一個s×s步長為d的最大池化層
通過每一個Block塊末尾的1×1卷積核使特征維度保持不變,從而來控制網(wǎng)絡的復雜性。與第1個塊相似,第2個基本塊由3個卷積層和1個1×1的卷積層組成,還有5×5和3×3感受野的池化層,然后將它們進行特征維數(shù)疊加,再利用1×1的卷積核對特征進行非線性組合。
接著后面銜接3個基本構(gòu)建塊,其中每個塊中有一個5×5和一個3×3卷積核大小的卷積層。像Block2一樣,Block6同樣有3×3和5×5大小的感受野的池化層和1×1的卷積層。接下來連接3個同樣有3×3和1×1卷積核的Block。
最后一個卷積層(3×3)生成的特征被傳遞到空間金字塔池化層中。在空間金字塔池化層中,特征圖將分別用4×4和1×1的網(wǎng)格去劃分成1個區(qū)域和4個區(qū)域,然后每個區(qū)域再進行全局池化,分別生成了1×120和4×120的特征圖。最后將SPP特征連接到分類器中。此外在每個卷積層后都使用了ELU激活函數(shù)。在完全連接層之前還使用一個Dropout層,用于調(diào)整網(wǎng)絡。為了減少模型的大小和計算成本,本文網(wǎng)絡中沒有使用BN和ReLU的組合層。
ELU能提高訓練速度,類似于BN層,使用BN層后訓練速度的提高可以忽略不計,所以本文網(wǎng)絡中丟棄了BN層,在一定程度上可以減少訓練時間和計算成本。因此使用ELU網(wǎng)絡能夠縮短運行時間。
在同一個特征圖上,本文使用2個具有不同感受野的池化層,并使用1×1卷積核將它們非線性組合起來,以減小網(wǎng)絡的寬度。盡管2個池化層(在相同深度)的感受野區(qū)別不大,但它們被特征映射激活的方式有明顯的區(qū)別。
如圖2所示,這2個池化層在同一個特征上的相同位置將會激活不同的感受野,其中pooli-y(c,m,n)表示第i層中卷積核大小為y、在第c個特征(m,n)位置上的池化。
圖2 不同感受野在同一個位置上的作用效果
目前存在各種各樣的食物,食物類別的數(shù)量巨大,沒有一個大型公開的食物數(shù)據(jù)集可以涵蓋所有食物類別。本文選取公共數(shù)據(jù)集Food-101[23]作為實驗數(shù)據(jù)。
Food-101數(shù)據(jù)集包含101類食物,每種食物都包含1000個樣本,如圖3所示。本文將數(shù)據(jù)集隨機分成訓練集、驗證集和測試集。這3組的比例分別為65%、10%和25%。其中每個類包含650個訓練樣本、100個驗證樣本和250個測試樣本,并且每個圖像都進行了標準化處理。
圖3 Food-101數(shù)據(jù)集
為了提高模型的魯棒性和減少過擬合的現(xiàn)象,本文對訓練數(shù)據(jù)集進行如下變換:
1)圖像隨機擾動。
3)HSV處理。通過將圖像轉(zhuǎn)換成HSV顏色空間并將飽和度分量按0.9和1.1的因子縮放來修改圖像的飽和度。在另一個轉(zhuǎn)換中,值分量按因子0.7縮放。
4)PCA。首先計算訓練數(shù)據(jù)像素的主成分P∈R3×3矩陣。然后將輸入圖像的像素投影到主分量中以獲得系數(shù)向量b。接下來,在范圍[0,0.5]內(nèi)隨機生成3×1向量v,并且使用新的系數(shù)向量b′=b-bΘv,通過將像素反向投影到RGB顏色空間來重構(gòu)圖像,其中Θ是一個元素級乘法運算符。
5)通過直方圖均衡化變換和圖像銳化來進一步增強數(shù)據(jù)集。
設置本文網(wǎng)絡訓練參數(shù)momentum為0.9,mini-batch為20后開始訓練。
圖4 網(wǎng)絡訓練
如圖4所示,經(jīng)過50k次左右的迭代后,網(wǎng)絡開始呈現(xiàn)過擬合現(xiàn)象,但是驗證曲線仍在上升。因此繼續(xù)訓練迭代到200k次,最終訓練精度在71%左右,驗證精度在64%左右。
在過去的幾年里,AlexNet、GoogLeNet、VGGNet和ResNet50在ImageNet大規(guī)模計算機視覺識別挑戰(zhàn)中取得了令人矚目的成績。因為它們在大型數(shù)據(jù)集(像ImageNet)上訓練過,模型已經(jīng)基本學習到了圖像的紋理、形狀和外觀等特征。因此可以經(jīng)過微調(diào)使它們遷移到本文的食物圖像分類實驗中。
Dosovitskiy等[25]以及Mahendran等[26]研究表明,例如在網(wǎng)絡的最后一層,神經(jīng)網(wǎng)絡傾向于學習更抽象的特征。相反,神經(jīng)網(wǎng)絡的第一層則主要提取邊緣和顏色斑點等低級特征。ImageNet數(shù)據(jù)集中的圖像,低級特征的差別可能并不大,而高級特性可能會有明顯不同。
①切實有效的貫徹落實落實預檢分診制度:相關的醫(yī)院要更加明確的設立相關的預檢分診室,該分診室要有專業(yè)的護理人員進行專門值班,一旦有家屬陪伴患兒來到醫(yī)院進行就診時,護理人員首先要對于他們進行簡潔明快的有針對性評估,從整體上觀察其是否有出疹、發(fā)熱等一系列相應現(xiàn)象,特別是要密切觀察3歲以下的孩子,如果出現(xiàn)了疑似的病例,要在第一時間及時有效的上報到上級的科室,并有效的把他們引導到相關的隔離區(qū)進行候診準備;
本文使用預訓練的AlexNet、GoogLeNet、VGGNet和ResNet50這4個網(wǎng)絡作為比對方法,并且用3種微調(diào)方式來進行實驗:1)凍結(jié)網(wǎng)絡中除分類層以外的所有層來訓練網(wǎng)絡,即訓練過程只更新分類層中的參數(shù),其他網(wǎng)絡參數(shù)保持不變;2)分類層及其前一層在訓練過程中更新其參數(shù),這樣網(wǎng)絡可以在食物圖像中提取到高級特征;3)更新分類層及其前2層中的參數(shù),這樣網(wǎng)絡可以更好地提取食物圖像中更加高級的特征。
實驗結(jié)果如表1所示,根據(jù)實驗對比,更新最后3層時,可以獲得最佳結(jié)果。因為當從最后第3層開始更新其參數(shù)時,網(wǎng)絡能夠更好地學習食物圖像中的特征。
表1 3種微調(diào)方式的實驗結(jié)果比較
如表2所示,本文還額外加入了非預訓練的ResNet32網(wǎng)絡,并在測試集上評估了ResNet32和本文網(wǎng)絡。本文模型的性能要優(yōu)于所有其他網(wǎng)絡模型,其準確性接近于最佳表現(xiàn)的ResNet50模型,并且從參數(shù)量上來說,本文網(wǎng)絡使用的參數(shù)減少了99.14%,而非預訓練的ResNet32的準確性卻低于本文網(wǎng)絡模型。與GoogLeNet相比,本文網(wǎng)絡模型結(jié)果更加精確,網(wǎng)絡參數(shù)減少了96.6%左右。
表2 與其他方法的比較
如圖5所示,更加直觀地給出了各個網(wǎng)絡模型的準確率與其參數(shù)量之間的關系。
圖5 準確率與參數(shù)量
如圖6所示為Top-k的準確率,從圖中可以清楚地看到,當k的值增加時,本文網(wǎng)絡模型將趨向于ResNet50的精度,但是它比ResNet50的參數(shù)量更少。
圖6 Top-k精度
如圖7所示,通過計算每個類的F1分數(shù)對分類結(jié)果進行更加詳細的研究。從圖中可以看出,有4個類的F1分數(shù)均大于0.8。F1分數(shù)在(0.6,0.8]和(0.4,0.6]之間的分別有47個類和41個類。在101個類中,有9個類的F1分數(shù)在[0.2,0.4]之間。
圖7 F1分數(shù)
本文網(wǎng)絡模型還在UECFood-256[27]數(shù)據(jù)集上進行了實驗,并且與其他網(wǎng)絡模型進行比較。
如表3所示,由在UECFood-256數(shù)據(jù)集上的實驗結(jié)果可知,本文網(wǎng)絡模型位于GoogLeNet和ResNet50之后,Top-1精度比它們低了1%和2%,Top-5精度低了1%。但是本文網(wǎng)絡模型卻比它們大大簡化,具有一定的競爭力。
表3 實驗結(jié)果
本文提出了一種新的高效輕量級網(wǎng)絡模型結(jié)構(gòu),它包含32個卷積層和池化層以及一個完全連接層,這些層共同組成了一個深度為23的網(wǎng)絡。網(wǎng)絡由3個池化層塊組成。前2個塊中的每一個都包含2個具有不同感受野的池化層。第3個池化層是空間金字塔池化層,其中使用不同的感受野和步長將相同的特征匯集2次。在同一個特征圖的同一個位置中,使用不同感受野的池化層池化,其神經(jīng)元會受到不同程度的激活。與AlexNet、GoogLeNet和VGGNet相比,本文網(wǎng)絡具有更準確的結(jié)果,與ResNet50相比準確率差不多。深度比AlexNet和VGGNet更深,但卻擁有更少的參數(shù)量和更復雜的結(jié)構(gòu)。但是比GoogLeNet和ResNet50更淺,沒有這2個模型那么復雜。
與ResNet50和GoogLeNet相比,本文網(wǎng)絡參數(shù)分別減少了99.14%和96.63%,性能表現(xiàn)卻沒有下降,這為卷積神經(jīng)網(wǎng)絡模型能嵌入到更加微小的機器中提供了可行性。