1.算法仿真效果
matlab2022a仿真結(jié)果如下:








2.算法涉及理論知識概要
基于深度學習網(wǎng)絡(luò)的動物識別系統(tǒng)是一種利用深度學習技術(shù)來進行動物識別和定位的系統(tǒng)。這種系統(tǒng)的工作原理是,通過使用深度神經(jīng)網(wǎng)絡(luò)對圖像或視頻進行分析,以識別出其中的動物并確定其位置。
深度學習網(wǎng)絡(luò),特別是卷積神經(jīng)網(wǎng)絡(luò)(CNN),是這個系統(tǒng)的核心。CNN是一種特別適合處理圖像數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò),其通過一系列的卷積層、池化層和全連接層來提取和識別圖像中的特征。對于動物識別系統(tǒng),CNN需要被訓練來識別各種動物的特征,包括形狀、顏色、紋理等。
系統(tǒng)的訓練過程通常需要大量的圖像數(shù)據(jù)。首先,需要收集各種動物的圖像,包括各種角度、光線、背景等。這些圖像經(jīng)過預(yù)處理后,會被用作訓練集來訓練CNN。訓練的過程是通過反復迭代輸入圖像和對應(yīng)的標簽,不斷調(diào)整CNN的權(quán)重,以使得CNN在給定的任務(wù)(動物識別)上達到最佳的性能。
訓練好的CNN模型可以識別出訓練集中出現(xiàn)的動物,并且能夠?qū)⑵湓趫D像中的位置標注出來。這個過程涉及到圖像分割和物體檢測技術(shù)。一般來說,CNN會輸出一個包含動物位置的邊界框(bounding box)和一個動物的分類標簽。
訓練好的模型可以集成到各種應(yīng)用程序中,如攝像頭監(jiān)控系統(tǒng)、圖像編輯軟件、游戲、安全系統(tǒng)等。用戶可以通過上傳圖片或視頻,或者使用實時攝像頭來獲取動物識別和定位的結(jié)果。系統(tǒng)還可以提供可視化結(jié)果,比如將識別出的動物標注在原圖上,或者生成一個包含動物信息的表格。
總的來說,基于深度學習網(wǎng)絡(luò)的動物識別系統(tǒng)是一種強大的工具,可以幫助人們更好地理解和保護動物,同時也為科研、安全、娛樂等領(lǐng)域提供了新的可能性。
CNN模型通常包括以下幾個主要部分:
(1) 輸入層:用于接收輸入的圖像數(shù)據(jù)。
(2) 卷積層:通過一系列的卷積操作來提取圖像的特征。
(3) 池化層:對特征進行降采樣,以減少計算量和避免過擬合。
(4) 全連接層:將提取的特征用于最終的分類和定位任務(wù)。
損失函數(shù)和優(yōu)化器
在訓練CNN模型時,需要定義一個損失函數(shù)來衡量模型的錯誤程度。常用的損失函數(shù)包括交叉熵損失(用于分類任務(wù))和均方誤差損失(用于回歸任務(wù))。優(yōu)化器則用于更新模型的權(quán)重,以使得損失函數(shù)最小化。常見的優(yōu)化器包括隨機梯度下降(SGD)、Adam等。
數(shù)據(jù)增強和預(yù)處理
為了提高模型的性能,通常需要對訓練數(shù)據(jù)進行增強和預(yù)處理。數(shù)據(jù)增強可以通過旋轉(zhuǎn)、縮放、裁剪等操作來增加數(shù)據(jù)量。預(yù)處理則包括歸一化、去噪等操作,以使得數(shù)據(jù)更符合模型的輸入要求。
模型優(yōu)化技術(shù)
為了進一步提高模型的性能,可以采用一些優(yōu)化技術(shù),如批量標準化(Batch Normalization)、dropout(用于防止過擬合)、早停(early stopping)等。
目標檢測算法
在進行動物定位任務(wù)時,可能需要使用到一些目標檢測算法,如YOLO、Faster R-CNN等。這些算法可以在圖像中檢測出物體的位置和類別,為動物識別系統(tǒng)提供輸入。
3.MATLAB核心程序
% --- Executes just before tops is made visible.
function tops_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 tops (see VARARGIN)
% Choose default command line output for tops
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes tops wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = tops_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 im;
global Predicted_Label;
cla (handles.axes1,'reset')
axes(handles.axes1);
set(handles.edit2,'string',num2str(0));
load gnet.mat
[filename,pathname]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'選擇一個圖片','F:\test');
str=[pathname filename];
% 判斷文件是否為空,也可以不用這個操作!直接讀入圖片也可以的
% im = imread(str);
% imshow(im)
if isequal(filename,0)||isequal(pathname,0)
warndlg('please select a picture first!','warning');
return;
else
im = imread(str);
imshow(im);
end
II(:,:,1) = imresize(im(:,:,1),[224,224]);
II(:,:,2) = imresize(im(:,:,2),[224,224]);
II(:,:,3) = imresize(im(:,:,3),[224,224]);
[Predicted_Label, Probability] = classify(net, II);
% --- 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 im;
% ?
%
%
% [Predicted_Label, Probability] = classify(net, II);
% imshow(im);
% ?
global im;
global Predicted_Label;
set(handles.edit2,'string',Predicted_Label);
% --- Executes on button press in pushbutton3.
% --- 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)
clc;
clear;
close all;
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
function edit5_Callback(hObject, eventdata, handles)
% hObject ???handle to edit5 (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 edit5 as text
% ???????str2double(get(hObject,'String')) returns contents of edit5 as a double
% --- Executes during object creation, after setting all properties.
function edit5_CreateFcn(hObject, eventdata, handles)
% hObject ???handle to edit5 (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 edit6_Callback(hObject, eventdata, handles)
% hObject ???handle to edit6 (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 edit6 as text
% ???????str2double(get(hObject,'String')) returns contents of edit6 as a double
% --- Executes during object creation, after setting all properties.
function edit6_CreateFcn(hObject, eventdata, handles)
% hObject ???handle to edit6 (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)
Name1 ??= get(handles.edit7, 'String');
NEpochs = str2num(get(handles.edit8, 'String'));
NMB ????= str2num(get(handles.edit9, 'String'));
LR ?????= str2num(get(handles.edit10, 'String'));
Rate ???= str2num(get(handles.edit11, 'String'));
% 使用 imageDatastore 加載圖像數(shù)據(jù)集
Dataset = imageDatastore(Name1, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
% 將數(shù)據(jù)集分割為訓練集、驗證集和測試集
[Training_Dataset, Validation_Dataset, Testing_Dataset] = splitEachLabel(Dataset, Rate, (1-Rate)/2, (1-Rate)/2);
% 加載預(yù)訓練的 GoogleNet 網(wǎng)絡(luò)
load googlenet.mat
% 獲取輸入層的大小
Input_Layer_Size = net.Layers(1).InputSize(1:2);
% 將圖像數(shù)據(jù)集調(diào)整為預(yù)訓練網(wǎng)絡(luò)的輸入尺寸
Resized_Training_Dataset ??= augmentedImageDatastore(Input_Layer_Size ,Training_Dataset);
Resized_Validation_Dataset = augmentedImageDatastore(Input_Layer_Size ,Validation_Dataset);
Resized_Testing_Dataset ???= augmentedImageDatastore(Input_Layer_Size ,Testing_Dataset);
...............................................................................