logo资料库

基于神经网络的智能垃圾分类软件设计与实现.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
120 - - 科学技术创新 2020.26 基于神经网络的智能垃圾分类软件设计与实现 (桂林理工大学信息科学与工程学院,广西 桂林 541004) 余 东 敬 超 * 摘 要:为了解决居民垃圾分类知识储蓄不足,难以对垃圾进行分类的问题,开发一款 Android 平台的应用软件,以满足居民 对日常生活垃圾分类的需要。在 Android 本地部署垃圾分类神经网络模型 ResNeXt-101-32x16d-wsl 实现实时智能垃圾分类,同时 在 Android 本地使用 SQLite 存储垃圾物品信息,实现离线文字查询垃圾类别,同时借助“讯飞开放平台”的语音识别功能和本地 SQLite 数据库实现语音查询垃圾类别功能。Android 开发采用 Jetpack 组件和 MVVM 模式,经测试,软件及其各模块功能均能正常 运行,能够实现辅助居民对垃圾物品进行分类。 关键词:智能识别;语音查询;文字检索;垃圾分类;神经网络;Android 系统 中图分类号:TP311.52 文献标识码:A 文章编号:2096-4390(2020)26-0120-03 我国垃圾分类始于 20 世纪 90 年代,但垃圾分类仍然处于 本文设计的神经网络可以识别生活中常见的 4 大类 40 小 原地踏步的窘境,没有被居民接受,长期处于“试行”状态。直到 类垃圾物品,收集到的网上开源数据有 14000 张图片左右。此 2019 年 1 月 31 日,《上海市生活垃圾管理条例》 正式成为地方 外,使用多线程爬虫爬取百度图片 17 万张图片,爬取的图片是 性法规,并于 2019 年 7 月 1 日起强制实施,当地垃圾分类才取 根据关键词搜索出来的结果图片,除了我们需要的图片,还有 得显著效果。2020 年初,桂林市就宣布开始在全市全面启动生 许多相关图片,如搜索“烟头”的图片,会有烟蒂柱、戒烟图片等 活垃圾分类工作,垃圾分类已成为居民日常生活中所必须面对 脏数据,此外,还有图片是非 RGB 三通道图片,也是脏数据,都 的问题。 需要进行数据清洗。进行数据清洗之后,一共还有 73600 张图 本文设计的是一款运行在 Android 手机系统的 APP[1],通过 片,按照 8:2 的比例对数据进行划分为训练集和验证集。 在 Android 应 用 本 地 部 署 预 训 练 神 经 网 络 训练前需对数据进行预处理,将图片等比例缩放到 1:1,然 ResNeXt-101-32x16d-wsl 模型,实现视频实时智能垃圾分类,同 后再进行中心剪切,尺寸为 224*224,最后对图片进行水平翻 时在 APP 中构建生活中常见的垃圾物品,具有 6800 多条数据 转,高斯噪声,旋转角度等。 信息的数据库,从而实现语音和文字查询垃圾类别功能。最后 1.3 模型训练及部署 整体采用 C\S 模式,使用 Flask 构建远程服务器,实现客户端和 在本节主要过程为加载数据集,构建神经网络,训练神经 服务器之间的数据传输。经过单元测试和确认测试,AI 识别准 网络及神经网络部署。 确率在 90%以上,APP 各个功能模块运行正常,性能稳定可靠。 (1)加载数据集。使用 Torch 的 DataLoader 接口,加载本地 Android 程序设计采用 MVVM 模式,实现数据驱动、低耦合度、 磁盘已经经过清洗的数据集,在加载过程中,对数据进行打乱、 可复用性,同时做到了垃圾分类离线识别,大大提供了用户体 增强,其中数据增强的 Python 相关代码如下: 验。 1 神经网络设计 1.1 神经网络概述[2] transforms.Compose([ Resize(img),# 调整图片大小 transforms.CenterCrop(size),# 中心裁剪 在缺乏大规模数据标注数据集的情况下,本文设计采用迁 transforms.ToTensor(),# 转化成张量 移学习来获得能够提取特征的 CNN 网络,采用的是神经网络 transforms.Normalize(mean=mean,std=std) ResNeXt-101-32x16d-wsl 预训练模型,该模型对 Instagram(9.4 ]) 亿)数据集进行弱监督训练,对 ImageNet-1k 中 finetune 的参数 (2) 构 建 神 经 网 络 。 这 里 采 用 预 训 练 模 型 进行微调,具有很强的图片特征提取能力。 ResNeXt-101-32x16d-wsl,加载预训练参数之后,冻结网络参 首先根据图片类别数目确定神经网络结构,然后制作数据 数,最后修改网络的全连接层,使神经网络能够做到对 40 类图 集,对获取数据进行清洗、增强,确定超参数之后,开始训练神 片进行分类,其构建过程的 Python 相关代码如下: 经网络,在训练过程中记录损失函数值和验证集通过率,用于 def resnext101_32x16d_wsl(model_name): 参数调优,最后将神经网络部署到其他平台进行应用,实现 AI # 加载预训练模型 resnext101_32x16d_wsl 识别功能。 1.2 构建数据集 model = torch.hub.load(model_name) # 冻结参数:可以达到快速训练网络的目的 基金项目:本文受到广西高等教育本科教学改革工程项目(一般项目 B 类)资助。 作者简介:余东(1997-),男,汉族,河南信阳人,桂林理工大学信息科学与工程学院本科生,研究领域为计算机应用技术。 通讯作者:敬超(1983-),男,汉族,河南长葛人,副教授,博士,研究领域为人工智能,大数据处理及云计算。
2020.26 科学技术创新 121 - - for param in model.parameters(): 转化工具 PyTorchMobile。 param.requires_grad = False 使用 PyTorchMobile 进行模型转化的 Python 相关代码如下: # 修改全连接层 model.fc = nn.Sequential( nn.Dropout(0.2),# 防止过拟合 nn.Linear(2048,classes_num) ) return model model = make_model() # 构建神经网络 model.load_state_dict() # 加载神经网络参数 model.eval() # 模型设置为评估模式 input_tensor = torch.rand() # 定义模型输入 mobile = torch.jit.trace() # 模型转换 mobile.save() # 保存转换后的模型 (3)模型训练。这个过程中涉及定义优化器和损失函数、是 否断点续训、参数保存等等,整体训练的 Python 相关代码如下: def train_network(**arg): # 加载模型 model = resnext101_32x16d_wsl() # 定义优化器和损失函数 optimization = torch.optim.SGD() loss_func = nn.CrossEntropyLoss() # 是否断点续训 if resume: # resume 为真时,加载过程参数 # 训练网络 for epoch in range(state_epoch,end_epoch): loss_train = train() # 训练 acc_val = val() # 验证 # 保存模型 if acc_val >= best_acc: 图 1 损失函数值和验证集通过率变化图 2 软件实现 2.1 AI 识别垃圾类别功能实现 通 过 Jetpack CameraX 组 件 调 用 手 机 摄 像 头 ,在 # 保存网络参数和相关数据 PreviewView 控件中实现画面预览,自定义一个 Image analysis 训练和验证的过程相似,这里给出训练时的 Python 相关代 图像分析器,CameraX 会将视频画面的每一帧图片传入这个图 码: def train(): model.train() # 训练模式 loss_data = [] # 损失值列表 # 开始训练 像分析器,在图像分析器中,调用神经网络模型对图片进行识 别,对识别结果进行解析之后,通过回调,将识别结果也就是图 片中物品所属的垃圾类别返回并显示在手机页面上,同时为了 防止光线过暗,添加了手电筒功能。 2.2 语音查询垃圾类别功能实现 for step,(x,y) in enumerate(train_data): 在科大讯飞官网注册一个账号并创建一个具有语音识别 out = model(x) 功能的应用,拿到 APPID 用于初始化语音识别 API。自定义一 loss = loss_func(out,y) # 计算损失值 个按钮控件 AudioButton 和录音弹窗 AudioDialog,重载录音按钮 loss_data.append(loss.item()) 的 onTouchEvent()函数,并实现录音动画。 optimization.zero_grad() loss.backward() # 反向传播 optimization.step() # 优化器 # 返回平均损失值 return np.mean(loss_data) AudioButton 按钮具有三种状态:未按住按钮的正常状态、 一直按住的录音状态和手指移动到按钮范围之外的取消录音 状态,其中后两者分别对应 onTouchEvent 的 ACTION_DOWN 和 ACTION_MOVE 事件,不同的状态会触发不同的事件和弹窗效 果。按钮按下时,触发录音弹窗并开始录音,实时将录音发送到 讯 飞 开 放 平 台 进 行 语 音 识 别 , 通 过 对 语 音 识 别 API 的 SpeechRecognizer 设置,使得返回的结果是已经经过了分词处 经 过 测 试 确 定 模 型 训 练 的 超 参 数 , 对 预 训 练 模 型 理。如:“西瓜皮是什么垃圾”,返回的结果为:西瓜皮、是、什么、 ResNeXt-101-32x16d-wsl 训练了 16 批次之后,损失值和准确率 垃圾,经过简单的字符串匹配,确定用户要查询的关键词为“西 变化如图 1 所示,其中损失函数值最低为 0.248,验证集准确率 瓜皮”,在得到语音识别结果和关键词之后,通过回调将信息传 最高为 90.8%。 给 AudioButton,再回调给 Fragment,之后通过关键词查询数据 (4)模型部署。本设计需要将神经网络部署到 Android 客户 库,最后将语音识别结果和查询结果展示给用户。具体实现如 端,这里使用 PyTorch 官方在 PyTorch 版本 1.3 以上提供的模型 图 2 所示。
122 - - 科学技术创新 2020.26 fun shareFuncation(context:Context) { val intent = Intent(Intent.ACTION_SEND).apply { putExtra(Intent.EXTRA_TEXT,shareText) type = "text/plain" } context.startActivity(Intent.createChooser(intent," 分享 ")) } 反馈功能是通过第三方库 okhttp3 实现服务器和客户端之 间的数据传输,主要是将用户输入到文本框 EditText 中的信息 发送到远程服务器,服务器在成功接收信息之后向客户端返回 一个成功标志,并将反馈信息记录到服务器数据库中。 图 2 智能垃圾分类界面 2.3 文字检索垃圾类别功能实现 将 SearchView 和 RecyclerView 控件结合构成一个带下拉列 表的搜索框,在搜索框 SearchView 中输入垃圾物品的名称或关 键词,会实时对数据库进行查询并将搜索结果显示在下拉列表 RecyclerView 中 。 实 时 搜 索 主 要 是 重 载 SearchView. OnQueryTextListener 中的 onQueryTextChange()方法,每 当 搜 索 框 SearchView 中内容发生改变时,都会被 onQueryTextChange() 方法监听到,在 onQueryTextChange()方法中根据搜索框里的内 容对数据库进行模糊查询,并将查询结果显示在 RecyclerView 中。文字检索页面效果图如 3 所示。 图 4 生活垃圾百科页面 本文基于 Android 平台设计了一款具有实时 AI 识别、语音 查询、文字检索等对垃圾进行分类的功能的移动应用软件[4],能 够满足居民日常垃圾分类的需要。一方面能够及时且有效解决 居民因垃圾分类知识储备不足而难以对垃圾物品进行正确垃 圾的问题;另一方面从长期来看,潜移默化中提高居民垃圾分 类的本领,同时也是对我国环保事业的一份助力。 参考文献 [1]赵慧峰.基于 MVVM 的 Android App 快速开发框架的设计与 实现[D].太原:山西大学,2017. [2]Christopher M Bishop. Neural Network for Pattern Recognition[M]. Clarendon Press,1996. [3]刘姝君.浅谈 Android 应用开发中的 UI 设计[J].数字通信世 图 3 文字检索页面 界,2017,13(5):229-230. 2.4 生活垃圾百科功能实现 [4]祝永志,申健,朱盼盼等.Android 移动应用开发教程[M].北京: 该功能主要是对垃圾数据库数据分类展示的效果,主要是 清华大学出版社,2018. 将 TabLayout 和 ViewPager2 控件结合起来实现不同类别垃圾数 据页面可以左右滑动和点击 TabLayout 进行切换[3],在每个页面 中都是通过 RecyclerView 和 PagedListAdapter 对数据进行展示 的。实现界面如图 4 所示。 2.5 分享与反馈功能实现 分享功能是通过 Android 自身提供的底层 API 实现的,可 以将要分享的内容分享到手机上可以被分享的软件。相关代码 如下:
分享到:
收藏