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. 风格迁移
https://zh-v2.d2l.ai/chapter_computer-vision/neural-style.html
相关文章:
49 样式迁移【李沐动手学深度学习v2课程笔记】
1. 样式迁移(Style Transfer) 计算机视觉的应用之一,将样式图片中的样式(比如油画风格等)迁移到内容图片(比如实拍的图片)上,得到合成图片 可以理解成为一个滤镜,但相对于滤镜来讲…...
Linux的学习之路:4、权限
一、Linux权限的概念 权限我们都熟悉,最常见的就是在看电视时需要vip这个就是权限,然后在Linux就是有两个权限,就是管理员也就是超级用户和普通的用户 命令:su [用户名] 功能:切换用户。 例如,要从root用户…...
自定义类型—结构体
目录 1 . 结构体类型的声明 1.1 结构的声明 1.2 结构体变量的创建与初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 2. 结构体内存对齐 2.1 对齐规则 2.2 为什么存在内存对齐 2.3 修改默认对齐数 3. 结构体传参 4.结构体实现位段 4.1 位段的内存分配 4.3 位段的…...
【JavaWeb】Jsp基本教程
目录 JSP概述作用一个简单的案例:使用JSP页面输出当前日期 JSP处理过程JSP 生命周期编译阶段初始化阶段执行阶段销毁阶段案例 JSP页面的元素JSP指令JSP中的page指令Include指令示例 taglib指令 JSP中的小脚本与表达式JSP中的声明JSP中的注释HTML的注释JSP注释 JSP行…...
外包干了25天,技术退步明显.......
先说一下自己的情况,大专生,18年通过校招进入杭州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...
C++(14): STL条件变量std::condition_variable
1. 简述 在C的标准模板库(STL)中,std::condition_variable是一个非常重要的同步原语,用于在多线程编程中实现线程间的条件同步。它允许一个或多个线程等待某个条件成立,当条件成立时,等待的线程会被唤醒并继…...
Harmony与Android项目结构对比
主要文件对应 Android文件HarmonyOS文件清单文件AndroidManifest.xmlmodule.json5Activity/Fragmententryability下的ts文件XML布局pages下的ets文件resresourcesModule下的build.gradleModule下的build-profile.json5gradlehvigor根目录下的build.gradle根目录下的build-profi…...
langchain 学习笔记-FunctionCalling三种方式
ChatGPT 基于海量的训练数据生成答案,所以它无法回答训练数据中没有的信息或搜索信息 。人们希望 ChatGPT 具有对话以外的各种功能,例如“我想管理我的待办事项列表”。 函数调用是对此类请求的响应。 通过使用函数调用,ChatGPT 现在可以在生…...
CNAS软件测试公司有什么好处?如何选择靠谱的软件测试公司?
CNAS认可是中国合格评定国家认可委员会的英文缩写,由国家认证认可监督管理委员会批准设立并授权的国家认可机构,统一负责对认证机构、实验室和检验机构等相关机构的认可工作。 在软件测试行业,CNAS认可具有重要意义。它标志着一个软件测试公…...
Cohere推出全新升级版RAG大型AI模型:支持中文,搭载1040亿参数,现开源其权重!
4月5日,知名类ChatGPT平台Cohere在其官方网站上发布了一款全新的模型——Command R。 据官方消息,Command R拥有1040亿个参数,并且支持包括英语、中文、法语、德语在内的10种语言。这一模型的显著特点之一在于其对内置的RAG(检索增…...
搭建前后端的链接(java)
搭建前后端的链接(java) 一.前提 1.1 javaEE 搭建前后端的链接首先需要用到javaEE,也就是java企业版,也就是java后端(后端javaSE) 利用javaEE和前端交互,javaSE和数据库交互,javaSE和javaEE之间再进行交互就实现了前后端的交互…...
Java多路查找树(含面试大厂题和源码)
多路查找树(Multiway Search Tree),也称为B树或B树,是一种自平衡的树形数据结构,用于存储大量数据,通常用于数据库和文件系统中。它允许在查找、插入和删除操作中保持数据的有序性,同时优化了磁…...
day6 | 哈希表 part-2 | 454 四数相加II 、383. 赎金信、15. 三数之和、18. 四数之和
今日任务 454 四数相加II (题目: . - 力扣(LeetCode))383 赎金信 (题目: . - 力扣(LeetCode)) 454 四数相加II 题目:. - 力扣(LeetCode) 给你四个整数数组 nums1、num…...
Redis常见数据类型(2)
目录 String字符串 常见命令 SET GET MGET MSET SETNX 计数命令 INCR INCRBY DECR DECRBY INCRFLOAT 其它命令 APPEND GETRANGE SETRANGE STRLEN String字符串 字符串是Redis最基础的数据类型, 关于字符串需要特别注意: (1)首先Redis中所有的键的类型都是字符…...
SparkBug解决:Type mismatch; found : org.apache.spark.sql.Column required: Double
def assginFlag(aizmuth:Double):Option[Int] {val interval 0.5val index (aizmuth / interval ).toIntif (index > 0 && index < 720 ) Some(index 1) else None} assginFlag方法中的条件判断条件 (index > 0 && index < 720) 返回的是一个布…...
MQ之————如何保证消息的可靠性
MQ之保证消息的可靠性 1.消费端消息可靠性保证: 1.1 消息确认(Acknowledgements): 消费者在接收到消息后,默认情况下RabbitMQ会自动确认消息(autoAcktrue)。为保证消息可靠性,可以…...
TrollInstallerX官方一键安装巨魔商店
TrollInstallerX是巨魔官方开发的一款一键巨魔商店安装器,完美支持iOS 14.0 – 16.6.1的设备,操作非常简单,TrollInstallerX依然有个小小的限制,部分机型,还是要采用间接安装方法。 一,直接安装方法 通过…...
生成随机图片验证码
随着互联网的不断发展,安全性问题日益突出。为了保障用户账号的安全性,很多网站都引入了验证码机制。验证码是一种区分用户是计算机还是人的公共全自动程序,可以有效防止恶意攻击和自动化脚本的滥用。本文将介绍如何使用Python生成随机图片验…...
【0280】《数据库系统概论》阅读总结(附xmind思维导图)
0. 阅读进展 选择性地读取了《数据库系统概论》一书中的第13、14章节,并对这两章节中较为重点的内容作了总结和归纳;然后以xmind导图形式给出。 1. xmind思维导图 Xmind附件:...
数据结构(二)----线性表(顺序表,链表)
目录 1.线性表的概念 2.线性表的基本操作 3.存储线性表的方式 (1)顺序表 •顺序表的概念 •顺序表的实现 静态分配: 动态分配: 顺序表的插入: 顺序表的删除: 顺序表的按位查找: 顺序…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
