U-GAT-IT 使用指南:人脸动漫风格化

2023-12-01 16:52

本文主要是介绍U-GAT-IT 使用指南:人脸动漫风格化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

U-GAT-IT 使用指南

    • 网络结构
      • 优化目标

 


论文地址:https://arxiv.org/pdf/1907.10830.pdf

项目代码:https://github.com/taki0112/UGATIT

U-GAT-IT 和 Pix2Pix 的区别:

  • U-GAT-IT:主要应用于图像风格转换、图像翻译和图像增强等任务,适用于将图像从一个领域转换到另一个领域的应用

  • PIX2PIX:主要应用于图像转换任务,例如将线稿转换为彩色图像、将语义标签转换为真实图像等,适用于输入和输出之间存在明确映射关系的应用。

网络结构

生成器

注意力机制 CAM:全局池化和平均池化的类激活图。

  • 假设我们要对一张狗的图片进行分类,判断它是不是一只狗。我们使用了一个卷积神经网络(CNN)进行分类,并得到了一个类激活图(CAM)。

  • 在这张狗的图片中,CAM显示了狗的脸部区域比较亮,其他区域较暗。这意味着网络在分类时主要关注狗的脸部来判断它是否是一只狗。

实现方式是,通过权重(生成器图的 w 1 、 w 2 、 w 3 w_{1}、w_{2}、w_{3} w1w2w3):

  • 特征图编码:输入图片经过下采样、残差模块,卷积提取特征,得到特征图
  • 通道注意力:每个特征图对应一个权重 w,N 个特征图对应 N 个权重。权重就是通道注意力机制,每个通道对应不同特征(眼睛、鼻子、毛发、耳朵)
  • 新特征图分类:新特征图的重要性,通过全连接层分类器学习,ta就知道了分类的核心特征是猫脸

判别器

基本相同,也是通道注意力机制。

AdaLIN 结合了 Layer Normalization(LN)和 Instance Normalization(IN)各自的优点,实现归一化。

  • LN:多个通道进行归一化,获取全局特征
  • IN:各个图像特征图单独归一化,保留内容结构

把两者结合起来,互相抵消他们之间的不足,同时又结合了两者的优点。

最朴素的思想是寻找一个比率,来权衡某一层中 IN 与 LN 的关系:

  • ρ ⋅ I N + ( 1 − ρ ) ⋅ L N \rho\cdot IN+(1-\rho)\cdot LN ρIN+(1ρ)LN

完整是这样:

  • A d a L I N ( a , γ , β ) = γ ⋅ ( ρ ⋅ a ^ I + ( 1 − ρ ) ⋅ a L ^ ) + β a I ^ = a − μ I σ I 2 + ϵ , a L ^ = a − μ L σ L 2 + ϵ , ρ ← c l i p [ 0 , 1 ] ( ρ − τ Δ ρ ) \begin{aligned} AdaLIN& (a,\gamma,\beta)=\gamma\cdot(\rho\cdot\hat{a}_{I}+(1-\rho)\cdot\hat{a_{L}})+\beta \\ &\hat{a_{I}}=\frac{a-\mu_{I}}{\sqrt{\sigma_{I}^{2}+\epsilon}},\hat{a_{L}}=\frac{a-\mu_{L}}{\sqrt{\sigma_{L}^{2}+\epsilon}}, \\ &\rho\leftarrow clip_{[0,1]}(\rho-\tau\Delta\rho) \end{aligned} AdaLIN(a,γ,β)=γ(ρa^I+(1ρ)aL^)+βaI^=σI2+ϵ aμI,aL^=σL2+ϵ aμL,ρclip[0,1](ρτΔρ)

