李仕超 高梓成 郭 浩 鄧志揚 馬 瑞 雷 杰 張 昊
(1.中國農業大學 土地科學與技術學院,北京 100083; 2.中國農業大學 信息與電氣工程學院,北京 100083; 3.中國農業大學 食品科學與營養工程學院,北京 100083)
不合理膳食導致的健康風險是當今社會重點關注的問題[1-3],及時有效的膳食調查方法可以記錄和評價被調查對象在一定時間內能量和營養素的攝入情況,幫助個人和群體實現營養干預,降低不合理膳食導致的肥胖、高血壓、糖尿病和心臟病等健康風險[4-5]。
目前,膳食調查中常用的方法主要有24 h膳食回顧法、化學分析法、稱重記賬法、食物頻率法等經典方法[6-9]。針對回顧性膳食調查,王之頊等[10]根據食物外形和份量構建了包含13大類195種食物和5種餐具等共659張三維參照的食物或餐圖的食物圖譜來提高回顧法的準確性。另外,采用標準化食物餐具和電子食物秤同樣可以提高參與者對日常攝入食物分量的掌握程度[11]。膳食調查中的統計分析同樣十分重要,目前關于營養素攝入量分析的軟件大多需要參與者手動輸入食物的種類和攝入量,并通過食物營養成分數據和中國營養學會發布的中國居民膳食營養素參考攝入量進行營養素攝入量分析[12-13]。然而以上方法大多需要參與者的配合,對食物攝入量的評估可能不夠準確,同時由于其使用過程繁瑣,也不適用于大樣本的群體膳食調查。
本研究充分利用深度圖像所具有的三維信息優勢,實現對RGB-D食物彩色圖像的語義分割[14],同時利用采集的人體單視角深度圖像序列擬合人體三維模型[15],在滿足目前膳食調查關鍵環節的基礎上擬建立一種更加完善的膳食調查系統,以期為營養干預提供依據。
材料選擇某大學食堂內所經營的各類單份食用餐食。為了減少外在因素對食物體積計算的影響,本研究選擇食物形狀較為規則,并且餐具容器對體積影響較小的食物類別作為計算樣本,食物主要是面條、米飯、粥和湯等各類主食,用于采集食物彩色圖像以及深度圖像,構建某大學食物樣本數據集和測試集。
1.2.1系統平臺搭建
本系統主要由硬件和軟件組成。硬件部分主要包括食物信息采集器、光照箱、人體信息采集器以及計算主機4個組成部分。英特爾公司研發的RealSense深度相機作為食物信息采集器,型號為D435,其彩色圖像分辨率為1 920像素×1 080像素,深度圖像分辨率為1 280像素×720像素。食物信息采集器搭配光照箱作為食物信息采集平臺,為避免因鏡面反射在需要采集圖像的物體表面產生光斑,光照箱內外部分均使用噴漆噴為黑色,內部頂端設有白熾燈為采集環境提供光照。另外一個RealSence深度相機作為人體信息采集器,用于獲取人體RGB-D圖像序列。計算主機主要利用軟件控制各傳感器進行數據采集和處理任務。軟件部分基于Linux操作系統,在python環境下使用PyQT進行開發實現。
1.2.2系統功能與操作
本系統主要通過主機端軟件實現食物和人體的信息采集,食物營養素計算和人體參數計算。系統工作流程見圖1。具體操作如下:
1)當開啟系統后,首次使用需要輸入試驗者性別、年齡和體重等基本信息,同時將本次在食堂購買的食物菜品放置在光照箱中,使得食物信息采集器可以正好對準食物,同時實驗者如果選擇了中心性肥胖估計功能,需要站在軟件提示的指定位置,人體信息采集器和食物信息采集器開始同步采集數據。人體信息采集器獲取人體深度圖像序列數據,食物信息采集器獲取食物RGB-D圖像數據。
2)計算主機處理數據,首先進行食物分割。之后利用對應的深度圖像計算出該類別食物的體積,同時根據采集到的實驗者人體深度圖像序列和體重信息擬合三維人體模型,計算出實驗者的身高、腰圍、臀圍以及BMI和WHR值。
3)根據采集的食物體積和類別信息,上傳至云端服務器后通過食物營養素數據庫計算出實驗者在本次就餐中攝入的營養素含量和能量。該數據后續為營養師提供膳食調查基礎數據。

