【深度学习】写实转漫画——CycleGAN原理解析

1、前言

上一篇,我们讲解了按照指定文本标签生成对应图像的CGAN。本篇文章,我们讲CycleGAN。这个模型可以对图像风格进行转化,并且训练还是在非配对的训练集上面进行的,实用性挺大

原论文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (arxiv.org)

参考代码:A clean and readable Pytorch implementation of CycleGAN (github.com)

视频:【写实转漫画——CycleGAN原理解析-哔哩哔哩】

案例演示(现实转漫画):

在这里插入图片描述

PS:图像来自此项目:Style transfer for between real photos and anime images using CycleGAN (github.com)

2、CycleGAN训练原理

前置知识:GAN

以我们拍摄的照片转为漫画风格为例,在训练的时候,我们应当要有一批写实图像,记为X,还有另外一批漫画图像,记为Y

同GAN一样,CycleGAN也有生成网络跟判别网络;只不过,在CycleGAN中,生成网络有两个,判别网络也有两个。

首先,生成网络记为G,F

在这里插入图片描述

对于写实图像X,把它作为输入送给生成网络G,生成对应的漫画图像,由于是通过X伪造的,我们记为 Y ^ \hat Y Y^;对于训练的漫画图像Y,我们将它作为输入送给生成网络F,生成对应的写实图像,由于是通过Y伪造的,我们记为 X ^ \hat X X^

2.1、对抗损失

判别网络

记为 D x , D y D_x,D_y Dx,Dy,与GAN一样,我们希望判别网络能够正确区分出真实图像和伪造的图像;于是便有(对这个不熟的请看GAN)

