经典分类模型回顾5—DenseNet实现图像分类(matlab)
DenseNet,全称为Densely Connected Convolutional Networks,中文名为密集连接卷积网络,是由李沐等人在2017年提出的一种深度神经网络架构。
DenseNet旨在解决深度神经网络中的梯度消失问题和参数数量过多的问题,通过构建密集连接的方式,使得网络能够更好地利用之前的特征,从而获得更好的性能。DenseNet的核心思想是:把网络中前面的层与后面的层进行连接,让前面的层的输出成为后面的层的输入。这样,整个卷积网络就变得非常紧凑,同时也避免了梯度消失的问题。
DenseNet的优点在于:参数少、计算速度快、准确率高。因此,DenseNet在图像识别、目标检测、图像分割等任务中都取得了很好的表现。
DenseNet是一种深度神经网络架构,它具有特殊的连接方式,可以有效地减少网络中的参数量,提高模型的准确性和稳定性。在图像分类任务中,DenseNet常常被使用。
在MATLAB中,可以使用深度学习工具箱来搭建和训练DenseNet模型。下面是一个简单的例子,展示如何使用深度学习工具箱来训练一个DenseNet模型进行CIFAR-10图像分类。
1. 准备数据
首先需要下载CIFAR-10数据集,可以使用MATLAB自带的数据集下载工具来获取数据集。
```MATLAB
cifar10Data = fullfile(tempdir, 'cifar-10-matlab');
if ~exist(cifar10Data, 'dir')
cifar10Data = fullfile(toolboxdir('vision'), 'visiondata', 'cifar10');
if ~exist(cifar10Data, 'dir')
mkdir(cifar10Data);
url = 'https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz';
helperCIFAR10Data.download(url, cifar10Data);
end
end
```
2. 加载数据
使用 `imageDatastore` 函数将数据加载到MATLAB中。在此过程中,可以对图像进行增强处理,以提高模型的训练效果。
```MATLAB
% Load training and test data
[trainingImages, trainingLabels, testImages, testLabels] = helperCIFAR10Data.load(cifar10Data);
% Construct an imageDatastore object
trainingSet = imageDatastore(trainingImages, ...
'labels', trainingLabels, ...
'ReadFcn', @helperCIFAR10Data.readFunction);
testSet = imageDatastore(testImages, ...
'labels', testLabels, ...
'ReadFcn', @helperCIFAR10Data.readFunction);
% Prepare the data for training
inputSize = [32 32 3];
numClasses = 10;
% Apply data augmentation
augmentedTrainingSet = augmentedImageDatastore(inputSize, ...
trainingSet, ...
'ColorPreprocessing', 'gray2rgb', ...
'RandCropSize', [28 28], ...
'RandCropType', 'random', ...
'RandRotation', [-8 8], ...
'RandXReflection', true);
```
3. 构建DenseNet模型
使用 `densenet201` 函数从深度学习工具箱中加载DenseNet-201模型。
```MATLAB
net = densenet201;
```
可以使用 `analyzeNetwork` 函数来可视化模型架构。
```MATLAB
analyzeNetwork(net);
```
4. 训练模型
使用 `trainingOptions` 函数来配置训练选项。
```MATLAB
options = trainingOptions('sgdm', ...
'InitialLearnRate', 0.001, ...
'MaxEpochs', 50, ...
'MiniBatchSize', 128, ...
'VerboseFrequency', 50, ...
'Plots', 'training-progress');
```
使用 `trainNetwork` 函数来训练模型。
```MATLAB
trainedNet = trainNetwork(augmentedTrainingSet, net, options);
```
5. 测试模型
使用 `classify` 函数来进行分类。
```MATLAB
predictedLabels = classify(trainedNet, testSet);
accuracy = mean(predictedLabels == testSet.Labels)
```
6. 可视化结果
使用 `montage` 函数来可视化测试集中的前20张图像及其分类结果。
```MATLAB
numImages = 20;
idx = randsample(numel(testSet.Files), numImages);
figure
montage(testSet.Files(idx), 'Size', [4 5]);
title('Test Images');
predictedLabels = classify(trainedNet, testSet);
label = cellstr(predictedLabels);
label = strcat(label, ", ", cellstr(num2str(testSet.Labels)));
groundTruth = cellstr(label);
groundTruth = strcat("Ground Truth: ", groundTruth);
predicted = cellstr(predictedLabels);
predicted = strcat("Prediction: ", predicted);
for i = 1:numImages
text(i*32-25,32+10,groundTruth(idx(i)),'FontSize',8)
text(i*32-25,32+20,predicted(idx(i)),'FontSize',8)
end
```
完整代码如下:
```MATLAB
cifar10Data = fullfile(tempdir, 'cifar-10-matlab');
if ~exist(cifar10Data, 'dir')
cifar10Data = fullfile(toolboxdir('vision'), 'visiondata', 'cifar10');
if ~exist(cifar10Data, 'dir')
mkdir(cifar10Data);
url = 'https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz';
helperCIFAR10Data.download(url, cifar10Data);
end
end
[trainingImages, trainingLabels, testImages, testLabels] = helperCIFAR10Data.load(cifar10Data);
% Construct an imageDatastore object
trainingSet = imageDatastore(trainingImages, ...
'labels', trainingLabels, ...
'ReadFcn', @helperCIFAR10Data.readFunction);
testSet = imageDatastore(testImages, ...
'labels', testLabels, ...
'ReadFcn', @helperCIFAR10Data.readFunction);
% Prepare the data for training
inputSize = [32 32 3];
numClasses = 10;
% Apply data augmentation
augmentedTrainingSet = augmentedImageDatastore(inputSize, ...
trainingSet, ...
'ColorPreprocessing', 'gray2rgb', ...
'RandCropSize', [28 28], ...
'RandCropType', 'random', ...
'RandRotation', [-8 8], ...
'RandXReflection', true);
% Load pre-trained DenseNet-201 network
net = densenet201;
% Configure training options
options = trainingOptions('sgdm', ...
'InitialLearnRate', 0.001, ...
'MaxEpochs', 50, ...
'MiniBatchSize', 128, ...
'VerboseFrequency', 50, ...
'Plots', 'training-progress');
% Train the network
trainedNet = trainNetwork(augmentedTrainingSet, net, options);
% Test the network
predictedLabels = classify(trainedNet, testSet);
accuracy = mean(predictedLabels == testSet.Labels)
% Visualize the results
numImages = 20;
idx = randsample(numel(testSet.Files), numImages);
figure
montage(testSet.Files(idx), 'Size', [4 5]);
title('Test Images');
predictedLabels = classify(trainedNet, testSet);
label = cellstr(predictedLabels);
label = strcat(label, ", ", cellstr(num2str(testSet.Labels)));
groundTruth = cellstr(label);
groundTruth = strcat("Ground Truth: ", groundTruth);
predicted = cellstr(predictedLabels);
predicted = strcat("Prediction: ", predicted);
for i = 1:numImages
text(i*32-25,32+10,groundTruth(idx(i)),'FontSize',8)
text(i*32-25,32+20,predicted(idx(i)),'FontSize',8)
end
```
相关文章:
经典分类模型回顾5—DenseNet实现图像分类(matlab)
DenseNet,全称为Densely Connected Convolutional Networks,中文名为密集连接卷积网络,是由李沐等人在2017年提出的一种深度神经网络架构。 DenseNet旨在解决深度神经网络中的梯度消失问题和参数数量过多的问题,通过构建密集连接…...
基于flask+bootstrap+echarts+mysql的鱼村小馆订餐后台管理系统
📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言Ὅ…...
Spark使用Log4j将日志发送到Kafka
文章目录自定义KafkaAppender修改log4j.properties配置启动命令配置添加参数启动之后可以在Kafka中查询发送数据时区问题-自定义实现JSONLayout解决自定义JSONLayout.java一键应用可能遇到的异常ClassNotFoundException: xxx.KafkaLog4jAppenderUnexpected problem occured dur…...
c++类与对象整理(上)
目录 1.类的引入 2.类的定义 3.类的访问限定符及封装 1)访问限定符 2)封装 4.类的作用域 5.类的实例化 6.类的对象大小的计算 1)类对象的存储方式 2)内存对齐和大小计算 编辑 7.类成员函数的this指针 1)…...
Docker学习(十九)什么是镜像的元数据?
在 Docker 中,镜像的元数据是指与镜像相关的所有信息,包括镜像的名称和标签、作者、描述、创建日期、环境变量、命令等。这些信息都是通过 Dockerfile 或命令行创建和指定的。 镜像的元数据被存储在 Docker Registry 中,并在使用 docker pull…...
Python如何获取弹幕?给你介绍两种方式
前言 弹幕可以给观众一种“实时互动”的错觉,虽然不同弹幕的发送时间有所区别,但是其只会在视频中特定的一个时间点出现,因此在相同时刻发送的弹幕基本上也具有相同的主题,在参与评论时就会有与其他观众同时评论的错觉。 在国内…...
JAVA- AOP 面向切面编程 Aspect切面工具类 记录特定方法执行时的入参、执行时间、返参等内容
背景:JAVA项目,使用AOP对指定函数进行切面。能够记录特定方法执行时的入参、执行时间、返参结果等内容。 文章目录1、自定义注解类1.1 Target1.2 Retention2、Aspect切面工具2.1 JointPoint2.2 Pointcut2.3 切面中的相关注解3、同一个类里调用AOP4、其他…...
「史上最全的 TCG 规范解读」TCG 规范架构概述(下)
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强不同计算机平台上计算环境的安全性。TCG 于 2003 年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Allia…...
GDScript 导出变量 (4.0)
概述 导出变量的功能在3.x版本中也是有的,但是4.0版本对其进行了语法上的改进。 导出变量在日常的游戏制作中提供节点的自定义参数化调节功能时非常有用,除此之外还用于自定义资源。 本文是(Bilibili巽星石)在4.0官方文档《GDScr…...
JAVA知识点全面总结6:泛型反射和注解
六.JAVA知识点全面总结6泛型反射和注解 1.什么是泛型?可以用在哪里? 2.泛型擦除机制是什么?为什么擦除? 3.通配符是什么?作用是什么? 未更新 1.注解是什么?有什么用? 2.注解的自定义和实…...
死代码删除(DCE,Dead Code Elimination)和激进的死代码删除(ADCE,Aggressive DCE)
死代码删除(DCE,Dead Code Elimination)和激进的死代码删除(ADCE,Aggressive DCE)死代码删除(DCE,Dead Code Elimination)DCE简介DCE基本算法激进的死代码删除࿰…...
询问new bing关于android开发的15个问题(前景、未来、发展方向)
前言:new bing是基于chat-gpt的新搜索工具,可以采用对话方式进行问题搜索,经过排队等候终于可以使用new bing,询问了目前我最关心的关于android开发几个问题 文章目录1.如何学好android开发?2.android开发能做什么?3.…...
【C++】初识类和对象
🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、面向过程和面向对象初步认识二…...
EPICS S7nodave手册
第一章:介绍 本手册分为6章(不算次介绍部分)。第一章介绍s7nodave用于EPICS的设备支持的概念和特新。第二章描述启动一个使用s7nodave的IOC项目所需要的几步。第三章描述s7nodave支持的IOC shell命令。之后,第四章解释s7nodave支持的各种记录类型。最后…...
2023最新版本RabbitMQ的持久化和简单使用
上节讲了 RabbitMQ下载安装教程 , 本节主要介绍RabbitMQ的持久化和简单使用。 一、RabbitMQ消息持久化 当处理一个比较耗时得任务的时候,也许想知道消费者(consumers)是否运行到一半就挂掉。在当前的代码中,当RabbitM…...
函数式编程
函数式编程(一) 文章目录函数式编程(一)1. 前言1.1 概念2. Lambda 表达式2.1 概述2.2 基本的格式2.3 触发条件2.4 Lambda表达式2.4.1 无参无返回值2.4.2 有参无返回值2.4.3 无参数有返回值2.4.4 有参有返回值【重点】2.4.4.1 比较…...
【Java 类】001-访问修饰符、命名规范
【Java 类】001-访问修饰符、命名规范 文章目录【Java 类】001-访问修饰符、命名规范一、访问修饰符概述1、是什么2、作用作用问题3、访问修饰符有哪些4、作用对象二、访问修饰符使用演示1、类访问修饰符演示第一步:创建 Dog 类:public第二步:…...
【C++】命名空间
🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、命名空间产生的背景二、命名空…...
【AutoSAR】【MCAL】Dio
一、结构 二、功能介绍 DIO(数字输入输出)驱动模块主要是对端口(Port),通道(Channel)和通道组(ChannelGroup)进行读写操作。 通道(Channel)&…...
瑞吉外卖——day2
目录 一、新增员工 二、查询分页数据 三、启用、禁用员工账户、编辑员工信息 一、新增员工 点击左上角新增员工 页面如下: 我们随便填数据 ,点击保存,请求的地址如下 返回前端可以看到请求方式为Post 在employeeController中编写对应的代…...
模电学习难点解析与实战突破指南
1. 为什么模电让人如此头疼?作为一名在电子行业摸爬滚打多年的工程师,我完全理解大家学习模拟电路时的痛苦。记得我大学时第一次接触模电课,老师讲了三遍共射放大电路,我愣是没听懂。直到后来在实际项目中反复调试电路,…...
【多模态表示与语言模型】3.1 自引用嵌入字符串(SELFIES)
3.1 自引用嵌入字符串(SELFIES)在分子生成式 AI 领域,表示学习(Representation Learning)的瓶颈长期以来集中在语法脆弱性问题上。传统 SMILES(Simplified Molecular-Input Line-Entry System)表…...
嵌入式JPEG解码库JPEGDecoder深度解析
1. JPEGDecoder 库深度技术解析:面向嵌入式显示系统的轻量级 JPEG 解码实践1.1 库定位与工程价值JPEGDecoder 是一个专为资源受限嵌入式平台设计的轻量级 JPEG 解码库,其核心目标并非替代 PC 级全功能解码器,而是在 MCU 级别实现“够用、可控…...
[具身智能-228]:OpenCV的主要功能
OpenCV(Open Source Computer Vision Library)被誉为计算机视觉领域的“瑞士军刀”。它是一个基于 BSD 许可发行的开源库,提供了超过 2500 个优化算法,涵盖了从底层像素处理到高层视觉理解的完整技术链路。结合最新的技术资料&…...
深入Helmholtz原理与NFA:EDLines如何像“质检员”一样控制误检率
Helmholtz原理与NFA:EDLines如何用数学语言定义"有意义"的线段 在计算机视觉领域,直线检测看似是个基础问题,却蕴含着深刻的数学智慧。当我们观察EDLines算法时,会发现它不仅仅是一系列操作步骤的堆砌,更是一…...
全贴合工艺中Cover Lens Mura不良的关键影响因素与优化策略
1. 全贴合工艺中的Mura现象解析 第一次看到全贴合屏幕上出现发黄或发白的斑块时,我还以为是产品运输途中受了撞击。后来在产线蹲守三个月才发现,这些被称为"Mura"的光学缺陷,其实是贴合工艺中的隐形杀手。Mura这个词源自日语"…...
如何从零搭建Cubli_Mini:开源自平衡机器人完整制作指南
如何从零搭建Cubli_Mini:开源自平衡机器人完整制作指南 【免费下载链接】Cubli_Mini 项目地址: https://gitcode.com/gh_mirrors/cu/Cubli_Mini Cubli_Mini是一款令人惊叹的开源自平衡立方体机器人项目,它通过三个正交安装的飞轮实现姿态控制&am…...
Multisim仿真固定偏置电路
Multisim仿真固定偏置电路 Multisim软件版本 依次点击帮助→关于 NI Multisim 14.0 Multisim Power Pro Edition Multisim中绘制电路图 元器件 电源VCC VCCNPN晶体管 BJT_NPN 2N2222A偏置电阻RB Resistor集电极电RC Resistor接地GND DGND 仿真 万用表测量电压结果 电流测…...
大功率H桥电机驱动板电路设计方案 - ir2103驱动芯片应用方案
大功率H桥电机驱动板电路设计方案 此大功率直流电机驱动板采用ir2103驱动芯片,可同时驱动两路电机,使用10m高速光耦对控制信号进行隔离,最大额定电流可达100A,方案包括:硬件原理图,PCB(可直接打样测试)&…...
多年研究图像增强算法,包括但不限于:retinex,gamma,clahe,滤波算法。如果有需要此方面的需要,可以找我哦,理论算法打包带走
多年研究图像增强算法,包括但不限于:retinex,gamma,clahe,滤波算法。如果有需要此方面的需要,可以找我哦,理论算法打包带走...
