林君宇,李奕萱,鄭聰尉,羅雯波,許 蕾
(南京大學(xué) 計算機科學(xué)與技術(shù)系,南京 210023)
隨著我國花卉種植銷售產(chǎn)業(yè)規(guī)模的日益擴大,養(yǎng)花賞花的人數(shù)不斷增加.但由于缺乏相應(yīng)專業(yè)的養(yǎng)護知識,很多花卉銷售者和消費者往往不甚了解甚至忽視花卉的生長狀態(tài),導(dǎo)致花卉的死亡.
如果存在一種經(jīng)濟便捷的途徑對花卉狀態(tài)進行自動分析,尤其是對花卉種類和花卉病癥的識別,讓種植者能夠及早發(fā)現(xiàn)問題并采取對應(yīng)措施,就能確?;ɑ芰己蒙L.因此,此類自動識別技術(shù)對花卉市場有著積極的影響.
葉部的生長狀況是判斷花卉疾病的重要依據(jù),多數(shù)疾病會導(dǎo)致花卉葉部產(chǎn)生明顯的病斑等特征.利用計算機視覺技術(shù)實現(xiàn)對花卉葉部病癥檢測,可以為沒有專業(yè)知識的花卉種植者提供參考,從而及早采取對應(yīng)的防治措施.
目前軟件市場上已有多款手機APP產(chǎn)品向用戶提供免費的花卉圖像識別服務(wù)(例如形色、花伴侶、微軟識花、綠手指等).經(jīng)測試,此類產(chǎn)品有較好的花卉分類能力,正確率最優(yōu)的產(chǎn)品達到了73%,尚有提升空間.部分產(chǎn)品建立了社區(qū)供使用者交流花卉養(yǎng)護過程中遇到的問題,然而社區(qū)論壇的形式無法確保問題得到快速正確的專家意見反饋.因此,自動且即時反饋的花卉病癥識別屬于一個較新的研究領(lǐng)域.
我們擬提出一種基于計算機視覺技術(shù)的花卉和病癥識別方法,包括數(shù)據(jù)集收集、圖像預(yù)處理、分類器訓(xùn)練、工具封裝等過程,既能夠提升識別準確率,同時實現(xiàn)花卉葉部病癥的識別,實現(xiàn)花卉生長狀態(tài)的自動化、智能化分析,為花卉愛好者提供更加經(jīng)濟、便捷、有效的養(yǎng)護方案.
1https://arxiv.org/abs/1708.03763
本文余下內(nèi)容的組織方式為:第2節(jié)介紹相關(guān)工作,第3節(jié)介紹工具的設(shè)計和實現(xiàn),第4節(jié)是實驗結(jié)果的分析比較,第5節(jié)對全文進行總結(jié).
圖像分類是計算機視覺方面的一個重要課題.近年來深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)技術(shù)獲得了突破性進展,尤其是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN),在大規(guī)模圖像分類任務(wù)中有很好的表現(xiàn)[1].CNN適用范圍廣,能夠自動提取圖像低級特征并進一步學(xué)習(xí)高級特征,現(xiàn)已被廣泛應(yīng)用于圖像分類、圖像分割和物體定位等領(lǐng)域.
花卉種類和病癥識別是一個非常具有挑戰(zhàn)性的任務(wù),不同于大規(guī)模圖像分類,花卉分類的粒度更細,而且花卉形態(tài)各異的特點也成了影響分類準確性的重要因素.傳統(tǒng)花卉分類問題[2-4]的主 要解決方法為手工提取花卉圖像特征并采用支持向量機(Support Vector Machine,SVM)分類器進行分類,該方法也應(yīng)用于農(nóng)作物葉部病害的識別.裴勇提出基于花卉特點的區(qū)域特征提取方法,使用SVM分類器對50種類別的花進行分類,達到了90.8%的準確率[3].余秀麗等人采用人工拍攝的方式建立小麥病葉數(shù)據(jù)集并使用SVM對其三個病癥進行分類,達到99.3%的準確率[4].
CNN在花卉分類問題上已經(jīng)取得了很大進展[5-8],識別準確率有了很大提升,分類器設(shè)計基于Krizhevskys所提出的模型[9].Gurnani等對花卉圖片進行圖像分割處理,并將大規(guī)模圖片分類的CNN應(yīng)用于花卉分類.Liu Yuanyuan等人使用圖像顯著性和亮度圖進行區(qū)域選擇,使用CNN分類器對79類別的花進行分類,達到了76.5%的準確率,次年又結(jié)合了遷移學(xué)習(xí)和SVM替換輸出層,在Oxford 102花卉數(shù)據(jù)集上達到99.4%的準確率[5,6].在生長狀況方面,一些研究者將神經(jīng)網(wǎng)絡(luò)引入檢測作物疾病和品質(zhì)評估.Yu Sun等人人工拍攝建立大巖桐數(shù)據(jù)集并使用CNN對其三個品質(zhì)進行評估,達到89.6%的準確率[7].Al-Hiary等人比較了多種機器學(xué)習(xí)方法,對蘋果、藍莓、玉米等作物的疾病圖像進行分類,準確率在83%以上[8].
在現(xiàn)有工作的基礎(chǔ)上,本文設(shè)計和實現(xiàn)了一個花卉識別APP,采用多輸入卷積神經(jīng)網(wǎng)絡(luò)作為分類模型,結(jié)合遷移學(xué)習(xí),并且提供了一個花卉葉部病癥圖片的數(shù)據(jù)集用于模型訓(xùn)練和測試,為數(shù)據(jù)集中的花卉分別設(shè)計和調(diào)試CNN,進一步能夠?qū)ɑ苓M行病癥識別,最終形成一個集花卉分類與病癥識別為一體的工具原型.
如圖1所示,軟件框架包含一個花卉分類器和多個病癥分類器,分類器使用CNN實現(xiàn).用戶輸入花卉圖片和葉部病癥圖片,工具通過花卉分類器對花卉圖片進行分類,輸出預(yù)測花卉類別,再根據(jù)花卉類別選擇相應(yīng)的病癥分類器,對葉部病癥圖片進行病癥識別,輸出預(yù)測病癥.允許僅進行花卉分類或已知花卉僅進行病癥識別.
卷積神經(jīng)網(wǎng)絡(luò)[10-11,19-20]是受人體神經(jīng)系統(tǒng)啟發(fā)而創(chuàng)造的一種多層感知模型,具有參數(shù)共享、稀疏連接、平移不變性等特性.Fukushima提出了最初的卷積神經(jīng)網(wǎng)絡(luò)原型Neocognitron[10],Vaillant等將卷積神經(jīng)網(wǎng)絡(luò)用于手寫數(shù)字識別系統(tǒng)[11].現(xiàn)在卷積神經(jīng)網(wǎng)絡(luò)在圖像分類、圖像分割、物體定位等計算機視覺方面取得了巨大成功.
圖1 算法流程圖Fig.1 Flow chart of algorithm
CNN主要包含三種層:卷積層、池化層和全連接層.卷積層(Convolutional layer)輸入上層的特征圖,通過多個卷積核在圖上卷積并提取特征,輸出該層的特征圖,層數(shù)越多輸出特征圖代表的特征越復(fù)雜.池化層(Pooling layer)用于減小卷積層輸出特征圖的大小,減少了圖的維數(shù),防止過度擬合.全連接層(Fully connected layer)將二維圖像連接成一個一維向量,用于結(jié)果的輸出.CNN的神經(jīng)元、參數(shù)和連接數(shù)更少,在圖像處理方面比起等大小的BPNN有著更高的效率.
圖2 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Structure of CNN model
多輸入CNN能夠有效提高植物品質(zhì)分類準確率[7].為了使輸入樣本能夠覆蓋更多特征信息,我們設(shè)計了多輸入CNN,將多張圖片視為一個樣本作為網(wǎng)絡(luò)輸入.在我們實現(xiàn)的軟件中,使用者可以使用單張花卉圖片進行識別(此時模型效果與單輸入CNN相同),也可以選擇提供多角度拍攝的多張花卉圖片進行一次識別.
圖2詳細描述了多輸入CNN結(jié)構(gòu).輸入圖片大小為300×300×3.每3張圖片作為一個樣本輸入網(wǎng)絡(luò),圖片均相同時等效于單輸入CNN.將第一卷積層conv1劃分為conv1a、conv1b和conv1c,分別接收3張圖片,各使用32個大小為3×3的卷積核進行卷積,步長為1,輸出的特征圖堆疊合一.conv2至conv6的卷積核數(shù)量為64,大小為3×3,步長為1.fc1層和fc2層有32個神經(jīng)元,并在fc2層中加入失活概率為0.25的Dropout層.所有pool層大小被設(shè)置為2×2,步長為2.所有conv層都加入了Batch Normalization,激活函數(shù)為ReLU.輸出層的激活函數(shù)為softmax.
2https://arxiv.org/abs/1412.6980
3https://arxiv.org/abs/1502.03167
多輸入的設(shè)計能帶來以下好處:
1)相同的時間開銷:如果3張輸入圖片相同,那么把圖片分別輸入第一卷積層的不同入口這一行為等效于單輸入,因此多輸入卷積神經(jīng)網(wǎng)絡(luò)不會帶來計算時間的增加.
2)準確率提高:相較于單輸入模型,多輸入模型覆蓋了更多真實世界信息,同時降低了誤分類的偶然性,在樣本易獲取的情形下能夠普遍提升識別準確率.
卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程屬于監(jiān)督學(xué)習(xí),通過帶標簽的數(shù)據(jù)更新各卷積層的參數(shù),預(yù)測過程使用學(xué)習(xí)的參數(shù)計算出圖像可能性最大的類別.學(xué)習(xí)包括前向傳播和后向傳播兩個步驟.
3.4.1 前向傳播
前向傳播(Forward propagation)指的是數(shù)據(jù)從輸入層經(jīng)過卷積層、池化層和全連接層到達輸出層的階段[12].每個卷積層使用卷積核在輸入特征圖上滑動卷積,然后經(jīng)過一個激勵函數(shù)輸出新特征圖.這一步驟的公式如下.
(1)
池化層進行下采樣工作,即用一個卷積核對輸入的特征圖進行特征抽樣,保留主要特征.計算公式如下.
(2)
全連接層的作用效果相當于多層感知機中的隱藏層,層與層之間完全連接,表達式為
al=σ(wlal-1+bl)
(3)
σ是激活函數(shù),最后一個全連接層是輸出層.輸出層激活函數(shù)使用softmax函數(shù)進行多分類,公式為
(4)
3.4.2 后向傳播
后向傳播(Backward propagation)根據(jù)對圖像的真實分類與CNN輸出之間的誤差,使用梯度下降法(Gradient descent)從輸出層到輸入層依次更新參數(shù),從而使誤差降低.誤差可用交叉熵計算.
(5)
使用Adam(Adaptive Moment)梯度下降算法計算梯度并向后更新權(quán)重2.該算法結(jié)合了Momentum算法和RMSprop算法的優(yōu)點,收斂速度快,學(xué)習(xí)效率高,為參數(shù)計算自適應(yīng)的學(xué)習(xí)率.其表達式如下.
(6)
(7)
(8)
神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)過程中可能產(chǎn)生過度擬合現(xiàn)象(Overfitting).對于樣本數(shù)量少、特征復(fù)雜的數(shù)據(jù)集,網(wǎng)絡(luò)對某些特征產(chǎn)生強依賴性導(dǎo)致泛化性差,表現(xiàn)為訓(xùn)練集的準確率隨迭代次數(shù)增加而逐漸上升或趨穩(wěn),同時測試集的準確率逐漸下降.下面介紹本實驗中使用的解決過度擬合的方法.
3.5.1 Dropout優(yōu)化
Dropout[14]是一種常用的抑制過度擬合的手段.訓(xùn)練階段每個神經(jīng)元有一定概率失活,不參與訓(xùn)練,從而減少網(wǎng)絡(luò)對某些神經(jīng)元的過度依賴,增強了泛化性.測試階段不使神經(jīng)元失活.
3.5.2 數(shù)據(jù)增廣
數(shù)據(jù)集樣本的數(shù)量是影響模型性能的重要因素,在小規(guī)模數(shù)據(jù)集的情況下我們可以使用數(shù)據(jù)增廣(Data augmentation)對樣本進行擴充,減少過度擬合.具體方式是對樣本進行一系列隨機的水平/垂直翻轉(zhuǎn)、平移、旋轉(zhuǎn)、傾斜、剪切等操作生成新的樣本,使樣本數(shù)量得到擴充.
3.5.3 L2正則化
L2正則化(L2 regularization)通過降低網(wǎng)絡(luò)中一些神經(jīng)元的權(quán)值抑制過度擬合.其公式為.
(9)
加號右邊的正則項即對所有參數(shù)求平方和再除以樣本大小,是正則項系數(shù).
3.5.4 批標準化
批標準化(Batch normalization,BN)能夠加速收斂,超參數(shù)的選擇更穩(wěn)定,范圍更大3.BN包括標準化和縮放平移兩個步驟,表達式如下.
(10)
(11)
其中γ是縮放大小,β是平移距離.這兩個參數(shù)將參與訓(xùn)練,調(diào)整數(shù)據(jù)的規(guī)格,減小卷積層之間的相互依賴,進行更自主獨立的學(xué)習(xí).
傳統(tǒng)機器學(xué)習(xí)需要大量帶標簽的樣本,這將耗費大量資源,而缺乏大量的標注樣本不能保證模型訓(xùn)練正常進行.遷移學(xué)習(xí)(Transfer learning)[18]能夠借助已經(jīng)訓(xùn)練好的模型進一步學(xué)習(xí),沒有傳統(tǒng)機器學(xué)習(xí)的嚴格數(shù)據(jù)同分布假設(shè),無需從零開始訓(xùn)練,能夠?qū)⒃蝿?wù)上學(xué)習(xí)得到的先驗知識遷移到目標任務(wù)上.
遷移學(xué)習(xí)方法可分為4類:樣本遷移(Instance-based transfer)、特征遷移(Feature-based transfer)、模型遷移(Model-based transfer)、關(guān)聯(lián)遷移(Relational transfer).模型遷移也稱參數(shù)遷移,利用已適配的圖像識別系統(tǒng)遷移到新的領(lǐng)域,增加先驗知識,與深度學(xué)習(xí)結(jié)合良好.本文引入模型遷移,優(yōu)化特征提取,作為原多輸入卷積神經(jīng)網(wǎng)絡(luò)模型的輸入.
4.1.1 Oxford 102花卉數(shù)據(jù)集
Oxford 102花卉數(shù)據(jù)集[15]是牛津大學(xué)VGG小組(Visual Geometry Group)創(chuàng)建的,包含了英國常見的102種花卉,每種花卉的圖片數(shù)量在40張以上,共8189張花卉圖片.其中部分花卉圖片由VGG組員拍攝,部分來自互聯(lián)網(wǎng),圖片的分辨率經(jīng)過縮放最小為500像素.
4.1.2 ImageNet數(shù)據(jù)庫
ImageNet數(shù)據(jù)庫[16]是一個按照WordNet架構(gòu)組織的圖片數(shù)據(jù)庫,涵蓋2萬多個類別,是世界上最大的圖片數(shù)據(jù)庫之一.其中包括了豐富的有明確標注的花卉圖片.我們從Oxford 102花卉數(shù)據(jù)集和ImageNet數(shù)據(jù)庫中選出向日葵、牡丹、玫瑰、蘭花、萬壽菊、鳶尾花、三色堇、牽?;ā㈦r菊、火鶴花共10類常見家庭觀賞花卉,每類50張,共500張花卉圖片,70%用于花卉分類器的訓(xùn)練,30%用于測試.
4.1.3 花卉葉部疾病數(shù)據(jù)集
上文中的數(shù)據(jù)集均未包含花卉葉部疾病的相關(guān)圖像.為了訓(xùn)練花卉葉部疾病圖像分類器,我們通過關(guān)鍵詞搜索等方式建立了一個花卉葉部疾病數(shù)據(jù)集,數(shù)據(jù)集部分樣本如圖3所示.該數(shù)據(jù)集包含向日葵、牡丹、玫瑰、蘭花4種花卉共16種常見葉部疾病,圖片總量為609,每種花卉最少含3類疾病圖像,考慮數(shù)量均衡,選用部分疾病進行實驗.葉部疾病的主要表現(xiàn)為生長病斑,也有少數(shù)致使葉片畸形生長.由于是帶病花葉的圖片,所以與健康花卉的數(shù)據(jù)集相比,此數(shù)據(jù)集圖片內(nèi)容葉面占比更大,形狀更多變,背景更復(fù)雜,拍攝環(huán)境更多樣,因此具有一定的識別難度.
實驗服務(wù)器搭建于Google Cloud Platform,操作系統(tǒng)為Ubuntu 16.04 Server,配置有2.30GHz主頻,16G內(nèi)存的Intel(R) Xeon(R) CPU,和12G顯存的Nvidia Tesla K80 GPU.分類器的實現(xiàn)使用了開源機器學(xué)習(xí)框架Tensorflow.
圖3 花卉葉部疾病數(shù)據(jù)集示例Fig.3 Samples of flower leaf disease dataset
我們對數(shù)據(jù)集進行了一系列預(yù)處理,將圖片縮放至300×300像素的大小,并對圖片進行主要特征的裁剪和分割,見圖4.對圖片進行零均值化和歸一化以加速收斂.采用數(shù)據(jù)增廣方法,每張原圖經(jīng)水平翻轉(zhuǎn)、平移、旋轉(zhuǎn)等操作派生出4張新圖,使得樣本數(shù)量變?yōu)樵瓉淼?倍.所有樣本劃分為多個batch進行訓(xùn)練(batch大小為32),所有batch進行過一輪訓(xùn)練后需要將樣本隨機排序再重新劃分.
圖4 樣本的裁剪和分割處理Fig.4 Crop and segmentation of images
花卉分類方面,我們在數(shù)據(jù)集上進行了大量測試以得到分類效果最好的模型,包括對卷積層數(shù)、卷積核數(shù)量和卷積核大小的調(diào)整,相關(guān)圖表見表1和表2.
表1 多輸入花卉分類模型和結(jié)果(忽略池化層,conv1*指代conv1a,conv1b和conv1c,下同)Table 1 Multi-input flower classification
表1展示了使用不同圖片作為輸入的部分實驗結(jié)果,擁有6層卷積層的模型有著良好的識別效果,層數(shù)過多時準確率有下降趨勢,model7達到最高的識別準確率95.3%.
表2展示了使用相同圖片作為輸入的部分實驗結(jié)果,各模型的識別準確率均有所下降,model16達到最高的識別準確率90.7%,對比可見多輸入模型識別率更高.
我們認為多輸入情形下每個樣本包含更豐富的花卉特征信息,同時降低了測試樣本因花葉殘缺、植株變異、日照差異等原因而錯誤分類的偶然性.多輸入方式能夠普遍提升識別效果,同時與單輸入方式使用完全相同的CNN模型,僅有輸入數(shù)據(jù)的差異,因此沒有產(chǎn)生額外的計算開銷,兩種輸入方式具有相同的時間復(fù)雜度.
表2 單輸入花卉分類模型和結(jié)果Table 2 Single input flower classification
花卉葉部疾病分類方面,由于同一種花卉可能患上不同的疾病,而同一種疾病在不同的花卉上又可能有不同的特征,因此為每種花卉分別實現(xiàn)了疾病圖像分類器,相關(guān)圖表見表3和表4.
表3 花卉疾病分類模型和結(jié)果Table 3 Disease classification
表3展示了各種花卉的疾病所使用的分類模型和準確率,總體準確率達到88.2%.表4展示了具體疾病分類的查準率和查全率.不同花卉的顏色和輪廓等特征都有較大差異,而葉部疾病均發(fā)生在葉面之上,主要為病斑的差別,因此葉部疾病分類準確率較低于花卉分類.
表4 具體疾病結(jié)果Table 4 Classification of specific diseases
4類花卉中,玫瑰的4種不同病癥分類效果最好,準確率為90.6%.個別花卉病癥識別準確率偏低,除了測試樣本數(shù)量限制的影響外,可能有以下方面原因:1)不同病癥癥狀高度相似;2)不同的感染程度或發(fā)病階段造成的癥狀差異;3)不同致病源所造成的癥狀差異.
為了應(yīng)對訓(xùn)練樣本數(shù)量受限問題,我們將2014年ILSVRC競賽獲得優(yōu)勝的卷積神經(jīng)網(wǎng)絡(luò)模型VGG-16遷移到了花卉疾病識別任務(wù)上,作為特征提取器,所得特征輸入原多輸入模型.同時為了驗證模型的效果,我們與SVM、HOG-SVM和SIFT-Kmeans-SVM幾類傳統(tǒng)分類方法進行了對照實驗,使用了軟件包libsvm[17]和OpenCV2.結(jié)果見表5和圖5.其中,HOG-SVM識別效果最低,總體準確率僅有51.4%.HOG算子計算圖像局部區(qū)域的梯度直方圖構(gòu)成特征,對物體的形變保持高度不變性,細小的變化不會影響檢測結(jié)果,能夠很好的提取出大型物體的輪廓,因此適用于車輛檢測、行人檢測等.推測花卉葉部病斑小而密集、變化細微是HOG-SVM模型對其辨識度低的主要原因.
表5 不同模型的疾病分類準確度Table 5 Disease classification of different model
SIFT-Kmeans-SVM模型總體識別準確率67.4%.SIFT算子計算圖像中的特征點及其尺度和方向,并對圖像進行特征點匹配.特征具有尺度不變性,對仿射變換、亮度變化等也有較高的魯棒性,在圖像分類和處理方面應(yīng)用廣泛.推測不同病癥癥狀的相似,以及作為背景的葉片自身,是造成SIFT-Kmeans-SVM識別準確率低于CNN的主要原因,欲獲得更高的精度需要篩選特征或?qū)?shù)據(jù)集進行進一步預(yù)處理.
結(jié)合遷移學(xué)習(xí)的多輸入模型達到了最高準確率94.4%,較CNN模型的準確率提升了6.2%.遷移學(xué)習(xí)節(jié)約計算資源,優(yōu)化原有模型,緩解樣本數(shù)限制,在花卉疾病識別任務(wù)中顯示出很強的泛化能力.
圖5 不同模型的疾病分類準確度Fig.5 Disease classification of different model
本文提供了一個包含4類花共16種疾病的花卉葉部疾病數(shù)據(jù)集,原圖數(shù)量609,數(shù)據(jù)增廣后數(shù)量為3045;設(shè)計并實現(xiàn)了多輸入CNN模型及對花卉、葉部疾病進行識別的一體化APP.實驗結(jié)果顯示該工具擁有95.3%的花卉分類準確率和88.2%的疾病識別準確率,應(yīng)用遷移學(xué)習(xí)后疾病識別準確率提升至94.4%,優(yōu)于單輸入CNN和其它傳統(tǒng)分類方法.
對比相關(guān)研究,我們在對數(shù)據(jù)集進行輕度處理,構(gòu)造小規(guī)模CNN進行特征自學(xué)習(xí)的情況下獲得了良好的花卉分類效果,并通過多輸入、遷移學(xué)習(xí)進一步將識別效果提升,驗證了該方法的可用性和有效性.相較手工提取特征的分類方式操作簡單,能夠?qū)W到更豐富、復(fù)雜的圖像特征信息,相較其它以農(nóng)作物為對象的狀態(tài)診斷研究有著更佳的識別效果.
在未來的工作中,我們會進一步擴充花卉葉部疾病數(shù)據(jù)集,包括更多的花卉種類和疾病種類.繼續(xù)改進分類器的效果,包括改進特征提取、嘗試半監(jiān)督學(xué)習(xí)等方式.