49 样式迁移【李沐动手学深度学习v2课程笔记】

1. 样式迁移(Style Transfer)

· 计算机视觉的应用之一,将样式图片中的样式(比如油画风格等)迁移到内容图片(比如实拍的图片)上,得到合成图片
· 可以理解成为一个滤镜,但相对于滤镜来讲具有更大的灵活性,一个滤镜通常只能够改变图片的某个方面,如果要达到理想中的风格,可能需要尝试大量不同的组合,这个过程的复杂程度不亚于模型调参 

1.1 基于CNN的样式迁移

奠基性工作:使用神经网络修改内容图片,使其在样式上接近风格图片 ,上图中的内容图像为西雅图郊区的雷尼尔山国家公园风景照,样式图像为主题为秋天橡树的油画,最终输出的合成图像应用了样式图像的油画笔触让整体颜色更加鲜艳,同时保留了内容图像中物体主体的形状

 

1、首先初始化合成图片(例如将其初始化为内容图片)

· 输入中有一张内容图片(Content Image)和一张样式图片(Style Image)
· 模型所要训练的不是卷积神经网络的权重,而是合成图片,它是样式迁移过程中唯一需要更新的变量,即样式迁移所需迭代的参数模型


2、然后选择一个预训练的卷积神经网络来抽取图片的特征(该卷积神经网络的模型参数在训练中不用更新)

内容图片、样式图片之后和合成图片(Synthesised Image)之前各有一个卷积神经网络,上图中只画了三层,看起来有三个三层的卷积神经网络,实际上三个卷积神经网络都是一样的(它们的权重是一样的)


3、这个深度神经网络凭借多个层逐级抽取图像的特征,因此可以选择其中某些层的输出作为内容特征或者样式特征(上图中的卷积神经网络第二层输出内容特征,第一层和第三层输出样式特征)

· 对于一张输入图片来讲,每一层的卷积神经网络都会有一个输出(特征),整个基于 CNN 的样式迁移的目的是训练出一张合成图片,使得合成图片和内容图片放进同样一个卷积神经网络的时候,合成图片在某一层的输出能够匹配上内容图片在某一层的损失(内容损失,Content Loss),即它们在内容上是相近的;同理,合成图片和内容图片所使用的是同一个卷积神经网络,在某些层的输出(特征)在样式上能够匹配的上。如果训练出一张合成图片同时满足以上需求的话,就可以认为它既保留了内容图片的内容,又保留了样式图片的样式
·

一般来说,越靠近输入层,越容易抽取图片的细节信息;反之,越容易抽取图片的全局信息
为了避免合成图片过多地保留内容图片的细节,选择靠近输出的层(即内容层)来输出图片的内容特征

· 选择不同层的输出(即风格层)来匹配局部和全局的样式

· 在使用卷积神经网络抽取特征时,只需要用到从输入层到最靠近输出层的内容层或者样式层之间的所有层

· 因为在训练的时候无需改变预训练的卷积神经网络的模型参数,所以可以在训练开始之前就提取出内容特征和风格特征


4、通过前向传播(实线箭头方向)计算样式迁移的损失函数,并通过反向传播(虚线箭头方向)迭代模型参数,即不断更新合成图片

样式迁移常用的损失函数由三部分组成:

(1)内容损失通过平方误差函数衡量合成图片与内容图片在内容特征上的差异,使合成图片与内容图片在内容特征上接近;

(2)样式损失也是通过平方误差函数衡量合成图片与样式图片在样式特征上的差异,使合成图片与样式图片在样式特征上接近;

(3)全变分损失有助于减少合成图片中的噪点,有时学到的合成图像中有大量高频噪点(即有特别亮或者特别暗的颗粒像素),常用全变分去噪(Total Variation Denoising),通过降低全变分损失,能够尽可能使临近的像素值相似,来进行去噪

样式迁移的损失函数是内容损失、样式损失和总变化损失的加权和,通过调节这些权重超参数,可以权衡合成图片在保留内容、样式迁移以及去噪三方面的相对重要性

对于给定的输入,如果简单地调用前向传播函数,只能获得最后一层的输出,因为还需要中间层的输出,所以需要进行逐层计算,保留内容层和风格层的输出

在样式迁移中,合成图片是训练期间唯一需要更新的变量,因此可以将合成图片视为模型参数,模型的前向传播只需要返回模型参数即可


5、最后当模型训练结束时,输出样式迁移的模型参数即为最终的合成图片

因为合成图片是样式迁移所需迭代的模型参数,所以只能在训练的过程中抽取合成图片的内容特征和样式特征。合成图片保留了内容图片的内容,并同时迁移了样式图片的样式 

13.12. 风格迁移icon-default.png?t=N7T8https://zh-v2.d2l.ai/chapter_computer-vision/neural-style.html

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

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

相关文章

leetcode 常考题-动态规划算法-单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s "leetcode"…

七分钟,拿下口头offer

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 个人IP:shigen 🧑‍💻🧑‍💻面2:行了…

每日一题 — 最大连续 1 的个数III

解法一:暴力枚举 先定义left和right双指针,left先固定在起始位置,遍历right当值等于1的时候,直接跳过,等于0的时候,zero计数器加一当zero等于k的时候,就开始记录此时最大长度是多少然后left加一…

做抖店要用到的东西:什么是精选联盟?开通到使用一篇详解!

哈喽~我是电商月月 做抖音小店的新手朋友在翻阅资料时一定接触过精选联盟这个东西 但它到底是干嘛的?如何开通。又是如何使用!还没入手的朋友是不知道的 所以,今天我就给大家讲解一下精选联盟的入驻方法,以及在运营时要怎么正确…

