【MATLAB第49期】基于MATLAB的深度学习ResNet-18网络不平衡图像数据分类识别模型

简介: 【MATLAB第49期】基于MATLAB的深度学习ResNet-18网络不平衡图像数据分类识别模型

MATLAB第49期】基于MATLAB的深度学习ResNet-18网络不平衡图像数据分类识别模型


一、基本介绍


这篇文章展示了如何使用不平衡训练数据集对图像进行分类,其中每个类的图像数量在类之间不同。两种最流行的解决方案是down-sampling降采样和over-sampling过采样。


在降采样中,每个类别的图像数量减少到所有类别中的最小图像数量。降采样的实现很容易:只需使用splitEachLabel函数并指定类的最小数量,


另一方面,当执行过采样时,每个类别的图像数量增加。这两种策略对于不平衡的数据集都是有效的。然而,过采样需要更复杂的过程。


本篇文章采用过采样平衡数据

       Label        Count
_____________    _____
caesar_salad       13 
caprese_salad       8 
french_fries       91 
greek_salad        12 
hamburger         119 
hot_dog            16 
pizza             150 
sashimi            20 
sushi              62 


过采样结果:

Label        Count
_____________    _____
caesar_salad      150 
caprese_salad     150 
french_fries      150 
greek_salad       150 
hamburger         150 
hot_dog           150 
pizza             150 
sashimi           150 
sushi             150 

二、数据情况

食品图像数据集包含九类食物的978张照片(ceaser_salad、caprese_salad,french_fries、greek_saland、汉堡包、hot_dog、披萨、生鱼片和寿司)。数据集可在下列地址下载

https://www.mathworks.com/supportfiles/nnet/data/ExampleFoodImageDataset.zip

本文为了提高运行速度 ,选择80%训练, 10%验证,10%测试。


三、代码展示

1.导入数据

imds = imageDatastore('ExampleFoodImageDataset');

2.图像数据展示

numExample=16;
idx = randperm(numel(imds.Files),numExample);
for i=1:numExample
    I=readimage(imds,idx(i));
    I_tile{i}=insertText(I,[1,1],string(imds.Labels(idx(i))),'FontSize',20);
end
% use imtile function to tile out the example images
I_tile = imtile(I_tile);
figure()
imshow(I_tile);title('examples of the dataset')

3.数据集划分 (训练80%,验证10%,测试10%)

[imdsTrain, imdsValid,imdsTest]=splitEachLabel(imds,0.8,0.1,0.1);

4.选取最大样本数

PerClass是所有类中的最大样本数。

PerClass = max(numObservations);

5.平衡数据

randReplicateFiles是一个仅对文件进行混洗的支持功能。

要选择的图像数量由PerClass定义。从数据库中找到不同类别的图像目录,然后随机复制对应的图像至对应的数量,以平衡类中的图像数量。

files = splitapply(@(x){randReplicateFiles(x,desiredNumObservationsPerClass)},imdsTrain.Files,G);

6.构建网络

加载预先训练的模型,ResNet-18

net = resnet18;
inputSize = net.Layers(1).InputSize;
lgraph = layerGraph(net);
learnableLayer='fc1000';
classLayer='ClassificationLayer_predictions';

7.图像增强

定义图像增强器
pixelRange = [-30 30];
RotationRange = [-30 30];
scaleRange = [0.8 1.2];
imageAugmenter = imageDataAugmenter( ...
    'RandXReflection',true, ...
    'RandXTranslation',pixelRange, ...
    'RandYTranslation',pixelRange, ...
    'RandXScale',scaleRange, ...
    'RandYScale',scaleRange, ...
    'RandRotation',RotationRange ...
    ); 

8.设置网络参数

miniBatchSize = 64;
valFrequency = max(floor(numel(augimdsTest.Files)/miniBatchSize)*10,1);
options = trainingOptions('sgdm', ...
    'MiniBatchSize',miniBatchSize, ...
    'MaxEpochs',5, ...%30
    'InitialLearnRate',1e-2, ...%3e-4
    'Shuffle','every-epoch', ...
    'ValidationData',augimdsValid, ...
    'ValidationFrequency',valFrequency, ...
    'Verbose',false, ...
    'Plots','training-progress');

9.训练网络

net = trainNetwork(augimdsTrain,lgraph,options);

10.分类评估

[YPred,probs] = classify(net,augimdsTest);
accuracy = mean(YPred == imdsTest.Labels)
YValidation = imdsTest.Labels;
YTrue=imdsTest.Labels;
figure;cm=confusionchart(YTrue,YPred);

%当我运行这个代码时,主要的错误分类是生鱼片和寿司,

%它们看起来很相似。请尝试使用此代码进行过度采样,并希望它对您的工作有所帮助。

四、运行效果

五、代码获取

后台私信回复“49期”,即可获取下载链接。

相关文章
|
25天前
|
机器学习/深度学习 算法 数据安全/隐私保护
数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
本项目展示了用于分析和模拟电磁干扰对数据链系统影响的算法。通过Matlab 2022a运行,提供无水印效果图预览。完整代码包含详细中文注释及操作视频。理论部分涵盖五种常见干扰模型:噪声调频、线性调频、噪声、扫频和灵巧干扰,详细介绍其原理并进行对比分析。灵巧干扰采用智能技术如认知无线电和机器学习,自适应调整干扰策略以优化效果。
|
1月前
|
算法
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
138 13
|
28天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
103 1
|
2月前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
1月前
|
监控 安全 BI
什么是零信任模型?如何实施以保证网络安全?
随着数字化转型,网络边界不断变化,组织需采用新的安全方法。零信任基于“永不信任,永远验证”原则,强调无论内外部,任何用户、设备或网络都不可信任。该模型包括微分段、多因素身份验证、单点登录、最小特权原则、持续监控和审核用户活动、监控设备等核心准则,以实现强大的网络安全态势。
132 2
|
1月前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
8月前
|
机器学习/深度学习 PyTorch 测试技术
|
3月前
|
机器学习/深度学习 编解码 自然语言处理
ResNet(残差网络)
【10月更文挑战第1天】
|
机器学习/深度学习 算法 计算机视觉
经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)
经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)
4004 1
经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)

热门文章

最新文章