可回收垃圾的循环利用对我国经济的可持续发展有着重要意义.当前的垃圾回收需要人们手动分类垃 圾,找到一种自动分类垃圾的方法,提高垃圾回收的效率,不仅会产生显著的社会效益,而且有巨大的经济效 益.为了提高可回收生活垃圾识别的准确率,研究人员尝试利用图像处理、机器学习等方法自动识别玻璃 瓶、废纸、纸盒、易拉罐等常见生活废品.利用图像处理技术获取垃圾图像的特征后,再利用深度学习网络、支持向量机、K近邻分类器、主成分分析(PCA)方法[3]等方法对垃圾图像特征向量提出一种在ImageNet图像数据集训练的ResNetl8模型 进行迁移学习的方法.用于解决可回收生活垃圾的分类识别问题.对现有的可回收生活垃圾图像 集进行旋转、平移、缩放等预处理后,由人工分为纸皮、废纸、塑料、玻璃和金属5个类别.每个类别 各随机选择70%的样本用作训练集,剩余30%用作测试集.

可回收生活垃圾的分类和再利用,是我国社会经济良性循环的重要途径.基于机器视觉 的高效分类算法是垃圾智能分类的关键.提出一种在ImageNet图像数据集训练的ResNetl8模型 进行迁移学习的方法.用于解决可回收生活垃圾的分类识别问题.对现有的可回收生活垃圾图像 集进行旋转、平移、缩放等预处理后,由人工分为纸皮、废纸、塑料、玻璃和金属5个类别.每个类别 各随机选择70%的样本用作训练集,剩余30%用作测试集.在Matlab深度学习框架下,基于训练集 对ResNetl8预训练模型进行迁移学习,形成新的ResNetl8分类模型.对测试集的实验结果表明: 新分类模型分类准确率高达93.67%,而且提高了模型的训练速度.

一、数据集

本研究的图像数据集以Gary Thung和Mindy Yang∞1创建的垃圾图像数据集为基础,该数据集由1 989 张图片组成,分为玻璃、纸张、塑料、金属、纸皮5个类别,所有图片的大小调整到512×84.由于数据集的图像 数量较少.从Kaggle网站中的waste—pictures数据集中抽取2 485张相同类型的图像,最终形成4 474张图片 的实验数据集.每个类别的样图如图l所示.这些图像能较好表达生活垃圾被回收时的状态,例如变形的瓶 子、皱褶的纸张等.每类大约有500~900张图像,每张照片的灯光和姿势都不一样,每个图像都执行了图像 增强技术.这些技术包括图像的随机旋转、随机亮度控制、随机平移、随机缩放和随机剪切.选择变换的图像 是为了考虑回收材料的不同方向,并最大化数据集的规模.

二、实验训练

模型训练与测试均是在Matlab 2019a的深度学习框架下完成的.硬件环境:Intel i7—8750H@2.20GHz CPU,32GB内存;Nvidia RTX2070 GPU,8GB显存.软件环境:CUDA Toolkit 9.0,CUDNN V7.0;Matlab Deep Learning Toolbox;Windows 10 64bit操作系统.模型训练与测试均通过GPU加速.对于迁移学习模型训练,主 要有Epoch、Batch Size和Learning Rate参数.

  1. Epoch:一个Epoch指代所有的数据送人网络中完成一次前向计算及反向传播的过程,随着Epoch数 量的增加,神经网络中权重更新迭代的次数增多.
  2. Batch Size:Batch是每次送入网络中训练的一部分数据,而Batch Size就是每个Batch中训练图片样 本的数量.为了在内存效率和内存容量之间寻求最佳平衡,Batch Size应该进行精心设置,优化网络模型的性 能及速度.
  3. Learning Rate:是深度学习中重要的参数,其决定着训练样本的识别精度,合适的Learning Rate能够 使训练样本的识别精度在合适的时间内达到一个理想值. 随机把可回收生活垃圾数据集中每一类别图片的70%分为训练集、另外30%作为测试集.上述3个参数分别取3个不同值时,共完成27次实验,每次实验中训练模型的耗时和模型的测试精度如表1所示.为了 综合评价每种参数组合的效果.对精度和耗时做归一化处理,作为精度和耗时的得分,将精度得分和耗时得 分分别按0.6和0.4加权平均.可得综合得分.根据综合得分,可见Epoch、Batch Size和Learning Rate参数组 合分别取(5,32,10‘3)和(10,32,10。3)时,迁移学习效果最好. 考虑NtJll练过程中可能存在的随机误差,对(5,32,10。3)和(10,32,10‘3)这两个组合,再重复进行4次 实验,可得表2的实验数据.可见这两个参数组合所得的迁移模型精度比较接近,但(5,32,10。)组合的训练 耗时比(10,32,10。)组合少得多.图4和图5是两个组合训练时的过程曲线.可见,在Batch Size和Learning Rate取得合适的值时,Epoch的增加可以提高一定的精度。

