Pix2Pix 使用指南:从原理到项目应用

Pix2Pix

    • Pix2Pix 介绍:使用条件 GAN 进行图像到图像的转换
    • Pix2Pix 原理
      • Pix2Pix 模型结构
        • 生成器:Unet结构
        • 判别器:PatchGAN
        • 目标函数
          • 目标函数总结
    • Pix2Pix 项目使用

 


Pix2Pix 介绍:使用条件 GAN 进行图像到图像的转换

Pix2Pix 论文:https://arxiv.org/abs/1611.07004

Pix2Pix 的性质是图像转换。

图像转换,指从一副图像到另一副图像的转换。

可以类比机器翻译,一种语言转换为另一种语言。

这个转换过程是通过建立一个模型,利用生成对抗网络(GANs)的算法,大量的成对图像数据,如简笔画和真实照片,将输入的简笔画转换成逼真的照片。

 


Pix2Pix 原理


输入x:简笔画

生成器G:处理简笔画,生成的模拟图

判别器D:

  • 输入 {简笔画、生成图},判断为 fake
  • 输入 {简笔画、真实图},判断为 real

Pix2Pix 模型结构

生成器:Unet结构


编码器:输入图像,输出特征

解码器:输入特征,输出图像

UNet:对编码-解码器改进的模型,主要是用于医学影像上。

在编码器和解码器之间增加了跳跃连接,使得同一级别的特征图可以在不同阶段进行拼接和融合。

假设我们有一个医学图像分割任务,输入是一张CT扫描图像,输出是图像中病变区域的分割结果。

解码器主要依赖于局部特征,例如像素的颜色、纹理等。

然而,对于复杂的图像分割任务来说,局部特征可能不足以准确地区分不同的区域。

UNet模型引入跳跃连接,关联到上下文信息、全局特征。

而全局特征可能包括图像中病变区域的大小、形状、位置等信息。

通过在解码器中引入跳跃连接,这些全局特征可以指导像素的分类,帮助模型更好地识别病变区域。

判别器:PatchGAN

PatchGAN是为了解决图像处理领域中的一类问题——如何有效地处理模糊和噪声——而提出的。

具体来说,它是为了解决在图像降质过程中产生的模糊和噪声问题,例如在拍照时由于光线不足、镜头移动等因素导致的图像模糊,或者在图像传输过程中引入的噪声等。

通过学习如何处理这些不良因素,PatchGAN能够让模糊的图像变得更加清晰,从而提高图像的质量。

假设你有一张照片,这张照片的某个部分被划出了一个小的正方形区域,而这个区域里面的内容被模糊处理了。

这个模糊处理的部分就叫做"Patch",而"PatchGAN"就是一种专门用来处理这样模糊图像的算法。

在PatchGAN训练判别器时,不是把整个图片直接放进判别器中进行判别,而是像下面这样,先把一幅图切成 N x N 的小块, 再把每个小块送入判别器中进行判别,最后把整体的结果取平均。


图片来源:CSDN@几维wk

这样划分的好处是,评估高频信息(细节)。

在原始的GAN中,判别器只会输出一个评价值,评价生成器生成的整幅图像。

但是PatchGAN的设计不同,它被设计成全卷积的形式。

这意味着,图像经过各种卷积层后,不会进入全连接层或激活函数,而是使用卷积将输入映射为一个 N*N 的矩阵。

这个矩阵就像原始GAN中的评价值,但它评价的是生成器生成的图像中的每一个小区域。

每个点(true或false)代表原始图像中的一小块区域的评价值,这就是“感受野”的应用。

使用 N*N 的矩阵来评价整幅图像,可以关注更多的区域,这就是PatchGAN的优势。

举例,假设我们有一个 64x64 的图像,我们的 PatchGAN 有 16 个 patch,每个 patch 是 8x8 的。这意味着我们的判别器会输出一个 16x16 的矩阵。每个元素值代表对应 patch 在真实图像中的存在概率。

例如,如果判别器判断第 1 行第 1 列的 patch 是真实的,那么矩阵的第 1 行第 1 列的值就会接近 1,而其他值则会接近 0。如果它判断第 2 行第 3 列的 patch 是生成的,那么矩阵的第 2 行第 3 列的值就会接近 0,而其他值则会接近 1。

通过这种方式,PatchGAN 能够关注到图像中的各个区域,而不仅仅是全局的图像。这对于生成图像的细节部分特别有用,因为往往细节部分更能决定一张图像的真实性。

目标函数

