基于matlab使用深度学习从分割图生成图像(附源码)

news2024/11/26 7:39:56

一、前言

此示例演示如何使用 pix2pixHD 条件生成对抗网络 (CGAN) 从语义分割映射生成场景的合成图像。

Pix2pixHD [1] 由两个同时训练的网络组成,以最大限度地提高两者的性能。

  1. 生成器是一种编码器-解码器风格的神经网络,可从语义分割图生成场景图像。CGAN 网络训练生成器生成一个场景图像,鉴别器将其错误地分类为真实图像。

  2. 鉴别器是一个完全卷积的神经网络,它将生成的场景图像和相应的真实图像进行比较,并尝试将它们分别分类为假图像和真实图像。CGAN 网络训练鉴别器正确区分生成的图像和真实图像。

生成器和鉴别器网络在训练期间相互竞争。当两个网络都无法进一步改进时,训练就会收敛。

二、下载视频数据集

此示例使用剑桥大学的 CamVid 数据集 [2] 进行训练。该数据集是 701 张图像的集合,其中包含驾驶时获得的街道视图。该数据集为 32 个语义类提供像素标签,包括汽车、行人和道路。从这些 URL 下载 CamVid 数据集。下载时间取决于您的互联网连接。

三、预处理训练数据

创建一个图像数据存储,以将图像存储在CamVid数据集中。

使用辅助函数定义数据集中 32 个类的类名和像素标签 ID。使用辅助函数获取数据集的标准颜色图。创建像素标签数据存储以存储像素标签图像。

预览像素标签图像和相应的真实地面场景图像。使用 label2rgb 函数将标签从分类标签转换为 RGB 颜色,然后在蒙太奇中显示像素标签图像和真实图像。

使用帮助程序函数将数据划分为训练集和测试集。此函数作为支持文件附加到示例。帮助程序函数将数据拆分为 648 个训练文件和 32 个测试文件。

使用组合函数将像素标签图像和真实地面场景图像合并到单个数据存储中。通过将转换函数与帮助程序函数指定的自定义预处理操作一起使用来扩充训练数据。此帮助程序函数作为支持文件附加到示例。该函数执行以下操作:将真实数据缩放到范围 [-1, 1]。此范围与生成器网络中最终 tanhLayer(深度学习工具箱)的范围相匹配。将图像和标注调整为网络的输出大小(576 x 768 像素),分别使用双三次和最近邻缩减采样。使用 onehotencode(深度学习工具箱)函数将单通道分割图转换为 32 通道独热编码分割图。在水平方向上随机翻转图像和像素标签对。

在蒙太奇中预览独热编码分割图的通道。每个通道代表一个对应于唯一类像素的热图。

四、创建发电机网络

定义一个 pix2pixHD 发生器网络,该网络从深度一级的独热编码分割图生成场景图像。此输入具有与原始分割图相同的高度和宽度,以及与类相同的通道数。

显示网络架构。请注意,此示例显示了如何使用 pix2pixHD 全局生成器生成大小为 576 x 768 像素的图像。要创建以更高分辨率(如 1152 x 1536 像素甚至更高)生成图像的本地增强器网络,可以使用函数。本地增强器网络有助于以非常高的分辨率生成精细的细节。

五、创建鉴别器网络

定义将输入图像分类为真实 (1) 或虚假 (0) 的补丁 GAN 鉴别器网络。此示例使用不同输入尺度的两个鉴别器网络,也称为多尺度鉴别器。第一个比例与图像大小的大小相同,第二个比例是图像大小的一半。

判别器的输入是独热编码分割图和待分类场景图像的深度串联。将输入到鉴别器的通道数指定为标记类和图像颜色通道的总数。

指定第一个鉴别器的输入大小。将第二个鉴别器的输入大小指定为图像大小的一半,然后创建第二个补丁 GAN 鉴别器。可视化网络。

六、定义模型梯度和损失函数

帮助器函数计算生成器和鉴别器的梯度和对抗损失。

七、加载特征提取网络

此示例修改了预训练的 VGG-19 深度神经网络,以提取真实图像和生成图像在各个层的特征。这些多层特征用于计算发生器的感知损耗。

八、指定训练选项

指定 Adam 优化的选项。训练60个时代。为生成器和鉴别器网络指定相同的选项。

  • 指定相等的学习率 0.0002。

  • 使用 初始化尾随平均梯度和尾随平均梯度平方衰减率。

  • 使用梯度衰减因子 0.5,梯度衰减因子平方为 0.999。

  • 使用 1 的小批量大小进行训练。

