簡欽,張雨墨,簡獻忠
(1.200093 上海市 上海理工大學 機械工程學院;2.200093 上海市 上海理工大學 光電信息與計算機工程學院)
1994 年以來,我國水果總產(chǎn)量穩(wěn)居世界第1 位[1]。國家統(tǒng)計局數(shù)據(jù)顯示,2000~2016 年我國水果總產(chǎn)量持續(xù)增加,從6 225.15 萬t 增至28 351.1 萬t。雖然我國水果產(chǎn)量巨大,但多以鮮果銷售為主,食用加工比例低下,且損耗率較高,水果加工產(chǎn)業(yè)嚴重落后于歐美發(fā)達國家。提高水果產(chǎn)業(yè)的工業(yè)化、智能化水平成為一個亟待解決的問題。
20 世紀,科研人員著手于水果分類技術的研究,已經(jīng)開發(fā)了一些依賴于形狀、顏色和紋理特征的方法用于水果分類。Bolle[2]等人利用最鄰近技術,將水果圖像的直方圖與預先訓練好的帶有標簽的直方圖進行對比,再根據(jù)直方圖的相似度對水果圖像進行分類;陶華偉[3]等人利用顏色完全局部二值模式(color completed local binary pattern,CCLBP) 提取果蔬圖像的紋理特征,利用HSV 顏色直方圖和BIC 顏色直方圖提取果蔬圖像的顏色特征,采用融合算法將顏色和紋理特征相融合實現(xiàn)果蔬分類。
近年來,許多機器學習技術已經(jīng)應用在水果分類領域。Peng H[4]等人利用形狀不變矩合成水果的顏色和形狀特征,再應用SVM 分類器根據(jù)提取的特征向量對水果圖像進行分類;Erwin[5]等人使用模糊顏色直方圖(FCH)方法進行顏色提取,用矩不變量(MI)方法進行形狀提取,K-均值聚類算法進行聚類,KNN 方法用來對水果圖像分類;Zhang Y[6]等人提出了BBO-FNN 方法,該方法首先提取圖像的顏色、形狀和紋理特征,然后使用主成分分析(PCA)來去除過多的特征,最后使用一種基于生物地理學優(yōu)化(BBO)和前饋神經(jīng)網(wǎng)絡(FNN)的方法對水果圖像分類。
上述方法雖然取得了一些成果,但是需要對水果圖像進行復雜的預處理,提取水果圖像的顏色、紋理和形狀等特征,且識別水果種類少,分類精度相對不高。
卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks,CNN)是一種眾所周知的深度學習架構,其靈感來自于生物的自然視覺感知機制[7]。隨著近年來計算機性能的提升以及成本的下降,CNN 獲得了長足的發(fā)展,并且在多個領域得到了廣泛的應用?,F(xiàn)在CNN 能夠處理眾多復雜的任務,例如圖像分類、目標跟蹤、姿態(tài)估計、文本檢測、視覺顯著性檢測、行為識別、場景標注、自然語言處理等,與其他方法相比,CNN 可以在大規(guī)模數(shù)據(jù)集上實現(xiàn)更好的分類精度,因為它具有聯(lián)合特征和分類器學習的能力。
最近,CNN 也被應用到水果分類領域,相對其他方法取得了比較好的效果。曾維亮[8]等人設計了一個3 層CNN,使用ReLU 替代傳統(tǒng)的Sigmoid 作為激活函數(shù),并引入Dropout,降低網(wǎng)絡對某一局部特征的過擬合。實驗在15 個類別的水果圖像上進行,達到了83.4%的準確率。Lu 等人設計了一個6 層CNN,由卷積層、池化層和全連接層組成[9]。實驗在9 個類別的果蔬圖像上進行,達到了91.44%的準確率;曾平平[10]等人參照經(jīng)典的LeNet-5 結構,設計了一個4 層CNN。實驗在5 個類別的水果和蔬菜圖像上進行,達到了98.44%的準確率。
已有基于深度學習水果圖像分類算法均采用池化層進行網(wǎng)絡結構設計,訓練過程會丟失部分特征,導致分類精度有待提高。在現(xiàn)有工作的基礎上,本文設計了一個6 層卷積神經(jīng)網(wǎng)絡作為分類器,使用卷積加步長替代池化層,添加了批量規(guī)范化層,并對損失函數(shù)和訓練算法進行優(yōu)化,獲得了更好的分類效果。
CNN 一般由卷積層、池化層和全連接層構成。卷積層(Convolutional layer,Conv)對輸入的圖像進行卷積運算,提取圖像特征。池化層(Pooling layer)用于減少卷積層之間的連接數(shù)來降低計算負擔同時減少特征維度。全連接層(Fully connected layer,F(xiàn)C)將二維圖像連接成一個一維向量,用于結果的輸出。
最大池化(max Pooling)是最常用的池化方法,其采用滑動窗口分割圖像,在每個滑窗內(nèi)取最大值作為輸出。圖1 展示了窗口大小為2 的最大池化操作。
由圖1 可知,池化操作雖然減少了計算參數(shù)、提高了運算速度,但同時也會導致部分特征丟失。本文的FC-CNN 算法使用卷積加步長替代池化層,可以自主選擇特征,提高分類精度。
圖1 最大池化Fig.1 Max pooling
在訓練神經(jīng)網(wǎng)絡時經(jīng)常會遇到的問題就是過擬合(Overfitting),即模型過度接近訓練的數(shù)據(jù),使模型的泛化能力差,表現(xiàn)為模型在訓練集上測試的準確率很高,但是在測試集上測試的準確率卻很低。過擬合的模型不是理想的模型,需要對模型進行優(yōu)化,從而提高其泛化能力。
批量規(guī)范化(Batch Normalization,BN)可以提高訓練速度、加快收斂,防止過擬合,降低網(wǎng)絡對初始化權重的依賴,允許使用較大的學習率[11],對于減少過擬合,它比Dropout 更有效。在提出BN 之前,廣泛采用Dropout 來克服過擬合,但是添加Dropout 會影響訓練速度[12]。BN 是一種更先進、更適用于該問題的方法,通過歸一化操作,避免了梯度消失或爆炸的問題。后文將會對比BN 和Dropout 對網(wǎng)絡性能的影響。
批量規(guī)范化可以看作是訓練過程中對每一層輸入數(shù)據(jù)的標準化處理,從而保證輸入數(shù)據(jù)保持相同的分布。
式中:μx——輸入xi的平均值;σx2——xi的方差;γ,β——保證輸出滿足標準高斯分布的正則項,平均值為0,方差值為1。
FC-CNN 的網(wǎng)絡結構如圖2 所示,由卷積層(Convolutional layer,Conv)、批量規(guī)范化層(Batch Normalization layer,BN)、全連接層(Fully connected layer,F(xiàn)C)、Softmax 層和激活函數(shù)(ReLU)構成。
圖2 FC-CNN 網(wǎng)絡結構Fig.2 FC-CNN network structure
輸入圖片大小為100×100,通道數(shù)為4。第1 層卷積Conv1 使用大小為5×5 的卷積核進行卷積,步長為2;Conv2 的卷積核大小為3×3,步長為2;Conv3 的卷積核大小為5×5,步長為2;Conv4 的卷積核大小為3×3,步長為2。并且所有卷積層都加入了批量規(guī)范化層(BN),使用激活函數(shù)(ReLU)進行激活。全連接層FC1 和FC2 分別有1 024 和256 個神經(jīng)元,并使用激活函數(shù)(ReLU)。FC-CNN 的具體結構參數(shù)如表1所示。
表1 FC-CNN 結構參數(shù)Tab.1 FC-CNN structural parameters
在模型訓練階段,需要構建損失函數(shù)用于評估網(wǎng)絡輸出結果與實際值的差異。Softmax loss 是一種常用的損失函數(shù),它本質(zhì)上是多項Logistic loss 和Softmax 的組合。Softmax 將預測轉化為非負值,并將其標準化,從而得到類別的概率分布。這種概率預測用于計算多項Logistic loss,即:
為了防止訓練過程中發(fā)生過擬合現(xiàn)象,本文又在損失函數(shù)中加入了L2 正則化(L2 regularization),它通過降低網(wǎng)絡中一些神經(jīng)元的權值抑制過擬合,公式為
L2 正則項即對所有參數(shù)求平方和再除以樣本大小,λ是正則項系數(shù),在本文中λ=0.000 5。
本文所使用的損失函數(shù)為Softmax loss 和L2正則化的組合,即:
在設定好損失函數(shù)后,需要選擇合適的優(yōu)化器,使損失函數(shù)最小。現(xiàn)有的水果分類模型使用的是批量隨機梯度下降法 (Mini-batch Stochastic Gradient Descend,Minibatch SGD),其每一次迭代計算Mini-batch 的梯度,然后對參數(shù)進行更新。Minibatch SGD 雖然取得了一些成果,但也存在一些需要解決的問題。它選擇合適的學習率比較困難,對所有的參數(shù)更新使用同樣的學習率;同時,它容易收斂到局部最優(yōu),并且在某些情況下可能被困在鞍點。
為解決上述問題,本文使用Adam(adaptive moment estimate)優(yōu)化算法計算梯度并更新權重[13]。該算法結合AdaGrad 和RMSProp 兩種優(yōu)化算法的優(yōu)點。對梯度的一階矩估計和二階矩估計進行綜合考慮,計算出更新步長。它是一種自適應的優(yōu)化算法,能計算每個參數(shù)的自適應學習率,參數(shù)的更新不受梯度的伸縮變換影響,收斂速度快,學習效率高,其公式為
本實驗基于Windows10 操作系統(tǒng),使用開源的深度學習框架TensorFlow,配置有3.20 GHz主頻、16 GB 內(nèi)存的Intel(R) Core(TM) i7-8700 CPU,和12 GB 顯存的NVIDIA GeForce GTX 1080Ti GPU。
實驗所用數(shù)據(jù)集為Fruits-360[14],該數(shù)據(jù)集將水果安裝在低速電機的軸上,水果后面放置白紙作為背景(見圖3 左側),啟動電機并拍攝20 s 的短片,從中截取圖片。對圖片進行處理,使其背景被白色像素填充,并將圖片縮放到100×100 像素(見圖3 右側)。
圖3 Fruits-360 數(shù)據(jù)集示例Fig.3 Fruits-360 dataset example
從Fruits-360 數(shù)據(jù)集中選取了48 種中國常見的水果(如圖4 所示),其中訓練集22 806 張,測試集7 665 張。
圖4 部分水果圖像Fig.4 Some fruit images
本文對數(shù)據(jù)集進行了預處理,將輸入的RGB圖像進行隨機的色調(diào)和飽和度變化。為了對數(shù)據(jù)集增廣,隨機地水平和垂直翻轉它們。然后將它們轉換為HSV 圖片和灰度圖片,最后將其合并為4 通道圖片。
使用Adam 優(yōu)化器對損失函數(shù)進行優(yōu)化,學習率為0.001,動量參數(shù)β1=0.9,β2=0.99。從訓練集中隨機選擇64 幅圖像作為一個批次,對算法進行45 000 次迭代訓練,每100 次計算一次準確率。
為了驗證本文算法網(wǎng)絡結構的合理性,在數(shù)據(jù)集上進行了多次測試,包括有無批量規(guī)范化層(Batch normalization layer)、池化層(Pooling layer)和Dropout 的對比。多種網(wǎng)絡結構的測試結果見圖5、圖6、圖7。
圖5 多種網(wǎng)絡結構準確率Fig.5 Multiple network structure accuracy
圖6 損失函數(shù)Fig.6 Loss function
圖7 訓練集準確率Fig.7 Accuracy on training set
圖5—圖7 展示了同一數(shù)據(jù)集下不同網(wǎng)絡結構的實驗結果,可以看出CNN(with BN)在訓練集和測試集上的準確率都是最高的,同時相比于其他結構CNN(with BN)的收斂速度更快,因此驗證了FC-CNN 算法網(wǎng)絡結構的合理性。
為了驗證本文提出的FC-CNN 算法與其他分類算法在水果圖像的分類效果上是否具有優(yōu)勢,實驗選取了文獻[8-10]中的算法在Fruits-360 數(shù)據(jù)集上進行對比。表2 給出了FC-CNN 算法與其他3 種算法的分類效果對比。
表2 多種分類算法測試結果Tab.2 Various classification algorithms test results
從表2 得出,F(xiàn)C-CNN 模型相比文獻[8-10]中的模型的準確率分別高出15.06%、18.74%和16.22%,表明FC-CNN 分類算法優(yōu)勢明顯。
為了提高現(xiàn)有基于深度學習的水果圖像分類算法精度不高、識別種類少的問題,本文完成了一種基于深度神經(jīng)網(wǎng)絡的FC-CNN 水果圖像分類算法。由于采用卷積加步長替代現(xiàn)有算法中的池化層,提高了分類精度;同時加入批量規(guī)范化層,加快了收斂速度,解決了水果圖像分類算法訓練過程中過擬合的問題。經(jīng)實驗驗證,相較于現(xiàn)有方法分類精度更高,識別水果種類更多,為多類型水果分類提供了一種新的思路。課題組下一步工作將基于提出的算法,采用嵌入式設備進行硬件系統(tǒng)實現(xiàn)。