岳有軍, 田博凱, 王紅君, 趙 輝,2
(1.天津理工大學電氣電子工程學院,天津市復雜系統控制理論與應用重點實驗室,天津 300384;2.天津農學院工程技術學院,天津 300384)
蘋果產業中,對采摘后的蘋果進行外觀分類是一個重要環節,在蘋果生長過程中難免會產生病害導致表面存在病斑或者腐爛現象,所以需要對采摘后的蘋果進行分類。目前大多數的蘋果外觀分類還是采用人工的方式,這樣會消耗大量的人力,效率低下,影響后續蘋果的銷售。因此,實現對蘋果外觀快速、準確分類對蘋果產業的快速發展具有重要意義。
目前對蘋果的分類識別研究已經取得了一些進展,尹秀珍等[1]采用支持向量機(SVM)的方法,對蘋果果實病害進行分類識別;霍迎秋等[2]利用壓縮感知理論,求解待測樣本特征向量在特征矩陣上的稀疏表示系數向量,通過對系數向量的分析實現蘋果病害的分類; Omrani等[3]利用徑向基函數的支持向量回歸對蘋果病害進行檢測。Khan等[4]提出一種基于強相關性和基于特征選擇的遺傳算法對蘋果病害進行分割和識別。王梓萌等[5]通過主成分分析(PCA)分別與馬氏距離判別模型和Fisher判別模型結合,比較兩種判別模型對霉心病的判別精度,完成對蘋果的霉心病的檢測。由于采摘后的蘋果外觀存在病斑或腐爛的情況在蘋果圖像中的比例較小,不容易分辨,用傳統方法識別難度較大,很難保證相對較高的精度。
近年來,隨著深度學習的發展,卷積神經網絡開始廣泛應用到各行各業[6-11]。農業方面,王細萍等[12]通過基于卷積網絡和時變沖量學習的方法對蘋果病變圖像進行識別;程鴻芳等[13]利用改進LeNet卷積神經網絡的方法對蘋果圖像進行識別。Muhammad等[14]提出基于相關系數和深度卷積神經網絡特征的方法用于果樹病害自動分割識別;Jiang等[15]將改進卷積神經網絡的深度學習方法應用到了檢測蘋果葉片病害中。這些研究表明,卷積神經網絡對蘋果的外觀分類識別有很好的應用性,克服了傳統方法在效率和精度上的不足。
為了實現對采摘后的蘋果進行精確的分類識別,提出了一種基于改進VGGNet的識別方法。考慮到蘋果病斑和腐爛數據的多樣性,數據集中收集了多種的蘋果病斑和腐爛樣本,并應用數據增廣技術,增加數據集中圖片的數量,避免網絡發生過擬合現象。以構建的分類網絡為基礎,將其用于蘋果外觀圖像的特征提取與表達,建立蘋果外觀分類器,并通過實驗檢驗本文方法的有效性。
VGGNet網絡作為一個經典的卷積神經網絡,主要包含輸入層、卷積層、池化層和全連接層。
卷積層的作用是做特征提取,每個卷積核與上一層輸入的特征圖進行卷積,具體就是卷積核以一定的步長在特征圖上進行滑動,并進行卷積運算,這樣就能得到此層的特征圖。每一個卷積核進行卷積運算后就能得到一個特征圖,也就是說能提取到一種特征。池化層也叫下采樣層,作用是主要用于特征降維,壓縮數據和參數的數量,減小過擬合,對后續層中所需要的參數也有了大幅度的縮減,同時提高模型的容錯性。池化層主要分為最大池化(max pooling)和平均池化(average pooling)兩種,最大池化就是對鄰域內特征點取最大,平均池化即對領域內特征點取平均值,比較常用的是最大池化。
全連接層在整個卷積神經網絡中主要起到分類器的作用,將學到的分布式特征映射到樣本標記空間。全連接層通常在最后一個卷積層或池化層之后,其每一個神經元和上層的全部神經元相連接。
VGGNet的最主要的思想就是增加網絡深度,減小卷積核尺寸(3×3)。減少卷積核的好處就是可以減少參數和計算量。VGGNet結構相對于其他深層卷積神經網絡來說,對結構和數據量相對較小的訓練數據集有較好的處理能力,并且易于實現,識別效率較高。其中最典型的結構是VGG-16,有13個卷積層和3個全連接層,共16個權重層。VGG-16的輸入為224 pixel×224 pixel的RGB圖像,經過整個卷積網絡的處理之后,輸出為輸入圖像屬于每個類別的概率。模型總體上分為6部分,前5部分為多個卷積核大小為 3×3的卷積層構成,后一部分為3個全連接層。VGG-16中的每個卷積層卷積步長(stride)為1 pixel,并通過邊界填充(padding)為1 pixel來保持輸入輸出維度保持不變。池化層采用的是最大池化,窗口大小為2×2。3個全連接層的通道數分別為4 096、4 096、1 000,1 000表示輸入圖像在1 000類中每一類的得分,由于VGG-16是在ImageNet數據集上訓練得到的,所以分類數為1 000。最后一層為softmax層,用于將得分轉化為輸入圖像屬于每個類別的概率。為了使權重具有非線性特征,在卷積層中使用了ReLU做非線性變換,加快網絡收斂速度。
由于蘋果外觀分類數據集和ImageNet數據集相差較大,將VGG-16直接應用于蘋果外觀分類會導致識別準確率的降低,所以針對蘋果外觀分類的特點對VGG網絡進行改進。
1.2.1 批歸一化
卷積神經網絡學習過程的本質就是為了學習數據分布,一旦訓練數據與測試數據的分布不同,那么網絡的泛化能力也會大大降低。對于輸入的數據,已經進行了人為的歸一化,由于前面訓練參數的更新將導致后面層輸入數據分布的變化。
為了解決這個問題,使用了批歸一化的方法。在網絡的每一個卷積層之后,激活函數之前,又插入了一個歸一化層。
此方法是將每一層的激活值進行歸一化之后,將它們映射到方差為1均值為0的區域,從而解決了梯度消失的問題。當梯度變大之后,網絡更新速度和訓練速度變快,帶來的好處是達到相同的正確率所需要的迭代次數更少,迭代相同次數時正確率會變高。
批歸一化處理算法如下,批處理輸入數據為m個樣本x1~xm,輸入數據的均值μ為
(1)
方差σ為
(2)
然后將數據歸一化
(3)
公式如下:
yi=γixi+βi
(4)
(5)
βi=E(xi)
(6)
式中:參數γi和βi是通過訓練學習得到的,Var為方差函數,E為均值函數。
1.2.2 全局平均池化
傳統的卷積神經網絡一般在卷積層之后添加全連接層進行特征的向量化,此外由于神經網絡的黑箱特征,設計幾個全連接層還可以增加卷積神經網絡的分類性能,幾乎成了卷積神經網絡的標配。但是,全連接層有一個缺點就是參數量過多,一方面增加了神經網絡訓練和測試計算量,降低了速度;另一方面參數過多會導致網絡的過擬合。