九、训练网络

默认情况下,该示例使用帮助程序函数为 CamVid 数据集下载 pix2pixHD 发生器网络的预训练版本。

十、评估从测试数据生成的图像

这种经过训练的Pix2PixHD网络的性能是有限的,因为CamVid训练图像的数量相对较小。此外,某些图像属于图像序列,因此与训练集中的其他图像相关。为了提高Pix2PixHD网络的有效性,请使用具有大量没有相关性的训练图像的不同数据集来训练网络。

由于这些限制,此Pix2PixHD网络为某些测试图像生成比其他图像更逼真的图像。为了演示结果的差异,请比较第一个和第三个测试图像的生成图像。第一个测试图像的相机角度具有不常见的有利位置,其面向比典型训练图像更垂直于道路的视角。相比之下,第三个测试图像的相机角度具有沿道路面向的典型有利位置,并显示带有车道标记的两条车道。与第一个测试图像相比,网络为第三个测试图像生成逼真的图像的性能明显更好。

从测试数据中获取第一个地面实况场景图像。使用双三次插值调整图像大小。

从测试数据中获取对应的像素标签图像。使用最近邻插值调整像素标签图像的大小。创建将数据输入生成器的对象。如果支持的 GPU 可用于计算,则通过将数据转换为对象在 GPU 上执行推理。发电机网络的最后一层产生 [-1, 1] 范围内的激活。对于显示,将激活重新缩放到范围 [0, 1]。以蒙太奇形式显示 RGB 像素标签图像、生成的场景图像和真实场景图像。

十一、评估从自定义像素标签图像生成的图像

要评估网络对 CamVid 数据集之外的像素标签图像的泛化程度,请从自定义像素标签图像生成场景图像。像素标签图像作为支持文件附加到示例中。没有可用的地面实况图像。

创建一个像素标签数据存储,用于读取和处理当前示例目录中的像素标签图像。

对于数据存储中的每个像素标签图像,使用帮助程序函数生成场景图像。

十二、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

程序下载:基于matlab使用深度学习从分割图生成图像资源-CSDN文库

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

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

相关文章

设置云服务器和配置docker

一、设置云服务器 刚租完服务器,直接利用公网ip登录此时进入到的是root目录下 ssh root公网ip 但是root的权限太大,一般做项目不会在root路径下直接操作,会创建一个子用户,一台服务器可以创建多个子用户,就像一个大…

通用二进制方式安装Mysql

一、去官网下载MySQL glibc版本 示例环境为CentOS 7.9版本,要安装的Mysql版本为5.7 1.选择版本下载到自己本地 下载地址:https://dev.mysql.com/downloads/mysql/ 2.将下载的tar包上传到自己的CentOS虚拟主机上 传输完成后,查看确认一下 …

Tomcat相关

1. 运行项目 将java项目打包为war或者war所对应的文件夹,放置于tomcat的webapps目录下。其实tomcat运行时会解压war到项目中并运行class文件,延伸开来,为啥不能用jar包,因为jar可能可以表示项目但也能表示依赖,tomcat…

Linux 内核和驱动开发工程师的发展前景怎么样?

或许这样的标题,应该是由像Linus或Greg KH这样的大师级的高手才有资格写的吧。但是作为我来说,也许我更想把这个标题作为一个疑问句来使用,整理一下自己的认识,用来勉励自己,和大家一起努力实现这个目标。认识肤浅的地…

4.51ue4:savegame

1.创建savegame,蓝图搜索savegame创建 2.ue4是类似于计算机磁盘读取和内存响应的方式进行保存数据,又称序列化。 详解: 序列化时类似于:从内存保存数据到磁盘的过程,是将数据进行序列化存入磁盘。 读取数据就是反序…

社区说|浅谈 WorkManager 的设计与实现:系统概述

什么是 社区说 ? 反思 系列博客是一种看似 “内卷” ,但却 效果显著 的学习方式,该系列起源和目录请参考 这里 。 困境 作为一名 Android 开发者,即使你没有用过,也一定对 WorkManager 耳熟能详。 自2018年发布以来&#xff0c…

设计模式第22讲——访问者模式(Visitor)

目录 一、什么是访问者模式 二、角色组成 三、优缺点 四、 应用场景 4.1 生活场景 4.2 Java场景 五、代码实现 5.0 UML类图 5.1 抽象访问者——Visitor 5.2 具体访问者——Tourist 5.3 抽象元素——Spot 5.4 具体元素——View、Relic 5.5 对象结构——SpotCollecti…

