当前位置: 首页 > news >正文

经典分类模型回顾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的鱼村小馆订餐后台管理系统

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…...

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&#xff09…...

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基本算法激进的死代码删除&#xff0…...

询问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第二步&#xff1a…...

【C++】命名空间

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、命名空间产生的背景二、命名空…...

【AutoSAR】【MCAL】Dio

一、结构 二、功能介绍 DIO(数字输入输出)驱动模块主要是对端口(Port),通道(Channel)和通道组(ChannelGroup)进行读写操作。 通道(Channel)&…...

瑞吉外卖——day2

目录 一、新增员工 二、查询分页数据 三、启用、禁用员工账户、编辑员工信息 一、新增员工 点击左上角新增员工 页面如下: 我们随便填数据 ,点击保存,请求的地址如下 返回前端可以看到请求方式为Post 在employeeController中编写对应的代…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...