使用Python輕松完成垃圾分類(基于圖像識別)
0 環(huán)境
Python版本:3.6.8
系統(tǒng)版本:macOS Mojave
Python Jupyter Notebook
1 引言
七月了,大家最近一定被一項(xiàng)新的政策給折磨的焦頭爛額,那就是垃圾分類。《上海市生活垃圾管理?xiàng)l例》已經(jīng)正式實(shí)施了,相信還是有很多的小伙伴和我一樣,還沒有完全搞清楚哪些應(yīng)該扔在哪個(gè)類別里。感覺每天都在學(xué)習(xí)一遍垃圾分類,真令人頭大。
聽說一杯沒有喝完的珍珠奶茶應(yīng)該這么扔
- 首先,沒喝完的奶茶水要倒在水池里
- 珍珠,水果肉等殘?jiān)胚M(jìn)濕垃圾
- 把杯子要丟入干垃圾
- 接下來是蓋子,如果是帶蓋子帶熱飲(比如大部分的熱飲),塑料蓋是可以歸到可回收垃圾的嗷
看到這里,是不是大家突然都不想喝奶茶了呢,哈哈。不過不要緊,垃圾分類雖然要執(zhí)行,但是奶茶也可以照喝。
那么,這里我們想討論一下,人工智能和數(shù)據(jù)科學(xué)的方法能不能幫助我們進(jìn)行更好的垃圾分類?這樣我們不用為了不知道要扔哪個(gè)垃圾箱而煩惱。
2 思路
這問題的解決思路或許不止一條。這里只是拋磚引玉一下,提供一些淺顯的見解。
第一種方案,可以把垃圾的信息制成表格化數(shù)據(jù),然后用傳統(tǒng)的機(jī)器學(xué)習(xí)方法。
第二種方案,把所有的垃圾分類信息做成知識圖譜,每一次的查詢就好像是在翻字典一樣查閱信息。
第三種方案,可以借助現(xiàn)在的深度學(xué)習(xí)方法,來對垃圾進(jìn)行識別和分類。每次我們給一張垃圾的圖片,讓模型識別出這是屬于哪一種類別的:干垃圾,濕垃圾,有害垃圾還是可回收垃圾。

3 圖像分類
圖像分類是深度學(xué)習(xí)的一個(gè)經(jīng)典應(yīng)用。它的輸入是一張圖片, 然后經(jīng)過一些處理,進(jìn)入一個(gè)深度學(xué)習(xí)的模型,該模型會返回這個(gè)圖片里垃圾的類別。這里我們考慮四個(gè)類別:干垃圾,濕垃圾,有害垃圾還是可回收垃圾。
報(bào)紙 :可回收垃圾

電池 :有害垃圾

一次性餐盒 :干垃圾

我們對圖片里的物品進(jìn)行分類,這是圖像處理和識別的領(lǐng)域。人工智能里提出了使用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)來解決這一類問題。
我會用keras包和Tensorflow后端來建立模型。 由于訓(xùn)練集的樣本暫時(shí)比較缺乏,所以這里只能先給一套思路和代碼。訓(xùn)練模型的工作之前還得進(jìn)行一波數(shù)據(jù)收集。
我們就先來看看代碼大致長什么樣吧
先導(dǎo)入一些必要的包。

再做一下準(zhǔn)備工作。

在上面,我們初始化了一些變量,batch size是128; num_classes = 4,因?yàn)樾枰诸惖臄?shù)量是4,有干垃圾,濕垃圾,有害垃圾和可回收垃圾這四個(gè)種類。epochs 是我們要訓(xùn)練的次數(shù)。接下來,img_rows, img_cols = 28, 28 我們給了圖片的緯度大小。
在 .reshape(60000,28,28,1)中 , 60000 是圖片的數(shù)量(可變), 28是圖片的大小(可調(diào)),并且1是channel的意思,channel = 1 是指黑白照片。 .reshape(10000,28,28,1)也是同理,只是圖片數(shù)量是10000。
到了最后兩行,我們是把我們目標(biāo)變量的值轉(zhuǎn)化成一個(gè)二分類, 是用一個(gè)向量(矩陣)來表示。比如 [1,0,0,0] 是指干垃圾,[0,1,0,0]是指濕垃圾等等。
接下來是建模的部分。

我們加了卷積層和池化層進(jìn)入模型。激活函數(shù)是 relu,relu函數(shù)幾乎被廣泛地使用在了卷積神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)。我們在層與層之間也加了dropout來減少過擬合。Dense layer是用來做類別預(yù)測的。
建完模型后,我們要進(jìn)行模型的驗(yàn)證,保證準(zhǔn)確性在線。

到這里,我們的建模預(yù)測已經(jīng)大概完成了。一個(gè)好的模型,要不斷地去優(yōu)化它,提高精確度等指標(biāo)要求,直到達(dá)到可以接受的程度。
這優(yōu)化的過程,我們在這里就先不深入討論了,以后繼續(xù)。
4 總結(jié)
值得一提的是,盡管方法上是有實(shí)現(xiàn)的可能,但是實(shí)際操作中肯定要更復(fù)雜的多,尤其是對精度有著很高的要求。
而且當(dāng)一個(gè)圖片里面包含著好幾種垃圾種類,這也會讓我們的分類模型開發(fā)變得很復(fù)雜,增加了難度。
比如,我們想要對一杯奶茶進(jìn)行垃圾分類,照片里面是包含了多個(gè)垃圾的種類,這就比較頭大了,因?yàn)檫@并不是屬于單一的類別。
前路的困難肯定是有的,不過就當(dāng)這里的分享是個(gè)拋磚引玉的起點(diǎn)吧。
畢竟李白也說了,“長風(fēng)破浪會有時(shí),直掛云帆濟(jì)滄海”。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python+tkinter實(shí)現(xiàn)網(wǎng)站下載工具
這篇文章主要為大家詳細(xì)介紹了如何利用Python+tkinter實(shí)現(xiàn)網(wǎng)站下載工具,實(shí)現(xiàn)所有數(shù)據(jù)一鍵獲取,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-03-03
Python導(dǎo)包模塊報(bào)錯(cuò)的問題解決
這篇文章主要介紹了Python導(dǎo)包模塊報(bào)錯(cuò)的問題解決,文章圍繞主題相關(guān)內(nèi)容詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03
python實(shí)現(xiàn)彩色圖轉(zhuǎn)換成灰度圖
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)彩色圖轉(zhuǎn)換成灰度圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Python個(gè)人博客程序開發(fā)實(shí)例信息顯示
這篇文章主要介紹了怎樣用Python來實(shí)現(xiàn)一個(gè)完整的個(gè)人博客系統(tǒng),我們通過實(shí)操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識,感興趣的朋友一起來看看吧2022-12-12
重寫django的model下的objects模型管理器方式
這篇文章主要介紹了重寫django的model下的objects模型管理器方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python實(shí)現(xiàn)定時(shí)文件備份到指定文件夾
隨著數(shù)據(jù)的不斷增長,文件備份變得越來越重要,本文將介紹如何使用Python編寫一個(gè)定時(shí)備份文件的腳本,并將文件備份到指定的文件夾中,希望對大家有所幫助2024-11-11

