付雪婷 ,王新鑫 ,楊凡凡 ,潘 昊
(沈陽化工大學(xué),遼寧 沈陽 110142)
花卉識別是圖像識別的一種。圖像識別是計算機視覺領(lǐng)域的重要概念之一[1]。目前深度學(xué)習(xí)的突出領(lǐng)域主要是在圖像、音頻兩大方面。本研究介紹了使用不同深度學(xué)習(xí)算法對月季品種分類識別的方法[2]。該方法借助卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)將其分為不同的類別,通過圖片集訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)模型來提高識別不同月季品種的準(zhǔn)確率。同時,介紹了花卉識別的背景、卷積神經(jīng)網(wǎng)絡(luò)的原理、相關(guān)研究現(xiàn)狀以及具體實驗設(shè)計,最后進行了實驗分析和總結(jié)。
傳統(tǒng)的花卉識別通常是由植物學(xué)家完成的,對于大多數(shù)人而言,當(dāng)他們在這個領(lǐng)域的知識和經(jīng)驗不足時,將面臨著識別花卉種類的困難[3]。世界上有超過45 萬種花,我國約有3 萬種花,植物學(xué)家無法記住所有的種類。普通人要想認(rèn)出這些花,就必須在不同搜索引擎的幫助下,通過書籍或互聯(lián)網(wǎng)進行單調(diào)乏味的搜索。對于以上情況,需要設(shè)計一個自動化檢測和識別花卉種類的軟件[4]。建立自動花卉識別的重要性突出在許多方面,比如為采摘機器人提供快速識別;滿足植物愛好者識別花卉種類的需求等?;ɑ茏R別技術(shù)對花卉種類識別經(jīng)驗不足的人來說,不僅能夠認(rèn)出花卉種類,還能節(jié)省大量時間和精力。智能農(nóng)業(yè)中的自動采花系統(tǒng)已經(jīng)被研究了很多年,需要將花朵識別任務(wù)集成為系統(tǒng)的一部分。此外,近年來人們對花卉的需求也使其成為農(nóng)業(yè)中重要的商業(yè)貿(mào)易。
市面上已有諸如形色、花伴侶、百度識圖等相關(guān)的識別植物的軟件,然而這類軟件只能識別出花卉或植物的總名稱,不能識別出其具體的種類名。比如月季是薔薇科薔薇屬的一種植物,耐寒,中國是原產(chǎn)國之一,有兩千多年的栽培歷史,是國內(nèi)52 座城市的市花。市面上沒有識別月季品種的軟件,常見的花卉識別軟件也未提供開源算法,本研究通過深度學(xué)習(xí)算法對識別月季品種進行了相關(guān)研究與分析[5]。
傳統(tǒng)機器學(xué)習(xí)方法的主要研究內(nèi)容如下:Nilsback[5]最早提出了花卉圖像分割算法,用于分離前景和背景;Chai 等[6]在Nilsback 等的基礎(chǔ)上進行改進,提出了一種聯(lián)合過濾分割算法BiCoS;Angelova等改進了之前的算法,他們先檢測圖像的low-level位置,接著用Propagation 算法對原始的花卉圖像進行全分割。
近年來,以CNN 為基礎(chǔ)的深度學(xué)習(xí)方法更加主流,以GoogLeNet、ResNet、Batch Normalization 等網(wǎng)絡(luò)模型為代表[7],取得了大幅度進展。有學(xué)者采用AlexNet,用ILSVRC 數(shù)據(jù)集訓(xùn)練好的網(wǎng)絡(luò)參數(shù)初始化網(wǎng)絡(luò)層(最后一層全連接層除外),以較大的學(xué)習(xí)速率訓(xùn)練最后一層全連接層,以較小的學(xué)習(xí)速率微調(diào)瓶頸層;Hu 等采用GoogLeNet,先在ILSVRC 數(shù)據(jù)集上訓(xùn)練網(wǎng)絡(luò),之后替換掉最后一層全連接層,再在Oxford-102 Flower 數(shù)據(jù)集上微調(diào)網(wǎng)絡(luò);Wu 等采用ResNet50,先在ILSVRC 數(shù)據(jù)集上訓(xùn)練網(wǎng)絡(luò),然后以一個較小的學(xué)習(xí)速率再對所有網(wǎng)絡(luò)層進行微調(diào)。
深度學(xué)習(xí)已初步展示了可以從植物圖像中學(xué)習(xí)出具有高判別力的底層紋理特征,是解決月季品種識別的有效工具[8]。許多成功的真實世界圖像識別系統(tǒng)需要成百上千的訓(xùn)練示例。無論是開發(fā)更好的學(xué)習(xí)算法,還是增加訓(xùn)練集的規(guī)模,都有可能提高對象分類性能。
1.3.1 圖像識別
花卉識別是圖像識別的一種。目前深度學(xué)習(xí)的突出領(lǐng)域主要是在圖像、音頻兩大方面?;ɑ軋D像識別流程主要有圖像預(yù)處理、圖像分割、特征提取、特征分類[9]?,F(xiàn)在,圖像分割已被確立為圖像處理中的可靠技術(shù),使用圖像處理工具可以從圖像中提取重要特征。為了從圖像中提取重要特征,分割提供了一種快速的解決方案。將圖像數(shù)字化并將其區(qū)分為多個片段以勾勒出感興趣的區(qū)域,這被稱為圖像分割[10]。圖像識別將圖像處理得到的圖像進行特征提取和分類,目前常用的分類方法包括支持向量機、神經(jīng)網(wǎng)絡(luò)等。其中任意一種方法都可以通過計算類別標(biāo)簽的概率來幫助將花卉分類到各自的類別中[11]。
1.3.2 卷積神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)[12]是一個模仿動物神經(jīng)網(wǎng)絡(luò)行為的數(shù)學(xué)算法模型,基本單位是神經(jīng)元,也稱為節(jié)點。每個神經(jīng)元收到輸入的線性組合后,先進行簡單的線性加權(quán),然后在每個神經(jīng)元上添加非線性激活函數(shù),經(jīng)過非線性變換后輸出[13]。一個完整的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)包含輸入層、卷積層、激活層、池化層、全連接層[14]。
1)輸入層是卷積神經(jīng)網(wǎng)絡(luò)各層中的底層,其功能是處理輸入數(shù)據(jù),如去除平均值,減少數(shù)據(jù)中的過度偏差,并改善訓(xùn)練效果。
2)卷積層是整個網(wǎng)絡(luò)的核心層。卷積層包含一組需要學(xué)習(xí)參數(shù)的過濾器。每個過濾器與輸入體積相結(jié)合,通過權(quán)重分配提取輸入局部區(qū)域的局部函數(shù),并計算由神經(jīng)元構(gòu)成的激活圖[15]。然后,根據(jù)深度將所有濾波器的激活映射進行疊加,得到輸出結(jié)果。最后,通過一系列內(nèi)核權(quán)重和激活函數(shù)生成一個輸出函數(shù)映射[11]。在神經(jīng)網(wǎng)絡(luò)領(lǐng)域廣泛使用的整流線性單位被用作激活函數(shù)。其輸出可以表示為以下數(shù)學(xué)方程:
式中,f表示一個激活函數(shù),k是核,Mj是對應(yīng)的一個輸入,l表示網(wǎng)絡(luò)中的層次。
3)激活層常用的激活函數(shù)是Sigmoid、ReLU 和Softmax。在卷積神經(jīng)網(wǎng)絡(luò)中一般采用ReLu 激活函數(shù),其收斂速度更快。
4)池化層通常位于卷積層的后面。它作為一個子采樣,集成了類似的功能,減少了參數(shù)的數(shù)量。最大池化層的最大值計算為特征圖的每一個補丁,最大池化即取區(qū)域平均最大,如圖1 所示。
圖1 最大池化示意圖
5)全連接層可以簡單理解為一個分類器。全連接層將二維特征映射的輸出轉(zhuǎn)換為一維向量。所有神經(jīng)元都與后續(xù)層和相鄰層中的神經(jīng)元完全連接,將學(xué)習(xí)的“分布式特征表示”映射到樣本標(biāo)簽空間。
本研究選取目前比較熱門的三個圖像識別算法進行對照試驗,分別是ResNet、GoogLeNet 及Inception V3,算法參數(shù)如表1 所示。
表1 算法參數(shù)
2.1.1 ResNet算法
由于存在梯度消失和梯度爆炸的問題,極其深的神經(jīng)網(wǎng)絡(luò)很難訓(xùn)練。跳躍連接(Skip connection),它可以從某一網(wǎng)絡(luò)層獲取激活,然后迅速反饋給另外一層,甚至是神經(jīng)網(wǎng)絡(luò)的更深層,可以利用跳躍連接構(gòu)建能夠訓(xùn)練深度網(wǎng)絡(luò)的ResNet。ResNet 算法的重大創(chuàng)新在于增加了殘差塊(Residual block),不僅大大減少了模型計算量、減少了數(shù)據(jù)冗余,而且模型的訓(xùn)練準(zhǔn)確率與速度得到了提升。
2.1.2 GoogLeNet 算法
GoogLeNet 作為CNN 里比較有名經(jīng)典的算法,與其他CNN 相比,其增加了處理原始數(shù)據(jù)的層數(shù),達到了22 層。其基本思想是不用人為決定使用哪個過濾器或者是否需要池化,而是通過添加參數(shù)的所有可能值,然后把這些輸出連接起來,讓網(wǎng)絡(luò)自己對比不同參數(shù)的效果以確定采用哪些參數(shù)及組合。即Inception 網(wǎng)絡(luò)的作用就是代替人們做決定,因此網(wǎng)絡(luò)架構(gòu)變得更復(fù)雜,計算量變大,但該算法表現(xiàn)卻非常好。為了減少計算成本,Inception 網(wǎng)絡(luò)中加入了1×1卷積。
2.1.3 Inception V3算法
Inception V3 算法在GoogLeNet 的基礎(chǔ)上,主要進行了兩方面的改造:一是引入了Factorization into small convolutions 的思想,將一個較大的二維卷積拆成兩個較小的一維卷積。二是優(yōu)化了Inception Module 的結(jié)構(gòu)。好處是節(jié)約了參數(shù),加快了運算速度并減輕了過擬合,非對稱的卷積結(jié)構(gòu)拆分可以處理更多的空間特征,增加特征多樣性。
本研究中實驗對象選取五種不同的月季,種類名稱分別是藍色風(fēng)暴、金絲雀、自由精神、果汁陽臺和紅色龍沙寶石,如圖2 至圖6 所示。藍色風(fēng)暴是藍紫色重瓣中型月季,金絲雀是黃色微型月季,自由精神是粉色藤本重瓣月季,果汁陽臺是橙黃色微型月季,紅色龍沙寶石是紅色藤本月季。其中,金絲雀和果汁陽臺顏色較為接近,作為顏色的對照組。
圖2 藍色風(fēng)暴
圖3 金絲雀
圖4 自由精神
圖5 果汁陽臺
圖6 紅色龍沙寶石
實驗主要用到Anaconda、Python、PyCharm 及TensorFlow等。
2.3.1 月季圖像數(shù)據(jù)庫的建立
本實驗基于上述五個品種,收集了約1 800 張圖片。在構(gòu)建圖像識別系統(tǒng)時,圖像數(shù)據(jù)收集一般不是在環(huán)境中搜索對象,就是事先收集對象實例。數(shù)據(jù)集的質(zhì)量很大程度上取決于收集和注釋的性能。通過搜索引擎及公共社交網(wǎng)絡(luò)中收集了這五種不同品種的月季圖像,對圖像集進行了人工篩查,刪去了不是該品種的圖像。
將圖片放在“rose/dataset/train”文件夾中,在該文件夾再新建五個文件夾分別用來放不同種類的圖片,把藍色風(fēng)暴的圖片放入命名為“blue”的文件夾,把金絲雀的圖片放入命名為“canary”的文件夾,把自由精神的圖片放入命名為“free”的文件夾中,把果汁陽臺的圖片放入命名為“juice”的文件夾中,把紅色龍沙寶石的圖片放入命名為“red”的文件夾中。
安裝imgaug 庫,對分好類別的圖片數(shù)據(jù)進行數(shù)據(jù)增強,將圖片數(shù)量擴充為原來的五倍,數(shù)據(jù)集圖片數(shù)量約9 000 張。在dataset 文件目錄下新建val 文件夾,并按種類新建五個文件夾,將數(shù)據(jù)增強后的圖片打亂隨機分為訓(xùn)練集和測試集放入train 和val文件夾中。
2.3.2 安裝訓(xùn)練框架
本研究采用TensorFlow+GPU 的方式對月季花卉圖像進行神經(jīng)網(wǎng)絡(luò)訓(xùn)練,在進行神經(jīng)網(wǎng)絡(luò)訓(xùn)練之前需要安裝顯卡驅(qū)動、CUDA、配置CuDNN 以及安裝第三方庫tf-slim。
2.3.3 圖像的預(yù)處理
為了減少訓(xùn)練神經(jīng)網(wǎng)絡(luò)的計算時間,提高讀取數(shù)據(jù)的效率,對數(shù)據(jù)進行預(yù)處理,利用封裝好的create_tf_record.py 模塊將圖片數(shù)據(jù)集轉(zhuǎn)換為TFRecords(二進制)格式。
在訓(xùn)練中,應(yīng)用諸如隨機縮放、裁剪和翻轉(zhuǎn)之類的轉(zhuǎn)換,有助于網(wǎng)絡(luò)通用化,從而獲得更好的性能。將圖像增強后得到的數(shù)據(jù)分為訓(xùn)練集和驗證集。驗證集用于測試模型在未知數(shù)據(jù)上的性能。為此,其不需要任何縮放或旋轉(zhuǎn)變換,但需要調(diào)整大小,然后裁剪圖像到適當(dāng)?shù)拇笮?,如GoogLeNet 要求輸入的數(shù)據(jù)是224*224,因此需要設(shè)置存儲圖片高度為224*224。
2.3.4 搭建神經(jīng)網(wǎng)絡(luò)
在上述過程的程序中,將花朵圖片處理成適合神經(jīng)網(wǎng)絡(luò)輸入的形式,并對處理后的圖片進行標(biāo)簽處理,隨機拆分成訓(xùn)練集和測試集。之后就到了深度學(xué)習(xí)模型搭建的過程。
本研究主要利用TensorFlow 官方的slim 庫搭建網(wǎng)絡(luò)。谷歌把一些最新的、最重要的大型網(wǎng)絡(luò)已經(jīng)實現(xiàn)好并封裝在tf-slim 里面,可直接調(diào)用。tf-slim 是TensorFlow 中定義、訓(xùn)練和評估復(fù)雜模型的輕量級庫,可實現(xiàn)精細(xì)化操控,可以多GPU 并行訓(xùn)練,快速產(chǎn)出。
在Python 里搭建GoogLeNet、Inception V3、ResNet 的網(wǎng)絡(luò)結(jié)構(gòu)。定義訓(xùn)練函數(shù)的參數(shù),讀取轉(zhuǎn)換過的訓(xùn)練集和測試集的TFRecords 數(shù)據(jù),利用tf.contrib.slim 定義網(wǎng)絡(luò)模型,設(shè)置默認(rèn)參數(shù),指定損失函數(shù)和準(zhǔn)確率,定義優(yōu)化方案,設(shè)置迭代參數(shù)及模型保存參數(shù)(實保存val 準(zhǔn)確率最高的模型)。搭建完成后對月季數(shù)據(jù)集進行訓(xùn)練。
此外提前新建“models”文件夾,用來保存訓(xùn)練模型后得到的模型。
2.3.5 測試網(wǎng)絡(luò)模型
測試分類程序=多張圖片導(dǎo)入+讀取圖片+調(diào)用模型+預(yù)測結(jié)果。首先對測試圖片進行預(yù)處理,進行拉伸、縮小像素、改變縱橫比、調(diào)色、加濾鏡等操作,在測試程序中導(dǎo)入圖片,調(diào)用訓(xùn)練好的模型進行識別,最后程序輸出月季種類預(yù)測結(jié)果,如圖7 至圖11所示。通過測試未經(jīng)訓(xùn)練過的新圖像,可以很好地估計模型在全新圖像上的性能。
圖7 原圖
圖8 拉伸變形
圖9 黑白濾鏡
圖10 調(diào)色
圖11 縮小像素
通過運行測試驗證新圖像和測量準(zhǔn)確率,不同算法對比如表2 所示,GoogLeNet 測試集的TOP-1準(zhǔn)確率為96.36%,Inception V3 的TOP-1 準(zhǔn)確率為97.06%,ResNet50的TOP-1準(zhǔn)確率為96.58%。
表2 不同算法對比
通過實驗結(jié)果可見,本次實驗中對于月季品種識別準(zhǔn)確率最高的算法是Inception V3,相同的數(shù)據(jù)集生成訓(xùn)練網(wǎng)絡(luò)模型最小的是GoogLeNet。ResNet50生成的網(wǎng)絡(luò)模型最大,TOP-1 準(zhǔn)確率略低于Inception V3,但是在迭代過程中,它比其他算法更快達到了較高、較穩(wěn)定的準(zhǔn)確率,由圖12 至圖14 所示的準(zhǔn)確率曲線可以明顯看出此結(jié)論(橫軸為迭代次數(shù),縱軸為準(zhǔn)確率)。
圖12 GoogLeNet訓(xùn)練準(zhǔn)確率
圖13 Inception V3訓(xùn)練準(zhǔn)確率
圖14 ResNet50訓(xùn)練準(zhǔn)確率
本研究采用三種不同的卷積神經(jīng)網(wǎng)絡(luò)算法進行訓(xùn)練,模型代碼還有進一步優(yōu)化的空間,使其更加適合識別月季花卉。相對于公開數(shù)據(jù)集的圖片數(shù)量,文中提到的數(shù)據(jù)增強后的圖片數(shù)據(jù)集數(shù)量還是較少,訓(xùn)練一個準(zhǔn)確率高的模型離不開大規(guī)模的數(shù)據(jù)集。
在對新圖片進行拉伸變形、加濾鏡、調(diào)色、縮小像素等操作進行測試時,發(fā)現(xiàn)三種算法模型對加了黑白濾鏡的圖片識別準(zhǔn)確率很低。對大批量黑白圖片進行測試,準(zhǔn)確率最高的是調(diào)用Inception V3 的模型,為25%。月季種類很多,本研究僅選用了五個品種。有許多月季品種的顏色、形狀、花型相近,這將是識別的難點。接下來可以增加幾個月季品種以訓(xùn)練測試其準(zhǔn)確率,并可對比更多不同算法的訓(xùn)練速度和準(zhǔn)確率。
本研究基于深度學(xué)習(xí)算法,在Python 環(huán)境中使用TensorFlow 框架搭建不同的卷積神經(jīng)網(wǎng)絡(luò)算法模型,去訓(xùn)練識別不同品種的月季。通過搜集網(wǎng)絡(luò)上的有效圖片,在進行數(shù)據(jù)增強后,建立了五個不同品種月季的圖片數(shù)據(jù)集,人工篩查了圖片以提高學(xué)習(xí)正確率。接著為數(shù)據(jù)集搭建三種卷積神經(jīng)網(wǎng)絡(luò)模型進行識別預(yù)測。將來可以繼續(xù)完善,比如利用Python 搭建一個對用戶友好的軟件界面,可以幫助用戶查詢具體品種的月季,也有利于收集更多的圖像豐富數(shù)據(jù)集。由于選取的品種比較少,識別的準(zhǔn)確率高于預(yù)期,但如果是成百上千的月季品種,將無法識別過多的相似度高的月季品種,不同品種的月季有一些極為相似,在這種復(fù)雜的情況下,經(jīng)驗豐富的植物專家都很難快速準(zhǔn)確地識別相似品種的月季。以后可以考慮從花苞形狀、開花花型、花蕊距離、顏色等更多維度提取特征來區(qū)分、識別月季種類,進行進一步研究。