APP下载

基于卷积神经网络的生活垃圾自动分类软件的实现

2020-04-24吕文杰魏孝虎陈众孚童灏马燕

电脑知识与技术 2020年5期
关键词:垃圾分类卷积神经网络图像识别

吕文杰 魏孝虎 陈众孚 童灏 马燕

摘要:图像识别技术近年来被运用得越来越广泛。应用图像识别技术进行垃圾分类成为研究的热点。该文介绍了一种基于卷积神经网络,利用Tensorflow、Android系统开发的能通过拍照自动识别垃圾类别的应用程序。

关键词:图像识别;垃圾分类;卷积神经网络

中图分类号:TP399 文献标识码:A

文章编号:1009-3044(2020)05-0203-02

开放科学(资源服务)标识码(OSID):

由于计算机运算速度的提升,近年来,图像识别技术得到了巨大的发展。一些经典的分类算法,比如,基于SVM分类器的图像分类算法[1]已逐渐被卷积神经网络[2]所替代。尽管卷积神经网络依然处于一种“黑盒”的状态,将卷积神经网络运用到图像识别的技术中有着非常好的效果。因而诞生了诸如AlexNet、GoogLeNet这样的模型,使得图像识别被广泛运用到现实生活中成为可能。

垃圾分类也是近年来比较热门的一个话题。上海在今年的7月实施了《上海市生活垃圾管理条例》,正式宣告将对垃圾分类进行严格的管制。与此同时,全国各地的其他城市也纷纷效仿,开始推行垃圾分类的相关措施。但是,市面上关于垃圾自动分类的产品依然不多。因而,本文结合基于卷积升级网络的图像识别算法,开发了一种通过拍照自动识别垃圾类别的手机应用,可对日常的垃圾分类起到一定的帮助。

1 开发思路

如果训练一个基于卷积神经网络的识别垃圾的模型,需要耗费大量的物力和人力。需要列举出大量的生活物品,并根据这些生活物品收集大量的照片;构建一个比较复杂的网络,对于类别个数多,样本个数多的数据集来说,一个较浅的网络无法训练出很好的效果;再通过高性能的计算机进行训练,由于网络的结构比较复杂,这将耗费大量的时间。这种方法是难以实施的。

生活垃圾的分类,可以看成生活中常见物体的识别。并且,现在市场上,有许多开源的,已经训练好的模型可以用于识别常见物体。这些模型已经经过了很多测试和改进,有着非常好的性能。本文采用的,即是Google的Inception-v3模型。具体的思路为:先用Inception-v3对物体进行识别,再将分类得到的结果映射到其对应的垃圾类别,即可完成垃圾的分类。

此外,考虑到应用使用的便利性,以及国内手机用户所使用的操作系统,本文决定基于Android系统开发这款应用。

2 Inception横型的介绍

Google推出Inception模型的目的是为了解决稀疏矩阵计算速度较慢的问题。深度网络存在着以下几点的问题:

1)神经网络的层数越深,将出现梯度弥散,导致前面几层的作用消失。

2)神经网络的参数越多,越容易过拟合,导致模型实际效果不好。

3)神经网络越大,计算成本也就越高。

为了解决上述这些问题,往往会采用稀疏连接,从而打破神经网络的对称特性,同时提高模型的准确率,防止过拟合的 现象出现。但是稀疏链接会导致训练模型时的计算成本大大增加,计算机的软件和硬件对于稀疏结构的计算能力都比较有限。Google为了能够找到一种方法,使得能够利用密集矩阵的高计算性能的同时,保持网络的稀疏结构以提高模型的准确率,从而提出了Inception的结构,Inception结构有如下特点:

1) Google在同- Inception层中采用了不同尺寸的卷积核,分别为1*l、3*3、5*5,才用这些尺寸了原因是为了保证图像输出时都能到达28*28的同一尺寸(只需要通过padding操作即可达到该目的)。

2)采用不同尺寸的卷积核的初衷,即是使用不同大小的局部感受野,并将不容尺寸的特征融合在一起。

3) Inception层中加入了pooling的操作,提取出较为重要的特征。

Inception-vl融合了9个Inception模型组成了一个22层的深度模型,并再最后采用了平均池化层来替代了全连接层。使得模型最终的准确率高于AlexNet。

Inception-v3则将较大的卷积核进行了拆分,考虑了n*l这种类型的卷积核,替代n*n的卷积核。即任意一个n*n的卷积核,都会通过一个l*n的卷积核卷积后接上一个n*l的卷积核卷积来替代。