大厂面试打起12万分小心?3轮技术面过,你也可能挂在HR手上!

很多朋友在面试大厂时存在一个误区,认为面试你的那个是最初给你打电话的HR,其实不然,更大可能是业务部门相关的 HRBP导致你面试失败。 1、什么是HRBP? 为了解释清楚这个问题,先说 HRBP 是什么。HRBP全称为 Human Resource Busin…

java对象clone

Object提供了colne方法给我们定义的类,用来进行对象克隆,但是这个clone方法是protected的,所以需要在我们需要使用clone的类中重写Object的clone方法,并且需要实现Cloneable接口,Cloneable接口是一个标记接口&#xff…

「JVS低代码开发平台2.1.8版本」-首页功能介绍

JVS是面向软件开发团队可以快速实现应用的基础开发脚手架,主要定位于企业信息化通用底座,采用微服务分布式框架,提供丰富的基础功能,集成众多业务引擎,它灵活性强,界面化配置对开发者友好,底层容…

【Java】Netty中ByteBuf学习笔记

文章目录 1) ByteBuf创建与自动扩容2)直接内存 vs 堆内存3)池化 vs 非池化4)组成5)写入6)扩容7)读取8)retain & release9)slice10)duplicate11)copy12&am…

给LLM装上知识:从LangChain+LLM的本地知识库问答到LLM与知识图谱的结合

第一部分 基于LangChain ChatGLM-6B的本地知识库问答的应用实现 1.1 什么是LangChain:连接本地知识库与LLM的桥梁 作为一个 LLM 应用框架,LangChain 支持调用多种不同模型,提供相对统一、便捷的操作接口,让模型即插即用&#x…

java并发编程 6:java内存模型与volatile(重点)

目录 硬件内存模型Java 内存模型主内存工作内存内存交互的八个原子操作JMM作用 可见性退不出的循环volatile解决同步模式之 Balking 有序性指令重排解决指令重排 volatile 原理volatile如何保证可见性volatile如何保证有序性volatile 不能解决指令交错double-checked locking 问…

2023/7/5总结

JS BOM 是浏览器对象模型 window对象是一个全局对象,也是JavaScript的顶级对象 所以通过var定义在全局作用域中的变量、函数都会变成window对象的属性和方法 定时器-延时函数 setTimeout(回调函数,等待的毫秒数) 延时函数只会执行一次 清除延时函…

Java基础---String的长度限制

目录 典型回答 常量池限制 运行期限制 典型回答 String有长度限制,编译期和运行期不一样编译期需要用 CONSTANT_Utf8_info 结构用于表示字符串常量的值,而这个结构是有长度限制,他的限制是65535运行期,String的length参数是Int…

Jenkins 配置用户角色和权限

1、配置条件: 1)已安装Jenkins,当前案例使用版本:2.319.3 2)已成功进入Jenkins,并新建用户:dev_java 2、安装插件【系统管理-插件管理-搜索-可选插件】:Role-based Authoriz…

JavaScript 进阶 - 第4天

JavaScript 进阶 - 第4天笔记 文章目录 JavaScript 进阶 - 第4天笔记1 深浅拷贝1.1 浅拷贝1.2 深拷贝(面试)1.2.1 递归实现深拷贝1.2.2 js库lodash里面cloneDeep内部实现了深拷贝1.2.3 JSON序列化 2 异常处理2.1 throw 抛异常2.2 try ... catch 捕获异常…

Linux之Kafka保姆式详细安装教程

下载Kafka 《Kafka官网下载》 注意:下载的是二进制文件,不要下载源码!这里可以采用第三方下载工具加速下载,如:迅雷等 上传到Linux服务器的/data/目录下进行解压 tar -zxvf是解压文件命令,-C表示把解压…

【C++学习笔记】1.6 引用

目录 🍯1.6 引用 🥝1. 引用的概念 🥝2. 引用的特性 1、引用在定义时必须初始化 2、一个变量可以有多个引用 3、引用一旦引用一个实体,再不能引用其他实体 🥝3. 常引用 1、取别名的原则:对原引用的…

数据查询大揭秘:收好几个模式化公式

欢迎来到数据查询大揭秘!今天,我将与大家分享一些宝贵的秘诀和技巧,让你轻松应对数据查询的挑战。准备好了吗?收起你的笔记本和便签纸,因为我即将为你介绍几个模式化公式,让你事半功倍地完成数据查询任务&a…