三、实验代码

function varargout = main(varargin)
% MAIN MATLAB code for main.fig
%      MAIN, by itself, creates a new MAIN or raises the existing
%      singleton*.
%
%      H = MAIN returns the handle to a new MAIN or the handle to
%      the existing singleton*.
%
%      MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MAIN.M with the given input arguments.
%
%      MAIN('Property','Value',...) creates a new MAIN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before main_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to main_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help main% Last Modified by GUIDE v2.5 14-Apr-2022 22:27:41% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @main_OpeningFcn, ...'gui_OutputFcn',  @main_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before main is made visible.
function main_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to main (see VARARGIN)% Choose default command line output for main
handles.output = hObject;% Update handles structure
guidata(hObject, handles);
cla reset;
box on;
set(handles.axes1,'xtick',[]);
set(handles.axes1,'ytick',[]);
cla reset;
box on; %在坐标轴四周加上边框
set(handles.axes2,'xtick',[]);
set(handles.axes2,'ytick',[]);
box on; %在坐标轴四周加上边框
cla reset;
set(handles.axes3,'xtick',[]);
set(handles.axes3,'ytick',[]);
set(handles.edit1,'string','');
set(handles.edit2,'string','');% UIWAIT makes main wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = main_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global filepath
filepath = uigetdir('*.*','请选择文件夹');%fliepath为文件夹路径% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global filepath
if filepath==0|isequal(filepath,0)|~exist(filepath,'dir')warndlg('文件夹不存在,请重新选择!','warning');return;
end
%%  数据集 %%
% 数据集,每个文件的标签是其所在文件夹
datas=imageDatastore(filepath,'LabelSource','foldernames');
% datas.Labels 标签
% datas.Files  路径+文件名数量一定要相同softmaxLayer % 分类层classificationLayer];%%  参数设定 %%
% 参数配置
% 验证集才加入
%'ValidationData',valImg,...
%'ValidationFrequency',6,...
options=trainingOptions('sgdm',...'MiniBatchSize',10,... % 10'MaxEpochs',8,...'Shuffle','every-epoch',...'InitialLearnRate',1e-4,...'Verbose',true,... %命令窗口显示指标'Plots','training-progress');% ,TrainingAccuracy,TrainingLoss
[net_cnn,info]=trainNetwork(trainImg,layers,options);axes(handles.axes1);
plot(info.TrainingAccuracy);
xlabel('迭代');
ylabel('Accuracy(%)');
axes(handles.axes2);
plot(info.TrainingLoss);
xlabel('迭代');
ylabel('Loss');
%% 模型存储 %%
% 保存模型名称+训练好的模型
save net_cnn net_cnn;res=num2str(accuracy*100);
res=strcat(res,'%');
set(handles.edit1, 'String',res);% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str;
[filename,pathname]=uigetfile({'*.mat'});
str=[pathname filename];
if isequal(filename,0)|isequal(pathname,0)warndlg('模型不存在,请重试!','warning');return;
end

参考文献

【1】宁凯,张东波.基于视觉感知的智能扫地机器人的垃圾检测与分类[J].

【2】 刘雅璇,潘万彬.基于自我训练的长效垃圾分类方法[J].

今后应进一步 丰富可回收垃圾图像数据集,建立混合垃圾图像的分类与识别模型,以进一步提升可回收垃圾图像模型的识 别准确率.

垃圾分类识别系统对垃圾投放环节进行实时监测,无需人工干预,一旦监测到垃圾投放未分类时,立即进行告警,提醒市民和监管人员,有效遏制事件的发生。同时将告警截图和视频保存到数据库形成报表,可根据时间段对告警记录和告警截图、视频进行查询点播,方便进行事后轨迹回溯。

两只企鹅:1341703358,可以知道更多!

