基于matlab使用深度学习的语义分割算法实现(附源码)

news2024/11/17 6:49:02

一、前言

此示例演示如何使用语义分割网络对图像进行分割。

语义分割网络对图像中的每个像素进行分类,从而生成按类分割的图像。语义分割的应用包括自动驾驶的道路分割和医疗诊断的癌细胞分割。

此示例首先向您展示如何使用预训练的 Deeplab v3+ [1] 网络分割图像,该网络是一种专为语义图像分割而设计的卷积神经网络 (CNN)。其他类型的语义分割网络包括全卷积网络(FCN),SegNet和U-Net。然后,您可以选择下载数据集以使用迁移学习训练 Deeplab v3 网络。此处显示的训练过程可以应用于其他类型的语义分割网络。

为了说明训练过程,此示例使用了剑桥大学的CamVid 数据集[2]。此数据集是包含驾驶时获得的街道级视图的图像集合。该数据集为 32 个语义类(包括汽车、行人和道路)提供像素级标签。

二、下载预训练语义分割网络

下载在CamVid数据集上训练的DeepLab v3+的预训练版本。加载预训练网络。列出此网络经过训练以分类的类。

三、执行语义图像分割

读取包含网络被训练进行分类的类的图像。将图像大小调整为网络的输入大小。使用函数和预训练网络执行语义分割。将分割结果叠加在图像顶部。将叠加颜色图设置为CamVid数据集[2]定义的色彩图值。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

尽管该网络是在城市驾驶图像上进行预训练的,但它在高速公路驾驶场景中产生了合理的结果。为了改善分割结果,应使用包含高速公路驾驶场景的其他图像重新训练网络。此示例的其余部分介绍如何使用迁移学习训练语义分割网络。

四、训练语义分割网络

此示例使用从预先训练的 Resnet-3 网络初始化的权重训练 Deeplab v18+ 网络。ResNet-18 是一种高效的网络,非常适合处理资源有限的应用。其他预训练网络,如MobileNet v2或ResNet-50,也可以根据应用要求使用。

五、下载凸轮维数据集

从以下 URL 下载 CamVid 数据集。注意:数据的下载时间取决于您的互联网连接。上面使用的命令会阻止 MATLAB,直到下载完成。或者,您可以使用 Web 浏览器先将数据集下载到本地磁盘。要使用从 Web 下载的文件,请将上面的变量更改为下载文件的位置。

六、加载摄像头图像

使用图像数据存储加载CamVid图像。使您能够有效地在磁盘上加载大量图像。显示其中一个图像。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

七、加载 CamVid 像素标记的图像

加载 CamVid 像素标签图像数据。A 将像素标签数据和标签 ID 封装到类名映射中。为了使培训更容易,请将CamVid中的32个原始课程分组为11个班级。

要将 32 个类减少到 11 个类,原始数据集中的多个类将分组在一起。例如,“Car”是“Car”,“SUVPickupTruck”,“Truck_Bus”,“Train”和“OtherMoving”的组合。使用本示例末尾列出的支持函数返回分组的标签 ID。

使用类和标注 ID 创建pixelLabelDatastore.

通过将其中一个像素标记的图像叠加在图像上来读取和显示该图像。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

没有颜色叠加的区域没有像素标签,并且在训练期间不使用。

八、分析数据集统计信息

按类可视化像素计数。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

理想情况下,所有类将具有相同数量的观测值。然而,CamVid中的类是不平衡的,这是街景汽车数据集中的常见问题。此类场景的天空、建筑物和道路像素比行人和骑自行车者像素多,因为天空、建筑物和道路覆盖了图像中的更多区域。如果处理不当,这种不平衡可能会对学习过程有害,因为学习偏向于主导阶级。在本示例的后面部分,您将使用类权重来处理此问题。

CamVid数据集中的图像大小为720 x 960。选择图像大小时,在具有 12 GB 内存的 NVIDIA™ Titan X 上进行训练时,内存中可以容纳足够大的图像。如果您的 GPU 没有足够的内存或减小训练批次大小,您可能需要将图像大小调整为较小的大小。

