郭心悅 胡沁涵 劉純平 楊季文
(蘇州大學計算機科學與技術學院 江蘇 蘇州 215006)
菜肴類App成為人們日常生活廣泛使用的一類App,其中菜肴查詢是這類App的一個基本功能。菜肴圖像自動識別是提升這類App用戶體驗的必經之路。利用菜肴圖像識別技術獲取用戶輸入可以簡化用戶操作,減少手動輸入偏差[1]。同時,眾多學者為了研究如何提升菜肴圖像識別的準確率發布了一些菜肴圖像數據集,其中具有代表性的有UEC-Food100[2]、ETH Food-101[3]和VireoFood172[1]。
本文菜肴圖像識別涉及到的菜肴包括主食、湯類、蔬菜、肉類等多個方面。鑒于菜肴圖像識別屬于細粒度識別[1],菜肴圖像受拍攝角度、光照、位置和形狀等不確定因素變化而影響圖像關鍵細微差別,這將導致識別的難度大幅提升[4-5]。此外,不同的菜肴可能同時包括多種相同的食材,或是盛放菜肴的器皿相似,但由于菜肴食材的形狀、顏色和盛放方式不同,同種菜肴在外觀方面也存在很大的差異;這些因素都會給菜肴的識別帶來相當大的難度。因此,SIFT[6](尺度不變特征變換)和HOG[7](方向梯度直方圖)等傳統手工提取特征的方法都難以在菜肴圖像識別領域取得較高的準確率[1]。為了提升菜肴圖像識別的準確率,研究者們將DCNN(深度卷積神經網絡)與傳統特征提取方法結合運用到菜肴圖像識別中,并取得了突破性的進展。如Kawano等[8]將DCNN與傳統手工提取特征的方法RootHoG-FV以及Color-FV結合,在UEC-Food100數據集[2]上準確率高于純手工提取特征。但是該方法還是借助了傳統特征提取的方法,識別過程中存在一定的局限性。
鑒于目前深度學習在菜肴圖像識別中的問題,本文提出將遷移學習和批歸一化相結合的深度學習框架,實現自動的菜肴識別。本文的主要貢獻在于:
1) 借助已有的VGG-16預訓練模型,將遷移學習應用到菜肴圖像識別,把已在ImageNet1000級圖像分類競賽中發布的最終模型各項參數導入新模型中作為初始化參數,解決菜肴圖像深度學習中存在的過擬合現象,獲得更具有鑒別性的特征。
2) 對部分卷積層以及全連接層的輸出結果做批歸一化處理。該批歸一化操作首先通過計算這批數據的均值及方差,再對這批數據做規范化處理,最終得到尺度變換和平移后的結果。
與本文研究密切相關的工作是菜肴圖像特征的自動提取和深度學習中梯度消失問題。
為了彌補特征提取過程中存在的不足,眾多研究者將深度卷積神經網絡應用到特征的提取中。這種模型自動提取特征的方式在細粒度圖像分類問題上能夠有更好的表現[9]。但是如果直接在相關數據集上進行訓練可能會帶來嚴重的過擬合現象。對此,引入了遷移學習從而一定程度上緩解過擬合。
Yanai等[10]從ILSVRC 1000 ImageNet數據集[11]和ImageNet 21000數據集中抽取出1 000種食物相關的圖像,將其合并組成預訓練數據集。將在該預訓練集上訓練成熟的AlexNet模型[12]應用到UEC-Food100數據集和UEC-Food256數據集上,并再次取得了當時最好的分類結果。Szegedy等[13]提出的GoogleNet模型獲得了ILSVRC冠軍,之后又對其核心結構進行改進得到Inception V3模型[14]。Hassannejad等[15]將Inception V3模型應用到了菜肴圖像識別領域,top1準確率在ETH Food-101、UEC-Food100和UEC-Food256這三個菜肴圖像數據集上分別提升了17.87%、2.68%和8.6%。Chen等[1]注意到菜肴識別和菜肴對應的食材的識別是兩個相互促進,并且會互相影響的過程,據此提出了一個多任務的深度學習神經網絡。該方法偏重于識別食材和菜肴,而不是單一的菜肴圖像識別。
以上三種導入預訓練模型的方法都屬于遷移學習在深度學習中的應用,可以適當緩解過擬合。但是這些方法忽略了數據分布變化而帶來的梯度消失問題。在預處理過程中對數據做歸一化處理可以讓初始數據大多分布在梯度較大范圍內,但是隨著深度神經網絡不斷加深,每一層的數據分布不斷變化,仍然會出現梯度消失問題。對此,Ioffe等[16]提出了批歸一化處理數據的方法,可以在網絡中的任意一層進行歸一化操作,從而一定程度上減弱中間層數據發生改變的情況。
為了自動提取菜肴圖像中的具有鑒別性的特征和解決現有深度學習框架下菜肴圖像識別訓練過程中梯度消失問題,本文在VGG-16模型的基礎上引入了遷移學習和批歸一化處理方法提升模型的圖像識別準確率。提出模型的框架如圖1所示。

