鄭麗麗
(閩南科技學院計算機信息學院, 福建南安 362332)
將計算機圖形識別運用于農(nóng)業(yè)生產(chǎn)可以降低害蟲對農(nóng)業(yè)的影響, 并推動農(nóng)業(yè)自動化的發(fā)展[1-2]. 以前, 農(nóng)業(yè)害蟲的防治, 往往依靠人工或者機器大范圍的農(nóng)藥噴灑成本較高.
目前已提出的害蟲圖像識別算法中, 張永玲等人提出了基于多特征融合和稀疏表示的農(nóng)業(yè)害蟲圖像識別系統(tǒng), 其采用HSV顏色特征、 HOG特征、 Gabor特征和LBP特征, 經(jīng)過融合, 建立稀疏數(shù)據(jù)集, 完成對農(nóng)業(yè)害蟲的識別, 其優(yōu)點是能覆蓋多種特征, 具有抗干擾能力, 但是當背景干擾和目標采集環(huán)境發(fā)生較大變化時, 算法識別能力往往大受影響[3]. 張苗輝等人提出基于深度學習和稀疏表示的害蟲識別算法, 其使用耦合網(wǎng)絡模型、 caffe框架, 利用稀疏表示算法得到樣本訓練模型, 在一定程度上達到了害蟲識別目的, 但是該技術(shù)未考慮訓練模型的欠擬合性, 往往缺乏普適性, 當害蟲圖像特征變化較大時, 往往不能較好完成害蟲識別任務[4]. 程曦等人提出基于深度卷積神經(jīng)網(wǎng)絡的儲糧害蟲圖像識別算法, 其使用耦合深度卷積神經(jīng)網(wǎng)絡和數(shù)據(jù)預處理, 在熟悉樣本前提下, 識別精確度方面達97.61%, 但是該技術(shù)過度依賴樣本熟悉度, 當害蟲種類亞型增加或者圖像特征微弱時, 識別精確度往往受到影響[5]. 基于此, 本文提出了一種基于決策樹與卷積神經(jīng)網(wǎng)絡的害蟲識別算法.
系統(tǒng)硬件架構(gòu)圖如圖1所示. 首先, 由無人機的機載攝像頭完成對害蟲圖形采集, 然后使用ZigBee通信協(xié)議, 將圖像數(shù)據(jù)傳輸至數(shù)據(jù)處理服務器, 之后通過服務器上的識別分析系統(tǒng), 完成對害蟲的最終識別確認, 最后將識別信號發(fā)給報警器和害蟲清除執(zhí)行機構(gòu).
系統(tǒng)硬件架構(gòu)圖如圖2所示. 首先, 基于決策樹分類模型, 對先驗樣本庫和經(jīng)驗知識庫進行有監(jiān)督式機器學習訓練, 以得到基于決策樹的機器學習算子;隨后, 基于卷積神經(jīng)網(wǎng)絡分類模型, 設(shè)計迭代學習終止準則, 以得到基于卷積神經(jīng)網(wǎng)絡的深度學習算子;然后, 基于Boosting集成, 將深度學習算子作為機器學習算子的加強項, 形成本文基于多層識別模型的加強型算子;最后, 基于OpenCV和TensorFlow實現(xiàn)核心識別算法.
圖1 系統(tǒng)硬件架構(gòu)圖
待檢測圖像如圖3所示. 圖中存在的農(nóng)業(yè)害蟲為蚜蟲, 以紅框標注顯示, 其特征不明顯, 背景具有較強干擾性, 本文主要針對這類害蟲圖像的識別展開研究和討論.
圖2 害蟲識別算法的流程圖
圖3 待檢測圖像
為了達到準確識別害蟲的目的, 首先引進決策樹分類模型. 其原理是每次選擇單個屬性進行判斷, 如無結(jié)論, 選擇其他屬性繼續(xù)進行判斷, 直到能夠相對有把握地判斷出目標類型或者是所有屬性已判斷完[6-7]. 本文的決策樹構(gòu)建方式為: 將所有害蟲圖像特征數(shù)據(jù)看作一個節(jié)點, 特征數(shù)據(jù)種類有顏色特征、 形態(tài)特征和灰度特征. 特征提取非本文重點, 在此不予以贅述;之后選擇一個數(shù)據(jù)特征分成多個子節(jié)點,子節(jié)點滿足停止分類條件, 則輸出結(jié)果為該節(jié)點數(shù)量占比最大的類別, 如果不滿足, 則再次挑選一個特征進行分割. 本文選擇特征的依據(jù)之一為信息增益, 表示分裂前后數(shù)據(jù)復雜度的變化值, 其計算公式為
(1)
其中,Info_Gain代表信息增益;n代表節(jié)點數(shù)量;Gain代表節(jié)點復雜度. 信息增益增大, 代表分裂后復雜度減小, 分類效果越佳[8-9]. 選擇特征的依據(jù)之二為熵, 描述了數(shù)據(jù)混亂程度, 其數(shù)學計算公式為
(2)
其中,Entropy代表圖像特征熵,p代表目標種類占比. 圖像特征熵越小, 代表特征數(shù)據(jù)混亂程度低, 純度越高, 即分類效果越好. 接著進行依據(jù)之三, 其基尼值的計算公式為
(3)
其中,Gini代表基尼值,p代表目標種類占比. 基尼值越小, 特征數(shù)據(jù)越純, 分類效果越好. 完成特征數(shù)據(jù)節(jié)點選擇后, 進行停止分類條件的設(shè)定: 熵和基尼值代表數(shù)據(jù)復雜度, 熵或者基尼值越小, 數(shù)據(jù)純度越大, 熵或者基尼值過小時, 節(jié)點停止分裂[10-11].
對于上述的決策樹分類模型, 本文主要采用OpenCV開源視覺機器學習函數(shù)庫, 模型創(chuàng)建使用函數(shù)DTrees∶∶create()來實現(xiàn). 數(shù)據(jù)訓練主要是使用函數(shù)model->train(data)來實現(xiàn), 識別分類使用函數(shù)dtree->predict()來實現(xiàn). 完成機器學習訓練后, 為避免欠擬合學習的風險, 需進行深度學習訓練.
卷積神經(jīng)網(wǎng)絡分為5層: 數(shù)據(jù)輸入層、 卷積計算層、 ReLU激勵層、 池化層和全連接層[12-13]. 本文首先在數(shù)據(jù)輸入層對原始圖像幀數(shù)據(jù)進行預處理, 即去均值、 歸一化和PCA白化.然后進行卷積計算層, 通過局部關(guān)聯(lián), 將每個神經(jīng)元看作濾波器, 經(jīng)過窗口滑動, 完成濾波器對局部數(shù)據(jù)的計算. 激勵層為基于卷積神經(jīng)網(wǎng)絡的深度學習算子核心, 即對輸出結(jié)果進行非線性映射卷積操作, 其數(shù)學函數(shù)為:
F(x,y)=f(x,y)*K
(4)
(5)
其中,f代表卷積前圖像;F代表卷積后圖像;K代表卷積核函數(shù). 隨后進行池化層計算, 即壓縮圖像, 即特征不變性、 特征降維和過擬合防止. 最后進行全池化連接, 其數(shù)學函數(shù)為
(6)
其中,ga代表最大池化后的圖像局部結(jié)果;c、d、e、f代表局部區(qū)域像素, 并在此基礎(chǔ)上完成全網(wǎng)絡的有權(quán)重連接.
卷積神經(jīng)網(wǎng)絡的優(yōu)點是, 共享卷積核對高維數(shù)據(jù)處理無壓力, 無需手動選取特征, 特征分類效果好[14]. 本文采用TensorFlow作為深度學習框架, 其具有可視化方便, 數(shù)據(jù)和模型并行化好, 速度快的優(yōu)點. 本文提出的卷積神經(jīng)網(wǎng)絡是一種圖像輸入到數(shù)據(jù)結(jié)果輸出的映射, 其能夠?qū)W習大量的輸入與輸出數(shù)據(jù)之間映射關(guān)系, 不需精確的數(shù)學表達式, 只要用已知模式對卷積神經(jīng)網(wǎng)絡進行訓練, 網(wǎng)絡就具有對害蟲有較好的圖像識別能力.
Boosting算法可在決策樹分類和卷積神經(jīng)網(wǎng)絡識別基礎(chǔ)上, 進行集成學習, 其將前兩種學習識別算法進行融合. Boosting(集成學習)通過結(jié)合多學習模型識別器來完成識別任務, 集成學習融合多個學習器, 往往比單一學習器更為優(yōu)化[15].
本文在利用集成學習對決策樹和卷積神經(jīng)網(wǎng)絡進行加權(quán)時, 首先令所有樣本權(quán)重一致, 以得到第一個基分類器, 即決策樹;從第二輪開始, 每輪開始前都根據(jù)上一輪結(jié)果調(diào)整每個樣本的權(quán)重, 并提高上一輪分類錯誤樣本的權(quán)重, 降低分類正確樣本的權(quán)重;之后根據(jù)新得到樣本權(quán)重指導本輪中基分類器訓練, 即卷積神經(jīng)網(wǎng)絡操作. 在考慮樣本不同權(quán)重的情況下, 計算得出本輪錯誤率最低的融合分類器;最后重復以上步驟, 直至樣本正確時結(jié)束. 害蟲識別結(jié)果如圖4所示, 系統(tǒng)需要自動識別害蟲, 并用紅色線標注害蟲圖像區(qū)域, 以指示報警.
圖4 害蟲識別結(jié)果
害蟲圖像識別的關(guān)鍵代碼如下:
import tensorflow as tf
def readPatches(fileNameList, patchSize):
nFile = len(fileNameList)
x = np.zeros([nFile, patchSize, patchSize, 3])
for it in range(nFile):
fileName = fileNameList[it]
imPatch = imread(fileName)
x[it, ∶, ∶, ∶] = imPatchreturn x
testingFeatureVectors.push_back( feature );
globalPixelXList.push_back(globalPixelX);
globalPixelYList.push_back(globalPixelY);}
atsoft∶∶itkRegionType region(start, sz);
atsoft∶∶itkRGBImageType∶∶Pointer patchAroundCell = atsoft∶∶itkRGBImageType∶∶New();
patchAroundCell->SetRegions(region);
patchAroundCell->Allocate();
為了評估所提算法對害蟲的識別能力, 在此次實驗中, 本文將文獻[3]和文獻[4]作為對照組, 分別記為A、 B技術(shù). 害蟲識別系統(tǒng)界面如圖5所示, 該系統(tǒng)功能有: “圖像采集”、 “決策樹分類”、 “卷積神經(jīng)網(wǎng)絡分類”和“Boosting集成識別”. 待識別圖像如圖6所示, 其中標注指示紅框內(nèi)有一個蚜蟲, 即待識別目標. 本文算法的究識別結(jié)果如圖7所示, 文獻[3]的識別結(jié)果如圖8所示, 文獻[4]的識別結(jié)果圖如圖9所示. 根據(jù)對比, 本研究可以更加精準定位害蟲輪廓. 筆者經(jīng)過多次實驗, 得到了一個性價比較高的系統(tǒng)硬件配置. 計算機配置選型為Intel i7的四核中央處理器, 32GB的內(nèi)存.
圖5 害蟲識別系統(tǒng)界面
圖6 待識別圖像
圖7 本文算法的究識別結(jié)果
圖8 文獻[3]的識別結(jié)果圖
圖9 文獻[4]的識別結(jié)果圖
為了提高害蟲圖像識別能力, 本文設(shè)計了一種基于決策樹與卷積神經(jīng)網(wǎng)絡的害蟲圖像識別算法. 利用傳統(tǒng)機器學習, 完成了數(shù)據(jù)分類;通過采集大數(shù)據(jù)樣本, 引入卷積神經(jīng)網(wǎng)絡, 完成了基于深度學習的害蟲圖像識別;通過Boosting集成, 自主研發(fā)多模型學習算法, 完成了對害蟲圖像準確識別. 并通過VS平臺實現(xiàn)了該系統(tǒng), 之后可以通過融合農(nóng)業(yè)無人機、 ZigBee通信協(xié)議、 攝像頭、 數(shù)據(jù)分析服務器, 構(gòu)建起一個以計算機視覺算法為核心的智能硬件系統(tǒng). 對標實驗結(jié)果表明, 本文系統(tǒng)在害蟲圖像準確方面具有較高的準確性. 當然, 本文僅對一種害蟲展開數(shù)據(jù)標簽和模型訓練, 多種害蟲分類識別需要做進一步研究.