Klasifikasi Jenis Kendaraan Menggunakan Algoritma Extreme Learning Machine
Extreme Learning Machine (ELM) merupakan jenis jaringan syaraf tiruan dengan satu lapisan tersembunyi yang biasa disebut dengan single hidden layer feedforward neural network (SLNs). Metode ini memiliki kecepatan pembelajaran yang lebih cepat dibandingkan metode jaringan syaraf tiruan konvensional seperti backpropagation.
Contoh arsitektur jaringan syaraf tiruan Extreme Learning Machine ditunjukkan pada gambar di bawah ini
Berikut ini merupakan contoh aplikasi pengolahan citra untuk mengklasifikasikan jenis kendaraan menggunakan algoritma jaringan syaraf tiruan Extreme Learning Machine. Jenis kendaraan yang diklasifikasikan adalah mobil, motor, dan sepeda. Ketiga jenis kendaraan tersebut dibedakan berdasarkan pada ciri morfologi menggunakan nilai area, perimeter, eccentricity, major axis length, dan minor axis length. Contoh citra kendaraan pada masing-masing kelas ditunjukkan pada gambar berikut
Algoritma dan pemrograman matlab untuk klasifikasi jenis kendaraan adalah sebagai berikut:
1. Proses pelatihan
a. Membaca citra pada data latih (terdiri dari 10 citra mobil, 10 citra motor, dan 10 citra sepeda)
b. Melakukan transformasi ruang warna dari citra rgb menjadi citra hsv
c. Melakukan segmentasi citra menggunakan metode thresholding
d. Melakukan operasi morfologi untuk menyempurnakan hasil segmentasi
e. Melakukan ekstraksi ciri morfologi berdasarkan nilai area, perimeter, eccentricity, major axis length, dan minor axis length
f. Melakukan pelatihan jaringan
g. Menghitung akurasi pelatihan
Source code yang digunakan untuk proses pelatihan adalah
clc; clear; close all; %%% Pelatihan % menetapkan lokasi folder data latih nama_folder = 'data latih'; % membaca nama file yang berformat jpg nama_file = dir(fullfile(nama_folder,'*.jpg')); % menghitung jumlah file yang dibaca jumlah_file = numel(nama_file); % menginisialisasi variabel ciri ciri = zeros(jumlah_file,5); kelas = zeros(jumlah_file,1); % melakukan ekstraksi ciri terhadap seluruh file yang dibaca for n = 1:jumlah_file % membaca file citra Img = imread(fullfile(nama_folder,nama_file(n).name)); % mengkonversi ruang warna citra rgb menjadi hsv hsv = rgb2hsv(Img); % mengekstrak komponen v v = hsv(:,:,3); % melakukan thresholding terhadap komponen value bw = im2bw(v,0.9); % melakukan median filtering bw = medfilt2(~bw,[5,5]); % melakukan operasi morfologi filling holes bw = imfill(bw,'holes'); % melakukan operasi morfologi area opening bw = bwareaopen(bw,1000); % melakukan operasi morfologi closing str = strel('square',10); bw = imdilate(bw,str); % melakukan ekstraksi ciri terhadap citra biner hasil thresholding s = regionprops(bw, 'all'); area = cat(1, s.Area); perimeter = cat(1, s.Perimeter); eccentricity = cat(1, s.Eccentricity); mayor = cat(1, s.MajorAxisLength); minor = cat(1, s.MinorAxisLength); % menyusun variabel ciri ciri(n,1) = area; ciri(n,2) = perimeter; ciri(n,3) = eccentricity; ciri(n,4) = mayor; ciri(n,5) = minor; end % menetapkan kelas target latih kelas(1:10) = 1; kelas(11:20) = 2; kelas(21:30) = 3; % menyusun data latih data_training = [kelas,ciri]; % menyusun parameter2 elm NumberofInputNeurons = 5; NumberofHiddenNeurons = 60; % bobot diinisialisasi secara random % InputWeight = rand(NumberofHiddenNeurons,NumberofInputNeurons)*2-1; % BiasofHiddenNeurons = rand(NumberofHiddenNeurons,1); % bobot ditetapkan di awal load bobot_awal Elm_Type = 1; ActivationFunction = 'sin'; % pelatihan elm [~, ~, ~, ~, predicted_class] = ... ELM(data_training, data_training, ... InputWeight, BiasofHiddenNeurons, Elm_Type,... ActivationFunction); % menghitung akurasi pelatihan [~,n] = find(predicted_class==kelas); akurasi = numel(n)/jumlah_file*100; disp(['akurasi pelatihan = ',num2str(akurasi),'%']) % menyimpan variabel2 pelatihan save('net','data_training','InputWeight','BiasofHiddenNeurons',... 'Elm_Type','ActivationFunction')
Akurasi pelatihan yang diperoleh adalah sebesar
2. Proses pengujian
a. Membaca citra pada data uji (terdiri dari 4 citra mobil, 3 citra motor, dan 5 citra sepeda)
b. Melakukan transformasi ruang warna dari citra rgb menjadi citra hsv
c. Melakukan segmentasi citra menggunakan metode thresholding
d. Melakukan operasi morfologi untuk menyempurnakan hasil segmentasi
e. Melakukan ekstraksi ciri morfologi berdasarkan nilai area, perimeter, eccentricity, major axis length, dan minor axis length
f. Melakukan pengujian jaringan
g. Menghitung akurasi pengujian
Source code yang digunakan untuk proses pengujian adalah
%%% Pengujian % menetapkan lokasi folder data uji nama_folder = 'data uji'; % membaca nama file yang berformat jpg nama_file = dir(fullfile(nama_folder,'*.jpg')); % menghitung jumlah file yang dibaca jumlah_file = numel(nama_file); % menginisialisasi variabel ciri ciri = zeros(jumlah_file,5); kelas = zeros(jumlah_file,1); % melakukan ekstraksi ciri terhadap seluruh file yang dibaca for n = 1:jumlah_file % membaca file citra Img = imread(fullfile(nama_folder,nama_file(n).name)); % mengkonversi ruang warna citra rgb menjadi hsv hsv = rgb2hsv(Img); % mengekstrak komponen v v = hsv(:,:,3); % melakukan thresholding terhadap komponen value bw = im2bw(v,0.9); % melakukan median filtering bw = medfilt2(~bw,[5,5]); % melakukan operasi morfologi filling holes bw = imfill(bw,'holes'); % melakukan operasi morfologi area opening bw = bwareaopen(bw,1000); % melakukan operasi morfologi closing str = strel('square',10); bw = imdilate(bw,str); % melakukan ekstraksi ciri terhadap citra biner hasil thresholding s = regionprops(bw, 'all'); area = cat(1, s.Area); perimeter = cat(1, s.Perimeter); eccentricity = cat(1, s.Eccentricity); mayor = cat(1, s.MajorAxisLength); minor = cat(1, s.MinorAxisLength); % menyusun variabel ciri ciri(n,1) = area; ciri(n,2) = perimeter; ciri(n,3) = eccentricity; ciri(n,4) = mayor; ciri(n,5) = minor; end % menetapkan kelas target uji kelas(1:4) = 1; kelas(5:7) = 2; kelas(8:12) = 3; % menyusun data uji data_testing = [kelas,ciri]; % pengujian elm [~, ~, ~, ~, predicted_class] = ... ELM(data_training, data_testing, ... InputWeight, BiasofHiddenNeurons, Elm_Type,... ActivationFunction); % menghitung akurasi pelatihan [~,n] = find(predicted_class==kelas); akurasi = numel(n)/jumlah_file*100; disp(['akurasi pengujian = ',num2str(akurasi),'%'])
Akurasi pengujian yang diperoleh adalah sebesar
3. Pembuatan GUI MATLAB
Source code yang digunakan untuk dalam pembuatan GUI MATLAB adalah
function varargout = main_program(varargin) % MAIN_PROGRAM MATLAB code for main_program.fig % MAIN_PROGRAM, by itself, creates a new MAIN_PROGRAM or raises the existing % singleton*. % % H = MAIN_PROGRAM returns the handle to a new MAIN_PROGRAM or the handle to % the existing singleton*. % % MAIN_PROGRAM('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in MAIN_PROGRAM.M with the given input arguments. % % MAIN_PROGRAM('Property','Value',...) creates a new MAIN_PROGRAM or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before main_program_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to main_program_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_program % Last Modified by GUIDE v2.5 03-Apr-2019 12:48:18 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @main_program_OpeningFcn, ... 'gui_OutputFcn', @main_program_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_program is made visible. function main_program_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_program (see VARARGIN) % Choose default command line output for main_program handles.output = hObject; % Update handles structure guidata(hObject, handles); movegui(hObject, 'center'); % UIWAIT makes main_program wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = main_program_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) % menampilkan menu browse file [filename,pathname] = uigetfile({'*.jpg'}); % jika ada file yg dipilih maka mengeksekusi perintah2 yg ada di bawahnya if ~isequal(filename,0) % mereset button2 axes(handles.axes1) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes2) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes3) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes4) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) set(handles.uitable1,'Data',[],'ForegroundColor',[0 0 0]) set(handles.edit1,'String','') set(handles.edit2,'String','') set(handles.pushbutton2,'Enable','on') set(handles.pushbutton3,'Enable','off') set(handles.pushbutton4,'Enable','off') set(handles.pushbutton5,'Enable','off') % membaca file citra Img = imread(fullfile(pathname,filename)); % menampilkan citra pada axes axes(handles.axes1) imshow(Img) title('Citra RGB') % menampilkan nama file citra pada edit text set(handles.edit1,'String',filename) % menyimpan variabel Img pada lokasi handles agar dapat dipanggil oleh % pushbutton yg lain handles.Img = Img; guidata(hObject, handles) else return end % --- 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) % mereset button2 axes(handles.axes2) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes3) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes4) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) set(handles.uitable1,'Data',[],'ForegroundColor',[0 0 0]) set(handles.edit2,'String','') set(handles.pushbutton3,'Enable','on') set(handles.pushbutton4,'Enable','off') set(handles.pushbutton5,'Enable','off') % memanggil variabel Img yang ada di lokasi handles Img = handles.Img; % mengkonversi ruang warna citra rgb menjadi hsv hsv = rgb2hsv(Img); % menampilkan citra pada axes axes(handles.axes2) imshow(hsv) title('Citra HSV') % menyimpan variabel hsv pada lokasi handles agar dapat dipanggil oleh % pushbutton yg lain handles.hsv = hsv; guidata(hObject, handles) % --- 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) % mereset button2 axes(handles.axes3) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes4) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) set(handles.uitable1,'Data',[],'ForegroundColor',[0 0 0]) set(handles.edit2,'String','') set(handles.pushbutton4,'Enable','on') set(handles.pushbutton5,'Enable','off') % memanggil variabel hsv yang ada di lokasi handles hsv = handles.hsv; % mengekstrak komponen v v = hsv(:,:,3); % melakukan thresholding terhadap komponen value bw = im2bw(v,0.9); % menampilkan citra pada axes axes(handles.axes3) imshow(bw) title('Citra Biner') % menyimpan variabel bw pada lokasi handles agar dapat dipanggil oleh % pushbutton yg lain handles.bw = bw; guidata(hObject, handles) % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % mereset button2 axes(handles.axes4) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) set(handles.uitable1,'Data',[],'ForegroundColor',[0 0 0]) set(handles.edit2,'String','') set(handles.pushbutton5,'Enable','on') % memanggil variabel bw yang ada di lokasi handles bw = handles.bw; % melakukan median filtering bw = medfilt2(~bw,[5,5]); % melakukan operasi morfologi filling holes bw = imfill(bw,'holes'); % melakukan operasi morfologi area opening bw = bwareaopen(bw,1000); % melakukan operasi morfologi closing str = strel('square',10); bw = imdilate(bw,str); % melakukan ekstraksi ciri terhadap citra biner hasil thresholding s = regionprops(bw, 'all'); area = cat(1, s.Area); perimeter = cat(1, s.Perimeter); eccentricity = cat(1, s.Eccentricity); mayor = cat(1, s.MajorAxisLength); minor = cat(1, s.MinorAxisLength); % menyusun variabel ciri ciri = [area,perimeter,eccentricity,mayor,minor]; format long % menampilkan citra pada axes axes(handles.axes4) imshow(bw) title('Hasil Operasi Morfologi') % menampilkan hasil ekstraksi ciri pada tabel data = cell(5,2); data{1,1} = 'Area'; data{2,1} = 'Perimeter'; data{3,1} = 'Eccentricity'; data{4,1} = 'Major Axis Length'; data{5,1} = 'Minor Axis Length'; data{1,2} = area; data{2,2} = perimeter; data{3,2} = eccentricity; data{4,2} = mayor; data{5,2} = minor; set(handles.uitable1,'Data',data,'RowName',1:5) % menyimpan variabel ciri pada lokasi handles agar dapat dipanggil oleh % pushbutton yg lain handles.ciri = ciri; guidata(hObject, handles) % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % mereset button2 set(handles.edit2,'String','') % memanggil variabel ciri yang ada di lokasi handles ciri = handles.ciri; % menyusun data testing data_testing = [1,ciri]; % load variabel net load net % mengujikan data uji pada jaringan elm hasil pelatihan [~, ~, ~, ~, predicted_class] = ... ELM(data_training, data_testing, ... InputWeight, BiasofHiddenNeurons, Elm_Type,... ActivationFunction); % mengubah nilai keluaran menjadi kelas keluaran switch predicted_class case 1 kelas = 'mobil'; case 2 kelas = 'motor'; case 3 kelas = 'sepeda'; otherwise kelas = 'tidak dikenali'; end % menampilkan hasil klasifikasi pada edit text set(handles.edit2,'String',kelas) function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double % --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double % --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % mereset button2 axes(handles.axes1) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes2) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes3) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes4) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) set(handles.uitable1,'Data',[],'ForegroundColor',[0 0 0]) set(handles.edit1,'String','') set(handles.edit2,'String','') set(handles.pushbutton2,'Enable','off') set(handles.pushbutton3,'Enable','off') set(handles.pushbutton4,'Enable','off') set(handles.pushbutton5,'Enable','off')
Tampilan GUI Matlab yang dihasilkan oleh algoritma dan pemrograman di atas adalah sebagai berikut:
Klasifikasi jenis kendaraan untuk kelas mobil
Klasifikasi jenis kendaraan untuk kelas motor
Klasifikasi jenis kendaraan untuk kelas sepeda
Tingginya nilai akurasi yang dihasilkan dari proses pelatihan dan pengujian menunjukkan bahwa algoritma jaringan syaraf tiruan extreme learning machine sangat baik diimplementasikan untuk melakukan klasifikasi jenis kendaraan.
File source code lengkap beserta citra pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source code
Posted on April 3, 2019, in Data mining, Pengenalan Pola, Pengolahan Citra and tagged algoritma extreme learning machine, aplikasi extreme learning machine, aplikasi jaringan syaraf tiruan, jaringan syaraf tiruan extreme learning machine, metode extreme learning machine, metode klasifikasi citra, metode klasifikasi extreme learning machine, penerapan jaringan syaraf tiruan. Bookmark the permalink. 13 Comments.
Kak bkin contoh implementasi Ekstraksi ciri citra menggunakan Zoning dong
Semoga ke depan terdapat materi mengenai ekstraksi ciri citra menggunakan zoning
Kak, untuk Extreme Learning Machine di Matlab memakai epoch atau learning rate atau tidak ya? Soalnya saya lihat ELM menggunakan C# ada epoch dan learning rate nya. Terimakasih.
Assalamu’alaikum kak, mohon maaf menggamggu waltunya. saya mau tanya lagi kak tentang program njenengan yang ini kak
[~, ~, ~, ~, predicted_class] = …
ELM(data_training, data_testing, …
InputWeight, BiasofHiddenNeurons, Elm_Type,…
ActivationFunction);
Tanda “~” itu apa ya kak?
Terima kasih kak
Waalaikumsalam
Tanda tersebut artinya adalah tidak digunakan
“Subscripted assignment dimension mismatch.” mas saya coba codenya, kok error seperti ini ya?
Source code lengkap bisa dibeli melalui tokopedia sehingga bisa langsung dirun tanpa error dan bisa dikembangkan lebih lanjut
Halo kak, ini kan hasil ekstraksi fitur saya tersimpan dalam bentuk file xls. saya load untuk elm, caranya mendefinisikan kelas dan ciri untuk kolom dan bars dari file xls nya gimana ya?
dicoba menggunakan perintah xlsread
Ko saya di data latih line 40 salah trus ya ka, sdh tak ikutin padahal, di variabel ciri (n,1) area
Source code lengkap bisa dibeli melalui tokopedia sehingga bisa dijalankan tanpa ada error
Error using app_klasifikasi_telur
File: app_klasifikasi_telur.mlapp Line: 82 Column: 27
Invalid use of operator.
itu kenapa ya kak? saya mengikuti tutorial klasifikasi biji kopi tapi saya ubah menjadi telur kak