圖1 基于VGG-16(ft+BN)菜肴圖像識別模型框架
考慮到VGG-16是2014年ILSVRC競賽的第二名,同時VGG-16在遷移學習中的表現優于當年的冠軍GoogleNet模型,所以本文選用VGG-16作為基礎模型。一方面,為了緩解過擬合現象,將已在ImageNet數據集[10]上完成預訓練的VGG-16模型[17]中的卷積核參數和偏置項系數提取出來,并把這些系數導入到原始的模型中作為初始化參數;另一方面,對每一個卷積層和全連接層(除了最后一個全連接層)的輸出都做批歸一化處理[16]。最后,用激活函數來處理歸一化結果,得到該層的最終輸出。
目前,菜肴圖像識別研究涉及的數據集包含的圖像數量非常有限,如果采用隨機方式初始化模型中的參數,然后直接在菜肴圖像數據集上訓練會導致過擬合[18]。
為了優化原始模型,將遷移學習應用到深度卷積神經網絡中。與傳統的機器學習不同,遷移學習的源域和目標域、源任務和目標任務均可不同[19]。所以,本文中使用的成熟神經網絡模型為VGG-16,其已在2014年ILSVRC競賽中使用的數據集上訓練成熟。該數據集為ImageNet的子集,其數據集圖像總量達到140萬幅,共1 000個分類。在這樣龐大的數據集上訓練過的模型具有較強的泛化能力。
遷移學習在VGG-16模型上的應用分為參數導入和輸出節點修改兩個部分。VGG-16模型由13個卷積層、3個全連接層和5個池化層組成,其分類器采用Softmax,所有卷積層和全連接層的激活函數采用ReLU函數,具體網絡結構如圖1右側所示。每個全連接層后都添加了一層dropout層,以抑制過擬合[20]。將在ImageNet數據集上經過預訓練的VGG-16模型的所有卷積層參數和前兩個全連接層的參數導入到初始模型中。由于本文中使用的數據集分類個數與ILSVRC競賽所用數據集分類個數不同,所以需要將模型最后一個全連接層(fc8)輸出節點個數改為數據集分類個數(VireoFood172中為172,UEC-Food100中為100)。最后將這些導入的參數都設定為可訓練參數。
為了捕捉更多的圖像特征信息,神經網絡不斷加深。在訓練的過程中,由于淺層的神經網絡參數不斷變化,深層神經網絡的輸入信息的分布也隨之不斷變化。這導致在訓練網絡的過程中需要設置更加合理的初始可訓練參數以及采用更小的學習速率以保證梯度能合理地傳播[16]。事實上,這樣調節超參數需要花費很多的時間和精力,并且存在很大的偶然性。
對此,本文將批歸一化處理方法引入VGG-16模型中。在訓練階段批歸一化處理分為歸一化處理和線性變換兩個步驟。
1) 經過式(1)的歸一化處理后讓每批數據整體都服從均值為0、方差為1的正態分布。
(1)

