一、简介
matlab基于CNN卷积神经网络表情识别,卷积神经网络(CNN) 作为深度学习的一-种,特别适合处理图像数据。在表情识别中,CNN能够自动提取图像中的特征,并且对于平移、缩放和旋转等形变具有一定的鲁棒性。相比传统的图像处理技术,CNN能够更好地捕捉人脸表情的细微变化,从而提高识别的准确度。随着情感计算和人机交互等领域的快速发展,基于CNN的表情识别系统在实际应用中显示出巨大的潜力和价值。
二、部分源码
clear;clc;
%% 加载数据
allImages = imageDatastore('jaffe', ...
'IncludeSubfolders' ,true, ...
'LabelSource' , 'foldernames' );% 图像加载为图像数据存储
% imageDatastore函数会根据文件夹名称自动标记图像
% 划分训练集(80%)和测试集(20%)
[imgsTrain,imgsTest] = splitEachLabel(allImages,0.8,'randomized');% 显示训练集和测试集的数量
disp(['Number of training images: ',num2str(numel(imgsTrain.Files))]);
disp(['Number of validation images: ',num2str(numel(imgsTest.Files))]);% 构建CNN
layers = [ ...
imageInputLayer([256 256 3]) % 图像输入层,输入维度为256*256*3
maxPooling2dLayer([3 3],'Stride',2) % 池化核大小、步长
convolution2dLayer([5 5],16)
batchNormalizationLayer
reluLayer
maxPooling2dLayer([3 3],'Stride',2)
convolution2dLayer([5 5],16)
batchNormalizationLayer
reluLayer
maxPooling2dLayer([3 3],'Stride',2)
convolution2dLayer([3 3],32)
batchNormalizationLayer
reluLayer
softmaxLayer
classificationLayer]; % 分类层
options = trainingOptions('sgdm', ...% 使用sgdm优化器
'ExecutionEnvironment','auto', ...% 自动选择运行环境,无GPU自动选CPU,有GPU自动选GPU
'MaxEpochs',25,...% 批量
'MiniBatchSize',20, ... % 每批的数据量
'GradientThreshold',1, ...% 梯度阈值
%% 开始训练
CNNnet = trainNetwork(imgsTrain,layers,options);
save CNNnet CNNnet;
%% 测试集
y_pred = classify(CNNnet,imgsTest); % 使用训练好的网络测试
%% 计算每类的准确率
y1 = categorical("anger"); y2 = categorical("disgust"); y3 = categorical("fear");
y4 = categorical("happiness"); y5 = categorical("neutral"); y6 = categorical("sadness");
y7 = categorical("surprise");
anger = 0; disgust = 0; fear = 0; happiness = 0; neutral = 0; sadness = 0; surprise = 0;
三、运行结果
四、matlab版本
MATLAB R2019a
五、学习与交流
文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信