魏 劍
(黑龍江省科學院,哈爾濱 150001)
大豆是主要的農作物及經濟作物之一。我國大豆種植面積和總產量都位居世界第四。大豆的生產形式通常為混合種植、混合收購,這種傳統的生產方式不能使優質大豆產品得到更好的經濟收益。高蛋白、高品質大豆的專門性種植、篩選是提高經濟效益的有效途徑,這需要對大豆種子的質量嚴格把關。20世紀80 年代,人工神經網絡在人工智能領域成為研究熱點。神經網絡是通過對人腦的模擬和抽象[1],從信息處理角度建立一種簡單模型,由不同的連接方式形成不同類型的網絡,是人工智能的高科技產物。由大量節點構成網絡,節點是一種函數,稱為激勵函數。節點之間的連接是權重,激勵函數和權重的不同,影響網絡的輸出結果。
Matlab中典型的n維神經元模型如圖1。

圖1 典型n維網絡神經元模型
其中,p1,p2,…,pn為神經網絡的n個輸入,用n維向量表示為:
p=[p1,p2,…,pn]T
(1)
w1,w2,…,wn表示網絡權值,是輸入和神經元之間的關聯度,設b代表神經元閾值,則輸出表示為:
a=f(wp+b)
(2)
常見的傳遞函數f有線性函數、S函數、硬現幅(包括符號函數)函數。在Matlab中,以上的傳遞函數—線性函數、S函數、硬限幅函數分別是purelin函數、logsig函數、hardlim函數。
神經網絡的學習和訓練目的是調整合適的神經元模型中的權值w和閾值b[2]。
學習是通過輸入層輸入信息,傳遞給中間層神經元,最終到達輸出層。學習過程分為監督學習和無監督學習,通過反復對比實際輸出和目標輸出,調整權值和閾值,使實際輸出不斷接近目標輸出。
訓練分為批量式和漸進式訓練。其分別將目標矢量和輸入矢量做統一一次性處理和調試或漸進式調試。
BP神經網絡是神經網絡中最為廣泛使用的算法,產生于20世紀80年代,是對輸入、輸出對組訓練的模型,是一種非循環的多級反復訓練,具有廣泛的適應性[3-4]。BP神經網絡的基本結構如圖2所示。