(2)
經過歸一化處理,大部分數據都能被映射到[-2,2]區間中。在該區間內,激活函數(ReLU)的導數有一半概率為0,一半概率為1,從而一定程度上緩解了梯度消失問題。但是,對每批數據做簡單的歸一化操作可能會讓數據丟失自己原來攜帶的信息,通過步驟2的仿射變換可以彌補部分丟失信息。
在訓練的過程中,針對每一批訓練數據求出樣本均值和樣本方差后再對單個樣本做處理,使這批訓練數據服從于(0,1)正態分布。然而在測試過程中,已經不存在“批”這個概念,同樣也不存在這一批數據的樣本均值和樣本方差,因此,測試過程中需要先估算整體的均值和方差,再對輸入數據進行批歸一化處理。

E[x]←EB[μB]
(3)
(4)
式中:m為該批次中圖像數量。
2) 針對測試集數據xT,對其做與訓練集數據相同的歸一化處理。其中均值和方差是式(3)和式(4)中得到的無偏估計值。
(5)
(6)
本節主要展示實驗的各項數據并分析實驗結果。根據以上方法在VireoFood172和UEC-Food100數據集上進行了實驗。結果表明,以上改進方法能有效提升圖像識別的準確率。所有的實驗均在Linux環境下進行,GPU為NVIDIA TITAN Xp,深度學習框架為TensorFlow。
VireoFood172數據集由Chen等發布,包含172種中式菜肴。這172種菜肴可分為蔬菜、湯類、豆制品、雞蛋、肉類、海鮮、魚類和主食八大類,各類具體菜肴數量在表1中展示。數據集中圖像原始分辨率為256×256,共計110 241幅,平均每種菜肴大約有641幅圖像。數據集發布者將各類菜肴按照6 ∶3 ∶1的分割方式將數據集劃分為訓練集、測試集和驗證集。

表1 VireoFood172數據集菜肴分類
UEC-Food100數據集由Matsuda等發布,其涵蓋了100種日式菜肴,共計9 060幅。每種菜肴都有至少100個樣本。與VireoFood172不同,UEC-Food100數據集中,所有菜肴都有一個標注框記錄目標菜肴在圖片中的準確位置,并且一幅圖片中可能包含多個菜肴。對此,按照數據集提供的標注框,將目標菜肴從原始圖像中切割,然后利用抗鋸齒算法重新調整大小,使其分辨率變為256×256。最后將重新調整大小后的圖片用順序編號作為文件名,以.jpg格式保存到各個分類的文件夾中。具體操作流程在圖2中展示。將最后得到的各類菜肴圖像隨機地分為訓練集和測試集,比例為8 ∶2。

圖2 UEC-Food100數據集圖像處理流程
遷移學習的相關實驗在VireoFood172和UEC-Food100數據集上進行。訓練過程中以驗證集準確率和loss作為評價標準對比兩種方法。VGG-16表示原始模型,VGG-16(ft)表示導入預訓練模型參數的網絡。
(1) VireoFood172數據集結果。對VireoFood172數據集中的圖像做如下操作:在開始訓練之前,對訓練集中圖像做隨機水平翻轉、隨機剪切(將256×256格式的圖片隨機剪切成224×224)等數據增強操作,并將從.tfrecords文件中讀取得到的訓練數據打亂。以上操作可以使得模型的泛化能力增強,減少過擬合。
VireoFood172數據集實驗中各項參數如下:每批64幅圖片,初始學習率設定為0.000 1,每8 000次迭代衰減為之前學習率的十分之一,優化方法為Adam。由于超過25 000次迭代驗證集的準確率趨于穩定,并且loss不再下降,將迭代次數設定為27 000。根據經驗,將L2正則化系數設定為0.002效果最好。
圖3為訓練過程中驗證集loss變化趨勢圖,其中:loss(raw)曲線代表未導入預訓練模型的VGG-16網絡的loss變化趨勢;loss(ft)曲線代表導入預訓練模型的VGG-16網絡變化趨勢。

