G5 - Pix2Pix理论与实战

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

目录

  • 理论知识
    • 图像翻译
    • CGAN
    • U-Net
    • Pix2Pix
      • 损失函数
      • 模型结构
        • 生成器
        • 差别器
  • 模型效果
  • 总结与心得体会


理论知识

前面已经学习了GAN与CGAN,这节开始学习Pix2Pix。

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

图像翻译

首先要先理解 图像内容(Image Content)、图像域(Image Domain)和图像翻译这三个概念。

  • 图像内容:指的是图像的固有内容,它是区分不同图像的依据
  • 图像域:指在特定上下文中所涵盖的一组图像的集合,这些图像通常具有某种相似性或共同特征。图像域可以用来表示 一类具有共同属性或内容的图像。在图像处理和计算机视觉领域,图像域常常被用于描述参数某项任务或问题的图像集合
  • 图像翻译:是将一个物体的图像表征转换为该物体的另一个表征,例如根据皮包的轮廓得到皮包的彩色图。也就是找到一个函数,能让域A的图像映射到域B,从而实现图像的跨域转换。

CGAN

在之前的学习中我们知道CGAN是在GAN的基础上进行了一些改进。对于原始的GAN生成器而言,其生成的图像数据是随机不可预测的,因此CGAN在生成器和判别器中加入了额外的条件。它的本质是将额外添加的信息融入到生成器和判别器中,其中添加的信息可以是图像的类别、人脸表情和其他辅助信息等,旨在把无监督学习的GAN转化为有监督学习的CGAN,便于网络能够在我们的掌控下更好地进行训练 。
CGAN网络结构

U-Net

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

Pix2Pix

在Pix2Pix中,图像翻译任务可以建模为给定一个输入数据 x x x和随机噪声 z z z,生成目的图像 y y y,即 G : { x , z } → y G:\{x,z\} \rightarrow y G:{x,z}y

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

损失函数

因为Pix2Pix和CGAN相比,输入的数据不太相同了,所以它们的损失函数也要对应进行调整,可以表示为
L c G A N ( G , D ) = E x , y [ l o g D ( x , y ) ] + E x , z [ l o g ( 1 − D ( x , G ( x , z ) ) ) ] \mathcal{L}_{cGAN}(G,D) =\mathbb {E}_{x,y}[logD(x,y)] + \mathbb {E}_{x,z}[log(1-D(x, G(x,z)))] LcGAN(G,D)=Ex,y[logD(x,y)]+Ex,z[log(1D(x,G(x,z)))]
当然Pix2Pix也可以像CGAN一样在损失函数中加入正则项来提升生成图像的质量,不同的是Pix2Pix使用的是L1正则而不是L2正则,使用L1正则有助于使生成的图像更清楚
L L 1 ( G ) = E x , y , z [ ∣ ∣ y − G ( x , z ) ∣ ∣ 1 ] \mathcal{L_{L1}}(G) = \mathbb{E}_{x,y,z}[||y-G(x,z)||_1] LL1(G)=Ex,y,z[∣∣yG(x,z)1]
最终训练的目标是在正则约束情况下的生成器和判别器的最大最小博弈
G ∗ = a r g m i n G m a x D L c G A N ( G , D ) + λ L L 1 ( G ) G^*=arg\ \mathop{min}\limits_{G}\ \mathop{max}\limits_{D}\mathcal{L}_{cGAN}(G,D) + \lambda\mathcal{L}_{L1}(G) G=arg Gmin DmaxLcGAN(G,D)+λLL1(G)
之所以在生成数据中加入随机噪声 z z z,是为了使生成模型生成的数据具有一定的随机性,但是实验结构表明完全随机的噪声并不会产生特别有效的效果。在Pix2Pix中是通过在生成器的模型层中加入Dropout来引入随机噪声的,但是Dropout带来输出内容的随机性并没有很大

模型结构

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

生成器

