当前位置: 首页 > news >正文

深度学习G5周:Pix2Pix理论与实战

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客**
>- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)**

本周任务:

1.了解并学习Pix2Pix算法

2.画出本文代码中Pix2Pix的生成器网络结构(可参考图5)

前言:
在之前学习了GAN可用于图像生成,在MNIST数据集上取得非常好的效果。但它存在一个问题,是无法对生成模型生成的数据进行控制,为解决此问题,条件GAN(Conditional GAN, CGAN)提出将在生成模型和判别模型中都加入条件信息来引导模型的训练,实现生成内容的可控。

Pix2Pix是一个以GAN为基础,用于图像翻译(Image Translation)的通用框架,目的在将一个图像域中的图像转换成另一个图像域中的图像,实现了模型结构和损失函数的通用化,并在诸多图像翻译数据集上取得了令人瞩目的效果。(论文:Image-to-Image Translation with Conditional Adversarial Networks)

1.背景知识
1.1 图像翻译
首先先理解以下概念:

图像内容(Image Content):图像的固有内容,是区分不同图像的依据

图像域(Image Domain):在特定上下文中所涵盖的一组图像的集合,这些图像通常具有相似性或共同特征。图像域可以用来表示一类具有共同属性或内容的图像。在图像处理和计算机视觉领域,图像域常被用于描述参与某项任务或问题的图像集合,

图像翻译:将一个物体的图像表征转换为该物体的另一个表征,如根据皮包轮廓图得到皮包彩色图。即找到一个函数,能让域A的图像映射到域B,从而实现图像的跨域转换。

1.2 CGAN
条件生成对抗网络(CGAN)是在生成对抗网络(GAN)的基础上进行一些改进。对于原始GAN的生成器而言,其生成的图像数据是随机不可预测的,因此我们无法控制网络的输出,在实际操作中的可控性不强。

针对上述原始GAN无法生成具有特定属性的图像数据的问题,Mehdi Mirza等人在2014年提出了条件生成对抗网络,通过给原始生成对抗网络中的生成器G和判别器D增加额外的条件,如我们需要生成器G生成一张没有阴影的图像,此时判别器D就需要判断生成器所生成的图像是否是一张没有阴影的图像。条件生成对抗网络的本质是将额外添加的信息融入到生成器和判别器中,其中添加的信息可以是图像的类别、人脸表情和其他辅助信息等,目的是把无监督学习的GAN转化为有监督学习的CGAN,便于网络能够在我们掌控下更好地进行训练。

由图的网络结构可知,条件信息y作为额外的输入被引入对抗网络中,与生成器中的噪声z合并作为隐含层表达;而在判别器D中,条件信息y则与原始数据x合并作为判别函数的输入。这种改进在以后的诸多方面研究中被证明是非常有效的,也为后续相关工作提供了积极指导作用。

对于GAN,它的损失函数可以定义为

对于CGAN的损失函数 ,只需要使用G(z丨y)和D(x丨y)替代上式的G(z)和D(x)即可

1.3 U-Net
是一个用于医学图像分割的全卷积模型。分为两个部分,左侧是由卷积和降采样操作组成的压缩路径,右侧是由卷积和上采样组成的扩张路径,扩张的每个网络块的输入由上一层上采样的特征和压缩路径部分的特征拼接而成。网络模型整体是一个U形的结构,因此被叫做U-Net。

分割任务是图像翻译任务的一个分支,因此U-Net也可以被用作其他的图像翻译任务,这里介绍的Pix2Pix就是采用了U-Net作为主体结构,

2.Pix2Pix解析
在Pix2Pix中,图像翻译任务可以建模为给定一个输入数据x和随机噪声z,生成目标图像y,即

与传统的CGAN不同,在Pix2Pix中判别器的输入是生成图像G(x)(或是目标图像y)和源图像x,而生成器的输入是源图像x和随机噪声z。

2.1 损失函数
因为Pix2Pix和CGAN的输入数据不同,所以它们的损失函数也要对应进行调整。

CGAN的损失函数:

如【5】我们可以在损失函数中加入正则项来提升生成图像的质量,不同的是Pix2Pix使用的是L1和不是【5】中使用的L2正则。