圖1 膳食調查系統工作流程Fig.1 Workflow of dietary survey system
1.3.1食物語義分割
通過傳感器獲取的RGB圖像作為原始輸入數據,對輸入的原始數據進行數據增強。數據增強方法包括:圖片旋轉,尺寸縮放,中心裁剪以及數據標準化等[16]。通過數據增強可以極大限度提高數據的多樣性和復雜程度,幫助模型盡可能避免過擬合現象的出現并能夠增強模型的泛化能力。
DeepLabv3+作為語義分割領域的主流算法之一,其算法的速度與預測效果已經達到了實際應用的標準。通過結合當下算法中的深度可分離卷積、空洞卷積以及ASPP模塊,對卷積網絡進行改進創新,并在特征解碼部分進行特征融合改進,極大地提高了特征提取效果和算法的預測速度和精度。因此,本研究系統采用DeepLabv3+網絡作為食物圖像的語義分割算法,通過DeepLabv3+網絡對食物圖像進行語義解析,將圖像中的食物語義和位置信息提取出來。其中特征提取網絡可以采用Xception[17]或者ResNet101[18],為使能夠最大化的利用算法的優勢和設備的性能,本系統選擇Xception作為特征提取網絡。以特征提取網絡的輸出作為輸入,將輸入的特征進行解碼,轉化為像素的語義信息并根據交叉熵損失函數進行網絡權重更新。將原始RGB圖像數據輸入訓練完成的模型后即可獲取圖像中的食物類別信息和像素級的位置信息。
多分類的交叉熵損失函數公式[19]為:
(1)
式中:N為所需預測的像素個數;M為類別的數量;yic為樣本i的類別,取值為0或1,0代表預測結果與真實結果不同,1代表預測結果與真實結果相同;pic為預測樣本i屬于類別c的預測概率。
1.3.2食物體積計算
根據食物信息采集器采集的深度圖像計算食物的體積:首先根據設備擺放的形態設置初始平面P,使得初始平面P的平面法向量Np與Z軸平行;將食物深度圖轉化為點云并將其所在平面與初始平面P配準,使得放置食物的平面與初始平面P重合;利用1.3.1節中的算法將食物分割出來,再將拍攝的食物圖像與通過分割算法分割后的食物圖像對照(圖2(a)和(b));將二維食物分割結果映射到三維空間,從二維映射成三維的對照(圖2(c))。
將二維像素坐標輸入式(2)[20]:
(2)
式中:Z為攝像頭離食物的距離;u、v為某個食物像素點在像素坐標系中的X、Y軸坐標;X、Y、Z為食物在世界坐標系中的三維坐標;fx、fy為相應方向上焦點的長度;u0、v0為像素坐標系中的光心;R為旋轉矩陣,T為轉換平移向量。計算得出三維空間坐標。
將食物點云近似看做為一上曲面,上曲面定義為F,初始平面P為下平面,根據式(3)計算出三維空間體積,具體運算公式為:
(3)
式中:pz為初始平面的縱坐標,pz∈P;fz為食物點云中點的縱坐標,fz∈F;S為XOY平面上積分時的單位面積,其中S=1 mm2;Hi為上曲面F某點與初始平面P即下平面對應點的Z軸方向距離;V為最終計算出的食物三維空間體積。

圖2 食物圖像分割結果及三維映射Fig.2 Food image segmentation results and three-dimensional mapping
1.3.3食物營養素計算
根據食物的種類和體積,結合食物的營養素數據庫計算獲得被拍攝食物的各種營養素的含量,計算公式為:
C=v×k
(4)
式中:C為食物中某營養物質的含量;v為食物的體積;k為食物單位體積中某種營養素的含量。根據食堂提供的食物配料表以及《中國食物成分表》[21]構建食物營養素數據庫,包括不同食物中各種營養素含量的數據庫,表1為部分食物能量及營養素含量參考表。

