陳恩展
廣西師范大學數學與統計學院 廣西 桂林 541000
互聯網的不斷發展和社交平臺的廣泛普及,人們的生活中充斥著大量的網絡數據,諸如文字、圖像、視頻等。如此海量的網絡數據,不可能通過人力去一一識別這些數據中的內容。通過機器學習中的算法框架,可以利用已有的網絡數據來訓練機器,讓機器幫助我們快速識別數據中的內容。也正是機器學習的廣泛運用,讓生活中的很多實際場景變為無人化成為可能。本文就是基于TensorFlow這一學習框架,通過卷積神經網絡捕捉數據中比較抽象的特征,以此來得到一個具備圖像識別能力的模型,完成對生活中果蔬種類的識別。在后疫情時代,太多的生活場景需要這樣具備識別功能的機器,且無人化的場所也會隨著人們對生活品質的不斷追求而越來越廣泛。
TensorFlow[1]是目前使用最為廣泛的機器學習框架,由谷歌開發的一個開源的、基于Python的學習框架。在實際生活場景中有著十分豐富的應用。例如圖像識別分類、語音視頻數據的處理,以及各式各樣的推薦系統。且TensorFlow具有很好的兼容性,它能夠將自己的神經網絡計算兼容到市面上大多數主流的CPU或GPU的服務器上,甚至是一些其他主流的PC或移動設備,而這些只需要利用一個TensorFlow API即可完成。
RStudio是R語言的集成開發環境(IDE),它是一個獨立的開源項目,它將許多功能強大的編程工具集成到一個直觀、易于學習的界面中。在RStudio中,很多較為復雜的功能的實現,都被大量的使用者們封裝在一個簡單輕巧的R包中,且這個R包一直都在不斷地被后來的使用者們改進著。正是這樣大范圍的開源使用,讓RStudio變得越來越強大,使得本次系統的實現在RStudio上成為可能。
TensorFlow團隊十分貼心,在RStudio中開發了專屬TensorFlow的R接口,在電腦中已經有了TensorFlow和RStudio的基礎上,我們只需在RStudio輸入“install.packages(“tensorflow”)”這一命令,便可將“tensorflow”這一R包載入RStudio中,這樣就可以在RStudio中運用TensorFlow學習框架進行模型訓練。
本次實驗選用卷積神經網絡LeNet-5[3],激活函數選用ReLU函數,并使用softmax 函數做分類器。
LeNet-5卷積神經網絡模型是Yann Lecun在1998年設計的用于手寫數字識別的卷積神經網絡,當年美國大多數銀行就是用它來識別支票上面的手寫數字的,它是早期卷積神經網絡中最有代表性的實驗系統之一。LeNet-5卷積神經網絡模型共有7層(不包括輸入層),每層都包含不同數量的訓練參數。
激活函數就是在原來的線性組合的基礎上加上非線性函數,讓模型的表達能力更強。因為線性模型的表達能力非常有限,分類時也只能畫一條線來劃分。
在此次的模型設計中,選用ReLU函數為激活函數。ReLU函數的作用就是增加了神經網絡各層之間的非線性關系,由ReLU函數的表達式:及其函數圖像,我們可以知道ReLU函數是一個分段的線性函數。通過畫出函數圖像可以知道,ReLU函數在遇到負值輸入時,其輸出會都為0。遇到正值輸入時,其輸出與輸入相等。我們把ReLU函數的這種特性稱為單側抑制。ReLU函數的單側抑制特性,會使得神經網絡中的神經元具有了稀疏激活性[5]。通過ReLU函數實現稀疏后的模型能夠更好地挖掘數據相關特征,擬合訓練數據。
本次系統的設計目的就是識別出圖片中果蔬的種類。假如現在有一個任意的輸入值x,這個輸入值x有可能屬于N個種類中任意一個。那么我們的模型,在得到這個輸入值時就會進行識別,并對已有的N個類別進行評分,評分最高的那個類別就是輸入值x最有可能所屬的類別。然而,這樣的評分范圍很廣,此時我們就用到了softmax分類器。它是一個可以將(-∞,+∞)的一組評分轉化為一組概率,并讓它們的和為1的歸一化的函數,而且這個函數是保序的。原來評分高的對應轉換后的概率大,評分低的對應轉換后的概率小。
softmax函數的表達式為:

