日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【步态识别】基于CNN、步态能量图+HOG特征提取的步态识别算法的MATLAB仿真

發布時間:2025/4/5 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【步态识别】基于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仿真的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。