基于Matlab卷积神经网络垃圾分类识别系统相关推荐

  1. 基于Pytorch框架的轻量级卷积神经网络垃圾分类识别系统

    今天在查资料的时候在网上看到一篇文章,博主是基于TensorFlow实现的CNN来完成对垃圾分类识别的,想到最近正好在使用Pytorch就想也做一下,就当是项目开发实践了.先看下动态操作效果: 原文在 ...

  2. 基于MATLAB的人脸考勤识别系统

    基于MATLAB的人脸考勤识别系统 摘 要 人脸识别是模式识别和图像处理等学科的一个研究热点,它广泛应用在身份验证.刑侦破案.视频监视.机器人智能化和医学等领域,具有广阔的应用价值和商用价值.人脸特征 ...

  3. 超详细基于MATLAB的人脸考勤识别系统

    基于MATLAB的人脸考勤识别系统 摘 要 人脸识别是模式识别和图像处理等学科的一个研究热点,它广泛应用在身份验证.刑侦破案.视频监视.机器人智能化和医学等领域,具有广阔的应用价值和商用价值.人脸特征 ...

  4. 基于matlab的自动人脸识别系统GUI设计

    基于matlab的自动人脸识别系统GUI设计 之前做的一个课设项目半成品,一边网上找资料一边自己瞎捣鼓,完成了GUI界面的设计,实时视频中的人脸检测和追踪,PCA算法训练,单张人脸识别.但是识别率比较 ...

  5. 基于matlab的手写体数字识别系统,基于matlab的手写体数字识别系统研究

    基于matlab的手写体数字识别系统研究 丁禹鑫1,丁会2,张红娟2,杨彤彤1 [摘要]随着科学技术的发展,机器学习成为一大学科热门领域,是一门专门研究计算机怎样模拟或实现人类的学习行为的交叉学科.文 ...

  6. 基于深度学习的垃圾分类识别系统

    目录 摘要 深度学习算法实现 垃圾分类识别系统 结束 摘要 随着我国经济的飞速发展,人民生活水平的提高,生活垃圾的产生量也急剧增加.垃圾种类繁多,材质.颜色和外形各异,而且在不同地域和不同场景下的类别 ...

  7. 基于matlab的手写体数字识别系统

    摘要:随着科学技术的发展,机器学习成为一大学科热门领域,是一门专门研究计算机怎样模拟或实现人类的学习行为的交叉学科.文章在matlab软件的基础上,利用BP神经网络算法完成手写体数字的识别. 机器学习 ...

  8. 基于MATLAB的农业病虫害识别系统

    摘 要 目前,图像处理技术的应用与研究都有了很大进展,其应用也已经渗透到农业生产的各个领域.在农业生产中,病虫害一直是困扰农作物生长的基本问题.因此研究农作物病虫草害的自动检测与识别,开发智能化控制系 ...

  9. 【病虫害识别】基于matlab GUI SVM病虫害识别系统【含Matlab源码 2429期】

    ⛄一.基于机器视觉的农作物病害识别技术 1 叶片图像采集 进行农作物病害自动检测与识别首先要对病害叶片的图像进行采集.自动识别的前提是获得数字图像, 数字图像质量的好坏决定着之后叶片病害的识别特征能否 ...

最新文章

  1. (0026)iOS 开发之模块化封装初步实践
  2. Xamarin iOS教程之警告视图
  3. 五大经常使用算法 之 动态规划法
  4. 乔布斯1秒变“白痴”,马化腾5秒,张小龙10秒,你呢?
  5. JavaScript页面校验
  6. 利用一个样本估计类别数据分布,9行代码提高少样本学习泛化能力
  7. python爬虫学习:电商数据分析
  8. 中国联通公布8月运营数据出炉 4G用户大幅度提升
  9. (转)J2ME中随机数字的生成
  10. flask_restplus和swagger
  11. 四种方法实现两个等大数组之间内容交换
  12. 3小时GIS入门教程(二)GIS数据格式、坐标系
  13. 用python爬虫,pyinstaller写一个属于自己的彩虹屁生成器!(链接在文末自取)
  14. NVIDIA安装驱动不成功的解决方式
  15. revit二开之关联族参数的实现
  16. java计算机毕业设计ssm党支部在线学习系统
  17. 使用Shader Graph实现《塞尔达传说:旷野之息》风格的着色器
  18. 基于51单片机的传送带产品计数器
  19. 生存类html5小游戏,紧张绝望!刺激爽爆!盘点最好玩的PC生存类游戏(中)
  20. html点击展开菜单,简单实现js点击展开二级菜单功能

热门文章

  1. IPsec中IKE与ISAKMP过程分析(主模式-消息2)
  2. python排序每200个一组不同身份证
  3. Excel按单元格背景颜色查找单个单元格的2种操作
  4. sql server高级查询及更新操作一
  5. Flutter学习笔记 —— CustomPainter自定义画布绘制爱心
  6. 【20111114】IT 从业 新闻
  7. java 中counter什么意思_(java初学)如何使用java写一个页面计数器?
  8. uniapp小程序如何通过虚拟列表配合节流,完成上拉刷新下拉加载,避免页面卡顿,提升性能呢?
  9. redis服务器---• 若干个学生同时进行行考试,考试时间为1小时 • 满分为100分 • 按成绩排名 • 若成绩相同,则先交卷者排名靠前
  10. [CTO俱乐部第47期]IT外包人员归属感低 工作多超不过15个月