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

        可回收垃圾的循环利用对我国经济的可持续发展有着重要意义.当前的垃圾回收需要人们手动分类垃 圾,找到一种自动分类垃圾的方法,提高垃圾回收的效率,不仅会产生显著的社会效益,而且有巨大的经济效 益.为了提高可回收生活垃圾识别的准确率,研究人员尝试利用图像处理、机器学习等方法自动识别玻璃 瓶、废纸、纸盒、易拉罐等常见生活废品.利用图像处理技术获取垃圾图像的特征后,再利用深度学习网络、支持向量机、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});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_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,可以知道更多!

  • 3
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
垃圾分类是一项非常重要的环保任务。基于卷积神经网络CNN)的垃圾分类是目前比较流行的方法之一。这里提供一个基于MATLAB垃圾分类代码框架,可以帮助你实现自己的垃圾分类器。 1. 数据集准备 首先需要准备一个垃圾分类的数据集,可以从网上下载或自己收集。数据集应该包含不同种类的垃圾图片,比如纸张、塑料、玻璃等。建议至少包含500张以上的图片。将数据集分为训练集和测试集,一般比例为8:2。 2. 数据预处理 在训练之前,需要对数据进行预处理。这包括图像增强、数据增强和归一化等步骤。可以使用MATLAB的Image Processing Toolbox进行图像增强和数据增强,使用MATLAB的Deep Learning Toolbox进行归一化。 3. 模型构建 使用MATLAB的Deep Learning Toolbox构建卷积神经网络模型。这里可以使用现有的模型结构,比如ResNet、AlexNet等,也可以自己构建模型。建议使用预训练模型进行迁移学习,可以提高模型的准确度。 4. 训练模型 将数据集导入MATLAB中,使用MATLAB的Deep Learning Toolbox进行模型训练。可以设置不同的训练参数,比如学习率、批次大小、迭代次数等。 5. 模型测试 在测试集上测试模型的准确度和性能。可以使用MATLAB的Deep Learning Toolbox进行模型测试,计算模型的分类准确率、召回率和F1值等指标。 6. 模型部署 将训练好的模型部署到实际应用中。可以使用MATLAB的Deployment Toolbox将模型转换为C++代码,嵌入到应用程序中。 以上是基于卷积神经网络垃圾分类MATLAB代码框架的大致流程。需要注意的是,垃圾分类是一个复杂的问题,需要综合考虑多个因素,比如垃圾的形状、颜色、质地等。因此,模型的准确度和性能可能受到许多因素的影响。在实际应用中,需要根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值