D x D_x Dx
max ⁡ D x E x ∼ P d a t a ( X ) [ log ⁡ D x ( x ) ] + E y ∼ P d a t a ( Y ) [ log ⁡ ( 1 − D x ( F ( y ) ) ] (1) \max\limits_{D_x}\mathbb{E}_{x\sim P_{data}(X)}\left[\log D_x(x)\right]+\mathbb{E}_{y\sim P_{data}(Y)}\left[\log (1-D_x(F(y))\right]\tag{1} DxmaxExPdata(X)[logDx(x)]+EyPdata(Y)[log(1Dx(F(y))](1)
D y D_y Dy
max ⁡ D y E y ∼ P d a t a ( Y ) [ log ⁡ D y ( y ) ] + E x ∼ P d a t a ( X ) [ log ⁡ ( 1 − D y ( G ( x ) ) ] (2) \max\limits_{D_y}\mathbb{E}_{y\sim P_{data}(Y)}\left[\log D_y(y)\right]+\mathbb{E}_{x\sim P_{data}(X)}\left[\log (1-D_y(G(x))\right]\tag{2} DymaxEyPdata(Y)[logDy(y)]+ExPdata(X)[log(1Dy(G(x))](2)
生成网络

同GAN一样,生成网络希望生成的图像能够欺骗判别网络

对G
min ⁡ G E x ∼ P d a t a ( X ) [ log ⁡ ( 1 − D y ( G ( x ) ) ] (3) \min\limits_{G}\mathbb{E}_{x\sim P_{data}(X)}\left[\log (1-D_y(G(x))\right]\tag{3} GminExPdata(X)[log(1Dy(G(x))](3)
对F
min ⁡ F E y ∼ P d a t a ( Y ) [ log ⁡ ( 1 − D x ( F ( y ) ) ] (4) \min\limits_{F}\mathbb{E}_{y\sim P_{data}(Y)}\left[\log (1-D_x(F(y))\right]\tag{4} FminEyPdata(Y)[log(1Dx(F(y))](4)
整合(2)、(3)得
L G A N ( G , D y , X , Y ) = min ⁡ G max ⁡ D y E y ∼ P d a t a ( Y ) [ log ⁡ D y ( y ) ] + E x ∼ P d a t a ( X ) [ log ⁡ ( 1 − D y ( G ( x ) ) ] (5) \mathcal{L}_{GAN}(G,D_y,X,Y)=\min\limits_{G}\max\limits_{D_y}\mathbb{E}_{y\sim P_{data}(Y)}\left[\log D_y(y)\right]+\mathbb{E}_{x\sim P_{data}(X)}\left[\log (1-D_y(G(x))\right]\tag{5} LGAN(G,Dy,X,Y)=GminDymaxEyPdata(Y)[logDy(y)]+ExPdata(X)[log(1Dy(G(x))](5)
整合(1)、(4)得
L G A N ( F , D x , Y , X ) = min ⁡ F max ⁡ D x E x ∼ P d a t a ( X ) [ log ⁡ D x ( x ) ] + E y ∼ P d a t a ( Y ) [ log ⁡ ( 1 − D x ( F ( y ) ) ] (6) \mathcal{L}_{GAN}(F,D_x,Y,X)=\min\limits_{F}\max\limits_{D_x}\mathbb{E}_{x\sim P_{data}(X)}\left[\log D_x(x)\right]+\mathbb{E}_{y\sim P_{data}(Y)}\left[\log (1-D_x(F(y))\right]\tag{6} LGAN(F,Dx,Y,X)=FminDxmaxExPdata(X)[logDx(x)]+EyPdata(Y)[log(1Dx(F(y))](6)

2.2、循环一致性损失(Cycle Consistency Loss)

有了以上的损失函数,当生成网络(如 Y ^ = G ( X ) \hat Y=G(X) Y^=G(X))生成图像,上面的函数只能够保证真实的Y和 Y ^ \hat Y Y^的概率分布是一样的,但是却无法保证两张图像除了风格以外,其他东西不变。于是,作者加入循环一致性损失

在这里插入图片描述

也就是,当我们把X通过生成网络G生成 Y ^ \hat Y Y^,我们希望可以将 Y ^ \hat Y Y^输入给生成网络,从而得到 X ^ \hat X X^,让 X X X X ^ \hat X X^的差别最小。所以损失函数设定如下
L C y c l e ( G , F ) = E x ∼ P d a t a ( X ) [ ∣ ∣ F ( G ( x ) ) − x ∣ ∣ 1 ] + E y ∼ P d a t a ( Y ) [ ∣ ∣ G ( F ( y ) ) − y ∣ ∣ 1 ] (7) \mathcal{L}_{Cycle}(G,F)=\mathbb{E}_{x\sim P_{data}(X)}\left[||F(G(x))-x||_1\right]+\mathbb{E}_{y\sim P_{data}(Y)}\left[||G(F(y))-y||_1\right]\tag{7} LCycle(G,F)=ExPdata(X)[∣∣F(G(x))x1]+EyPdata(Y)[∣∣G(F(y))y1](7)
综合(5)、(6)、(7)可得最终损失函数
L ( G , F , D x , D y ) = L G A N ( G , D y , X , Y ) + L G A N ( F , D x , Y , X ) + λ L C y c l e ( G , F ) (8) \mathcal{L}(G,F,D_x,D_y)=\mathcal{L}_{GAN}(G,D_y,X,Y)+\mathcal{L}_{GAN}(F,D_x,Y,X)+\lambda\mathcal{L}_{Cycle}(G,F)\tag{8} L(G,F,Dx,Dy)=LGAN(G,Dy,X,Y)+LGAN(F,Dx,Y,X)+λLCycle(G,F)(8)
其中 λ \lambda λ是一个超参数,用于调节重要度的

2.3、鉴别损失

这个损失并非是必要的,作者在论文中提到,当模型做绘画转图像的任务时,加入这个鉴别损失,能够有效提高转化质量,其公式为
L i d e n t i t y ( G , F ) = E y ∼ P d a t a ( Y ) [ ∣ ∣ G ( y ) − y ∣ ∣ 1 ] + E x ∼ P d a t a ( X ) [ ∣ ∣ F ( x ) − x ∣ ∣ 1 ] (9) \mathcal{L}_{\mathbb{identity}}(G,F)=\mathbb{E}_{y\sim P_{data}(Y)}\left[||G(y)-y||_1\right]+\mathbb{E}_{x \sim P_{data}(X)}\left[||F(x)-x||_1\right]\tag{9} Lidentity(G,F)=EyPdata(Y)[∣∣G(y)y1]+ExPdata(X)[∣∣F(x)x1](9)
论文提到——“没有 L i d e n t i t y L_{\mathbb{identity}} Lidentity ,生成器G和F可以在不需要的时候自由地改变输入图像的色彩,比如画像的白天转化为图片后,会变成黄昏”。如图

在这里插入图片描述

​ 这个损失函数的理解我暂时没想明白,等以后想通了再回来补,如果您知道,还望指出!给您跪了!

3、结束

好了,以上便是这篇论文的主要内容了,如有问题,还望指出,阿里嘎多!

在这里插入图片描述

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

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

相关文章

黑马鸿蒙学习5:LIST容器

LIST容器,其实就是如果FOREACH容器展示不全的话,会自动有滚动条了。要注意的是,LIST中必须有固定的listitem这个项,而且列表里面只能包含一个根组件。 必须把ROW容器放到listitem中,如下:

数学建模--非线性规划模型+MATLAB代码保姆式解析

目录 1.简单介绍 2.求解方法 3.适用赛题 4.典型例题及相关分析 (1)问题引入 (2)决策变量&约束条件 (3)确定目标函数 (4)建立数学模型 5.MATLAB代码祝逐字句讲解 1.简单…

(四)SQL面试题(连续登录、近N日留存)学习简要笔记 #CDA学习打卡

目录 一. 连续登录N天的用户数量 1)举例题目 2)分析思路 3)解题步骤 (a)Step1:选择12月的记录,并根据用户ID和登录日期先去重 (b)Step2:创建辅助列a_rk…

stl_set

文章目录 set1.关联式容器2.键值对3. set3.1 set介绍3.2 set的使用3.2.1 pair3.2.2 find3.2.3 lower_bound 3.3 multiset3.3.1 multiset的介绍3.3.2 multiset的使用3.3.3 find3.3.4 equal_range3.3.5 erase set 1.关联式容器 在初阶阶段,我们已经接触过STL中的部分…

Zynq 7000 系列中的JTAG和DAP子系统

Zynq 7000系列SoC器件通过标准JTAG调试接口提供调试访问。在内部,SoC设备器件在处理系统(PS)内部实现了一个Arm调试访问端口(DAP),同时在可编程逻辑(PL)内部实现了一个标准的JTAG测试…

中国人为什么不说自信,而说信天

中国人从来不说自信,中国人信天,老天爷是最公平的。做好自己,天命注定,我都这么努力了,老天爷不帮我帮谁? 中国人信天是有逻辑关系的,很简单:做错事情了或者结果不好了,…

LeetCode - 283.移动零

题目链接&#xff1a; LeetCode - 283.移动零 题目分析&#xff1a; ​​​​​ 题解代码&#xff1a; #include<iostream> #include<vector> using namespace std;class Solution { public:void moveZeroes(vector<int>& nums) {for (int cur 0, des…

Kafka入门介绍+集群部署+简单使用

Kafka入门介绍集群部署简单使用 简介核心概念Broker&#xff08;服务节点/实例&#xff09;Producer&#xff08;生产者&#xff09;Topic&#xff08;主题&#xff09;Partition&#xff08;分区&#xff09;Consumer&#xff08;消费者&#xff09;和Consumer Group&#xff…

volatility内存取证

记录一道volatility内存取证的题目&#xff0c;第一次遇到&#xff0c;现场把环境搞出来&#xff0c;现记录一些操作指令。 一、安装volatility3 1、新建一个kali虚拟机 新建的过程不再赘述。 2、下载volatility3 GitHub - volatilityfoundation/volatility3: Volatility …

21.组件组成

组件组成 组件最大的优势就是可复用性 当使用构建步骤时&#xff0c;我们一般会将 Vue 组件定义在一个单独的 .vue 文件中&#xff0c;这被叫做单文件组件(简称 SFC) 组件组成结构 <template><div>承载标签</div> </template> <script> expor…

政安晨:【Keras机器学习示例演绎】(六)—— 通过 CT 扫描进行 3D 图像分类

目录 简介 设置 下载 MosMedData&#xff1a;胸部CT扫描与COVID-19相关发现 加载数据和预处理 建立训练和验证数据集 数据增强 定义 3D 卷积神经网络 训练模型 模型性能可视化 通过一次 CT 扫描进行预测 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍…

图像处理的魔法师:Pillow 库探秘

文章目录 图像处理的魔法师&#xff1a;Pillow 库探秘第一部分&#xff1a;背景介绍第二部分&#xff1a;库是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解…

黑马---苍穹外卖总结上

1.功能模块 1.1 管理端功能 员工登录/退出 , 员工信息管理 , 分类管理 , 菜品管理 , 套餐管理 , 菜品口味管理 , 订单管理 &#xff0c;数据统计&#xff0c;来单提醒。 模块描述登录/退出内部员工必须登录后,才可以访问系统管理后台员工管理管理员可以在系统后台对员工信息进…

layui框架实战案例(27):弹出二次验证

HTML容器 <button class"layui-btn layui-btn-sm layui-btn-danger" lay-event"delete"><i class"layui-icon layui-icon-delete"></i>批量删除</button>删除封装函数 function delAll(school_id, school_name) {var lo…

Java 笔记 03:Java 基础知识,使用 IDEA 创建 Java 项目、设置注释颜色,以及自动生成 JavaDoc

一、前言 记录时间 [2024-04-21] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 02&#xff1a;Java 开发环境的搭建&#xff0c;IDEA / Notepad / JDK 安装及环境配置&#xff0c;编写第一个 Java 程序 本文讲述了…

图论学习总结

目录 图论学习总结前言一、基础知识图的存储图的遍历 二、最短路多源最短路 F l o y d Floyd Floyd​ 算法例题及变形 e g 1 &#xff1a; S o r t i n g I t A l l O u t eg1&#xff1a;Sorting\ It\ All\ Out eg1&#xff1a;Sorting It All Out ( 蓝书例题&#xff0c;传递…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(2)——架构分析 - 核心思想环境搭建技术选型

4.架构分析 4.1.核心思想 超越一阶提示&#xff0c;通过增加静态知识库和信息检索方案或简单的总结方案来扩展语言模型。 将这些想法扩展到构建一个代理架构&#xff0c;该架构处理检索&#xff0c;其中过去的经验在每个时步动态更新&#xff0c;并混合与npc当前上下文和计划…

计算机视觉——OpenCV Python位运算与图像掩码

概述 位运算与图像掩码的结合允许对图像的特定区域进行精确的操作。通过使用位运算&#xff08;如AND、OR、XOR和NOT&#xff09;&#xff0c;可以基于掩码的选择性地修改图像数据。位运算与图像掩码结合使用的一些关键点和应用场景&#xff1a; 选择性修改&#xff1a; 通过位…

李宏毅2022机器学习/深度学习 个人笔记(1)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录第一讲&#xff08;选修&#xff09;&#xff1a;神奇宝贝分类 如图&#xff0c;为了估算某个样本属于某类的概率&#xff0c;在二分类问题中&#xff0c;我们需要计算红框所示的4个参数&#xff0…

语义分割知识点:UNet、FCN、SegNet、PSPNet、DeepLab系列

语义分割知识点&#xff1a;UNet、FCN、SegNet、PSPNet、DeepLab系列 前言语义分割网络剖析UNet系列UNetUNet网络有几个主要的特点&#xff1a;从UNet结构图可以知道&#xff0c;收敛路径主要的过程为简要总结&#xff1a; UNet为什么UNet可以被剪枝?如何剪枝? 根据子网络在验…