圖3 VGG-16與VGG-16(ft)在VireoFood172上loss走勢
可以看出,同等情況下,與未導入預訓練模型數值相比,導入預訓練模型參數值的網絡loss下降更快,并且最終趨于穩定的值比前者更小。
圖4為訓練過程中驗證集上top1準確率變化趨勢圖,其中:accuracy(raw)曲線代表未導入預訓練模型的VGG-16網絡的準確率變化趨勢;accuracy(ft)曲線代表導入預訓練模型的VGG-16網絡準確率變化趨勢。

圖4 VGG-16與VGG-16(ft)在VireoFood172上準確率走勢
可以看出,導入預訓練模型參數后,模型的準確率提升速度更快,并且最終驗證集的準確率與未使用遷移學習的模型相比提升了大約30%。
最終測試集的各項結果如表2所示。top1準確率和top5準確率均有大幅提升,而損失也下降了約0.7。表2中實驗結果可以證明將遷移學習應用到VGG-16模型中能有效地緩解VireoFood172數據集上存在的過擬合問題,從而提升圖像識別準確率。

表2 遷移學習在VireoFood172數據集結果
(2) UEC-Food100數據集結果。類似地,在UEC-Food100數據集上,對菜肴圖像做與VireoFood172數據集上相同的數據增強操作。
由于UEC-Food100數據集較小,很多分類的圖像數據只有100條左右,所以在遷移學習的過程中凍結卷積層部分參數(即VGG-16中conv1_1-conv3_3),僅訓練之后兩個卷積層和全連接層參數。超過10 000次迭代后驗證集的準確率趨于穩定,所以將迭代次數設定為13 000,每3 000次學習速率衰減為之前的一半。
圖5為訓練過程中驗證集loss變化趨勢圖,其中:loss(raw100)曲線代表未導入預訓練模型的VGG-16網絡在驗證集上loss變化趨勢;loss(ft100)曲線代表導入預訓練模型的VGG網絡在驗證集上變化的趨勢。

圖5 VGG-16與VGG-16(ft)在UEC-Food100上loss走勢
未導入預訓練模型的參數網絡的loss整體呈上升趨勢,最終穩定在數值較大的區間,與訓練集的loss差距較大。而loss(ft100)與loss(raw100)相比初始下降幅度較大且整體呈下降趨勢,并最終穩定在3附近。最終,loss(ft100)比loss(raw100)穩定值小4.5左右。
圖6為訓練過程中驗證集上top1準確率變化趨勢圖,其中accuracy(raw100)曲線代表未導入預訓練模型的VGG-16網絡的準確率變化趨勢,accuracy(ft100)曲線代表導入預訓練模型的VGG-16網絡準確率變化趨勢。

圖6 VGG-16與VGG-16(ft)在UEC-Food100上準確率走勢
accuracy(ft100)曲線與accuracy(raw100)曲線均呈上升趨勢,但accuracy(ft100)初始上升幅度更大,并最終穩定在數值相對較高的區間。
最終在測試集上各指標結果如表3中所示。與VireoFood172數據集的結果類似,top1和top5準確率均有大幅提升,損失下降。實驗結果表明,將遷移學習應用到VGG-16模型中能提升在UEC-Food100數據集上圖像識別的準確率。