在設計好本次系統所需要的卷積神經網絡模型后,接下來就是為這一設計好的模型找尋訓練數據。合適且規范的訓練數據就像必需的營養品,可以使得神經網絡模型擁有更好的學習識別能力。
擁有高質量的數據集是獲得良好分類器的必要條件。大多數帶有圖像的現有數據集同時包含對象和噪聲背景,這可能會導致改變背景會導致對象的錯誤分類。在Kaggle網站上,有一個名為“Fruits-360”的果蔬數據集,共131多類果蔬,約9萬多張圖片。
該數據集中的每一張圖像的背景都進行白化處理,避免了圖像的背景對后期的模型訓練產生一定的干擾性。
對于圖像識別這類型的模型訓練,對于訓練所需的圖像數據進行預處理是很有必要的。在現實生活中,有些系統對于用戶上傳的圖像有時就會有一些格式上的要求,這其實就是對圖像數據的一個簡單的預處理。因此在搭建卷積神經網絡前需要對輸入圖像進行預處理。一般圖像預處理包括以下3個步驟:①圖像灰度化[7];②圖像的幾何變換即平移、旋轉、鏡像、裁剪等;③圖像增強,增強圖像中的有用信息。
在模型的訓練初期,可能是由于數據集的迭代訓練次數較少,也可能是由于數據集帶有一定的干擾信息,模型的識別準確率較低。通過檢查發現,數據集中一部分的圖像的背景具有較多干擾信息,即所識別的對象在圖像中的位置不夠凸顯。那么針對這類圖像,在預處理時就要進行一些必要的處理。這也說明了,在圖像識別領域中的數據預處理階段,應根據實際的識別場景出發,來決定我們要如何對數據進行預處理。
經過以上數據集的采集以及數據集的預處理,在卷積神經網絡模型設計完成后,即可對搭建好的卷積神經網絡進行訓練,在RStudio中加載TensorFlow相關的R包,并設置好數據集在本地的路徑,方便模型訓練時可以讀取到對應的圖像數據集,最后將訓練好的模型存儲下來。根據所使用的電腦硬件,這個過程可能需要幾分鐘到一個小時。在RStudio中,我們將數據集網絡訓練的迭代次數(epochs)設置為6次。如果識別準確率會在 6 次迭代之后增加,便將 “epochs ”設置為一個更高的值。如果模型已經過度擬合,即識別準確率下降而訓練準確率進一步增加,我們可以減少 “epochs” 的數量。在本次模擬當中,在6次迭代之后,數據集的識別率達到了大約97%的準確率,如圖1所示。

圖1 準確率圖
在完成數據集網絡訓練之后,即可利用訓練好的網絡模型進行測試。從測試數據集中隨機抽取果蔬圖片進行識別測試,查看模型的識別準確率。測試結果顯示,模型識別的準確率達到99%。
在對模型經過6次的數據訓練迭代之后,其準確率已經達到了97% 的水準。通過隨機上傳本地數據集中的圖像,系統均能準確地識別出圖像內容。當然,若上傳的圖像背景干擾信息較多,我們的模型有可能就無法進行準確的識別。對于這個問題的解決,從模型自身出發解決的話,可以優化模型中的相關參數或者加入一些帶有干擾信息的數據集對模型進行訓練,同時增加訓練的迭代次數。也可以在上傳帶有干擾信息數據集的時候,對這類數據集進行處理,利用一定的技術將干擾信息去除掉。
進入后疫情時代,我們生活還要繼續,也就意味著越來越多的無人化場景將成為剛需。機器學習及智能化時代的發展迭代,讓無人化的場景能夠很好地服務于大眾。本文所設計的果蔬識別系統正是從生活日常需要的角度出發,運用卷積網絡中的LeNet-5卷積神經網絡模型對大量網絡數據集進行多次的迭代訓練,來達到一個較高的識別準確率。但仍存在一些問題,在面對帶有干擾信息的數據集時,模型可能無法給出準確的判斷,這個問題還需要進一步解決。