計算機競賽 opencv python 深度學習垃圾圖像分類系統

0 前言

🔥 優質競賽項目系列,今天要分享的是

🚩 opencv python 深度學習垃圾分類系統

🥇學長這里給一個題目綜合評分(每項滿分5分)

  • 難度系數:3分
  • 工作量:3分
  • 創新點:4分

這是一個較為新穎的競賽課題方向,學長非常推薦!

🧿 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate

課題簡介

如今,垃圾分類已成為社會熱點話題。其實在2019年4月26日,我國住房和城鄉建設部等部門就發布了《關于在全國地級及以上城市全面開展生活垃圾分類工作的通知》,決定自2019年起在全國地級及以上城市全面啟動生活垃圾分類工作。到2020年底,46個重點城市基本建成生活垃圾分類處理系統。

人工垃圾分類投放是垃圾處理的第一環節,但能夠處理海量垃圾的環節是垃圾處理廠。然而,目前國內的垃圾處理廠基本都是采用人工流水線分揀的方式進行垃圾分揀,存在工作環境惡劣、勞動強度大、分揀效率低等缺點。在海量垃圾面前,人工分揀只能分揀出極有限的一部分可回收垃圾和有害垃圾,絕大多數垃圾只能進行填埋,帶來了極大的資源浪費和環境污染危險。

隨著深度學習技術在視覺領域的應用和發展,讓我們看到了利用AI來自動進行垃圾分類的可能,通過攝像頭拍攝垃圾圖片,檢測圖片中垃圾的類別,從而可以讓機器自動進行垃圾分揀,極大地提高垃圾分揀效率。

基于深度學習的垃圾分類系統,是非常好的畢業設計課題


一、識別效果

老樣子, 廢話不多說,先展示圖像垃圾分類的識別效果

訓練模型精度:
在這里插入圖片描述
可以看到,只迭代了10輪精度達到87.50%,而且沒有出現過擬合現象

我最高訓練達到96%,迭代200輪

識別結果:
在這里插入圖片描述
實際驗證正確率還是很高的。

二、實現

1.數據集

該數據集包含了 2507 個生活垃圾圖片。數據集的創建者將垃圾分為了 6 個類別,分別是:
在這里插入圖片描述
如下所示:

在這里插入圖片描述
一共6類垃圾, 比如玻璃類的如下:

在這里插入圖片描述
塑料類的如下:

在這里插入圖片描述
其他的不列舉了。

2.實現原理和方法

使用深度殘差網絡resnet50作為基石,在后續添加需要的層以適應不同的分類任務
模型的訓練需要用生成器將數據集循環寫入內存,同時圖像增強以泛化模型
使用不包含網絡輸出部分的resnet50權重文件進行遷移學習,只訓練我們在5個stage后增加的層

需要的第三方庫主要有tensorflow1.x,keras,opencv,Pillow,scikit-learn,numpy
安裝方式很簡單,打開terminal,例如:pip install numpy -i
https://pypi.tuna.tsinghua.edu.cn/simple
數據集與權重文件比較大,所以沒有上傳
如果環境配置方面有問題或者需要數據集與模型權重文件,可以在評論區說明您的問題,我將遠程幫助您

3.網絡結構

這里我只使用了resnet50的5個stage,后面的輸出部分需要我們自己定制,網絡的結構圖如下:
在這里插入圖片描述
stage5后我們的定制網絡如下:

?

    """定制resnet后面的層"""def custom(input_size,num_classes,pretrain):# 引入初始化resnet50模型base_model = ResNet50(weights=pretrain,include_top=False,pooling=None,input_shape=(input_size,input_size, 3),classes=num_classes)#由于有預權重,前部分凍結,后面進行遷移學習for layer in base_model.layers:layer.trainable = False#添加后面的層x = base_model.outputx = layers.GlobalAveragePooling2D(name='avg_pool')(x)x = layers.Dropout(0.5,name='dropout1')(x)#regularizers正則化層,正則化器允許在優化過程中對層的參數或層的激活情況進行懲罰#對損失函數進行最小化的同時,也需要讓對參數添加限制,這個限制也就是正則化懲罰項,使用l2范數x = layers.Dense(512,activation='relu',kernel_regularizer= regularizers.l2(0.0001),name='fc2')(x)x = layers.BatchNormalization(name='bn_fc_01')(x)x = layers.Dropout(0.5,name='dropout2')(x)#40個分類x = layers.Dense(num_classes,activation='softmax')(x)model = Model(inputs=base_model.input,outputs=x)#模型編譯model.compile(optimizer="adam",loss = 'categorical_crossentropy',metrics=['accuracy'])return model