蓝桥杯第十届c++大学B组详解

目录 1.组队 2.年号字符 3.数列求值 4.数的分解 5.迷宫 6.特别数的和 7.完全二叉树的权值 8.等差数列 9.后缀表达式 10.灵能传输 1.组队 题目解析:就是在个篮球人中选择这个最大的成绩,每个人只能选择一次不能重复选择。选满5人之后的成绩是最…

企业如何部署有效的防泄密软件策略?

在企业信息化飞速发展的今天,数据泄露的后果可能是灾难性的,不仅会导致经济损失,还可能损害公司的声誉。因此,制定和部署一个全面而有效的防泄密软件策略对于防范这种风险至关重要。策略的目标不仅是阻止外部攻击,更要…

《C++程序设计》阅读笔记【7-堆和拷贝构造函数】

🌈个人主页:godspeed_lucip 🔥 系列专栏:《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学,回复C程序设计获取下载链接。 1 堆与拷贝构造函数1.1 概述1.2 分配堆对象1.3 拷贝构造函数1.3.1 默…

多线程(进阶篇小白易懂版)

文章目录 多线程为什么要有多线程多线程案例线程通讯分传主线程通讯主传分关闭线程线程锁 多线程 概念:多线程就是多个线程同时工作的过程,我们可以将线程看作是程序的执行路径,每个线程都定义了一个独特的控制流,用来完成特定的…

DataX 数据库同步部分源码解析

在工作中遇到异构数据库同步的问题,从Oracle数据库同步数据到Postgres,其中的很多数据库表超过百万,并且包含空间字段。经过筛选,选择了开源的DataXDataX Web作为基础框架。DataX 是阿里云的开源产品,大厂的产品值得信赖&#xff…

【JavaWeb】Day39.MySQL概述——数据库设计-DQL(二)

数据库设计-DQL 聚合函数 聚合函数查询就是纵向查询,它是对一列的值进行计算,然后返回一个结果值。(将一列数据作为一个整体,进行纵向计算) 语法: select 聚合函数(字段列表) from 表名 ; 注意 : 聚合…

LeetCode 热题 100 | 多维动态规划(二)

目录 1 5. 最长回文子串 2 1143. 最长公共子序列 菜鸟做题,语言是 C 1 5. 最长回文子串 核心思想:把总问题拆解为若干子问题。 总问题:从第 i 个字母到第 j 个字母是回文串子问题:从第 i 1 个字母到第 j - 1 个字母是回文…

Obsidian的初步了解、安装及使用

一、为什么是Obsidian? 笔记软件我用的还是比较多了,一开始用有道云笔记,其实我个人觉得有道云笔记还是做的不错的,除了广告多点、功能弱一点、更新慢一点、偶尔收藏会有问题以外还是不错的,免费软件里性价比算是还可…

前端开发中地图定位与距离计算的应用实践

前端开发中地图定位与距离计算的应用实践 在前端开发中,地图功能的应用日益广泛,无论是用户位置的定位、目标距离的计算,还是地址的解析与展示,地图都发挥着不可替代的作用。本文将重点介绍前端开发中实现地图定位、距离计算以及…

windows 系统下全新下载安装 mysql8.0 数据库(详细)

windows 系统下全新下载安装 mysql8.0 数据库(详细) 段子手168 1、登录官方网站下载: https://dev.mysql.com/downloads/windows/installer/ 2、下载最新版本,一般可能需要注册登录,下载其他历史版本,请…

【LAMMPS学习】八、基础知识(1.3)从一个输入脚本运行多个模拟

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

【智能算法】省时方便,智能算法统计指标——一键运行~

目录 1.常用统计指标2.参数统计检验3.结果展示4.自定义修改测试框架 1.常用统计指标 测试智能算法性能时,常常会用到以下5种常用指标,简单不赘述: 最优值、最差值、均值、中位数、标准差 2.参数统计检验 单纯依靠常用统计指标说服力不足&…

【noVNC】使用noVNC实现浏览器网页访问vnc(基于web的远程桌面)

1.VNC本身提供的http连接方式,可传输文件,画面有卡顿,需要安装jre 2.noVNC访问方式,不可传输文件,画面较为流畅,不用安装插件运行环境 一、noVNC 是什么 Web 端的Vnc软件,通过noVNC&#xff0…

CSS 实现伸缩导航仪表板侧边栏菜单

CSS 实现伸缩导航仪表板侧边栏菜单 效果展示 展开状态 收起状态 CSS 知识点 回顾曲面圆角的实现知识点 字体库准备 菜单的图标使用的是ionicons的图标库&#xff0c;所以需要页面需要引入对应的文件。 <scripttype"module"src"https://unpkg.com/i…

进程间通信 (匿名管道)

一、进程间通信的概念 进程间通信是一个进程把自己的数据交给另一个进程&#xff0c;它可以帮助我们进行数据传输、资源共享、通知事件和进程控制。 进程间通信的本质是让不同的进程看到同一份资源。因此&#xff0c;我们要有&#xff1a; 1、交换数据的空间。2、这个空间不能由…

CNN-Transformer时间序列预测

部分代码&#xff1a; # CNN-Transformer class CNNTransformerEncoder(nn.Module):def __init__(self, input_features, transformer_encoder_heads,embedding_features, cnn_kernel_size, dim_feedforward_enc, n_encoder_layer):super(CNNTransformerEncoder, self).__init…