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 实例的一些方法,比如创建、删除、修改、…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...