对于图像翻译这种任务来说,经典的编码器-解码器结构是最优的选择。

  • Pix2Pix使用的是以U-Net为基础的结构 ,即在压缩路径和扩张路径之间添加一个跳跃连接
  • Pix2Pix的输入图像的大小 256 × 256 256 \times 256 256×256
  • 每个操作仅进行了三次降采样,每次降采样的通道数均乘以2,初始的通道数是64
  • 在压缩路径中,每个箭头表示的操作是卷积核大小为 4 × 4 4 \times 4 4×4的相同卷积 + BN + ReLU,它根据是否降采样来控制卷积的步长
  • 在扩张路径中,它使用的是反卷积上采样
  • 压缩路径和扩张路径使用的是拼接操作进行特征融合

Pix2Pix生成器网络结构

差别器

传统的GAN有一个棘手的问题是它生成的图像普遍比较模糊,其中一个重要的原因是它使用了整图作为判别器的输入。不同于传统将整个图像作为判别器差别的目标(输入),Pix2Pix提出了将输入图像分成 N × N N \times N N×N 个图像块(Patch),然后将这些图像块依次提供给判别器,因此这个方法被命名为PatchGAN,PatchGAN可以看作针对图像纹理的损失。实验结果表明,当 N = 70 N = 70 N=70 时模型的表现最好,但是从生成结果来看, N N N 越大,生成的图像质量越高。其中 1 × 1 1\times1 1×1大小的图像块的判别器又被叫做PixelGAN
不同N的准确率对比

不同N生成的图像
对于不同大小的N,需要根据 N N N的值来调整判别器的层数,进而得到最合适的模型感受野,我们可以根据表格来计算,进而运行Patch大小和层数。

模型效果

模型代码暂未实现,使用了Up给提供的直接运行。
训练过程

总结与心得体会

通过对Pix2Pix模型的学习,最让我印象深刻的特点是它把判别器由CGAN那种统一压缩完直接预测的逻辑转换成了分成一个Patch,这样提升了模型生成的精度。在了解了这个修改后,我对之前GAN和CGAN产生的斑点很多的生成有了更加深入的理解。应该是由于模型对特征的压缩,导致部分像素失去代表性,产生斑点。

还有一个印象深刻的点是完全随机的噪声 z z z并不会对生成有什么特别的结果,于是作者直接使用Dropout来产生噪声,不再对分布单独处理,这个问题在我实现CGAN时也有疑问,但是我没有认真验证,以后应当想办法抓住这些想法,去试着实现并验证。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次Linux下Docker镜像服务器磁盘空间清理

我们开发环境Jenkins构建项目时报服务器磁盘空间不足,导致项目自动化构建部署失败, Docker镜像服务器磁盘空间清理我们做了多次了,之前在清理Docker镜像服务器时走了不少弯路,查了不少Docker镜像服务器空间清理,都大同…

AI大数据处理与分析实战--体育问卷分析

AI大数据处理与分析实战–体育问卷分析 前言:前一段时间接了一个需求,使用AI进行数据分析与处理,遂整理了一下大致过程和大致简要结果(更详细就不方便放了)。 文章目录 AI大数据处理与分析实战--体育问卷分析一、数据…

部署kubesphere报错

安装kubesphere报错命名空间terminted [rootk8smaster ~]# kubectl apply -f kubesphere-installer.yaml Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16, unavailable in v1.22; use apiextensions.k8s.io/v1 CustomResourceDefini…

LabVIEW阀性能试验台测控系统

本项目开发的阀性能试验台测控系统是为满足国家和企业相关标准而设计的,主要用于汽车气压制动系统控制装置和调节装置等产品的综合性能测试。系统采用工控机控制,配置电器控制柜,实现运动控制、开关量控制及传感器信号采集,具备数…

【数据结构初阶】--- 顺序表

顺序表,好像学C语言时从来没听过,实际上就是给数组穿了层衣服,本质是一模一样的。 这里的顺序表实际是定义了一个结构体,设计各种函数来实现它的功能,比如说数组中的增删改查插入,这些基本操作其实平时就会…

go语言内置预编译 //go:embed xxx 使用详解

在go语言里面,我们可以使用一个“类注释”的语法来来让编译器帮助我们在编译的时候将一些文件或者目录读取到指定的变量中来供我们使用。 go:embed语法: //go:embed 文件或者目录路径 var 变量名 变量类型 说明: 文件或者目录路径 可以…

【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)

目录 一、 进程1.1 PID(进程标识符)1.2 内存指针1.3 文件描述符表1.4 状态1.5 优先级1.6 记账信息1.7 上下文 二、线程三、总结:进程和线程之间的区别(非常非常非常重要,面试必考题) 一、 进程 简单来介绍一下什么是进程&#xf…