conv3-64、conv3-128、conv3-256和conv3-512等表示卷積核大小為3×3,通道數為64、128、256和512的卷積層,maxpool為步長為2 pixel最大池化層,BN(batch normalization)為批歸一化層圖2 改進VGG模型Fig.2 Improve the VGG model
針對于此問題,可以通過全局平均池化來解決。全局平均池化相對于傳統的全連接層來說,能防止網絡的過擬合,并增強特征圖與類別的關系。
全局平均池化的主要思想是將每個進入全連接層之前的特征圖融合為一個特征點,然后將這些特征點組成特征向量輸入到softmax中進行分類,這樣就會降低參數數量,減小計算量,防止網絡的過擬合。例如網絡最后一層的數據是n個m×m的特征圖,全局平均池化就是計算每一張特征圖的像素點的均值,輸出一個特征點,這樣n個特征圖就輸出n個特征點,這些特征點組成一個1×n的特征向量,就可以輸入到softmax中進行分類了。如圖1所示。

圖1 全局平均池化Fig.1 Global average pooling
1.2.3 聯合損失函數
對于常見的圖像分類問題,通常采用softmax loss損失函數來求損失,softmax loss是將前一層的輸出映射到(0,1)的區間內,最小化分類概率和真實分布的交叉熵使分類的概率更加接近真實類別。但是在蘋果外觀分類問題上,由于蘋果病斑和蘋果腐爛的情況非常相似,導致特征差異化不大。
可以采用softmax loss和center loss聯合損失函數的方法,在softmax loss可以保證類間特征距離最大的基礎上,加入center loss可以保證類內的特征距離最小,讓同一類別的樣本都能靠近對應類別的特征中心,使訓練更加容易并方便進行優化。
softmax loss損失函數為
(7)
center loss損失函數為
(8)
式中:xi表示一共m個樣本中屬于yi的第i個樣本特征;wj表示在全連接層的參數矩陣中的第j列,b為偏置;cyi表示第yi類別的特征中心。
基于改進的蘋果外觀分類模型在VGG-16模型的基礎上添加了批歸一化層,并采用全局平均池化層替代了之前的全連接層,最后采用聯合損失函數的方法加入了center loss配合softmax loss使用,保證了識別模型的準確性。模型如圖2所示。
以采摘后的蘋果為研究對象,用采摘后的蘋果圖片作為數據進行訓練。由于收集到的圖片數量有限,為了增加數據的多樣性,降低網絡過擬合的風險,在預處理階段需要利用數據增廣技術來處理數據。數據增廣技術是在保證數據類別不變的前提下,對原始圖片進行各種變換,增加數據量,提高模型的泛化能力。數據增廣的方式有很多,現采用下面幾種方式進行數據增廣:
(1)對原圖像進行隨機旋轉(90°~180°)和水平翻轉。由于是對采摘后的蘋果進行外觀分類,所以蘋果在圖片中的方向是不確定的,可以采用隨機旋轉的方法增加數據集的隨機性。水平翻轉不同于旋轉180°的方法,而是類似于鏡面的翻轉,可以改變蘋果在圖片中的位置,增加數據集的數量。
(2)對原圖像進行平移和放大。平移是將圖像沿著x方向或y方向進行移動,或者沿x和y方向移動,保證蘋果在圖片中位置的隨機性。因為每個蘋果在圖像中的大小不一樣,所以可以對原圖像進行等比例放大。經過平移和放大之后,可以進一步增加原有數據集的數量。
(3)在原圖像中添加噪聲。過擬合通常發生在卷積神經網絡學習高頻特征的時候,因為低頻特征很容易就能學到,高頻特征只有到最后才能學到,但高頻特征對神經網絡未做的任務沒有幫助,會對低頻特征產生影響,可以使用隨即加入噪聲來消除這寫特征。
經過在原有獲取到的數據集基礎上進行數據增廣之后,可以得到約20 000張蘋果圖片,其中15 000張圖片作為訓練集,5 000張圖片作為測試集。將數據集分為正常、病斑和腐爛蘋果三類,每一類的標簽分別為0、1和2,如圖3所示。訓練之前,將數據集中所有圖片統一設置為224×224像素。