表1 食物能量及營養素含量參考表(部分)Table 1 ReferenceTable of energy and nutrient content of food (part)
1.3.4人體參數計算
為了獲得人的身體質量等級需要測量的人體參數包括身高、腰圍和臀圍,本研究設計了一種利用單視角深度圖像快速便捷地測量人體參數的系統:通過計算SMPL參數化人體模型的體型參數和位姿參數來擬合實驗者三維模型,根據模型點云數據來獲得人體參數信息。SMPL[15]參數化模型是由大量真實人體數據中學習得到的基于頂點的線性人體模型,有6 980個頂點,13 776個三角面片,并包括一個擁有24個關節點的人體模型,模型驅動公式[15]為:
M(β,θ)=W(Tp(β,θ),J(β),θ,ω)
(5)
式中:β為長度為10的向量,控制模型的形狀;θ為模型23個關節點相對旋轉弧度值和原點坐標組成的長度為75的向量;Tp(β,θ)為在β和θ的作用下網格頂點的坐標計算公式;J(β)為在β作用下人體關節點計算公式;ω表示各個關節的混合權重;W表示進行骨骼蒙皮并生成人體模型。
計算體型參數和位姿參數時,對單張人體深度圖像進行背景去除得到分割后的人體深度圖像,利用文獻[22]的方法采用隨機森林對人體深度圖像人體骨架的關節點位置進行預測,從而得到骨架關節點和人體各組件點云數據,之后根據人體點云與SMPL模型點云迭代優化參數β和θ,構造能量函數使其最小:
E(β,θ)=Ed(β,θ)+α1Eθ(θ)+α2Eβ(β)
(6)
式中:Ed為人體點云與SMPL模型對應點距離d誤差項,分別構建人體點云和SMPL模型點云對應組件的kd-tree來尋找對應點對,通過β和θ參數驅動SMPL模型使得對應點歐氏距離之和最小;Eθ為姿態約束項,通過高斯混合模型先驗來約束參數θ避免出現不正常的姿態;Eβ為體型約束項,通過計算當前模型與原SMPL模型的差異來避免產生極端體型;α1和α2為權重參數。
本研究通過計算得到的體型參數和姿態參數驅動SMPL模型擬合出最佳的人體模型。由于所有擬合的人體模型具有拓撲一致的特點,可以通過預先定義的兩個點集來表示腰圍和臀圍。以脊柱關節點為例,尋找擬合后的模型點云中滿足脊柱關節點Z坐標增減3 cm范圍內,且能構成一個近似封閉圓環的點集來表示腰圍,并儲存該點集內各點在模型上的索引,計算相鄰點距離和作為最終腰圍的計算值。臀圍參數值測量方法同理,共預定義腰圍點40個,臀圍點32個(圖3)。人體高度同樣采用預定義Z坐標最大和最小點的取值來計算。由于采集的人體數據為RGB-D圖像序列,因此各項人體參數的最終結果為各單幀測量結果總和的平均值。
身體質量指數(BMI)[23]是評估人體肥胖程度的一個常用指標,設人體身體質量為M,身高為H,則身體質量指數的計算公式為:
(7)
中國肥胖問題工作組確定適宜我國成人超重和肥胖的BMI界限[24]為:BMI<18.5 kg/m2為偏瘦,18.5 kg/m2≤BMI<23.9 kg/m2為正常,24.0 kg/m2≤BMI<27.9 kg/m2為超重, BMI≥28 kg/m2為肥胖。
腰臀比(WHR)[23]是判定中心性肥胖的重要指標,能夠反映身體脂肪分布情況。設腰圍為W,臀圍為H,則腰臀比計算公式為:

圖3 SMPL模型關節點和腰圍、臀圍預定義示意圖Fig.3 Schematic diagram of SMPL model joint points and predefined waist and hip circumference
(8)
中國肥胖問題工作組建議我國成人腹型肥胖的標準為:男性WHR≥0.90,女性WHR≥0.85。
首先將采集的食物RGB圖像根據大體類別進行劃分,可分為如面條、饅頭和粥類等類別,并制作數據集1 900張和測試集200張,共包含19個大類,其中2個食物大類中的部分圖像數據見圖4。