網絡的訓練是遷移學習過程,使用已有的初始resnet50權重(5個stage已經訓練過,卷積層已經能夠提取特征),我們只訓練后面的全連接層部分,4個epoch后再對較后面的層進行訓練微調一下,獲得更高準確率,訓練過程如下:

?

    class Net():def __init__(self,img_size,gar_num,data_dir,batch_size,pretrain):self.img_size=img_sizeself.gar_num=gar_numself.data_dir=data_dirself.batch_size=batch_sizeself.pretrain=pretrain
    def build_train(self):"""遷移學習"""model = resnet.custom(self.img_size, self.gar_num, self.pretrain)model.summary()train_sequence, validation_sequence = genit.gendata(self.data_dir, self.batch_size, self.gar_num, self.img_size)epochs=4model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs,verbose=1,validation_data=validation_sequence,max_queue_size=10,shuffle=True)#微調,在實際工程中,激活函數也被算進層里,所以總共181層,微調是為了重新訓練部分卷積層,同時訓練最后的全連接層layers=149learning_rate=1e-4for layer in model.layers[:layers]:layer.trainable = Falsefor layer in model.layers[layers:]:layer.trainable = TrueAdam =adam(lr=learning_rate, decay=0.0005)model.compile(optimizer=Adam, loss='categorical_crossentropy', metrics=['accuracy'])model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs * 2,verbose=1,callbacks=[callbacks.ModelCheckpoint('./models/garclass.h5',monitor='val_loss', save_best_only=True, mode='min'),callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1,patience=10, mode='min'),callbacks.EarlyStopping(monitor='val_loss', patience=10),],validation_data=validation_sequence,max_queue_size=10,shuffle=True)print('finish train,look for garclass.h5')

最后

🧿 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/34713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/34713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像的伽馬變換

伽馬變換(Gamma Correction)是一種在圖像處理中常用的非線性變換方法,用于調整圖像的亮度和對比度。它在圖像的像素值上應用一個冪次函數,以改變圖像的灰度級分布,從而影響圖像的感知亮度。伽馬變換通常用于糾正顯示器…

Monkey測試真的靠譜嗎?

Monkey測試,顧名思義,就是模擬一只猴子在鍵盤上亂敲,從而達到測試被測系統的穩定性。Monkey測試,是Android自動化測試的一種手段,Monkey測試本身非常簡單,Android SDK 工具支持adb Shell命令,實…

208、仿真-51單片機脈搏心率與心電報警Proteus仿真設計(程序+Proteus仿真+配套資料等)

畢設幫助、開題指導、技術解答(有償)見文未 目錄 一、硬件設計 二、設計功能 三、Proteus仿真圖 四、程序源碼 資料包括: 需要完整的資料可以點擊下面的名片加下我,找我要資源壓縮包的百度網盤下載地址及提取碼。 方案選擇 單片機的選擇 方案一&a…

ElasticSearch 7.4學習記錄(基礎概念和基礎操作)

若你之前從未了解過ES,本文將由淺入深的一步步帶你理解ES,簡單使用ES。作者本人就是此狀態,通過學習和梳理,產出本文,已對ES有個全面的了解和想法,不僅將知識點梳理,也涉及到自己的理解&#xf…

行業追蹤,2023-08-09

自動復盤 2023-08-09 凡所有相,皆是虛妄。若見諸相非相,即見如來。 k 線圖是最好的老師,每天持續發布板塊的rps排名,追蹤板塊,板塊來開倉,板塊去清倉,丟棄自以為是的想法,板塊去留讓…

linux學習——Redis基礎

目錄 一、noSQL 類型 特點及應用場景 二、Redis 三、安裝方式 編譯安裝 rpm安裝 四、目錄結構 /etc/redis.conf 五、Redis命令 六、本地登錄和遠程登錄 本地登錄 遠程登錄 七、數據庫操作 幫助信息 庫操作 數據操作 八、Redis持久化 一、RDB類型 二、AOF模式 一…

2023河南萌新聯賽第(四)場:河南大學 F - 小富的idea

2023河南萌新聯賽第(四)場:河南大學 F - 小富的idea 時間限制:C/C 1秒,其他語言2秒 空間限制:C/C 262144K,其他語言524288K 64bit IO Format: %lld 題目描述 要注意節約 卷王小富最近又在內卷&a…