圖3 蘋果數據集示意圖Fig.3 Schematic diagram of apple dataset
試驗在Ubuntu 18.04的操作平臺下進行,計算機配置為Intel Xeon(R)CPU E5-2650 v4@2.20 Hz×48、12 GB的 GeForce GTX 1080Ti×2 GPU并且運行內存為64 GB。采用Tensorflow深度學習框架,結合Python語言編程實現網絡的訓練和測試。
采用隨機梯度下降法(stochastic gradient descent, SGD)對網絡進行訓練,用批次訓練的方法將訓練集和測試集分為多個批次,訓練時的batch size設置為64,測試時的batch size設置為50,迭代次數(epoch)為100次。初始學習率設置為0.01,并且分階段逐次減小為原來的0.1倍,正則化系數設置為0.005。
為了測試改進后的網絡對蘋果外觀識別準確率產生的影響,將改進后的模型與改進前的模型、AlexNet以及GoogLeNet進行準確率的比較,驗證方法的有效性。
文中為改進后的算法,命名為improve VGGNet,進行訓練時不同模型的損失函數曲線如圖4所示。

圖4 不同CNN模型的訓練損失Fig.4 Training loss of different CNN models
可以看出,改進后模型的損失函數相對于其他卷積神經網絡模型在訓練時較早的就達到擬合狀態,逐漸接近于0。
訓練時的準確率如圖5所示,可以看出幾個模型的準確率在迭代次數在30 000次以上都達到了一個較高的值,改進后的模型相對于其他模型較早的穩定在1附近,相對于對于其他模型準確率有明顯提升。

圖5 不同CNN模型的準確率Fig.5 Accuracy of different CNN models
為了驗證本文算法在對正常蘋果、病斑蘋果和腐爛蘋果分類的有效性,在測試集下,將目前在分類方面應用較多的AlexNet、GoogLeNet和VGGNet算法進行對比,各模型識別結果如表1所示。

表1 不同方法的性能對比
從表1中可以看出,在卷積神經網絡中,AlexNet、GoogLeNet、VGG-16和改進模型識別率分別為96.91%、98.60%、97.86%和99.25%。可以看出經過改進后的模型相比較其他四種模型對于蘋果的識別率還是有明顯提升的,證明了本文方法的有效性。GoogLeNet與之最為接近,AlexNet由于卷積層數較少等原因,在卷積神經網絡中最低。
總體來看,三類蘋果中正常蘋果識別率最高,腐爛蘋果居中,因為蘋果中病斑特征不太明顯,所以病斑蘋果識別率最低。經過改進后的模型相對于其他3種模型識別率較高,能很好地滿足蘋果外觀分類的要求。
提出了一種基于VGG模型的蘋果外觀分類方法,得出以下結論。
(1)針對VGG-16在蘋果外觀分類的訓練過程中容易出現計算量大、過擬合的問題,提出在利用數據增廣技術增大數據量的同時,用批歸一化、全局池化和聯合損失函數對網絡進行優化,優化后的網絡比原網絡的平均準確率提高1.4%。
(2)試驗表明對采摘后的蘋果進行外觀分類平均準確率達到99.25%。為了驗證改進后模型在蘋果外觀分類上的有效性,與在蘋果識別方向應用較多的AlexNet、GoogLeNet和未改進的VGGNet算法進行對比,結果表明改進后模型的平均準確率均高出其他模型。
(3)改進后的模型雖然計算量不大,但是仍有可優化空間,今后還需要在確保精度高的同時,使計算量最小,從而方便后續對蘋果外觀分類的研究和應用。