C++学习/复习13--list概述

一、list概念 1.带头双向链表 2.构造函数 3.迭代器(其迭代器需尤其注意) 4、size 5.front/back 6.插入删除 删除时的迭代器失效 由于list的节点特殊,既有数据又有指针,其实现需要节点/迭代器/list各成一类再组合

Windows系统电脑本地部署AI音乐创作工具并实现无公网IP远程使用

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT,并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…

Spring AI 第二讲 之 Chat Model API 第八节Anthropic 3 Chat

Anthropic Claude 是一系列基础人工智能模型,可用于各种应用。对于开发人员和企业来说,您可以利用 API 访问,直接在 Anthropic 的人工智能基础架构之上进行构建。 Spring AI 支持用于同步和流式文本生成的 Anthropic 消息 API。 Anthropic …

29网课交单平台 epay.php SQL注入漏洞复现

0x01 产品简介 29网课交单平台是一个专注于在线教育和知识付费领域的交单平台。该平台基于PHP开发,通过全开源修复和优化,为用户提供了高效、稳定、安全的在线学习和交易环境。作为知识付费系统的重要组成部分,充分利用了互联网的优势,为用户提供了便捷的支付方式、高效的…

2.Rust自动生成文件解析

目录 一、生成目录解析二、生成文件解析2.1 Cargo.toml2.2 main函数解析 一、生成目录解析 先使用cargo clean命令删除所有生成的文件,下图显示了目录结构和 main.rs文件 使用cargo new testrust时自动创建出名为testrust的Rust项目。内部主要包含一个src的源码文…

[网鼎杯 2020 青龙组]jocker

运行程序,发现是要我们自己输入 那么肯定是拿到enc慢慢还原 32位,无壳 进来就红一下报错 这里可以看见长度为24 动调一下看看 这里进行了大量的异或 这里是对地址开始的硬编码进行异或,从而达到smc的效果 所以你也可以发现在进行这一步操作之前 encry函数全是报错 你点开…

Python 知识图谱补全,Knowledge Graph Completion,基于大模型的知识图谱补全,基于LLMs的KGC任务

今天讲一篇文章《Exploring Large Language Models for Knowledge Graph Completion》 ,这篇文章主题:基于大模型做知识图谱补全 1.文章主要思想: 本章描述知识图谱补全中的三个任务:三元组分类、关系预测和实体(链接)预测&…

[office] 如何才能用EXCEL打开dat文件- #微信#学习方法

如何才能用EXCEL打开dat文件? 方法: 1、打开EXCEL软件; 2、文件,打开,选择要转化的DAT文件; 3、在弹出的向导文件(步骤1)中,选择合适的文件类型(按预览选择&#xf…

秒杀优化+秒杀安全

1.Redis预减库存 1.OrderServiceImpl.java 问题分析 2.具体实现 SeckillController.java 1.实现InitializingBean接口的afterPropertiesSet方法,在bean初始化之后将库存信息加载到Redis /*** 系统初始化,将秒杀商品库存加载到redis中** throws Excepti…

QT treeWidget如何添加虚线

1、添加以下代码即可: ui.treeWidget->setStyle(QStyleFactory::create("windows"));2、效果如下:

CorelDRAW2024发布更新啦!设计师们的得力助手

在数字化的今天,视觉设计已经成为我们生活中不可或缺的一部分。从手机界面到广告海报,从网页布局到包装设计,每一个细节都离不开设计师们的专业与创意。然而,面对日益增长的设计需求和不断提升的审美标准,许多设计师开…

华为鸿蒙开发-鸿蒙基于ARKTS开发之启动模式

前言 鸿蒙生态取得爆发式增长! 截至3月底,已有超4000个应用加入鸿蒙生态。 而在今年1月中旬,华为刚宣布HarmonyOS NEXT鸿蒙星河版面向开发者开放申请,这一版本鸿蒙系统也被称为“纯血鸿蒙”。 当时,华为宣布首批200…

网络编程TCP

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:Java网络编程(下)🙉 🐹今日诗词: 壮士当唱大风哥, 宵小之徒能几何?🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微…