密碼檢查-C語言/Java

描述 小明同學最近開發了一個網站,在用戶注冊賬戶的時候,需要設置賬戶的密碼,為了加強賬戶的安全性,小明對密碼強度有一定要求: 1. 密碼只能由大寫字母,小寫字母,數字構成; 2. 密碼不…

偽類和偽元素有何區別?

聚沙成塔每天進步一點點 ? 專欄簡介? 偽類(Pseudo-class)? 偽元素(Pseudo-element)? 區別總結? 寫在最后 ? 專欄簡介 前端入門之旅:探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前…

信號調制原理演示,模擬和數字調制技術大比拼

【中英雙語字幕】信號調制原理演示,模擬和數字調制技術大比拼!_嗶哩嗶哩_bilibili

騰訊云輕量應用服務器Typecho應用模板搭建博客流程

騰訊云百科分享使用騰訊云輕量應用服務器Typecho應用模板搭建博客流程,Typecho 是開源的博客建站平臺,具有輕量、高效、穩定等特點,操作界面簡潔友好。該鏡像基于 CentOS 7.6 64 位操作系統,并已預置 Nginx、PHP、MariaDB 軟件。您…

4.0 Python 變量與作用域

在python中,變量的作用域決定了變量在哪些位置可以被訪問。一個程序中的變量并不是所有的地方都可以訪問的,其訪問權限決定于變量的賦值位置。python中有兩種最基本的變量作用域:局部作用域和全局作用域。局部變量是在函數內部定義的變量&…

day24-106.從中序與后序遍歷序列構造二叉樹

106.從中序與后序遍歷序列構造二叉樹 力扣題目鏈接(opens new window) 根據一棵樹的中序遍歷與后序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重復的元素。 例如,給出 中序遍歷 inorder [9,3,15,20,7]后序遍歷 postorder [9,15,7,20,3] 返回如下的二叉樹&am…

前端跨域問題解決方法

跨域是WEB瀏覽器專有的同源限制訪問策略。(后臺接口調用和postman等工具會出現) 跨源資源共享(CORS,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機制,該機制通過允許服務器標示除了它自己以外的其他源(域、協議或端…

java項目打包運行報異常:Demo-1.0-SNAPSHOT.jar中沒有主清單屬性

檢查后發現pom文件中有錯誤&#xff0c;需要添加build內容才能恢復正常。 添加下面文件后再次啟動恢復正常。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactI…

C語言atoi函數將字符串類型轉換為整型

atoi() 是C標準庫中的一個函數&#xff0c;用于將字符串轉換為整數。函數原型如下&#xff1a; int atoi(const char *str); 參數 str 是一個指向要轉換的字符串的指針。atoi() 函數會嘗試將字符串中的數字部分轉換為整數&#xff0c;并返回轉換后的整數值。如果字符串中不僅包…

Add-in Express for Microsoft Office and Delphi Crack

Add-in Express for Microsoft Office and Delphi Crack 適用于Microsoft Office和Delphi VCL的Add-in Express使您能夠在幾次點擊中為Microsoft Office開發專業插件。它生成基于COM的項目&#xff0c;這些項目包含Microsoft Office外接程序或智能標記的所有必要功能&#xff0…

CTFshow web93-104關

這周要學習的是php代碼審計 根據師兄的作業 來做web入門的93-104關 93關 看代碼 進行分析 他的主函數 include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){ $num $_GET[num]; if($num4476){ die("no no no!"); …

認識http的方法、Header、狀態碼以及簡單實現一個http的業務邏輯

文章目錄 http的方法http狀態碼http重定向http常見Header實現簡單業務邏輯Protocol.hppUtil.hppServer.hppServer.cc 效果 http的方法 方法說明支持的HTTP版本GET獲取資源1.0/1.1POST傳輸實體主體1.0/1.1PUT傳輸文件1.0/1.1HEAD獲得報文首部1.0/1.1DELETE刪除文件1.0/1.1OPTIO…

【ts】【cocos creator】excel表格轉JSON

需要將表格導出為text格式放到項目resources/text文件夾下 新建場景&#xff0c;掛載到Canvas上運行 表格文件格式&#xff1a; 保存格式選text tableToJson : import CryptoJS require(./FileSaver);const { ccclass, property } cc._decorator;ccclass export default c…