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

一、前言

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

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

此示例首先向您展示如何使用预训练的 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.hqwc.cn/news/8106.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看一眼Mysql查询语句

目录 🛻 查询数据 🛻基本查询语句 🛻单表查询 🚕查询所有字段 🚕查询指定字段 🚕查询指定记录 🚕带in关键字的查询 🚕带between and的范围查询 🚕带like的字符匹…

NIO-Selector 网络编程

目录 一、阻塞 & 非阻塞 1、阻塞 2、非阻塞 二、selector 1、连接和读取 2、处理客户端断开 3、处理消息的边界 4、ByteBuffer大小分配 三、多线程优化 四、NIO vs BIO 1、stream vs channnel 2、IO模型 阻塞IO 非阻塞IO 多路复用 异步IO模型 一、阻塞 &am…

虚拟现实(VR)在医疗保健中的5种应用

医疗保健中的VR虚拟现实 虚拟现实的由来已久,18世纪,法国的医生使用布制的分娩模拟器向助产师和外科医生教授医学技术。在20世纪60年代初,医生一边对心肺复苏学员口述心肺复苏的技巧,一边使用一家塑料玩具厂家制造的塑料娃娃现场…

K8s 为什么要弃用 Docker

K8s 为什么要弃用 Docker 最近在学习容器技术的过程中,看到有关于Kubernetes“弃用 Docker”的事情,担心现在学 Docker 是否还有价值,是否现在就应该切换到 containerd 或者是其他 runtime。 随着深入了解,这些疑虑的确是有些道理…

Unreal 5 实现丧尸伤害和死亡

这一篇主要是实现玩家攻击丧尸可以造成伤害和自身血量为零时,丧尸可以死亡。丧尸也可以对玩家造成伤害,有攻击范围的判定。 这一篇的功能实现有四个功能: 丧尸被攻击掉血丧尸死亡处理玩家被攻击掉血玩家死亡处理 丧尸被攻击掉血 子弹的修改…

【C++】异常

文章目录 1. C语言传统的处理错误的方式2. C异常概念用法异常的抛出和匹配原则规则1情况2抛出异常位置最近的验证对象类型匹配的验证 规则3规则4 异常的重新抛出异常规范 1. C语言传统的处理错误的方式 错误处理机制: 1.终止程序 如:assert 断言终止 &a…

TX Text Control .NET for WPF 31.SP3 Crack

.NET WPF 应用程序的文档处理 将文档编辑、创建和 PDF 生成添加到您的 WPF 应用程序中。 视窗用户界面 功能齐全的文档编辑器 TX Text Control 是一款免版税、完全可编程的丰富编辑控件,它在专为 Visual Studio 设计的可重用组件中为开发人员提供了广泛的文字处理功…

[每日一水] Latex Tikz foreach 循环嵌套

\documentclass{article} \usepackage{tikz} \begin{document} \begin{tikzpicture} \foreach[count\i] \x in {20,18,...,2}\foreach[count\j] \y in {20,18,...,2}\node at (\i,\j) {\x \y}; \end{tikzpicture} \end{document}\node at (\i,\j) {\x \y}; 就是写文本的意思

Day.1 LeetCode刷题练习(最长公共前缀 C/C++两种解法)

题目: 例子: 分析题目: 主要目的:求出各个字符串的公共前缀 思路(本人解法): 用所给实例来看,不难看出我们可以直接以竖着对应来查看是否是公共前缀 , 这样就有了一…

【Python爬虫与数据分析】文件读写

目录 一、概述 二、txt文件读写 三、csv文件读写 四、Json文件读写 一、概述 读写模式: r:读数据w:覆盖写入a:追加写入rb:以二进制形式读出wb:以二进制形式写入ab:以二进制形式追加r、w、…

TypeScript 总结

文章目录 TypeScript 总结概述运行ts文件方式一方式二 基础声明变量类型数组元组联合类型取值限制 枚举类型any & unknownvoid & undefined类型适配 面向对象函数普通函数箭头函数可选参数默认参数 对象创建对象对象的类型限制 类和接口泛型简单使用多个泛型默认泛型类…

C语言经典案例-2

今天继续给大家分享C语言学习的经典练手案例 记录在校学习第三天,继续加油 今日案例来源:csdn社区每日一练 1.商品优惠计算机 商品优惠计算器 使用if语句编程实现输入购货金额,输出实际付款金额。购货折扣率如下: 购货金额≤500元…