Pix2Pix理论与实战
本文为🔗365天深度学习训练营 中的学习记录博客
原作者:K同学啊|接辅导、项目定制
我的环境:
1.语言:python3.7
2.编译器:pycharm
3.深度学习框架Pytorch 1.8.0+cu111
一、引入
在之前的学习中,我们知道GAN网络可用作图像的生成,但GAN的一个问题是它无法对生成模型生成的数据进行控制,为了解决这个问题,我们学习了条件GAN,它 提出了将在生成模型和判别模型中都加入条件信息来引导模型的训练,实现了生成内容的可控。
我们今天所要学习的 Pix2Pix是一个以CGAN为基础,用于图像翻译的通用框架,旨在将一个图像域中的图像转换成另一个图像域中的图像,它实现了模型结构和损失函数的通用化,并在诸多图像翻译数据集上取得了令人瞩目的效果。
二、背景知识
2.1、图像翻译
图像内容:是指图像中呈现出来的视觉信息或图案,它可以包括物体、场景、人物等。图像内容是通过像素的排列和颜色等信息来呈现的,是图像的可视化表达。
图像域:是指图像在空间中的范围或维度。在二维图像中,图像域通常由横轴和纵轴组成,表示图像的宽度和高度。图像域的概念在图像处理和计算机视觉领域中经常被使用,用于描述图像的空间特征和位置信息。
图像翻译:是将一种语言的图像内容翻译成另一种语言的过程。这可以涉及到将图像中的文本、标志、物体等翻译成目标语言。图像翻译通常使用计算机视觉和自然语言处理技术,结合图像识别和机器翻译的方法来实现。
2.2、CGAN
CGAN引入了条件的概念。在普通的GAN中,生成器是无条件地生成数据,而在CGAN中,生成器的输出受到条件信息的影响。这个条件信息可以是类别标签、文本描述等,使得生成器能够按照给定条件生成相应的数据。
具体来说,CGAN的训练过程中,生成器的输入不仅包括一个随机噪声向量,还包括一个条件向量,用于指导生成过程。判别器则需要判断输入的数据是真实数据还是生成器生成的数据,并考虑条件信息。通过这种方式,CGAN可以更有针对性地生成符合特定条件的数据,例如生成特定类别的图像。
CGAN的应用包括图像生成、图像转换、风格迁移等领域。通过引入条件信息,CGAN使得生成模型更具有控制性,能够更灵活地生成符合用户需求的数据。
2.3、U-Net
U-Net是一种用于图像分割任务的卷积神经网络架构,由医学图像分割领域的研究者提出,其结构特点使得它在分割任务中表现出色。U-Net的名字来源于其网络结构的形状,其整体形状类似字母 "U"。
以下是U-Net网络的主要特点和组成部分:
-
编码器-解码器结构: U-Net采用了编码器-解码器的结构。编码器部分用于捕获图像的上下文信息,通过卷积和池化操作逐渐减小空间分辨率。解码器部分则通过上采样和反卷积操作将编码器提取的特征图还原到原始图像的分辨率,以保留更多的空间信息。
-
跳跃连接(Skip Connections): U-Net引入了跳跃连接,将编码器的某一层的特征图与解码器对应层的特征图相连接。这种结构有助于传递更多的局部信息,帮助解码器更好地还原细节。
-
U形结构: U-Net的整体结构形状呈现出“U”字形,由一个下采样路径和一个上采样路径组成。这样的结构使得网络能够同时关注图像的全局信息和局部细节,适用于图像分割任务。
-
最后的卷积层: U-Net的最后一层是一个卷积层,用于生成最终的分割结果。这一层通常采用 1x1 的卷积核,生成与输入图像相同分辨率的分割图。
-
应用领域: U-Net最初设计用于医学图像分割,如肺部和细胞图像的分割。然而,由于其优越的性能,U-Net被广泛应用于其他图像分割任务,包括道路分割、人体分割等。
总的来说,U-Net网络通过其独特的结构,特别是编码器-解码器结构和跳跃连接,使其在图像分割任务中表现出色,成为一个重要的图像分割模型。
三、Pix2Pix解析
生成器G用到的是Unet结构,输入的轮廓图编码再解码成真是图片,判别器D用到的是作者自己提出来的条件判别器PatchGAN,判别器D的作用是在轮廓图
的条件下,对于生成的图片
判断为假,对于真实图像判断为真。
3.1、损失函数
根据CGAN可以写出损失函数:
生成器的作用是迷惑鉴别器,产生一个跟真图像相似的图像。Pix2Pix使用L1 loss生成高质量图像。
最终的目标函数为:
3.2、模型结构
生成器:
Pix2Pix生成器的结构是基于U-Net的编码器-解码器结构,并在此基础上进行了一些改进。下面是Pix2Pix生成器的主要组成部分和结构特点:
-
编码器(Encoder): Pix2Pix生成器的编码器部分负责捕获输入图像的上下文信息。通常采用卷积层和池化层,逐渐减小输入图像的空间分辨率,同时提取图像的特征。
-
U-Net结构: 生成器的整体结构采用了U-Net结构,包括编码器和解码器。U-Net结构的特点是具有跳跃连接,将编码器的某一层的特征图与解码器对应层的特征图相连接。这有助于保留更多的局部信息,帮助生成器还原细节。
-
解码器(Decoder): 解码器部分通过上采样和反卷积操作将编码器提取的特征图还原到原始图像的分辨率。这一部分的目标是逐渐生成与目标图像相似的输出。
-
跳跃连接: 跳跃连接是U-Net结构的一个关键特点,在解码器的每一层都连接了相应编码器层的特征图。这样的连接有助于传递更多的局部信息,改善生成图像的质量。
-
生成层: 生成器的最后一层是一个卷积层,输出生成的目标图像。在Pix2Pix中,通常使用tanh激活函数来确保输出的像素值在[-1, 1]范围内。
判别器:
传统GAN蚕蛹整张图作为判别器的输入导致生成的图像普遍比较模糊。Pix2Pix将输入图像分块,然后将这些图像块依次传递给判别器。这种方法被命名为PatchGAN。
四、代码运行
Pix2Pix的缺点及总结:
作者在论文中也承认,使用这样的结构其实学到的是到
的一对一映射。也就说,pix2pix就是对ground truth的重建:输入轮廓图→经过Unet编码解码成对应的向量→解码成真实图。这种一对一映射的应用范围十分有限,当我们输入的数据与训练集中的数据差距较大时,生成的结果很可能就没有意义,这就要求我们的数据集中要尽量涵盖各种类型。
Pix2Pix通过生成对抗网络(GAN)进行图像到图像的转换。它通过对抗训练,结合条件生成,以学习输入图像和目标输出图像之间的映射关系。生成器的目标是生成逼真的目标图像,而判别器的任务是区分真实目标图像和生成器生成的伪造图像。Pix2Pix借用了U-Net结构,包括编码器和解码器,以及跳跃连接,以便更好地捕获局部信息。这种方法在图像生成和转换任务中取得了成功,广泛应用于图像翻译、语义分割到真实图像等领域。
相关文章:
Pix2Pix理论与实战
本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊|接辅导、项目定制 我的环境: 1.语言:python3.7 2.编译器:pycharm 3.深度学习框架Pytorch 1.8.0cu111 一、引入 在之前的学习中,我们知道…...
[GN] 后端接口已经写好 初次布局前端需要的操作(例)
提示:前端项目一定要先引入组件 配置。再编码!!!! 文章目录 使用 vue-cli 脚手架初始化前端工程化配置引入Vue前端组件库 -- arco前后端联调引入Md 编辑器组件 使用 vue-cli 脚手架初始化 使用安装脚手架工具…...