这种做法可以减少很多的参数,减轻过拟合现象,同时也增加了非线性的特性。再Inception-v3的论文中提到,这种非对称的卷积结构拆分,其结果比堆成地拆分为几个相同的小卷积核效果更佳明显,可以处理更为复杂的空间特征。

与此同时,Inception模型也在Inception-v3得到了相应的优化,增加了8*8、17*17、35*35這三种不相同的卷积核尺寸。且这些模型不会再模型的前半部分出现,前半部分采用的依然是一些普通的卷积层。在模型的后半部分才开始出现改进后的Inception模型。

总的来说,将Inception-v3模型用于图像的分类和识别有着不错的效果。

3 具体实现

本文使用基于Android Studio的开发环境和Java语言进行Android应用程序的编写。本文开发了一个ImageClassification类,专门用于做普通的图像识别。

首先,在build.gradle文件中写入如下语句,来将Tensorflow框架的移动版本加入项目中:

implementation 'org.tensorflow:tensorflow-android:+'

其次,调用Tensorflow模型的关键语句为:

TensorFlowlnferencelnterface inferencelnterface=new Ten-sorFlowInferenceInterface(context.getAssetsO,M ODE L_FILE) 其中,MODEL FILE为需要调用的模型的名称,我们将Google的移动版的Inception-v3模型和其标签放入main\assests这个文件夹下,即可将模型加载到内存当中去。

再通过如下代码:

inferencelnterface. feed(input_name, floatValues, 1, in-put_size_width, input_size_height,3);

inferencelnterface.run(outpur_names,false);

inferencelnterface.fetch(output_name, outputs);

即可运行模型。其中input_name为模型输入Tensor的名称,floatValues为归一化后的图像RCB值,output_name为模型输出Tensor的名称。input_szie和output_size分别为模型所需要的,输入图像的尺寸。Inception-v3所需要的尺寸为224*224。图像归一化可以通过以下代码实现:

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值,可以通过读入Bitmap格式的图片获得。imageMean为假定的图像像素平均值,im-ageStd为假定的图像像素的标准差。在本应用中,将其分别设置为117和3,经试验发现这种设置有着较好的效果。在ouputs中会返回相应的编号。根据编号可以对应lmagen-et_comp_graph_label_strings.txt本文文件中的行号,查找到相应的名称。

最后,通过构造一个ImageClassification类的实例,再通过该实例调用imageclassification0方法,传人一个bitmap和当前活动的上下文即可完成分类,该方法将返回一个String类型的字符串,其内容即是分类的结果和可信度,具体代码如下所示:

ImageClassification imageClassification= new ImageClassifi-cation0;

String englishResult= imageClassification.imageclassification(bitmap, getContext0);

再将英文结果翻译为中文结果,映射到相应的垃圾类别输出即可。这是该应用最为核心的代码,其余代码较为简单,在此不多赘述。

4 结束语

基于卷积神经网络开发的垃圾自动分类应用程序,可以将手机拍摄的照片经过压缩和处理后输入到Google的Inception-v3模型中,識别出相关的结果并映射到对应的垃圾类别。该应用可以识别1000多种物体,并且不需要连接网络,使用起来十分便利。整个项目的工程文件和源代码可在Github开源社区中下载使用,地址为:https://github.com/lvl l O/RubbishRecog,

参考文献:

[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著.深度学习[Ml.赵申剑,黎或君,符天凡,李凯译,北京,人 民邮电出版社,2017:201-226.

[4]郑攀海,郭凌,丁立兵,基于TensorFlow的卷积神经网络的研究与实现[J].电子技术与软件工程,2018(18):20-22.

[5]吴健,陈豪,方武.基于计算机视觉的废物垃圾分析与识别研究[J].信息技术与信息化,2016(10):81-83.

【通联编辑:唐一东】

收稿日期:2019 -11-15

作者简介:吕文杰(1998-),男,上海人,学士,主要研究方向为模式识别;魏孝虎(1998-),男,安徽芜湖人,学士,主要研究方向为模式识别;陈众孚(1999-),男,上海人,学士,主要研究方向为模式识别;童灏(1999-),男,上海人,学士,主要研究方向为模式识别;通讯作者:马燕(1970-),女,浙江海宁人,上海师范大学信息与机电工程学院计算机系教授,主要研究方向为图像分割、模式识别和三维建模等。

猜你喜欢

垃圾分类卷积神经网络图像识别
基于Resnet-50的猫狗图像识别
高速公路图像识别技术应用探讨
图像识别在物联网上的应用
图像识别在水质检测中的应用
基于深度卷积神经网络的物体识别算法
小学校本课程《垃圾分类》智慧教育案例研究
日本城市垃圾分类的做法
高校环境教育非课堂教学模式的探索