【步态识别】基于CNN、步态能量图+HOG特征提取的步态识别算法的MATLAB仿真
生活随笔
收集整理的這篇文章主要介紹了
【步态识别】基于CNN、步态能量图+HOG特征提取的步态识别算法的MATLAB仿真
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??? 卷積層的結構如下所示:
具體可以看如下的網址:
這個是傳統的卷積神經網絡。我們按這個進行設計。仿真結果如下:
?他的識別率為88.89%。
然后我這里介紹下我們的改進思路,改進思路如下所示:
此外, 影響卷積網絡的參數主要為學習率的設置,然后我們通過WOA優化算法計算最優的學習率。關于WOA的原理,請參考文獻:
?這個部分,將得到的最優的學習率為:0.0408
訓練過程為:
?通過測試可以知道,
GRNN識別率為80%
CNN的識別率為88.89%
基于改進CNN,識別率為:95.56%
部分核心代碼如下:
clc; clear; close all; warning off; addpath 'subfunc\'rng(1); digitDatasetPath = ['步態能量圖\']; imds = imageDatastore(digitDatasetPath,'IncludeSubfolders', true, 'LabelSource', 'foldernames');%劃分數據為訓練集合驗證集,訓練集中每個類別包含1張圖像,驗證集包含其余圖像的標簽 numTrainFiles = 1;%設置每個類別的訓練個數 [imdsTrain, imdsValidation] = splitEachLabel(imds, numTrainFiles, 'randomize');%定義卷積神經網絡的基礎結構 layers = [imageInputLayer([400 150 1]);%注意,400,150為能量圖的大小,不能改%第1個卷積層convolution2dLayer(3, 8, 'Padding', 'same');%第一個卷積層batchNormalizationLayer;%第1個激勵層reluLayer;%第1個池化層maxPooling2dLayer(2, 'Stride', 2);%第2個卷積層convolution2dLayer(3, 8, 'padding', 'same');batchNormalizationLayer;%第2個激勵層reluLayer;%第2個池化層maxPooling2dLayer(2, 'Stride', 2);%第3個卷積層convolution2dLayer(3, 16, 'Padding', 'same');batchNormalizationLayer;%第3個激勵層reluLayer;%第3個池化層maxPooling2dLayer(2, 'Stride', 2);%全連接層1fullyConnectedLayer(5);%softmaxsoftmaxLayer;%輸出分類結果classificationLayer;]; %設置訓練參數Num = 10; %搜索數量 Iters = 10; %迭代次數 D = 1; %搜索空間維數 woa_idx = zeros(1,D); woa_get = inf; %初始化種群的個體 %初始化種群的個體 Xmin = 0; Xmax = 1; xwoa=rand(Num,D); for t=1:Iterstfor i=1:Num%目標函數更新[pa(i)] = fitness(xwoa(i,:),imdsTrain, imdsValidation,layers);Fitout = pa(i);%更新if Fitout < woa_get woa_get = Fitout; woa_idx = xwoa(i,:);endend%調整參數c1 = 2-t*((1)/Iters); c2 =-1+t*((-1)/Iters); % w = 0.1+0.8*(cos(std(pa)));%位置更新for i=1:Numrng(i);r1 = rand();r2 = rand();K1 = 2*c1*r1-c1; K2 = 2*r2; l =(c2-1)*rand + 1; rand_flag = rand(); if rand_flag<0.5 if abs(K1)>=1RLidx = floor(Num*rand()+1);X_rand = xwoa(RLidx, :);D_X_rand = abs(K2*X_rand(1:D)-xwoa(i,1:D)); xwoa(i,1:D)= X_rand(1:D)-K1*D_X_rand; elseD_Leader = abs(K2*woa_idx(1:D)-xwoa(i,1:D)); xwoa(i,1:D)= woa_idx(1:D)-K1*D_Leader; endelsedistLeader = abs(woa_idx(1:D)-xwoa(i,1:D));xwoa(i,1:D) = distLeader*exp(l).*cos(l.*2*pi)+woa_idx(1:D);endend[pb] = fitness(woa_idx,imdsTrain, imdsValidation,layers); end rng(1); options = trainingOptions('sgdm', ...'InitialLearnRate', abs(woa_idx/5), ...'MaxEpochs', 200, ...'Shuffle', 'every-epoch', ...'ValidationData', imdsValidation, ...'ValidationFrequency', 10, ...'Verbose', false, ...'Plots', 'training-progress');%使用訓練集訓練網絡 net = trainNetwork(imdsTrain, layers, options);%對驗證圖像進行分類并計算精度 YPred = classify(net, imdsValidation); YValidation = imdsValidation.Labels;accuracy = sum(YPred == YValidation) / numel(YValidation); accuracy運行結果如下:
?
A05-77
總結
以上是生活随笔為你收集整理的【步态识别】基于CNN、步态能量图+HOG特征提取的步态识别算法的MATLAB仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【步态识别】基于CNN深度学习的步态识别
- 下一篇: 基于CASIA-GaitDatasetB