呂文杰 魏孝虎 陳眾孚 童灝 馬燕
摘要:圖像識(shí)別技術(shù)近年來(lái)被運(yùn)用得越來(lái)越廣泛。應(yīng)用圖像識(shí)別技術(shù)進(jìn)行垃圾分類成為研究的熱點(diǎn)。該文介紹了一種基于卷積神經(jīng)網(wǎng)絡(luò),利用Tensorflow、Android系統(tǒng)開發(fā)的能通過(guò)拍照自動(dòng)識(shí)別垃圾類別的應(yīng)用程序。
關(guān)鍵詞:圖像識(shí)別;垃圾分類;卷積神經(jīng)網(wǎng)絡(luò)
中圖分類號(hào):TP399 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)05-0203-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
由于計(jì)算機(jī)運(yùn)算速度的提升,近年來(lái),圖像識(shí)別技術(shù)得到了巨大的發(fā)展。一些經(jīng)典的分類算法,比如,基于SVM分類器的圖像分類算法[1]已逐漸被卷積神經(jīng)網(wǎng)絡(luò)[2]所替代。盡管卷積神經(jīng)網(wǎng)絡(luò)依然處于一種“黑盒”的狀態(tài),將卷積神經(jīng)網(wǎng)絡(luò)運(yùn)用到圖像識(shí)別的技術(shù)中有著非常好的效果。因而誕生了諸如AlexNet、GoogLeNet這樣的模型,使得圖像識(shí)別被廣泛運(yùn)用到現(xiàn)實(shí)生活中成為可能。
垃圾分類也是近年來(lái)比較熱門的一個(gè)話題。上海在今年的7月實(shí)施了《上海市生活垃圾管理?xiàng)l例》,正式宣告將對(duì)垃圾分類進(jìn)行嚴(yán)格的管制。與此同時(shí),全國(guó)各地的其他城市也紛紛效仿,開始推行垃圾分類的相關(guān)措施。但是,市面上關(guān)于垃圾自動(dòng)分類的產(chǎn)品依然不多。因而,本文結(jié)合基于卷積升級(jí)網(wǎng)絡(luò)的圖像識(shí)別算法,開發(fā)了一種通過(guò)拍照自動(dòng)識(shí)別垃圾類別的手機(jī)應(yīng)用,可對(duì)日常的垃圾分類起到一定的幫助。
1 開發(fā)思路
如果訓(xùn)練一個(gè)基于卷積神經(jīng)網(wǎng)絡(luò)的識(shí)別垃圾的模型,需要耗費(fèi)大量的物力和人力。需要列舉出大量的生活物品,并根據(jù)這些生活物品收集大量的照片;構(gòu)建一個(gè)比較復(fù)雜的網(wǎng)絡(luò),對(duì)于類別個(gè)數(shù)多,樣本個(gè)數(shù)多的數(shù)據(jù)集來(lái)說(shuō),一個(gè)較淺的網(wǎng)絡(luò)無(wú)法訓(xùn)練出很好的效果;再通過(guò)高性能的計(jì)算機(jī)進(jìn)行訓(xùn)練,由于網(wǎng)絡(luò)的結(jié)構(gòu)比較復(fù)雜,這將耗費(fèi)大量的時(shí)間。這種方法是難以實(shí)施的。
生活垃圾的分類,可以看成生活中常見物體的識(shí)別。并且,現(xiàn)在市場(chǎng)上,有許多開源的,已經(jīng)訓(xùn)練好的模型可以用于識(shí)別常見物體。這些模型已經(jīng)經(jīng)過(guò)了很多測(cè)試和改進(jìn),有著非常好的性能。本文采用的,即是Google的Inception-v3模型。具體的思路為:先用Inception-v3對(duì)物體進(jìn)行識(shí)別,再將分類得到的結(jié)果映射到其對(duì)應(yīng)的垃圾類別,即可完成垃圾的分類。
此外,考慮到應(yīng)用使用的便利性,以及國(guó)內(nèi)手機(jī)用戶所使用的操作系統(tǒng),本文決定基于Android系統(tǒng)開發(fā)這款應(yīng)用。
2 Inception橫型的介紹
Google推出Inception模型的目的是為了解決稀疏矩陣計(jì)算速度較慢的問(wèn)題。深度網(wǎng)絡(luò)存在著以下幾點(diǎn)的問(wèn)題:
1)神經(jīng)網(wǎng)絡(luò)的層數(shù)越深,將出現(xiàn)梯度彌散,導(dǎo)致前面幾層的作用消失。
2)神經(jīng)網(wǎng)絡(luò)的參數(shù)越多,越容易過(guò)擬合,導(dǎo)致模型實(shí)際效果不好。
3)神經(jīng)網(wǎng)絡(luò)越大,計(jì)算成本也就越高。
為了解決上述這些問(wèn)題,往往會(huì)采用稀疏連接,從而打破神經(jīng)網(wǎng)絡(luò)的對(duì)稱特性,同時(shí)提高模型的準(zhǔn)確率,防止過(guò)擬合的 現(xiàn)象出現(xiàn)。但是稀疏鏈接會(huì)導(dǎo)致訓(xùn)練模型時(shí)的計(jì)算成本大大增加,計(jì)算機(jī)的軟件和硬件對(duì)于稀疏結(jié)構(gòu)的計(jì)算能力都比較有限。Google為了能夠找到一種方法,使得能夠利用密集矩陣的高計(jì)算性能的同時(shí),保持網(wǎng)絡(luò)的稀疏結(jié)構(gòu)以提高模型的準(zhǔn)確率,從而提出了Inception的結(jié)構(gòu),Inception結(jié)構(gòu)有如下特點(diǎn):
1) Google在同- Inception層中采用了不同尺寸的卷積核,分別為1*l、3*3、5*5,才用這些尺寸了原因是為了保證圖像輸出時(shí)都能到達(dá)28*28的同一尺寸(只需要通過(guò)padding操作即可達(dá)到該目的)。
2)采用不同尺寸的卷積核的初衷,即是使用不同大小的局部感受野,并將不容尺寸的特征融合在一起。
3) Inception層中加入了pooling的操作,提取出較為重要的特征。
Inception-vl融合了9個(gè)Inception模型組成了一個(gè)22層的深度模型,并再最后采用了平均池化層來(lái)替代了全連接層。使得模型最終的準(zhǔn)確率高于AlexNet。
Inception-v3則將較大的卷積核進(jìn)行了拆分,考慮了n*l這種類型的卷積核,替代n*n的卷積核。即任意一個(gè)n*n的卷積核,都會(huì)通過(guò)一個(gè)l*n的卷積核卷積后接上一個(gè)n*l的卷積核卷積來(lái)替代。
這種做法可以減少很多的參數(shù),減輕過(guò)擬合現(xiàn)象,同時(shí)也增加了非線性的特性。再Inception-v3的論文中提到,這種非對(duì)稱的卷積結(jié)構(gòu)拆分,其結(jié)果比堆成地拆分為幾個(gè)相同的小卷積核效果更佳明顯,可以處理更為復(fù)雜的空間特征。
與此同時(shí),Inception模型也在Inception-v3得到了相應(yīng)的優(yōu)化,增加了8*8、17*17、35*35這三種不相同的卷積核尺寸。且這些模型不會(huì)再模型的前半部分出現(xiàn),前半部分采用的依然是一些普通的卷積層。在模型的后半部分才開始出現(xiàn)改進(jìn)后的Inception模型。
總的來(lái)說(shuō),將Inception-v3模型用于圖像的分類和識(shí)別有著不錯(cuò)的效果。
3 具體實(shí)現(xiàn)
本文使用基于Android Studio的開發(fā)環(huán)境和Java語(yǔ)言進(jìn)行Android應(yīng)用程序的編寫。本文開發(fā)了一個(gè)ImageClassification類,專門用于做普通的圖像識(shí)別。
首先,在build.gradle文件中寫入如下語(yǔ)句,來(lái)將Tensorflow框架的移動(dòng)版本加入項(xiàng)目中:
implementation 'org.tensorflow:tensorflow-android:+'
其次,調(diào)用Tensorflow模型的關(guān)鍵語(yǔ)句為:
TensorFlowlnferencelnterface inferencelnterface=new Ten-sorFlowInferenceInterface(context.getAssetsO,M ODE L_FILE) 其中,MODEL FILE為需要調(diào)用的模型的名稱,我們將Google的移動(dòng)版的Inception-v3模型和其標(biāo)簽放入main\assests這個(gè)文件夾下,即可將模型加載到內(nèi)存當(dāng)中去。
再通過(guò)如下代碼:
inferencelnterface. feed(input_name, floatValues, 1, in-put_size_width, input_size_height,3);
inferencelnterface.run(outpur_names,false);
inferencelnterface.fetch(output_name, outputs);
即可運(yùn)行模型。其中input_name為模型輸入Tensor的名稱,floatValues為歸一化后的圖像RCB值,output_name為模型輸出Tensor的名稱。input_szie和output_size分別為模型所需要的,輸入圖像的尺寸。Inception-v3所需要的尺寸為224*224。圖像歸一化可以通過(guò)以下代碼實(shí)現(xiàn):
for (int i=0;i
final int val= intValues[i];
floatValues[i*3+0]=《(val>>16)& OxFF) - imageMean)/imageStd;
floatValues[i*3+1】=《(val>>8)&OxFF) - imageMean)/imageStd;
floatValues[i*3+2】=《val& OxFF) - imageMean)/imageS-td;}
其中,inValues為原圖像的RGB值,可以通過(guò)讀入Bitmap格式的圖片獲得。imageMean為假定的圖像像素平均值,im-ageStd為假定的圖像像素的標(biāo)準(zhǔn)差。在本應(yīng)用中,將其分別設(shè)置為117和3,經(jīng)試驗(yàn)發(fā)現(xiàn)這種設(shè)置有著較好的效果。在ouputs中會(huì)返回相應(yīng)的編號(hào)。根據(jù)編號(hào)可以對(duì)應(yīng)lmagen-et_comp_graph_label_strings.txt本文文件中的行號(hào),查找到相應(yīng)的名稱。
最后,通過(guò)構(gòu)造一個(gè)ImageClassification類的實(shí)例,再通過(guò)該實(shí)例調(diào)用imageclassification0方法,傳人一個(gè)bitmap和當(dāng)前活動(dòng)的上下文即可完成分類,該方法將返回一個(gè)String類型的字符串,其內(nèi)容即是分類的結(jié)果和可信度,具體代碼如下所示:
ImageClassification imageClassification= new ImageClassifi-cation0;
String englishResult= imageClassification.imageclassification(bitmap, getContext0);
再將英文結(jié)果翻譯為中文結(jié)果,映射到相應(yīng)的垃圾類別輸出即可。這是該應(yīng)用最為核心的代碼,其余代碼較為簡(jiǎn)單,在此不多贅述。
4 結(jié)束語(yǔ)
基于卷積神經(jīng)網(wǎng)絡(luò)開發(fā)的垃圾自動(dòng)分類應(yīng)用程序,可以將手機(jī)拍攝的照片經(jīng)過(guò)壓縮和處理后輸入到Google的Inception-v3模型中,識(shí)別出相關(guān)的結(jié)果并映射到對(duì)應(yīng)的垃圾類別。該應(yīng)用可以識(shí)別1000多種物體,并且不需要連接網(wǎng)絡(luò),使用起來(lái)十分便利。整個(gè)項(xiàng)目的工程文件和源代碼可在Github開源社區(qū)中下載使用,地址為:https://github.com/lvl l O/RubbishRecog,
參考文獻(xiàn):
[1] Liu L F,Ma Y,Zhang X F,et aI.High discriminative SIFT fea-ture and feature pair selection to improve the bag of visualwords modeI[Jl.IET Image Processing, 2017,11(11):994-1001.
[2]郭霖.第一行代碼Android[Ml.北京:人民郵電出版社,2014.
[3](美)Ian Goodfellow,(加)Yoshua Bengio,(加)Aaron Courville著.深度學(xué)習(xí)[Ml.趙申劍,黎或君,符天凡,李凱譯,北京,人 民郵電出版社,2017:201-226.
[4]鄭攀海,郭凌,丁立兵,基于TensorFlow的卷積神經(jīng)網(wǎng)絡(luò)的研究與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2018(18):20-22.
[5]吳健,陳豪,方武.基于計(jì)算機(jī)視覺的廢物垃圾分析與識(shí)別研究[J].信息技術(shù)與信息化,2016(10):81-83.
【通聯(lián)編輯:唐一東】
收稿日期:2019 -11-15
作者簡(jiǎn)介:呂文杰(1998-),男,上海人,學(xué)士,主要研究方向?yàn)槟J阶R(shí)別;魏孝虎(1998-),男,安徽蕪湖人,學(xué)士,主要研究方向?yàn)槟J阶R(shí)別;陳眾孚(1999-),男,上海人,學(xué)士,主要研究方向?yàn)槟J阶R(shí)別;童灝(1999-),男,上海人,學(xué)士,主要研究方向?yàn)槟J阶R(shí)別;通訊作者:馬燕(1970-),女,浙江海寧人,上海師范大學(xué)信息與機(jī)電工程學(xué)院計(jì)算機(jī)系教授,主要研究方向?yàn)閳D像分割、模式識(shí)別和三維建模等。