Matlab畳み込みニューラルネットワークに基づくごみの分類と認識システム

        リサイクル可能な廃棄物のリサイクルは、私の国の経済の持続可能な開発にとって非常に重要です。現在のごみのリサイクルでは、人が手作業でごみを分別する必要があります。ごみの自動分類の方法を見つけ、ごみのリサイクルの効率を上げることは、大きな社会的利益をもたらすだけでなく、大きな経済的利益ももたらします。リサイクル可能な家庭ごみの識別精度を向上させるために、研究者は画像処理、機械学習、その他の方法を使用して、ガラス瓶、古紙、カートン、缶などの一般的な家庭ごみを自動的に特定しようとしました。画像処理技術を使用してガベージ画像の特徴を取得した後、深層学習ネットワーク、サポートベクターマシン、K最近傍分類器、主成分分析(PCA)法[3]などの方法を使用してガベージ画像の特徴ベクトルを分類します。

        リサイクル可能な家庭ごみの分類と再利用は、わが国の好循環と悪循環にとって重要な方法です。マシンビジョンに基づく効率的な分類アルゴリズムは、インテリジェントなごみ分類の鍵です。ImageNet画像データセットで訓練されたResNetl8モデルの転移学習のための方法を提案した。これは、リサイクル可能な家庭ごみの分類と識別の問題を解決するために使用されます。回転、平行移動、スケーリングなどの既存のリサイクル可能な家庭ごみ画像セットを前処理した後、紙の皮、古紙、プラスチック、ガラス、金属の5つのカテゴリに手動で分類されます。各カテゴリのサンプルの70%がトレーニングセットとしてランダムに選択され、残りの30%がテストセットとして使用されます。Matlabの深層学習フレームワークでは、ResNetl8事前トレーニングモデルがトレーニングセットに基づいて転送され、新しいResNetl8分類モデルが形成されます。テストセットの実験結果は、新しい分類モデルの分類精度が93.67%と高く、モデルのトレーニング速度が向上していることを示しています。

1.データセット

        この調査の画像データセットは、Gary ThungとMindyYang∞1によって作成されたゴミ画像データセットに基づいています。このデータセットは1,989枚の画像で構成され、ガラス、紙、プラスチック、金属、紙の皮の5つのカテゴリに分類されます。すべてのサイズ写真のは512×84に調整されます。データセット内の画像の数が少ないため。Kaggle Webサイトのwaste-picturesデータセットから同じタイプの2485枚の画像が抽出され、最終的に4474枚の画像の実験データセットが形成されます。各カテゴリのサンプル画像を図に示します。これらの画像は、ボトルの変形や紙のしわなど、リサイクルされた家庭ごみの状態をよりよく表現できます。各クラスには約500〜900枚の画像があり、各写真の照明とポーズは異なり、画像の強調技術が各画像に対して実行されます。これらの手法には、画像のランダムな回転、ランダムな明るさの制御、ランダムな平行移動、ランダムなスケーリング、ランダムなせん断が含まれます。変換された画像は、リサイクルされた材料のさまざまな方向を考慮し、データセットのサイズを最大化するために選択されました。

2.実験的トレーニング

        モデルのトレーニングとテストは、Matlab2019aのディープラーニングフレームワークの下で行われます。ハードウェア環境:Intel [email protected] CPU、32GBメモリ、Nvidia RTX2070 GPU、8GBビデオメモリ。ソフトウェア環境:CUDA Toolkit 9.0、CUDNN V7.0、Matlab Deep Learning Toolbox、Windows1064ビットオペレーティングシステム。モデルのトレーニングとテストはGPUによって高速化されます。転移学習モデルのトレーニングには、主にエポック、バッチサイズ、学習率のパラメーターがあります。

  1. エポック:エポックとは、すべてのデータをネットワークに送信して、順方向の計算とバックプロパゲーションを完了するプロセスを指します。エポックの数が増えると、ニューラルネットワークでの重みの更新の反復回数が増えます。
  2. バッチサイズ:バッチは、毎回トレーニングのためにネットワークに送信されるデータの一部であり、バッチサイズは、各バッチのトレーニング画像サンプルの数です。メモリ効率とメモリ容量の最適なバランスを見つけるには、ネットワークモデルのパフォーマンスと速度を最適化するようにバッチサイズを慎重に設定する必要があります。
  3. 学習率:深層学習では、トレーニングサンプルの認識精度を決定する重要なパラメータです。適切な学習率により、トレーニングサンプルの認識精度を適切な時間で理想的な値に到達させることができます。リサイクル可能な家庭ごみデータセットの各カテゴリの写真の70%は、トレーニングセットとしてランダムに分割され、残りの30%はテストセットとして分割されます。上記の3つのパラメータが3つの異なる値をとると、合計27回の実験が完了します。各パラメータの組み合わせの効果を包括的に評価するため。精度と時間のかかるスコアは、精度と時間のかかるスコアとして正規化され、精度と時間のかかるスコアは、それぞれ0.6と0.4で重み付けされ、平均化されます。包括的なスコアが利用可能です。総合スコアによると、エポック、バッチサイズ、学習率のパラメータの組み合わせが(5、32、10'3)と(10、32、10.3)の場合、転移学習の効果が最も高いことがわかります。 。NtJllトレーニングプロセスで発生する可能性のあるランダムエラーを考慮して、2つの組み合わせ(5、32、10.3)と(10、32、10'3)について、実験を4回繰り返すと、表2の実験データを取得できます。 。これら2つのパラメータの組み合わせによって得られる伝達モデルの精度は比較的近いことがわかりますが、(5、32、10)の組み合わせのトレーニング時間は(10 、32、10。)。図4と図5は、2つの組み合わせたトレーニングのプロセス曲線です。バッチサイズと学習率が適切な値を取得すると、エポックの増加によってある程度精度が向上することがわかります。

3.実験コード

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] Ning Kai、ZhangDongbo。視覚に基づくインテリジェントスイープロボットのゴミ検出と分類[J]。

[2] Liu Yaxuan、PanWanbin。セルフトレーニングに基づく長期ごみ分類方法[J]。

詳細については、1341703358をクリックしてください。将来的には、リサイクル可能なごみ画像データセットをさらに充実させ、混合ごみ画像の分類と認識モデルを確立して、リサイクル可能なごみ画像モデルの認識精度をさらに向上させる必要があります。

おすすめ

転載: blog.csdn.net/Jiangtagong/article/details/124197943