AIGC:人工智能驱动的数据分析新时代
AIGC:人工智能驱动的数据分析新时代 随着人工智能技术的迅猛发展,我们正迎来数据分析的新时代,其中AIGC(Artificial Intelligence with Generative Capabilities)的应用成为引领潮流的重要方向。本文将深入探讨几个关…...
Windows Qt C++ VTK 借助msys环境搭建
本示例仅仅是搭建环境,后续使用还得大佬指导。 Qt 6.6.0 MinGW 64bit 借助msys2 来安装VTK 包,把*.dll 链接进来,就可以用了。 先安装VTK 包。 Package: mingw-w64-x86_64-vtk - MSYS2 Packages 执行 pacman 命令:pacman -…...

尚硅谷Nginx高级配置笔记
写在前面:本笔记是学习尚硅谷nginx可成的时候的笔记,不是原创,如有需要,可以去官网看视频,以下是pdf文件 Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云…...

论rtp协议的重要性
rtp ps流工具 rtp 协议,实时传输协议,为什么这么重要,可以这么说,几乎所有的标准协议都是国外创造的,感叹一下,例如rtsp协议,sip协议,webrtc,都是以rtp协议为基础&#…...

【Github搭建网站】零基础零成本搭建个人Web网站~
Github网站:https://github.com/ 这是我个人搭建的网站:https://xf2001.github.io/xf/ 大家可以搭建完后发评论区看看!!! 搭建教程:https://www.bilibili.com/video/BV1xc41147Vb/?spm_id_from333.999.0.0…...