这个公式是AdaLIN的具体计算公式,其中:

  • a a a是输入特征图
  • γ \gamma γ β \beta β是可学习的参数,分别用于缩放和偏移
  • ρ \rho ρ是用于调整Layer Normalization和Instance Normalization的权重的参数
  • a I ^ \hat{a_{I}} aI^ a L ^ \hat{a_{L}} aL^是通过Instance Normalization和Layer Normalization对输入特征图进行归一化得到的结果
  • μ I \mu_{I} μI σ I \sigma_{I} σI是Instance Normalization中计算的均值和标准差
  • μ L \mu_{L} μL σ L \sigma_{L} σL是Layer Normalization中计算的均值和标准差
  • ϵ \epsilon ϵ是一个小的常数,用于避免分母为0的情况
  • c l i p [ 0 , 1 ] clip_{[0,1]} clip[0,1]表示将 ρ \rho ρ限制在0和1之间
  • Δ ρ \Delta\rho Δρ是一个可学习的参数,用于更新 ρ \rho ρ
  • τ \tau τ是一个调整步长的超参数

当 IN 更有用时, ρ \rho ρ 趋向于 1.

当 LN 更有用时, ρ \rho ρ 趋向于 0.

优化目标

对抗损失: L g a n s → t = E ⁡ x ∼ X t ⌊ ( D t ( x ) ) 2 ⌋ + E ⁡ x ∼ X s ⌊ ( 1 − D t ( G s → t ( x ) ) ) 2 ⌋ L_{gan}^{s\to t}=\operatorname{E}_{x\sim X_t}\left\lfloor(D_t(x))^2\right\rfloor+\operatorname{E}_{x\sim X_s}\left\lfloor(1-D_t(G_{s\to t}(x)))^2\right\rfloor Lganst=ExXt(Dt(x))2+ExXs(1Dt(Gst(x)))2

  • 判别是真实图像,还是生成图像
  • s − > t s->t s>t:S是真实图像(源域),T是生成图像(目标域)
  • 源域和目标域:在图像翻译任务中,源域可以是一个领域(如马)的图像集合,而目标域可以是另一个领域(如斑马)的图像集合。我们的目标是将马的图像转换成斑马的图像。
  • E ⁡ x ∼ X t \operatorname{E}_{x\sim X_t} ExXt:图像来自真实目标域,即 x 从 X t X_t Xt 真实目标域取值
  • 我们希望小猫咪能够像小狗狗一样学会叫声。我们让小猫咪通过观察小狗狗的叫声来学习。小猫咪会尝试发出自己的叫声,然后小狗狗会判断这个声音是不是来自于小狗狗。如果小狗狗认为声音是来自于小狗狗,那么我们会说小猫咪的叫声越接近真实的小狗狗叫声。
  • D t ( x ) D_t(x) Dt(x) 表示小狗狗判别器对于真实目标域的小狗狗叫声 x x x的真实性判断。
  • G s → t ( x ) G_{s\to t}(x) Gst(x) 是小猫咪通过模仿小狗狗学习到的叫声。
  • D t ( G s → t ( x ) ) D_t(G_{s\to t}(x)) Dt(Gst(x)) 是小狗狗判断小猫咪模拟的叫声 G s → t ( x ) G_{s\to t}(x) Gst(x) 的真实性。
  • 1 − D t ( G s → t ( x ) ) 1-D_t(G_{s\to t}(x)) 1Dt(Gst(x)) 是小狗狗判断小猫咪模拟的叫声 G s → t ( x ) G_{s\to t}(x) Gst(x) 的不真实性(伪造概率)。

身份不变损失: L i d e n t i t y s → t = E ⁡ x ∼ X t [ ∥ x − G s → t ( x ) ∥ 1 ] L_{identity}^{s\to t}=\operatorname{E}_{x\sim X_t}\left[\left\|x-G_{s\to t}(x)\right\|_1\right] Lidentityst=ExXt[xGst(x)1]

  • 要把输入图片变成猫的图片,如果输入图片本身就是猫,那就不用变了。