圖2 BP神經網絡拓撲結構
BP神經網絡分為輸入層、隱藏層、輸出層,通過反向學習,調整權值和閾值,傳遞函數為S型函數,訓練中進行歸一化,實現輸出量連續地分布在0~1,其基本思想為信號向前傳播和誤差向后傳播。Matlab中,BP神經網絡的訓練函數為train函數。訓練前設置訓練參數,函數包括net.trainparam.epochs函數:設置訓練步數;net.trainparam.show函數:顯示訓練結果間隔步數;net.trainparam.time函數:訓練時間的設置;net.trainparam.goal函數:訓練的目標精度;net.trainparam.min_grad函數:訓練允許的最小梯度值。
實現訓練的基本函數為:[net,tr]=train(net,p,t),其中,p是輸入樣本矢量集,t是目標樣本矢量集。
在特征提取環節中,提取了圖像顏色特征27個,形狀特征8個,紋理特征4個,共39個特征參數作為反映的外觀特點的基本特征參數,這些工作的完成,為種子質量的檢測奠定了基礎。若將這些特征參數都作為BP神經網絡的訓練,則訓練極易出現訓練速度慢、網絡癱瘓的問題。去除特征參數中一些次要項是必要手段,通過主成分析法(PCA)實現主要特征參數的選擇,使特征不僅數量減少,還具有獨立性和可靠性。
在Matlab中進行主成分析的函數選用Princomp函數,通過函數消除特征參數中的一些相關項,分析步驟如下:計算相關系數矩陣;計算特征值和特征向量;計算主成貢獻率和累積貢獻率;計算主成分載荷。
Princomp函數實現如下:
PC=princomp(X)
[PC,SCORE,latent,tsquare]=princomp(X)
[PC,SCORE,latent,tsquare]=princomp(X)對數據矩陣X進行主成分分析,給出各主成分PC、輸出得分SCORE、X的方差矩陣的特征值latent和每個數據點的統計量tsquare。根據主成分析得出的數據相關性表明,特征參數中不同顏色系統下的特征的獨立性不強,經過分析最終得到29個特征為主要參數,保證了特征參數的獨立性和可靠性。
確定BP神經網絡的網絡層和每層中神經元的數目以及選擇初始權值和學習速率,激活函數選用S函數,具體步驟如下:
采用主成分析法進行特征參數的降維處理(上一節已做處理),將互相獨立的29個特征參數作為神經元的輸入。
建立輸入矩陣,該矩陣的訓練樣本數量為800,即800粒不同品種的大豆種子,200粒樣本作為測試集。
為了提高訓練的速度,采用歸一化矩陣作為輸入矩陣,歸一化之后數據分布區間為[-1,1],通過函數premnmx實現,Matlab程序語言為:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T),其中,minp,maxp代表原始輸入P中的最小和最大值;mint,maxt代表原始輸出T中的最小和最大值。
建立神經元網絡,調用 newff 函數,網絡的輸入層為29 個神經元,輸出層個數為 1 個節點;Matlab程序語言為net=newff(MaxMinp,[s1,s2],{‘tansig’,‘logsig’},‘trainlm’),對應層之間的映射關系和優化函數實現網絡的訓練。
網絡訓練測試。
網絡的主要訓練程序如下:
clear all;
p= xlsread(‘biao2.xls’);
p=p’;
t= xlsread(‘biao7.xls’);
t=t’;
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
xlswrite(‘maxp.xls’,maxp);
xlswrite(‘minp.xls’,minp);
xlswrite(‘maxt.xls’,maxt);
xlswrite(‘mint.xls’,mint);
[R,Q]=size(pn)
net=newff(minmax(pn),[s1,s2],{‘tansig’,‘purelin’},‘trainlm’);
%
net.trainParam.show=100;
net.trainParam.lr=0.2;
net.trainParam.mc=0.9
net.trainParam.epochs=2 000;
net.trainParam.goal=1e-6;
[net,tr]=train(net,pn,tn);
Y=sim(net,pn);
iw1=net.IW{1};
b1=net.b{1};
lw2=net.LW{2};
b2=net.b{2};
save netkohler net ;
由此建立了識別大豆種子質量的輸入層神經元個數為29的BP神經網絡。
3.3.1 蟲蝕病害的識別研究
如圖3為蟲蝕大豆種子圖像,大豆種子蟲蝕顆粒表面粗糙,形狀不規則,呈現鋸齒狀態,顆粒顏色呈現深褐色。在蟲蝕病害的識別中,選擇大豆種子圖像的顏色特征和形狀特征進行識別。

圖3 蟲蝕顆粒圖像
程序語言如下:
clear all
load(‘D:work netkohler.mat’);
test=xlsread(‘biao.xls’);
test=test’;
maxp=xlsread(‘maxp.xls’);
minp=xlsread(‘minp.xls’);
maxt=xlsread(‘maxt.xls’);
mint=xlsread(‘mint.xls’);
testn=tramnmx(test,minp,maxp);
S=sim(net,testn);
S = postmnmx(S,mint,maxt);
S=S’;
xlswrite(‘biao5’,[S]);
訓練結果保存,選取200粒大豆種子,包括100粒蟲蝕顆粒種子,100粒飽滿大豆種子作為測試集,測試訓練網絡的識別率,測試部分結果如表1所示。

表1 大豆種子蟲蝕顆粒識別結果
3.3.2 破碎顆粒的識別研究
在大豆的采摘、裝車、卸載等過程中,避免不了大豆種子因碰撞而破損,如圖4所示,破碎大豆種子與飽滿顆粒的大豆種子在顏色上不存在差異,差異主要體現在形狀上,因此圖像中特征選擇主要選取形狀特征進行破碎顆粒的識別研究。

圖4 破碎顆粒圖像
將訓練好的網絡進行保存,同樣選用飽滿和破碎顆粒各100粒進行測試,測試結果如表2所示。

表2 大豆種子破碎顆粒識別結果
破碎顆粒的訓練結果為誤差達到-0.000 276 167。
3.3.3 霉變病害的識別研究
大豆種子發生霉變呈現種子脹大、豆子軟化、顏色加深的狀態,如圖5為霉變大豆種子圖像。