九、准备训练、验证和测试集

Deeplab v3+ 使用数据集中 60% 的图像进行训练。其余图像分别平均分为 20% 和 20% 进行验证和测试。以下代码将图像和像素标签数据随机拆分为训练集、验证集和测试集。

60/20/20 拆分会产生以下数量的训练、验证和测试映像:

十、创建网络

使用该函数创建基于 ResNet-3 的 DeepLab v18+ 网络。为您的应用程序选择最佳网络需要实证分析,这是超参数调优的另一个级别。例如,您可以尝试不同的基础网络,如 ResNet-50 或 MobileNet v2,或者您可以尝试其他语义分割网络架构,如 SegNet、全卷积网络 (FCN) 或 U-Net。

十一、使用类权重平衡类

如前所述,CamVid 中的类不平衡。为了改进训练,您可以使用类权重来平衡类。使用像素分类图层指定类权重。

十二、选择培训选项

用于训练的优化算法是随动量随机梯度下降 (SGDM)。

学习率使用分段时间表。学习率每 0 个时期降低 3.10 倍。这使得网络能够以更高的初始学习率快速学习,同时能够在学习率下降后找到接近局部最优的解决方案。

通过设置参数,每个纪元都针对验证数据对网络进行测试。设置为 4 可在验证精度收敛时提前停止训练。这可以防止网络在训练数据集上过度拟合。

小批量大小 8 用于减少训练时的内存使用量。您可以根据系统上的 GPU 内存量增加或减少此值。

此外,设置为临时位置。此名称-值对允许在每个训练时期结束时保存网络检查点。如果训练因系统故障或断电而中断,您可以从保存的检查点恢复训练。确保 指定的位置有足够的空间来存储网络检查点。例如,保存 100 个 Deeplab v3+ 检查点需要 ~6 GB 的磁盘空间,因为每个检查点为 61 MB。

十三、数据增强

数据增强用于通过在训练过程中随机转换原始数据来提高网络准确性。通过使用数据增强,您可以向训练数据添加更多种类,而无需增加标记训练样本的数量。要对图像和像素标签数据应用相同的随机变换,请使用数据存储和 。

请注意,数据增强不适用于测试和验证数据。理想情况下,测试和验证数据应代表原始数据,并且不加修改以进行无偏评估。

十四、开始训练

如果标志为 true,则使用 trainNetwork(深度学习工具箱)开始训练。否则,请加载预训练网络。doTraining 注意:训练是在具有 12 GB GPU 内存的 NVIDIA™ Titan X 上验证的。如果您的 GPU 内存较少,则可能会在训练期间耗尽内存。如果发生这种情况,请尝试设置为 1 in ,或减少网络输入并调整训练数据的大小。训练此网络大约需要 70 分钟。根据您的 GPU 硬件,可能需要更长的时间。

十五、在一个映像上测试网络

作为快速健全性检查,请在一个测试映像上运行经过训练的网络。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

将 中的结果与 中存储的预期基本事实进行比较。绿色和洋红色区域突出显示分割结果与预期地面实况不同的区域。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

在视觉上,语义分割结果对于道路、天空和建筑物等类的重叠很好。但是,行人和汽车等较小的物体并不那么准确。每个类的重叠量可以使用交集联合 (IoU) 指标(也称为 Jaccard 指数)来衡量。

IoU 指标确认视觉结果。道路、天空和建筑类的 IoU 分数很高,而行人和汽车等类的 IoU 分数较低。

十六、评估训练的网络

要测量多个测试图像的准确性,请在整个测试集上运行语义eg。小批量大小 4 用于在分割图像时减少内存使用量。您可以根据系统上的 GPU 内存量增加或减少此值。

将测试集的结果作为对象返回。中每个测试图像的实际像素标签数据将写入参数指定位置的磁盘。尽管整体数据集性能相当高,但类指标显示,代表性不足的类(如 、 和)未像 、 和 等类那样分段。包含更多代表性不足类样本的其他数据可能有助于改善结果