表3 遷移學習在UEC-Food100數據集結果
通過在VireoFood172和UEC-Food100數據集上的實驗結果可以證明,在原模型的基礎上使用遷移學習,即導入預訓練模型可以緩解過擬合現象并大幅提升測試集上的準確率。
按照3.2節中的方法將訓練成熟模型的參數導入初始模型中,并將這些導入的參數設定為可訓練的,數據增強操作與3.2節中相同。訓練過程中以驗證集準確率作為評價標準對比兩種方法。VGG-16(ft+BN)表示不僅對原始VGG-16模型做了微調,并且加入了批歸一化層。
(1) VireoFood172數據集結果。在VireoFood172數據集上訓練時,除了最后一層全連接層(fc8),在所有卷積層和全連接層中都添加了批歸一化處理。由于加入批歸一化層后參數變多以及顯卡存儲量的限制,所以將每批處理的圖像數量調整為32幅。使用批歸一化層后,訓練速度明顯變快,所以設定學習速率每2 000次衰減為之前的一半,迭代次數設定為25 000。其余各項參數設定及數據增強方式不變。
圖7展示了加入BN層和未加入BN層訓練過程中驗證集準確率變化趨勢,accuracy(ft)代表未添加BN層的模型驗證集上準確率變化曲線;accuracy(ft+BN)代表添加BN層后模型的在驗證集上準確率變化曲線。在添加BN層后,準確率最終會穩定在一個更高的值附近。最終,在其他各項參數相同的情況下,得到了如表4所示的各項數據。

圖7 VGG-16(ft)與VGG-16(ft+BN)在VireoFood172上準確率走勢

表4 批歸一化在VireoFood172數據集結果 %
可以看出,使用批歸一化的模型的準確率達到了83.45%,與未使用批歸一化層的模型相比提升了4.26個百分點。
(2) UEC-Food100數據集結果。與3.2節中訓練方法類似,僅訓練全連接層部分參數,并且僅在每個卷積塊最后一層和全連接層中第二層(fc7)添加批歸一化層。每批處理64幅圖像,每3 000次迭代后學習速率衰減為之前的一半,迭代總次數設為13 000。其余各項參數設定及數據增強方式不變。
圖8為使用批歸一化前后驗證集上圖像識別準確率變化趨勢。其中:accuracy(ft100)代表未添加BN層的模型在驗證集上準確率變化曲線;accuracy(ftBN100)代表添加BN層后模型的在驗證集上準確率變化曲線。添加批歸一化后準確率明顯有所提升,最終得到表5中相應的結果。

圖8 VGG-16(ft)與VGG-16(ft+BN)在UEC-Food100上準確率走勢

表5 批歸一化在UEC-Food100數據集結果 %
可以看出,VGG(ft+BN)模型top1準確率達到80.02%,與VGG-16(ft)相比,在UEC-Food100數據集上提升了8.15個百分點。
通過在兩種菜肴圖像數據集上的結果可以證明,批歸一化處理可以有效提升模型的穩定性和識別的準確率,并且VGG-16(ft+BN)無須經過繁雜的調參過程就可以取得優于普通卷積神經網絡的準確率。
為了能夠更加直觀地展示實驗結果,引入了其他三種深度學習方法作為對比實驗展示可視化實驗對比結果。
(1) VireoFood172數據集結果。在VireoFood172數據集上采用AlexNet[11]、VGG-16[17]和Arch-D[1]模型作為對比。AlexNet是2012年ImageNet競賽冠軍獲得者,與傳統的機器學習方法相比識別率有大幅提升。VGG-16與AlexNet相比擁有更多的卷積層,在ImageNet數據集上圖像識別準確率也有了大幅提升。Arch-D算法在VGG-16的基礎上略做調整,使得該模型可以同時識別菜肴和食材。表6第1列展示了5道具有代表性的菜肴圖像以及菜肴對應的名稱,第2-5列羅列了以上提及的三種模型以及本文中的模型對第1列圖像識別概率最高的5個結果及其對應的概率值。

表6 各模型在VireFood172數據集上可視化結果