圖5 霉變顆粒圖像
網絡的訓練目標為1e-006,即10的-6次方,最終訓練誤差達到了8.53245e-007,測試結果如表3所示。

表3 大豆種子霉變顆粒識別結果
3.3.4 灰斑病害的識別研究
灰斑病的圖像進行特征提取和選擇后,選用顏色特征,選取均方差最小的網絡測試,灰斑病的圖像如圖6所示。

圖6 灰斑顆粒圖像
訓練目標是1e-006,即10的-6次方,最終訓練誤差達到了6.3295e-007。
同樣選用豆粒進行測試,結果如表4所示。

表4 大豆種子灰斑顆粒識別結果
對大豆種子常見的四種病害的識別表明:構建的BP神經網絡能夠識別單類大豆種子病害,并且識別率較高;除了對破碎顆粒的識別率較低為83%外,其他單類缺陷的識別效果均良好。破碎粒識別率較差的原因可能是特征選擇造成。
大豆種子多項病害的檢測。針對單類大豆種子病害識別的訓練網絡識別率較高,但在實際生產應用中往往存在多種病害,因此建立能夠準確識別多種病害并存的網絡是必要的,從而識別出優質大豆種子。
試驗研究應用 MATLAB 提取的大豆的 29個特征值構建神經網絡。構建步驟如下:建立輸入矩陣,該矩陣的訓練樣本數量為2 000粒,500粒樣本作為測試集。為了提高訓練的速度,采用歸一化矩陣作為輸入矩陣,歸一化之后數據分布區間為[-1,1]。建立神經元網絡,調用 newff 函數[5],網絡的輸入層為29 個神經元,輸出層個數為 5 個節點。Matlab程序語言為net=newff(MaxMinp,[s1,s2],{‘tansig’,‘logsig’},‘trainlm’),對應層之間的映射關系和優化函數實現網絡的訓練。網絡訓練測試。
參數的設置為:迭代步數為100,最大訓練次數為1 000,學習速率為0.2,訓練精度為1e-3。樣本數量較大,為了實現快速識別,選用合適的算法是關鍵,將常用的兩種算法進行比較,選用Levenberg-Marquardt算法更為合適。
Fletcher-Reeves 共軛梯度算法。Fletcher-Reeves 共軛梯度算法簡稱為FR法,根據已知點梯度形成共軛方向,并沿著此方向搜索到極小值點。對于初始點X,計算目標函數f(x)的梯度。試驗中設置迭代步數為100,最大訓練次數為1 000,學習速率為0.2,訓練精度為1e-3,訓練結果如圖7所示。

圖7 Fletcher-Reeves 共軛梯度算法
訓練結果為0.104 621,訓練目標是0.001。
Levenberg-Marquardt 算。Levenberg-Marquardt 算法是一種最優化的算法[6],通過尋找一個使得函數值最小的參數向量實現訓練,使用非線性的最小二乘算法,通過迭代尋優。訓練結果如圖8所示。

圖8 Levenberg-Marquardt算法
試驗中設置迭代步數為100,最大訓練次數為1 000,學習速率為0.2,訓練精度為1e-3,訓練結果為0.032 469 3。
試驗結果表明,Levenberg-Marquardt算法的訓練誤差更小,訓練更精準。利用Levenberg-Marquardt算法進行網絡的訓練,并將剛訓練網絡保存,用飽滿大豆種子、蟲蝕顆粒、破碎顆粒、霉變顆粒、灰斑顆粒、不同大豆混雜顆粒各100作為測試集,測試結果如表5所示。

表5 大豆種子灰斑顆粒識別結果
以上試驗分析了神經網絡及BP神經網絡的結構和學習訓練過程,對特征參數進行了主成分析法降維處理,降低了訓練難度,提高了訓練精度。采用BP神經網絡的訓練和測試,對單類大豆種子識別率很高。針對實際生產,通過比較不同共軛梯度算法,采用Levenberg-Marquardt算法訓練網絡,誤差更小,達到了大豆種子多種缺陷的識別。