十七、程序

下载方式一:基于matlab使用深度学习的语义分割算法实现资源-CSDN文库

下载方式二:基于matlab使用深度学习的语义分割算法实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/689644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git权限异常:fatal: Authentication failed for

本地电脑用户密码修改了,git 提交,拉取出现异常, 就会报这个错误fatal: Authentication failed for http://xxx/xxx/xxx 解决方法: git config --system --unset credential.helper 免输入用户密码方法: git config --global…

【超简单】Ubuntu 安装 bcompare 对比工具

下载 bcompare 安装包:《bcompare-4.4.6.27483_amd64.deb》 https://www.scootersoftware.com/download.php?zzdl4 安装 becompare 安装: sudo dpkg -i bcompare-4.4.6.27483_amd64.deb破解 cd /usr/lib/beyondcompare/ sudo sed -i "s/kee…

革新写作方式:ChatGPT最新版带来高质量聚合文章的批量生成

随着人工智能技术的不断发展,自然语言处理模型也在不断进步。ChatGPT最新版作为一种强大的语言模型,可以生成高质量的聚合文章,为写作方式带来了革新。本文将详细阐述ChatGPT最新版带来的革新之处,包括其应用领域、生成文章的流程…

剑指 Offer 12: 矩阵中的路径

这道题看着简直是完全没思路,看了下发现是使用回溯的方法。 下面这里要注意,newi是旧的i加上新的偏移值!newj同理,并不是加自己,别昏头! s是String类型的变量,要写成size() 下面是正确的代码&a…

计算机组成原理笔记——指令系统、中央处理器、总线、I/O系统(王道考研)(持续更新)

文章目录 前言指令系统指令系统概述指令格式扩展操作码 指令寻址方式指令寻址数据寻址基本的寻址思路偏移寻址隐含寻址 程序的机器级代码表示汇编基础AT&T格式和Intel格式C语言控制结构的汇编表示函数调用栈帧切换栈帧构造 CISC与RISC 中央处理器CPU的功能和基本结构运算器…

企业级微服务架构实战项目--xx优选-详情页面的异步调用completablefuture

一 常见的调用方式 1.1 并发 并发:同一时刻多个线程在访问同一个资源,多个线程对一个点 ​ 例子:春运抢票、微信抢红包、电商秒杀... 1.2 同步串行 代表多任务按先后顺序执行,并且都是同一个线程来执行。 1.3 异步串行 代表…

【Java面试题】Java基础语法

