湯銀銀 李明月 劉志宏
(安徽農(nóng)業(yè)大學信息與計算機學院,安徽 合肥 230036)
我國是一個糧食大國,水稻作為主要的糧食作物,其包含多種品種。目前,水稻品種的檢測主要由化學方法和人工操作完成,化學方法成本昂貴,人工操作任務較為繁重,檢測效率不高,準確性較差。由于傳統(tǒng)的化學與人工識別水稻品種的方法費時費力,因此發(fā)展一種水稻品種的識別技術具有重要意義。目前深度學習技術廣泛應用于各個領域,并取得了大量的研究成果。例如沈萍等人 中通過針對ImageNet數(shù)據(jù)庫中的80類花卉圖像做訓練和識別,在實驗過程中與傳統(tǒng)神經(jīng)網(wǎng)絡和支持向量機做比較,表明深度卷積神經(jīng)網(wǎng)絡(CNN)能夠提升花卉識別10% 以上的識別率。葉浪分析CNN模型能夠快速準確進行人面部表情識別的原理,由于CNN的卷積層和池化層起到了濾波作用,將輸入的圖片進行特征提取并進行壓縮,提高運算速度,實驗證明CNN 模型在進行人面部表情識別過程中的準確度最高、速度最快。
本文擬采集5種水稻品種圖片,先對圖片進行預處理,分為訓練集和測試集,再導入已經(jīng)構建好的卷積神經(jīng)網(wǎng)絡模型中進行訓練,利用Softmax分類器識別水稻品種,以便能夠自動快速的識別水稻品種。
實驗的水稻樣品來自安徽農(nóng)業(yè)大學農(nóng)學院作物育種系5種水稻品種‘豐兩優(yōu)9’、‘S13’、‘邵糯9714’、‘皖稻187’、‘皖墾’。每種水稻拍攝200張圖像可使用,按照訓練集和測試集4:1的比例,將每種水稻的160張圖像作為訓練集,剩下的40張圖像作為測試集,最后形成的訓練集數(shù)據(jù)800張,測試集200張。通常情況下,機器學習模型一般需要大小相同的圖像作為輸入,本文的做法是將所有的圖像都剪裁為224*224的大小作為機器學習模型的輸入樣本。
圖1 水稻品種
利用卷積神經(jīng)網(wǎng)絡(CNN)對水稻品種進行識別,對輸入的圖像進行參數(shù)的提取,根據(jù)圖像的參數(shù)特征自動辨別水稻的品種,并告知用戶該水稻是何品種。為增加CNN模型的魯棒性,需要對圖像進行預處理。利用shuffle,轉置、隨機打亂數(shù)據(jù),同時為了方便網(wǎng)絡的訓練,對輸入數(shù)據(jù)進行batch處理。首先使用tf.image.decode_jpeg()函數(shù)將圖像解碼,從而得到相同類型的圖像。再使用tf.image.resize_image_with_crop_or_pad()函數(shù)對圖像進行旋轉、縮放、裁剪、歸一化等操作,讓計算出的模型更健壯。對預處理的數(shù)據(jù)進行可視化,查看預處理的效果如圖2所示。
圖2 水稻圖像預處理
2.1.1 輸入層。卷積神經(jīng)網(wǎng)絡的輸入層可以處理多維數(shù)據(jù),常見地,一維卷積神經(jīng)網(wǎng)絡的輸入層接收一維或二維數(shù)組,其中一維數(shù)組通常為時間或頻譜采樣;二維數(shù)組可能包含多個通道;二維卷積神經(jīng)網(wǎng)絡的輸入層接收二維或三維數(shù)組;三維卷積神經(jīng)網(wǎng)絡的輸入層接收四維數(shù)組。與其它神經(jīng)網(wǎng)絡算法類似,由于使用梯度下降進行學習,卷積神經(jīng)網(wǎng)絡的輸入特征需要進行標準化處理。具體地,在將學習數(shù)據(jù)輸入卷積神經(jīng)網(wǎng)絡前,需在通道或時間/頻率維對輸入數(shù)據(jù)進行歸一化,輸入特征的標準化有利于提升算法的運行效率和學習表現(xiàn)。
2.1.2 隱含層。卷積神經(jīng)網(wǎng)絡的隱含層包含卷積層、池化層和全連接層3類常見構筑,在一些更為現(xiàn)代的算法中可能有Inception模塊、殘差塊(residual block)等復雜構筑。卷積層中的卷積核包含權重系數(shù),而池化層不包含權重系數(shù),因此在文獻中,池化層可能不被認為是獨立的層。
2.1.3 輸出層。卷積神經(jīng)網(wǎng)絡中輸出層的上游通常是全連接層,因此其結構和工作原理與傳統(tǒng)前饋神經(jīng)網(wǎng)絡中的輸出層相同。對于圖像分類問題,輸出層使用邏輯函數(shù)或歸一化指數(shù)函數(shù)(softmax function)輸出分類標簽。在物體識別(object detection)問題中,輸出層可設計為輸出物體的中心坐標、大小和分類。在圖像語義分割中,輸出層直接輸出每個像素的分類結果。
由于本實驗采集的數(shù)據(jù)集較少,不適用于傳統(tǒng)的GoogLeNet 和 ResNet 模型進行訓練,通過對參數(shù)的不斷調(diào)整,最終構建了一個9層的卷積神經(jīng)網(wǎng)絡,3層卷積和3層池化,2層全連接層,最后一層Softmax層做全分類,最終分類輸出5類。下圖中,conv是卷積層,每次卷積層都有一個池化層pool,一共進行3次這樣的卷積池化操作后,最終得到了許多小的特征圖。傳入到全連接層layer1之后,將之前poll層的輸出reshape成一行,激活函數(shù)relu( )。到全連接層layer2后,激活函數(shù)relu( ),染后將這些特征圖全部連接在一起,最后輸入到Softmax層進行最終的分類操作,計算每一類的得分,在這里是5類不同品種的水稻,所以這個層輸出的是5個得分。具體模型結構如圖3。
圖 3 卷積神經(jīng)網(wǎng)絡模型
輸入層的輸入圖像統(tǒng)一為224*224大小,卷積結構是9層的卷積神經(jīng)網(wǎng)絡,3層卷積和3層池化,2層全連接層,最后一層Softmax層做全分類。本實驗所采用的卷積層參數(shù)包括卷積核大小均為3*3,步長為2,SAME填充,進行足夠的填充來保持輸出和輸入的特征圖尺寸相同。同時采用最大池化,relu( )激活函數(shù)。相同填充下特征圖的尺寸不會縮減但輸入像素中靠近邊界的部分相比于中間部分對于特征圖的影響更小。
在選擇學習率、迭代次數(shù)這些模型外參數(shù)時,采用多折交叉驗證法,將訓練集再拆分為實際訓練集與交叉驗證集。通過觀察各類參數(shù)的不同效果,經(jīng)過多次嘗試,利用交叉驗證,最終確定了0.0001初始學習率。初始學習率影響的是每一次反向傳播時,對參數(shù)優(yōu)化的調(diào)整幅度,需要根據(jù)特定任務確定合適的學習率,若幅度過大,則有可能矯枉過正;若幅度過小,則可能導致每次進步很小,優(yōu)化到最優(yōu)結果的迭代次數(shù)過大,耗時過長。
為提高水稻品種訓練的準確率,降低損失值,本實驗將選取80%的圖像用于訓練卷積神經(jīng)網(wǎng)絡模型,共進行3000步訓練,同時為減少訓練時長,resize圖像為56*56大小,最終發(fā)現(xiàn)實驗步數(shù)達到2900左右時,訓練的準確率大概穩(wěn)定在100%.
將剩下20%未進行訓練的圖像用于測試,可得到較為準確的識別結果,實驗結果表明,在不需要過多的照片的預處理的前提下,使用基于深度卷積神經(jīng)網(wǎng)絡的圖像識別能夠準確的識別出水稻品種并且已經(jīng)具有非常高的準確率,要遠遠優(yōu)于傳統(tǒng)的識別方式。
本文通過深度卷積神經(jīng)網(wǎng)絡提取水稻不同品種的特征,采集5種水稻品種作為研究樣本,每種水稻品種200粒,構建了9層的卷積神經(jīng)網(wǎng)絡模型自動訓練水稻樣本,利用Softmax分類器識別水稻品種,通過不斷調(diào)整模型參數(shù),提高水稻品種識別的準確率,可以大大減少人力成本,具有廣泛的應用性。卷積神經(jīng)網(wǎng)絡利用圖像直接作為網(wǎng)絡的輸入避免了傳統(tǒng)識別算法中復雜的特征提取和數(shù)據(jù)重構的過程,是一個特別高效高識別率的深度學習算法。由于卷積神經(jīng)網(wǎng)絡復雜,訓練耗時長,因此針對不同的數(shù)據(jù)集,要構建最合適的網(wǎng)絡結構才能取得最好的分類識別結果。同時水稻品種識別模型封裝為可調(diào)用的程序模塊,可實際應用到web服務和移動APP,通過云服務方式實現(xiàn)實時在線識別水稻品種,未來可探討搜集互聯(lián)網(wǎng)海量圖片作為訓練集,實現(xiàn)模型的快速迭代和優(yōu)化,應用前景極為廣泛。