生成器优化目标: L c G A N ( G , D ) = E x , y [ log ⁡ D ( x , y ) ] + E x , z [ log ⁡ ( 1 − D ( x , G ( x , z ) ) ] \begin{aligned}\mathcal{L}_{cGAN}(G,D)=&\mathbb{E}_{x,y}[\log D(x,y)]+\\&\mathbb{E}_{x,z}[\log(1-D(x,G(x,z))]\end{aligned} LcGAN(G,D)=Ex,y[logD(x,y)]+Ex,z[log(1D(x,G(x,z))]

  • L c G A N ( G , D ) L cGAN (G,D) LcGAN(G,D):这是 cGAN 的损失函数,它关于生成器G和判别器D优化。损失函数的目标是最小化生成器生成的假样本被判别器识别的概率,同时最大化判别器正确识别真实样本的概率。

  • E x , y [ l o g D ( x , y ) ] Ex,y[logD(x,y)] Ex,y[logD(x,y)]:这部分是期望真实样本被判别器识别的概率。x是真实样本,y是对应的条件标签,D(x,y) 是判别器对于输入 (x,y) 判断为真实样本的概率。

  • E x , z [ l o g ( 1 − D ( x , G ( x , z ) ) ) ] Ex,z[log(1−D(x,G(x,z)))] Ex,z[log(1D(x,G(x,z)))]:这部分是期望生成器生成的假样本被判别器识别的概率。x是真实样本,z是随机噪声,G(x,z)是生成器根据真实样本x和随机噪声z生成的假样本。

    D ( x , G ( x , z ) ) D(x,G(x,z)) D(x,G(x,z)) 是判别器对于输入 ( x , G ( x , z ) ) (x,G(x,z)) (x,G(x,z)) 判断为真实样本的概率,因此我们需要最大化它的相反数,即 ( 1 − D ( x , G ( x , z ) ) ) (1−D(x,G(x,z))) (1D(x,G(x,z)))

    通过最小化这个损失函数,cGAN可以训练出能够生成满足给定条件约束的样本的生成器。

举例:

传统的损失函数,如L2或L1损失,旨在最小化生成样本与真实样本之间的差异。这种差异度量方法在生成对抗网络(GAN)中同样重要,因为生成器不仅要能够欺骗判别器,还需要生成与真实数据相似度尽可能高的假样本。

当我们在GAN的目标函数中加入传统的损失时,生成器就需要在满足判别器的条件下,尽可能地接近真实样本。这使得生成器不仅要关注欺骗判别器,还要关注生成样本的质量。因此,这种结合可以产生更清晰、更逼真的假样本。

L2损失会最小化每个特征的平方差,因此生成的假样本可能会更加平滑,而无法捕捉到真实样本中的一些细节和变化。

相反,如果使用L1损失来优化生成器,我们可能会发现生成的假样本更加锐利和清晰。

这是因为L1损失会最小化每个特征的绝对差值,因此生成的假样本可能会更加突出真实样本中的一些边缘和细节。

所以,在GAN的目标函数中混入L1损失相比L2损失能够带来更好的效果。因为L1损失能够更好地捕捉到真实样本中的边缘和细节,从而产生更清晰、更逼真的假样本。

这个公式的目的是最小化生成模型G生成的假样本与真实样本之间的差异。具体来说,它计算了真实样本y与生成模型G生成的假样本G(x, z)之间的L1距离(即绝对值差异的总和)。

最终目标函数:

目标函数总结

判别器的优化目标,就是一个GAN

生成器的优化目标,有俩个:

  • 总体相似程度:L1距离,真实标签-生成图(x,z),引入噪声z是为了提高生成图的丰富程度

  • 细节相似程度:对抗损失 + 评估高频信息(细节)

Pix2Pix 项目使用

Pix2Pix 本地部署:https://www.iotword.com/15549.html

Pix2Pix 项目代码:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

Pix2Pix 代码(国内下载链接,很快):https://gitcode.net/zhenzhidemaoyi/pytorch-CycleGAN-and-pix2pix

手把手教学使用链接:https://blog.csdn.net/qq_42691298/article/details/127460187

这篇写的太详细,手把手教学,我真没必要再写了。
 


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

预制菜产业发展背景下,如何利用视频监控保障行业监管工作

一、方案背景 随着社会的快速发展和人们生活水平的提高,预制菜产业作为现代餐饮行业的重要组成部分,越来越受到消费者的欢迎。然而,由于相关监管工作的不健全或不到位,一些问题也相继浮现出来,如:食品安全…

比较2个点的3种结构在不规则平面上的占比

2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 3 3 3 x 3 3 2 2 2 1 2 2 2 2 2 1 2 2 在平面上有一个点x,再增加一个点,11的操作把平面分成了3部分2a1,2a2,2a3,3部分的比值是 2a1 2a2 2a3 5 25 …

2023年微软开源八个人工智能项目

自2001年软件巨头微软前首席执行官史蒂夫鲍尔默对开源(尤其是Linux)发表尖刻言论以来,微软正在开源方面取得了长足的进步。继ChatGPT于去年年底发布了后,微软的整个2023年,大多数技术都是面向开发人员和研究人员公开发…

NX二次开发UF_CSYS_set_origin 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_set_origin Defined in: uf_csys.h int UF_CSYS_set_origin(tag_t csys_tag, double origin [ 3 ] ) overview 概述 Set origin of coordinate system. Note that this fu…

TFA-Net

TFA SCA means ‘Self-Context Aggregation’ 作者未提供代码

leetcode:环形链表的入环点

题目描述 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目分析 我们假设起点到环的入口点的距离是L,入口点到相遇点的距离是X,环的长度是C 那么画图我们可以得知: 从开始到相遇时slow走的距离是LX从…

Matplotlib图形注释_Python数据分析与可视化

Matplotlib图形注释 添加注释文字、坐标变换 有的时候单单使用图形无法完整清晰的表达我们的信息,我们还需要进行文字进行注释,所以matplotlib提供了文字、箭头等注释可以突出图形中重点信息。 添加注释 为了使我们的可视化图形让人更加容易理解&#…

视频监控中的智能算法与计算机视觉技术

智能视频监控是一种基于人工智能技术的监控系统,它能够通过对图像和视频数据进行分析,自动识别目标物体、判断其行为以及进行异常检测等功能,从而实现对场景的智能化监管。以下是常见的一些用于智能视频监控的算法: 1、人脸识别技…

资深测试整理,压力测试-如何做压力测试?一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、什么是压力测试…

服务台需要跟踪的3个重要指标MTBF+MTTF+MTTR

衡量标准是IT服务管理的核心,可提供有关运营的见解,并帮助确定需要持续改进的领域。通常的服务台指标有助于展示内部运营效率。例如,衡量在规定时间内解决问题的工单数量的 SLA 是展示服务台效率的关键因素。另一方面,故障指标可帮…

《微信小程序开发从入门到实战》学习二十七

3.4 开发参与投票页面 3.4.2 借用伪造数据开发功能 为了便于开发,新建一个编译模式: 之前没看文章,每次都习惯性填完投票创建的信息提交再跳转看效果。好累。 添加变异模式开发真方便。 另外,点击提交后没跳转到投票页面&#…

CCCCCCC指针CCCCC

本文介绍[ shared_ptr / unique_ptr / weak_ptr ]的使用,以及shared_ptr 引用计数和weak_ptr 弱引用计数。 1. 智能指针概述 C程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率…

查企业联系电话的方法

对于销售来说,获取准确、全面的企业联系方式,无疑是开发客户的基础与保障,因为任凭能力再高,说服能力多强,没有与客户接触的机会,这些都是无稽之谈。但是大家都知道,道理都懂,但是要…

C++算法 —— 贪心(3)

文章目录 1、买卖股票的最佳时机2、买卖股票的最佳时机Ⅱ3、K次取反后最大化的数组和4、按身高排序5、优势洗牌6、最长回文串7、增减字符串匹配 1、买卖股票的最佳时机 121. 买卖股票的最佳时机 这里最容易想到的就是暴力枚举,两层for循环,i 0&#xf…

分布式链路追踪实战篇-日志库集成opentelemetry的思路

由上文分布式链路追踪入门篇-基础原理与快速应用可以知道分布式链路追踪的作用,但是距离应用到项目中,我们还需要对项目中一些关键组件进行opentelemetry的集成,例如日志库,ORM、http框架、rpc框架等。 一、日志库如何集成opentel…

设计模式-创建型模式-工厂方法模式

一、什么是工厂方法模式 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。工厂方法模式是目标是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。…

美创联合浙江省农业农村厅斩获“IDC中国20大杰出安全项目”!

11月23日,由IDC主办,以“安全风险管控:新形势下的数据安全保护”为主题的2023全球CSO网络安全峰会(中国站)隆重召开。 会上,IDC “中国20大杰出安全项目(CSO20)” 重磅揭晓&#xff…

Linux中df命令使用

在Linux中,df命令用于显示磁盘空间的使用情况。它的基本语法如下: df [选项] [文件或目录]这个命令可以用来查看当前系统上各个磁盘分区的使用情况。如果没有指定文件或目录,则所有当前被挂载的文件系统的可用空间将被显示。 df命令的一些常…

手把手用GPT开发小程序全流程!就是这么easy~

大家好,我是五竹。 前段时间用GPT开发了一款小程序:GPT真牛批!三天开发一个小程序,三天积累了2000的用户,上周末抽空又接入了流量主,感兴趣的同学可以围观一下。 今天就来带大家走一遍用GPT开发一款小程序的全过程&a…

手把手webpack搭建前端架子

这里以react为例> (一)初始化package.json package name: 你的项目名字叫啥 version: 版本号 description: 对项目的描述 entry point: 项目的入口文件(一般你要用那…