文章目录 JDK、JRE和JVM的关系栈和堆分别存的什么数据异步和同步线程和进程区别java的数据类型有哪些equals和HashCode重写的问题?深拷贝和浅拷贝的区别和equals的区别常见的运行时异常有哪些? JDK、JRE和JVM的关系 JDK、JRE和JVM的关系: JDK(Java De…

数据库监控与调优【一】—— 数据库调优的维度

数据库调优的维度 左边是千金良方的,右边是个人优化的 业务需求 不合理的需求,可能会造成很多问题勇敢地对不合理的需求说不拨乱反正,把不合理的需求变成合理的需求 例子 财务SaaS系统,财务领域有种叫做代账的概念&#xff0c…

uniapp+vue3+vite+ts+uviewPlus搭建项目

创建项目架构 首先使用官方提供的脚手架创建一个项目,这里我创建的 vue3 vite ts 的项目: npx degit dcloudio/uni-preset-vue#vite-ts project-name(如命令行创建失败,请直接访问 giteehttps://gitee.com/dcloud/uni-preset-vu…

2023-06-20 x-ui-服务器配置记录

基础软件: yum update -y yum install -y curl yum install -y socat 工作软件: bash <(curl -Ls https://raw.githubusercontent.com/sprov065/x-ui/master/install.sh) 设置: 参考: 使用云服务器搭建代理-腾讯云开发者社区-腾讯云

9 HAL库驱动框架简述

目录 HAL库驱动框架简述 HAL库外设设计思想 HAL库和Cube MX相结合 一、对外设的封装——句柄结构体 二、外设初始化 初始化结构体 初始化的逻辑 三、外设使用逻辑 通用接口函数 初始化函数 I/O操作函数 控制函数 状态参数 扩展接口函数 总结 补充&#xff1a;H…

算法拾遗三十四线段树

算法拾遗三十四线段树 线段树说明物理结构使用线段树落方块的问题 线段树说明 给定固定长度的数组&#xff0c;然后要在数组给定的范围内完成加法【如数组1&#xff0c;200下标元素加6】&#xff0c;更新【7&#xff0c;375范围数组元素更新为4】&#xff0c;查询操作【查询3到…

【云原生丶Docker】Docker镜像加速器:给冰山提提速!

Docker镜像加速器是一种用于加速Docker镜像下载和构建的工具。它可以提高Docker镜像的下载速度&#xff0c;从而加快应用程序的开发和部署速度。 Docker镜像加速器通常使用CDN(内容分发网络)技术来实现加速。CDN是一种分布式网络架构&#xff0c;可以将内容缓存在全球各地的服务…

命令行--git--多次commit如何合并成一个commit

参考:https://blog.csdn.net/qq_50652600/article/details/120800309 在我们平时开发中&#xff0c;我们提交代码免不了要和git打交道&#xff0c;那么我们肯定是先从预发分支上&#xff08;公司一般都用pre命名&#xff0c;这里为了方便演示用master&#xff09;上拉去最新的代…

测试工程师首用chatGPT,编写python读取xmind测试用例chatgtp+python+xmind

背景 有用xmind写测试用例的吧&#xff0c;统计一个xmind的条&#xff0c;需要花大量的时间&#xff0c;还有要统计有多少条冒烟的&#xff0c;多少条不通过的&#xff0c;还有通过的条数。 需求 快速使用python&#xff0c;写一个简单的脚本&#xff0c;统计所有xmind节点&…

FPGA_学习_09_PWM呼吸灯

PWM在三相电机控制中&#xff0c;有着非常重要的地位。 如果你需要用FPGA去实现三相电机的控制&#xff0c; PWM这一关是绕不过的。好在PWM的基本原理是比较简单的。所以原理部分本文就略过&#xff0c;本文基于PWM实现呼吸灯。 1 时序 {signal: [{name: clk, wave: p....…

4 STM32启动过程(以Cortex-M3为例)(保姆级介绍)

设计知识点补充在前&#xff1a; 1.关于存储器映射、存储器重映射、内存映射、地址映射、地址转换等计算机专业名词详解 参考见 关于存储器映射、存储器重映射、内存映射、地址映射、地址转换等计算机专业名词详解_Vincent_Song的博客-CSDN博客 2.哈佛结构和冯诺依曼结构的区别…

vue2中左侧菜单和头部tab标签联动

效果图 我这里是使用的vue2 element-ui来实现的&#xff0c;代码可以直接拿来使用 一、首先先安装element-ui element-ui官网 npm i element-ui -S 然后在main.js里面配置&#xff0c;安装官网的步骤来就可以了&#xff0c;这里就不一一介绍了 import Vue from vue; impor…

用wget等命令行工具下载Jenkins上的文件

背景 现在一般公司的内部CI系统都用Jenkins实现&#xff0c;本地部署的时候我会将待测试文件下载到本地&#xff0c;再上传到Linux开发板&#xff0c;但能否从Linux开发板直接下载呢&#xff1f;只要Linux与Jenkins server之间的网络是联通的&#xff0c;那就可以 解决方法 …

【从零开始学习JAVA | 第二十三篇】集合体系结构

目录 前言&#xff1a; 单列集合&#xff1a; set与list的区别&#xff1a; 双列集合&#xff1a; map的特点&#xff1a; 总结&#xff1a; 前言&#xff1a; JAVA中为我们提供了很多集合&#xff0c;这些集合都有自己很独特的特点&#xff0c;因此我们要学习所有的…