續表6
所有神經網絡在識別較為清晰并且干擾較少的菜肴圖片時都能較為準確地給出菜肴的正確標簽。如表6中“fried beans with eggplant”標簽對應的圖像,所有的網絡都能準確地識別出該菜肴,在正確分類上除Arch-D算法外均取得較高的概率。圖像中有少許干擾項或是圖像中關鍵部分被遮擋,部分算法將不能十分準確地識別菜肴。表6中除了VGG-16(ft+BN)算法可以將“braised sea cucumber with scallion”以較高的準確率識別,其他算法均不能將正確標簽以top1識別出。同樣,Arch-D算法和AlexNet未能以top1識別“sweet mung bean soup”;VGG雖然以top1識別出該菜肴,但是概率只有0.36;只有VGG(ft+BN)以相對較高的概率識別出該標簽,概率值為0.69。如果圖像中存在較多干擾因素,或是菜肴只占據圖像中極小部分,那么網絡將很難識別這些圖像。除VGG(ft+BN)模型在top5中識別出“fried and stewed hairtail in soy sauce”對應的菜肴圖像,其他模型均未在top5中識別出該菜肴。由于拍攝角度、光線和圖中其他干擾信息的影響,所有網絡均未能對最后的“deep fried lotus root”在top5中進行正確分類。
最終各網絡在VireoFood172數據集上的識別準確率如表7所示。VGG-16(ft+BN)擁有最高的top1識別率和最高的top5識別準確率。比VireoFood172數據集的發行者Chen提出的Arch-D算法在top1準確率上高出1.39個百分點,top5準確率上高出0.56個百分點。

表7 各模型在VireFood172數據集上結果 %
(2) UEC-Food100數據集結果。在UEC-Food100數據集上采用AlexNet[11]、VGG-16[17]和DCNN-FOOD(ft2)[12]方法做對比實驗。部分圖像識別結果如表8所示。與VireoFood172數據集不同,由于UEC-Food100數據集中所有的菜肴圖像都包含標注框,所以圖像中包含的干擾信息較少,但是UEC-Food100數據集中各類菜肴之間相似度更高,并且同類菜肴在外形方面差距較大。與VireoFood172數據集類似,表8第1列展示了UEC-Food100數據集中五道具有代表性的菜肴,第2-5列是各個模型對相應圖像識別概率最高的5道菜肴名稱及其對應的概率值。表8中“rice ball”標簽對應的圖像和訓練集中的圖像在顏色和形狀方面差距大,所以四種模型均未能在top5中給出正確標簽。“beef steak”圖像中主食被其他食材遮擋,導致除VGG-16(ft+BN)以外的模型未能在top5中識別。由于“fried shrimp”和“stew”中用到的食材和其他菜肴中相似度很大,VGG-16(ft+BN)以外的模型雖然在top5中將標簽識別但并未以top1識別圖像。“tensin noodle”中包含的各類食材都已經清晰地陳列在圖像中,所有模型均以較高的準確率將標簽以top1識別出,VGG-16(ft+BN)擁有最高的識別概率。

表8 各模型在UEC-Food100數據集上可視化結果

續表8
最終各網絡在UEC-Food100數據集上的識別準確率如表9所示。VGG(ft+BN)擁有最高的top1識別率和最高的top5識別準確率,并且比UEC-Food100數據集發布者之一Yanai等在文獻[12]中的top1準確率高1.25個百分點,top5準確率高0.56個百分點。

表9 各模型在VireFood172數據集上結果 %
本文提出一種基于遷移學習和批歸一化處理的菜肴圖像識別方法。為了緩解過擬合現象,將2014年ILSVRC競賽數據集上訓練成熟的VGG-16模型的各項參數導入初始模型中從而大幅提升了識別的準確率,同時又將批歸一化處理數據的方法引入VGG-16中緩解梯度消失的問題。在VireoFood172和UEC-Food100數據集上top1準確率分別提升了1.39個百分點和1.25個百分點。