圖4 食物圖像分類示例Fig.4 Examples of food image classification
基于DeepLabv3+模型進行建模訓練并測試,將預測結果與測試集中的真實數據進行比較最終得到模型的分類性能評價。在訓練過程中,本研究將訓練集與測試集比例設置為9∶1,并在原有的模型基礎上進行微調(fine-tuning),對模型的主干部分先進行凍結訓練50個周期,然后解凍訓練50個周期。凍結訓練的批量大小(batch size)為4,解凍后降低batch size為2,優化器為Adam。對模型進行訓練并測試和評價。
本研究采用圖像語義分割基本評價指標[25]進行評價,指標包括像素準確率(PA,Pixel accuracy)、像素準確率平均值(MPA,Mean pixel accuracy)和平均交并比(MioU,Mean intersection over union)。
PA為正確像素與整個圖像總像素的比例:
(9)
式中:k表示類別,假定一定有(k+1)類(包括k個目標類和1個背景類),pii表示真實正例像素數,pij表示屬于i類被分為j類的像素數。
MPA為每個類別分類正確的像素數與該類別的總像素的比例然后求平均:
(10)
MIoU為平均交并比,計算的是2個集合的交集與并集的重合比例,在語義分割中,計算的是真實分割與系統預測的分割間的交并比:
(11)
模型評價結果見表2,食物圖像識別模型分割樣例見圖5。

表2 食物圖像識別模型性能評價Table 2 Performance evaluation of food image recognition model

圖5 食物圖像識別模型分割示例Fig.5 Examples of food image recognition model segmentation
對膳食調查系統中的體積計算方法進行誤差分析。首先通過相機從正上方拍攝某個邊長為10 cm的規則立方體,利用1.3.2節體積計算方法對該規則立方體深度圖進行體積計算,最終得到的體積計算系統誤差小于3%。本研究是在深度學習模型圖像分割結果的基礎上,進一步計算得到每種食物類別中各食物體積的估計值,再以人工標注的食物圖片計算得到的食物體積為真實值進行對比。為了避免碗裝類食物在進行體積計算時由于乘裝容器形狀造成的誤差,在測試集中只選擇分割后非碗裝類食物,選擇其中8類共計106個樣本進行測試,每種食物樣本大于5個。計算它們的體積并與真實值比較,體積計算的評價標準為平均絕對誤差(Mean absolute error,MAE)[26]:
(12)

本研究選取男女各10名真實人體樣本,測量時均身穿較為緊身的衣服,利用皮尺分別測量出樣本人體的身高、腰圍和臀圍,并計算出各自的腰臀比,作為真實值。

圖6 食物體積計算平均絕對誤差Fig.6 Mean absolute error of food volume calculation
自動計算人體參數時,利用本研究1.3.4節的方法,計算采集數據中10幀圖像結果總和的平均值作為最終計算結果,每幀計算時間約為1.5 s。本研究1位男性人體樣本在某一幀動作下三維擬合SMPL模型的重建結果見圖7。

圖7 男性人體樣本三維擬合SMPL模型示例Fig.7 Example of a three-dimensional fitting SMPL model for male human sample
將本研究計算結果與皮尺測量結果進行比較,采用平均絕對百分比誤差(Mean absolute percentage error,MAPE)[26]進行評定:
(13)
女性腰圍測量結果與真實值偏離最大,平均偏離為8.5%,其余測量類別與真實值偏離值均小于7%;身高測量值的測量精度最高,男性和女性的測量精度均小于3%;腰圍測量值精度最低。最終計算得到的腰臀比偏離程度均小于4%,結果見表4。

表4 人體三維測量參數平均絕對百分比誤差Table 4 Mean absolute percentage error of human body three-dimensional measurement parameters %
本研究利用DeepLabv3+網絡模型對RGB-D食物彩色圖像進行語義分割,通過二維像素到深度圖的映射得到食物點云計算食物的體積,并根據收集的食物配料信息及營養成分表計算蛋白質、脂肪和碳水化合物等含量;同時利用采集的人體單視角深度圖像序列計算SMPL參數擬合人體三維模型,計算腰臀比和身體質量指數,初步判定人體體重狀況以及中心性肥胖程度。營養素攝入結合人體健康狀況分析更有利于接下的營養干預,從而降低因不合理膳食導致的各類慢性疾病的發生率。研究結果表明:1)本系統在食物圖像分割中的像素準確率為72.1%,像素準確率平均值為97.13%,平均交并比為82.03%;2)在食物體積計算中的平均絕對誤差均小于40 cm3;3)所有人體樣本計算的腰臀比與真實值偏離程度均小于4%,驗證了膳食調查系統對食物營養素和人體健康狀況進行分析的實際可行性。下一步將繼續擴充數據集的數量和類別,以提高食物分割精度和人體參數計算精度。