unocss+iconify技术在vue项目中使用20000+的图标
安装依赖 npm i unocss iconify/json配置依赖 vue.config.js文件 uno.config.js文件 main.js文件 使用 <i class"i-fa:user"></i> <i class"i-fa:key"></i>class名是 i- 开头,跟库名:图标名,那都有什么库…...

python 自动化模块 - pyautogui初探
python 自动化模块 - pyautogui 引言一、安装测试二、简单使用三、常用函数总结 引言 在画图软件中使用pyautogui拖动鼠标,画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘,以自动化与其他应用程序的交互。API的设计非常简…...

UE5 蓝图编辑美化学习
虚幻引擎中干净整洁蓝图的15个提示_哔哩哔哩_bilibili 1.双击线段成节点。 好用,爱用 2.用序列节点 好用,爱用 3.用枚举。 好用,能避免一些的拼写错误 4.对齐节点 两点一水平线 5.节点上下贴节点 (以前不懂,现在经常…...

基于动态顺序表实现通讯录项目
本文中,我们将使用顺序表的结构来完成通讯录的实现。 我们都知道,顺序表实际上就是一个数组。而使用顺序表来实现通讯录,其内核是将顺序表中存放的数据类型改为结构体,将联系人的信息存放到结构体中,通过对顺序表的操…...

python使用jupyter记笔记
目录 一、安装 二、运行jupyter 三、使用 四、记笔记 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享程序文档&a…...

C#封装服务
C#封装服务 新建服务项目;重构 OnStart 和 OnStop using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using S…...

手写Vue3源码
Vue3核心源码 B站视频地址:https://www.bilibili.com/video/BV1nW4y147Pd?p2&vd_source36bacfbaa95ea7a433650dab3f7fa0ae Monorepo介绍 Monorepo 是管理项目代码的一种方式,只在一个仓库中管理多个模块/包 一个仓库可以维护多个模块,…...
如何无需重复输入FTP信息来安装WordPress主题和插件
WordPress作为一个广受欢迎的内容管理系统,提供了丰富的主题和插件来扩展网站的功能和外观。然而,许多用户在安装这些主题和插件时,经常遇到需要重复输入FTP信息的麻烦。幸运的是,有几种方法可以解决这个问题,让安装过…...
开发安全之:JSON Injection
Overview 在 XXX.php 的第 X 行中,responsemsg() 方法将未经验证的输入写入 JSON。攻击者可以利用此调用将任意元素或属性注入 JSON 实体。 Details JSON injection 会在以下情况中出现: 1. 数据从一个不可信赖的数据源进入程序。 2. 将数据写入到 …...

各种Linux版本安装Docker
文章目录 一、Ubuntu 20.04.61. 网卡和DNS配置2. Docker安装 二、CentOS Linux 7.91. 网卡和DNS配置2. Docker安装 三、Alibaba Cloud Linux 31. DNS配置2. repo说明3. Docker安装 四、验证是否安装成功 一、Ubuntu 20.04.6 1. 网卡和DNS配置 /etc/netplan 找到 *.yaml 文件 …...

git中合并分支时出现了代码冲突怎么办
目录 第一章、Git代码冲突介绍1.1)什么是Git代码冲突①git merge命令介绍②代码冲突原因 1.2)提示代码冲突的两种情况①本地不同分支的文件有差异时:②本地仓库和git远程仓库的文件有差异时: 1.3)解决合并时的代码冲突…...

什么是防火墙?
目录 什么是防火墙,为什么需要防火墙?防火墙与交换机、路由器对比防火墙和路由器实现安全控制的区别防火墙的发展史1989年至1994年1995年至2004年2005年至今 什么是防火墙,为什么需要防火墙? “防火墙”一词起源于建筑领域&#x…...

tui.calender日历创建、删除、编辑事件、自定义样式
全是坑🕳!全是坑🕳!全是坑🕳!能不用就不用! 官方文档:https://github.com/nhn/tui.calendar/blob/main/docs/en/apis/calendar.md 实例的一些方法,比如创建、删除、修改、…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...