王林芝WANG Lin-zhi;石玨德SHI Yu-de;董梁苗DONG Liang-miao;許敏XU Min
(無錫職業(yè)技術(shù)學院物聯(lián)網(wǎng)技術(shù)學院,無錫 214121)
近年來,經(jīng)濟水平和物質(zhì)生活發(fā)展迅速,垃圾的數(shù)量與種類呈現(xiàn)指數(shù)級增長,人們開始重視垃圾帶來的環(huán)境和社會問題。日常生活中的垃圾主要包括有害垃圾、廚余垃圾、可回收垃圾以及其他垃圾這四類,對不同類別的垃圾應采取不同處理方法,若投放不當,可能會導致各種環(huán)境污染問題。現(xiàn)有的垃圾分類方式主要分為兩種,一種是通過桶身顏色來區(qū)分垃圾的種類,但不同的顏色沒有明確對應的垃圾桶種類,分類的方式?jīng)]有達到共識;另一種是通過垃圾桶表面的標志來區(qū)分,這種方式通常只給一個寬泛的類別,沒有明確指出分類細節(jié)。利用圖像識別功能,合理的垃圾分類是有效進行垃圾處理、減少環(huán)境污染,并進行資源再利用的關鍵舉措,也是目前最合適最有效的科學管理方式。利用現(xiàn)有的生產(chǎn)水平將日常垃圾按類別處理,填埋無用垃圾。這樣既能夠提高垃圾資源處理效率,又能緩解環(huán)境污染問題。
為了實現(xiàn)全自動垃圾分類,提高垃圾識別準確率,課題組設計了一種智能垃圾分類系統(tǒng),其特點如下:①采用OpenCV 視覺模塊進行圖像識別,準確度較高。②用Flask框架作為后端調(diào)用前端,易于構(gòu)建原型并且代碼庫利用率高。③基于深度學習(卷積神經(jīng)網(wǎng)絡)算法,使用tensorflow算法對圖像進行特征提取,卷積神經(jīng)網(wǎng)絡通過學習大量數(shù)據(jù)集,訓練模型,提取圖片的特征,從而實現(xiàn)分類。④充分利用css 和js 的樣式,應用到前端,美化用戶界面,提高用戶的體驗感。
整個系統(tǒng)是由知識介紹、用戶交流以及智能識別三個模塊組成。如圖1 所示。
圖1 系統(tǒng)功能模塊圖
1.1 知識介紹 這個部分包含了3 個部分,分別是環(huán)保資訊、分類知識和廢舊利用三個模塊。環(huán)保資訊模塊提供了關于環(huán)保新聞和動態(tài)的信息,使用戶能夠及時了解環(huán)保領域的最新發(fā)展和趨勢。分類知識模塊則通過文字和圖片的形式,介紹了不同種類垃圾的正確分類和處理方法,幫助用戶提高垃圾分類的知識水平。廢舊利用模塊則展示了如何合理利用廢棄物品,既減少了垃圾的產(chǎn)生,又節(jié)約了資源。
1.2 用戶交流 主要為用戶提供垃圾分類相關知識的測試。查詢資料,選取垃圾分類測試題錯誤率最高的前十題,作為用戶測試的題目。用戶答題后,點擊提交按鈕,會顯示用戶的答題情況。增加用戶使用系統(tǒng)的體驗感。
1.3 垃圾智能識別 系統(tǒng)可以通過建立特定的垃圾識別模型進行常見垃圾類型的識別訓練,達到較高的垃圾識別準確率。點擊上傳圖片,實現(xiàn)垃圾的智能識別。垃圾的智能識別不僅擺脫了傳統(tǒng)人工識別的繁瑣流程,且識別可靠性較高。
2.1 圖像處理 將一張圖像(可以是本地圖像,也可以是網(wǎng)絡圖像)進行預處理,然后裁剪成多個小圖像,并對這些小圖像進行數(shù)據(jù)增強。這個過程被稱為數(shù)據(jù)預處理,通常在深度學習模型的訓練過程中使用,以提高模型的性能。在程序設計部分定義了兩個函數(shù):preprocess_img 和preprocess_img_from_Url。這兩個函數(shù)的主要區(qū)別在于獲取圖像的方式不同,一個是從本地路徑獲取圖像,另一個是從網(wǎng)絡URL 獲取圖像。
函數(shù)的主要步驟如下:①打開圖像文件(本地或網(wǎng)絡)。②將圖像調(diào)整為指定的大?。ㄔ谶@里是256×256 像素)。③將圖像轉(zhuǎn)換為RGB 格式。④將圖像轉(zhuǎn)換為NumPy數(shù)組。⑤對圖像進行數(shù)據(jù)增強,具體來說,是從圖像的隨機位置裁剪出224×224 像素的小圖像,然后對這些小圖像進行數(shù)據(jù)增強。將處理后的小圖像存儲在一個列表中,并返回這個列表。
2.2 訓練模型 這個部分使用ResNet50 模型,是一種深度卷積神經(jīng)網(wǎng)絡(CNN) 模型,具有50 個殘差塊(Residual Block),廣泛應用于圖像識別和計算機視覺任務。以下是ResNet50 模型整個過程的詳細介紹。
2.2.1 殘差網(wǎng)絡 殘差網(wǎng)絡(ResNet,Residual Network)是一種深度卷積神經(jīng)網(wǎng)絡。其引入跳躍連接(skip connection)機制,形成殘差連接,實現(xiàn)了更有效的信息傳遞和更深的網(wǎng)絡結(jié)構(gòu)。
殘差網(wǎng)絡要包括兩部分:殘差塊(Residual block)和跳躍連接(skip connection)。殘差塊是殘差網(wǎng)絡的基本構(gòu)建單元,其核心思想是引入跳躍連接,將輸入數(shù)據(jù)直接和卷積層的輸出數(shù)據(jù)相加,以實現(xiàn)更有效的信息傳遞。殘差網(wǎng)絡公式為:H(x)=F(x)+x
其中,H(x)是輸出結(jié)果,F(xiàn)(x)是殘差函數(shù),x 是輸入數(shù)據(jù)。殘差網(wǎng)絡示意圖可見圖2。
圖2 殘差網(wǎng)絡示意圖
在圖2 中,ResNet 網(wǎng)絡是“跳躍連接”(skip)的方式。輸出結(jié)果H(x)計算公式為:H(x)=F(x)+x。當F(x)=0 時,H(x)=x,即所謂的恒等映射。因此,ResNet 網(wǎng)絡的學習目標發(fā)生了改變,它不再是學習一個完整的輸出,而是學習目標值H(x)與x 的差值,即殘差F(x)=H(x)-x。訓練過程中的目標就是使殘差結(jié)果盡可能接近0,從而在網(wǎng)絡深度增加時,準確率得以保持不下降。
2.2.2 ResNet 網(wǎng)絡結(jié)構(gòu) ResNet 網(wǎng)絡的構(gòu)建始于一個7×7 的卷積層,該層負責提取輸入數(shù)據(jù)的初級特征。隨后,一個3×3 的最大池化層用于對特征進行下采樣,減小數(shù)據(jù)尺寸。接下來,網(wǎng)絡進入殘差結(jié)構(gòu)部分。這一部分的ResNet 層依次遞進,深度逐漸增加,有助于提取更高級別的特征。在殘差結(jié)構(gòu)之后,網(wǎng)絡再次進行平均池化下采樣,進一步減小數(shù)據(jù)尺寸。最后,全連接層和softmax 輸出層用于將學到的特征映射到類別概率,從而實現(xiàn)分類任務。
2.3 預測模型 在這個部分使用了Adam 優(yōu)化器和分類交叉熵損失函數(shù)(categorical crossentropy)。
Adam 是一種基于梯度下降算法的自適應學習率優(yōu)化器。在訓練過程中,Adam 會根據(jù)每個參數(shù)的歷史梯度和更新情況,自適應地調(diào)整每個參數(shù)的學習率,以實現(xiàn)更快的訓練收斂和更好的泛化性能。Adam 優(yōu)化器的核心思想是在每個時間步驟中計算移動平均梯度和移動平均平方梯度,并利用它們來更新模型參數(shù)。有效地近似計算梯度的無偏估計值和梯度平方的無偏估計值,從而得到更加準確的參數(shù)更新方向。
在機器學習中,交叉熵函數(shù)是一種重要的損失函數(shù),用于評估模型的預測結(jié)果與真實標簽之間的差異。交叉熵函數(shù)起源于信息論領域,用于衡量兩個概率分布之間的差異。對于分類問題,通常使用交叉熵函數(shù)作為損失函數(shù),以優(yōu)化模型的參數(shù),使模型的預測結(jié)果盡可能接近真實標簽的分布。通過最小化交叉熵函數(shù),可以提高模型的準確性和泛化能力。在實際應用中,通過計算模型在測試集上的交叉熵函數(shù)值來評估模型的準確性。交叉熵函數(shù)值越小,表示模型的預測結(jié)果與真實標簽的分布越接近,模型的性能越好。
2.4 服務端運行 服務端運行使用Flask 作為后端框架,F(xiàn)lask 是一個用Python 編寫的輕量級web 應用程序框架,對接tensorflow,把tensorflow 訓練好的模型加載成用戶可以使用的api 接口。flask_sever.py 為flask 框架所寫的后端代碼,對接前端,呈現(xiàn)用戶所使用的界面。主要功能是接收用戶上傳的圖片,使用預先訓練好的神經(jīng)網(wǎng)絡模型對圖片進行分類預測,并返回預測結(jié)果。
創(chuàng)建Flask 應用程序?qū)ο螅菏褂肍lask 類創(chuàng)建一個名為app 的應用程序?qū)ο?。定義一個函數(shù)allowed_file,它接受一個文件名作為輸入,檢查該文件名是否包含一個擴展名,并且該擴展名是否在允許的擴展名集合中。定義一個路由'/predict',該路由可以通過POST 或GET 方法訪問。
定義其他幾個路由,分別對應主頁和網(wǎng)站中其他幾個頁面。每個路由都關聯(lián)一個函數(shù),這些函數(shù)只是簡單地渲染相應的HTML 模板。在代碼的最后,有一個條件語句,檢查這個腳本是否作為主程序運行。如果是,將啟動Flask應用程序,監(jiān)聽地址為'127.0.0.1'的本地主機的連接。運行flask_sever.py 文件的時候,在終端會顯示相對應的網(wǎng)址,點擊即可進入對應的系統(tǒng)界面。
3.1 首頁模塊 在垃圾分類系統(tǒng)當中有5 個頁面,分別是首頁、環(huán)保資訊、分類知識、廢舊利用、趣味測試和垃圾識別。在首頁當中使用一個長圖作為標題的背景圖片,在標題之下增加了圖片大標題,左右按鈕可以滑動查看添加的4 個圖片。為了對首頁的導航欄了解更加透徹,進行分欄,分別是對四個方面的具體拓展。之后增加鼠標懸停效果,將鼠標放在圖片上方,顯示其具體的分類。增加圖片的輪播效果。并且當鼠標放在圖片上面,隨之對應的圖片縮小,輪播效果暫時暫停。效果圖可見圖3。
圖3 首頁效果圖
3.2 環(huán)保資訊,分類知識,廢舊利用模塊 鑒于頁面整體協(xié)調(diào)性,在這3 個模塊,運用一致的css 和js 格式文件。在導航欄處,增加相對應的二級標題,在頁面的底端增加宣傳垃圾分類的標語。根據(jù)每個模塊的具體內(nèi)容,適時地在頁面添加一些相關的圖片。相關效果可見圖4 分類知識效果圖。
3.3 趣味測試模塊 用戶在主頁面點擊“趣味測試“進入垃圾分類測試的界面,在這個界面當中,選取了垃圾分類測試題錯誤率最高前十題作為趣味測試的測試題。每道題都有四個不同類別的答案。用戶答完題之后,點擊下面提交答案的按鈕,系統(tǒng)會顯示您回答正確的題目數(shù)量。如果用戶希望再次回答題目,可以在原先的基礎上,重新進行答題,具體效果可見圖5。
圖5 趣味測試效果圖
3.4 垃圾識別模塊 獲取一個名為"imageFile"的文件輸入元素,并獲取用戶選擇的第一個文件。將創(chuàng)建一個名為"formData" 的新對象。然后將選定的文件添加到FormData 中。接下來,創(chuàng)建一個新的XMLHttpRequest 對象,用于與服務器進行通信。XHR 的"open()"方法用于設置請求的類型和URL。使用"POST"方法將文件發(fā)送到服務器上的"/predict"端點。將從服務器接收到的響應解析為JSON 格式,并提取分類結(jié)果。然后,將分類結(jié)果顯示在頁面上的一個元素(ID 為"classificationResult")中。如果請求失敗或出現(xiàn)其他錯誤,將顯示一條錯誤消息。同時在發(fā)送請求之前,顯示提示信息?!吧蟼鲌D片進行垃圾分類識別”選擇文件按鈕選擇本地的圖片或者是選擇拍照識別,點擊識別按鈕之后,在最下面的模塊會顯示相關的垃圾類別。效果圖可見圖6。
圖6 垃圾分類識別效果圖
本文介紹了一種基于深度學習的垃圾分類識別系統(tǒng),旨在解決垃圾處理問題,提高垃圾回收效率。通過多種垃圾類型的數(shù)據(jù)集,使用預處理技術(shù)整理和擴充數(shù)據(jù),提高模型的泛化能力。采用卷積神經(jīng)網(wǎng)絡作為基礎模型,提高分類精度。在模型訓練方面,采用隨機梯度下降作為優(yōu)化算法,實現(xiàn)快速收斂和優(yōu)化。
系統(tǒng)包含一個垃圾分類識別的前端,使 用CSS和JavaScript,并包含了環(huán)保資訊、分類知識、廢舊利用、趣味測試和垃圾識別五個模塊。采用響應式設計,確保了各模塊在不同設備上的顯示效果。在數(shù)據(jù)結(jié)果上,通過數(shù)據(jù)可視化的方式,將垃圾分類的結(jié)果直觀地展示給用戶。
然而,該系統(tǒng)仍存在一些不足,如對于部分垃圾類型,尤其是文字信息不明確的垃圾,分類效果可能不佳。未來可以考慮引入OCR 技術(shù),提高分類精度。
總的來說,基于深度學習的垃圾分類識別系統(tǒng)具有較高的分類精度和實用價值,但仍存在一些不足,需要進一步改進。未來可以提高系統(tǒng)的實時性,拓展垃圾類型覆蓋范圍,推動智能垃圾分類技術(shù)的發(fā)展。