使用L1正则有助于使生成的图像更清楚。

我们最终的目标是在正则约束情况下的生成器和判别器的最大最小博弈,

之所以在生成数据中加入随机噪声z,是为了使生成模型生成的数据具有一定的随机性,但实验结果表明完全随机的噪声并不会产生特别有效的效果,在这里,Pix2Pix是通过在生成器的模型层中加入Dropot来引入随机噪声的,但是Dropout带来输出内容的随机性并没有很大。

2.2 模型结构
Pix2Pix使用了CNN中常用的卷积+BN+ReLU的模型结构。

2.2.1 生成器
对于图像翻译任务,经典的编码器-解码器结构是最优的选择,Pix2Pix的官方源码(GitHub - phillipi/pix2pix: Image-to-image translation with conditional adversarial nets)是使用Lua实现。

注意:

1.Pix2Pix使用的是以U-Net为基础的结构,即在压缩路径和扩张路径之间添加一个跳跃连接;

2.Pix2Pix的输入图像的大小256*256

3.每个操作仅进行了三次降采样,每次降采样的通道数均乘以2,初始的通道数是64

4.在压缩路径中,每个箭头表示的操作是卷积核大小为4*4的相同卷积+BN+ReLU,它根据是否降采样来控制卷积的步长

5.在扩张路径中,它使用的是反卷积上采样

6.压缩路径和扩张路径使用的是拼接操作进行特征融合

2.2.3 判别器(PatchGAN)
传统GAN的一个棘手问题是它生成的图像普遍比较模糊,一个重要的原因是它使用了整图作为判别器的输入。不同于传统方法,将整个图像作为判别器判别的目标(输入),Pix2Pix提出了将输入图像分成N*N个图像快(Patch),然后将这些图像块依次提供给判别器,因此这种方法被命名为PatchGAN。PatchGAN可以看做针对图像纹理的损失。

表1实验结果表明,当N=70,模型表现最好,但从图的生成图像来看,N越大,生成的图像质量越高。其中1*1大小的图像块的判别器又被叫做PixelGAN。

对于不同大小的N,我们需要根据N的值来调整判别器的层数,进而得到最合适的模型感受野。

3.代码运行

收获:初步尝试了如何使用pycharm进行模型训练,了解了这个模型,核心技术主要为基于CGAN的损失函数;基于U-Net的生成器;基于PatchGAN的判别器。

http://www.dtcms.com/a/318002.html

相关文章:

  • Transformer模型及深度学习技术应用
  • 什么是 Kafka 中的消息?它由哪些部分组成
  • 高频面试点:深入理解 TCP 三次握手与四次挥手
  • mysql优化策略
  • qt qml实现电话簿 通讯录
  • [FBCTF2019]RCEService
  • apache-tomcat-11.0.9安装及环境变量配置
  • 认识MCP
  • java中普通流stream与并行流parallelStream的比较分析
  • Javascript/ES6+/Typescript重点内容篇——手撕(待总结)
  • 如何定位一个高并发场景下API响应时间从200ms突增到2s的问题
  • 数据结构---二级指针(应用场景)、内核链表、栈(系统栈、实现方式)、队列(实现方式、应用)
  • SQL168 统计作答次数
  • 简单介绍cgroups以及在K8s中的应用
  • DM数据库的安全版本SYSDBA无法修改其他用户密码?
  • 2025年COR SCI2区,船载AUV协同调度优化+海上风电机组水下检测,深度解析+性能实测
  • GPT-oss开源:200万小时淬炼AI Agent专属商用引擎
  • Vi与Vim的主要区别总结
  • Linux systemd 服务管理与 Firewall 防火墙配置
  • 【论文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio
  • 从零开始的云计算生活——第三十八天,避坑落井,Docker容器模块
  • 《RedisTemplate 核心操作全解析》
  • 家庭宽带中的服务器如何被外网访问?
  • 无法解析 CentOS 官方镜像源的域名
  • 977.有序数组的平方
  • 什么是回调地址
  • 8、项目管理
  • PI 思维升级 解密电容器的选择与布局策略,带您追求极致平坦的电源阻抗
  • 个人自然人可不可以申请注册商标!
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——决策树