循环一致性损失: L c y c l e s → t = E ⁡ x ∼ X s [ ∣ x − G t → s ( G s → t ( x ) ) ∣ 1 ] L_{cycle}^{s\to t}=\operatorname{E}_{x\sim X_s}\left[\left|x-G_{t\to s}\left(G_{s\to t}(x)\right)\right|_1\right] Lcyclest=ExXs[xGts(Gst(x))1]

  • 正向变换过后,逆向还能变回来。

 

CAM 的生成器、判别器损失: L c a m G t → t = − E x ∼ X s [ log ⁡ ( η s ( x ) ) ] + E x ∼ X t [ log ⁡ ( 1 − η s ( x ) ) ] L c a m D t = E x ∼ X t [ ( η D t ( x ) ) 2 ] + E x ∼ X s [ log ⁡ ( 1 − η D t ( G s → t ( x ) ) ) 2 ] \begin{aligned}L_{cam}^{G_{t\to t}}&=-\mathrm{E}_{_{x\sim X_s}}\big[\log\big(\eta_s\big(x\big)\big)\big]+\mathrm{E}_{_{x\sim X_t}}\big[\log\big(1-\eta_s\big(x\big)\big)\big]\\\\L_{_{cam}}^{D_t}&=\mathrm{E}_{_{x\sim X_t}}\big[\big(\eta_{D_t}\big(x\big)\big)^2\big]+\mathrm{E}_{_{x\sim X_s}}\big[\log\big(1-\eta_{_{D_t}}\big(G_{_{s\to t}}\big(x\big)\big)\big)^2\big]\end{aligned} LcamGttLcamDt=ExXs[log(ηs(x))]+ExXt[log(1ηs(x))]=ExXt[(ηDt(x))2]+ExXs[log(1ηDt(Gst(x)))2]
 

优化目标: min ⁡ G s → t , G t → s , η s , η t max ⁡ D s , D t , η D s , η D t λ 1 L g a n + λ 2 L c y c l e + λ 3 L i d e n t i t y + λ 4 L c a m \min_{G_{s\to t},G_{t\to s},\eta_s,\eta_t}\max_{D_s,D_t,\eta_{D_s},\eta_{D_t}}\lambda_1L_{gan}+\lambda_2L_{cycle}+\lambda_3L_{identity}+\lambda_4L_{cam} minGst,Gts,ηs,ηtmaxDs,Dt,ηDs,ηDtλ1Lgan+λ2Lcycle+λ3Lidentity+λ4Lcam

  • 权重: λ 1 = 1 , λ 2 = 10 , λ 3 = 10 , λ 4 = 1000. \begin{aligned}\lambda_1=1,\lambda_2=10,\lambda_3=10,\lambda_4=1000.\end{aligned} λ1=1,λ2=10,λ3=10,λ4=1000.

这篇关于U-GAT-IT 使用指南:人脸动漫风格化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441939

相关文章

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Java JSQLParser解析SQL的使用指南

《JavaJSQLParser解析SQL的使用指南》JSQLParser是一个Java语言的SQL语句解析工具,可以将SQL语句解析成为Java类的层次结构,还支持改写SQL,下面我们就来看看它的具... 目录一、引言二、jsQLParser常见类2.1 Class Diagram2.2 Statement

正则表达式r前缀使用指南及如何避免常见错误

《正则表达式r前缀使用指南及如何避免常见错误》正则表达式是处理字符串的强大工具,但它常常伴随着转义字符的复杂性,本文将简洁地讲解r的作用、基本原理,以及如何在实际代码中避免常见错误,感兴趣的朋友一... 目录1. 字符串的双重翻译困境2. 为什么需要 r?3. 常见错误和正确用法4. Unicode 转换的

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

2025最新版Python3.13.1安装使用指南(超详细)

《2025最新版Python3.13.1安装使用指南(超详细)》Python编程语言自诞生以来,已经成为全球最受欢迎的编程语言之一,它简单易学易用,以标准库和功能强大且广泛外挂的扩展库,为用户提供包罗... 目录2025最新版python 3.13.1安装使用指南1. 2025年Python语言最新排名2.

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li