深度学习基础—神经风格迁移

news2025/1/17 4:13:39

1.什么是神经风格迁移


        神经风格迁移就是将一张图片的风格迁移到另一张图片上,生成具有第一张图片风格的新的图片。新图片的主体还是第二张图片,但是风格是第一张图片的。

        如下两组图片都是神经风格迁移的例子:

        将绘画的风格迁移到真实建筑图片中,得到具有绘画风格的建筑图片。为了实现神经风格迁移,我们需要知道卷积网络提取的特征,在不同的神经网络,比如深层的、浅层的。

2.CNN特征可视化


        这一部分,我们将通过可视化来了解一下深度卷积网络学习的内容究竟是什么?

        假如训练了一个卷积神经网络,是一个Alexnet,轻量级网络,我们将看到不同层之间隐藏单元的计算结果。

        来看看第一层的隐藏单元,假设网络遍历了训练集,然后找到使得单元激活最大化的一些图片或图片块。注意在第一层的隐藏单元,只能看到小部分卷积神经,如果要画出来哪些激活了激活单元,只有一小块图片块是有意义的,因为这就是特定单元所能看到的全部。我们选择一个隐藏单元,发现有9个图片最大化激活,然后就可能找到编号1这样的第一行的图片块(这是3个不同的第一层隐藏单元的输出),主要都是色块边界。编号2出现了一个和其他8个图片不一样的特征,由红色和绿色组成的边界。最终,我们可视化了9个隐藏单元的特征图片,如下所示:

        可以发现,第一层主要学习一些简单的特征,比如边缘或者颜色阴影。接下来我们可视化深层的网络输出:

        这是前五层的可视化结果,我们放大第二层隐层单元可视化结果研究一下网络学习的内容:

        第二层检测到更复杂的形状和模式,比如编号1的隐藏单元,检测到很多垂线的垂直图案,编号2似乎检测到在左侧有圆形图案,编号3检测到细的垂线或斜线。

        将第三层的可视化内容放大,编号1似乎对图像左下角的圆形很敏感(车轮等),所以检测到很多车。编号2似乎开始检测到人类,编号3似乎检测特定的图案,蜂窝状或方形,类似这样规律的图案。有些难以看出来,需要手动弄明白检测到什么,但是第三层明显检测到更复杂的模式。

        第四层已经能检测到更明显、更复杂的特征了,编号1检测到狗狗,编号2似乎检测到水,有湖水或者积水,编号3似乎检测到鸟的脚等等。

        第五层检测到更加复杂的事物,编号1似乎是一个狗检测器,但是可以检测到的狗似乎更加多样性。编号2可以检测到键盘或者是键盘质地的物体,可能是有很多点的物体,比如垃圾桶底。编号3可能检测到文字,编号4检测到花。

        总结:可以发现,卷积网络随着变深,每一层学到的特征更加复杂,因此在最终层才可以保证完成复杂的任务,比如图像识别。

3.代价函数


        要构建一个神经风格迁移系统,就需要定义一个代价函数,通过最小化代价函数,可以生成任何想要的图像。

        现在做如下假设,将内容图片定义为C,风格图片定义为S,生成图片定义为G,则可以定义如下代价函数:

        其中,content部分表示内容图片C和生成图片G之间的代价函数,style部分表示风格图片S和生成图片G之间的代价函数。α和β表示权重,是超参数。

        算法的运行如下:

        首先随机生成一副图片,这里假设100*100*3,也就是编号3表示的随机选取像素的白噪声图。然后运行梯度下降法,最小化代价函数J(G),最终得到编号6所示的生成图片。而编号1表示内容图片C,编号2表示风格图片S。

        下面我将拆开代价函数,依次讲讲内容代价函数和风格代价函数的细节。

4.内容代价函数


        假设用隐含层来计算内容代价,如果层数很浅,比如用隐含层1,这个代价函数就会使生成图片非常接近内容图片。然而如果层数很深,那么代价函数就会保证生成图片中的主体内容非常接近内容图片,比如内容图片是金字塔建筑,那么生成图片也包含金字塔。在实际中,这个层在网络中既不会选的太浅也不会选的太深。然后用一个预训练的卷积模型,比如VGG网络或者其他的网络。

        现在,我们假设已经选了l层隐含层,此时就需要用相似度衡量内容图片C和生成图片G的相似程度,如下:

        选择l层得到的生成图片的激活向量,将生成图片的激活向量和内容图片的激活向量取L2范数的平方,前面乘上1/2或者其他归一化手段(也可以不这样干,因为我们也可以用超参数控制),通过梯度下降法,生成的G会很接近内容图片C。

5.风格代价函数


        在上图中,假设选择l层进行风格代价计算,那么我们就需要定义l层各个通道的激活值之间的相关系数。比如下图,我们取出l层的激活值,它的形状是nh*nw*nc的立方体,nc是通道数。

        现在假设nc=5,即有5个通道,取红色通道和黄色通道,那么我们就要取不同通道相同位置的激活值对,比如都选择右下角(编号1)。而其他位置的不同通道间也组成了许多数字对(编号2,3),这些不同通道间数字对有何含义?就需要用到特征可视化的分析了。

        在特征可视化部分我们提到,编号1的通道表示的神经元可能会提取到编号3所示的垂直纹理信息,编号2的通道表示的神经元可能会提取到编号4所示的橙色背景信息。那么,当不同通道间的激活值呈现高相关性时,那么下图中出现垂直纹理的地方也会出现橙色;如果不相关,那么垂直纹理大概率不是橙色的。即相关系数描述了两个通道提取的特征在一张图片同时出现的可能性。

        为了定义风格代价函数,我们首先定义风格图像的相关系数矩阵,如下是风格图像S和第l层的矩阵:

        k和k’表示不同的通道,i和j表示某个通道下的激活值的坐标,a表示该下标下的激活值,即该公式将(i,j,k)和(i,j,k’)下标的激活值相乘,然后累加求和,得到矩阵G的(k,k’)下标的元素,从而得到nc*nc维度的矩阵G(因为有nc个通道,因此k和k’分别都可取nc个值,因此矩阵的维度是nc*nc)。

        注意:严格来说,它是一种非标准的互相关函数,因为我们没有减去平均数,而是将它们直接相乘。在线性代数中这种矩阵有时也叫Gram矩阵。

        按照相同的操作再对生成图像G进行相关系数矩阵进行计算,公式如上。

        注意:如果两个通道中的激活项数值都很大,那么G矩阵也会变得很大,对应地,如果他们不相关那么就会很小。

        有了风格图像和生成图像的相关系数矩阵,就可以定义风格代价函数,如下所示:

        该函数将两个矩阵计算误差,再乘归一化常数,实际上是计算两个矩阵对应元素相减的平方的和,我们把这个式子展开,从k和k’开始作它们的差,把对应的式子写下来,然后把得到的结果都加起来,再在外面加一个平方,但是一般情况下可以不用归一化常数,只要将它乘以一个超参数就行。

        实际上,如果对各层都使用风格代价函数,结果可能变得更好。如果要对各层都使用风格代价函数,那就定义代价函数,把各个层的结果(各层的风格代价函数)都加起来,这样就能定义它们全体了。我们还需要对每个层定义权重,也就是一些额外的超参数,我们用λ来表示。这样能够在网络中使用不同的层,比如浅层的一些可以测量类似边缘这样的低级特征的层以及深层能测量高级特征的层,使得我们的网络在计算风格时能够同时考虑到这些低级和高级特征的相关系数。

        接下来将风格代价函数和内容代价函数带入下式,就得到了神经风格迁移的代价函数:

        使用梯度下降法或更复杂的优化算法来找到一个效果好的生成图像G,并计算J(G)的最小值,最终得到我们想要的图像。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树型名称前面插入图片

需求&#xff1a; 搜索树、树型要显示连线&#xff0c;还有名称前带图片 ui组件&#xff1a;https://devui.design/components/zh-cn/overview 直接上代码 [checkable] false 表示取消复选框 <div class"p-sm"><div class"row"><d-sea…

软件开发----Java基础每日刷题(转载于牛客)

1. 对抽象类的描述正确的是() A 抽象类的方法都是抽象方法 B 一个类可以继承多个抽象类 C 抽象类不能有构造方法 D 抽象类不能被实例化 正确答案&#xff1a;D 解析&#xff1a; A.抽象类可以有非抽象的方法&#xff0c;而接口中的方…

Flythings学习(三)界面交互

文章目录 1 界面切换1.1 打开界面1.2 关闭界面 2 界面活动周期2.1 打开不存在页面的活动流程2.2 打开已存在界面&#xff08;被隐藏的界面&#xff09;2.3 关闭界面的流程 1 界面切换 界面切换的相关函数如下 1.1 打开界面 如果需要打开一个界面&#xff0c;在其他界面的控件…

WebSocket状态码及异常报错1006

文章目录 1.WebSocket协议简介2.WebSocket状态码的作用&#xff1a;3.WebSocket状态码1006详解1.问题原因2.解决方案 1.WebSocket协议简介 WebSocket协议是一种基于TCP的协议&#xff0c;它通过在浏览器和服务器之间建立一条持久的双向通信通道&#xff0c;实现了实时的数据传…

【论文阅读】SAM 2: 分割一切图像和视频

导言 继SAM模型发布以来&#xff0c;Meta公司于2024年8月发布第二个图像分割大模型SAM2。相较于第一代SAM模型&#xff0c;论文提出了第二代“分割任意物体模型” (SAM 2)&#xff0c;旨在解决视频中的可提示视觉分割任务&#xff08;Promptable Visual Segmentation, PVS&…

TVS常规过压保护

一、前言 上一篇文章 TVS选型-CSDN博客https://blog.csdn.net/qq_39543984/article/details/142825929?spm=1001.2014.3001.5501我们介绍了如何通过理论计算选择合适的TVS,TVS主要是防止瞬间过压,因为他的名字就叫瞬态二极管(Transient Voltage Suppressor)。本文就通过理…

自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords

首先&#xff0c;TDK是什么&#xff1f;对于新手小白来说&#xff0c;可能是懵逼的&#xff0c;所以这里给出一个官方的解说‌网页的TDK是指标题&#xff08;Title&#xff09;、描述&#xff08;Description&#xff09;和关键词&#xff08;Keywords&#xff09;的集合‌。这…

智慧船舶物联网实训室建设方案

第一章 建设背景 随着全球海洋经济的蓬勃发展与智能化技术的日新月异&#xff0c;数字船舶物联网&#xff08;Internet of Things for Maritime, IoT-Maritime&#xff09;与人工智能&#xff08;Artificial Intelligence, AI&#xff09;的结合已成为推动航运业转型升级的关键…

企业资源枯竭时,数字化转型能否带来新资源?

​在商业竞争激烈的当下&#xff0c;企业发展依赖各类资源。然而&#xff0c;资源可能面临枯竭&#xff0c;如原材料短缺、市场份额下降、人才流失等。此时&#xff0c;数字化转型成为企业突破困境的重要途径&#xff0c;那么它能否带来新资源呢&#xff1f; 先看企业资源分类。…

C++,STL 031(24.10.14)

内容 stack容器&#xff08;栈&#xff09;的常用接口。 代码 #include <iostream> #include <stack> // 注意包含stack容器&#xff08;栈&#xff09;的头文件using namespace std;void test01() {stack<int> s1; // here01&#xff0c;默认构造stack<…

5g工业路由器最新案例:高原气象站网络升级项目

背景&#xff1a; 某省气象局决定在高原地区升级其气象观测网络&#xff0c;以提高天气预报的准确性和及时性&#xff0c;同时为气候变化研究提供更可靠的数据支持。该项目面临以下挑战&#xff1a; 需要在高原广袤且地形复杂的区域部署大量自动气象站&#xff0c;要求网络覆…

pytorh学习笔记——手写数字识别mnist

pytorh学习第二站&#xff1a;手写数字识别 一、训练程序 1、创建脚本框架mnist_demo.py&#xff1a; import torch import torchvision.datasets as dataset# data # 定义数据# net # 定义网络# loss # 损失# optimizer # 优化# training # 训练# test # 测试# save# 保…

uniapp onPageScroll

子组件有onPageScroll, 首页也要引入onPageScroll, eg: 主页面 sell/detail/index 《子组件》 <script setup> 引入onPageScroll </script> 组件&#xff1a; 引入onPageScroll 别人的比较

智能健康顾问:基于SpringBoot的系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Pytorch——pip下载安装pytorch慢的解决办法

一、找到需要下载的pytorch链接 运行&#xff1a;pip install torch1.11.0cu113 torchvision0.12.0cu113 torchaudio0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113。然后得到&#xff1a; 我这里为&#xff1a;https://download.pytorch.org/whl/cu113/t…

Odin插件基本使用

介绍 Odin Inspector是Unity的一个插件&#xff0c;让您可以享受拥有强大&#xff0c;自定义和用户友好编辑器的所有工作流程优势&#xff0c;而无需编写任何自定义编辑器代码。 安装 需要有对应的unity包或者去官网或者资源商店下载 官方网址 Odin Inspector and Seriali…

DAY47WEB 攻防-PHP 应用文件上传函数缺陷条件竞争二次渲染黑白名单JS 绕过

1、PHP-原生态-文件上传-检测后缀&黑白名单2、PHP-原生态-文件上传-检测信息&类型内容3、PHP-原生态-文件上传-函数缺陷&逻辑缺陷4、PHP-原生态-文件上传-版本缺陷&配置缺陷 文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题…

接口中的静态常量在项目中的使用,以及固长列表和变长列表

先来看一段代码 public interface WrapIgnoreList {List<String> KNIFE4J Arrays.asList("/doc.html","/swagger-resources","/swagger-resources/configuration","/v3/api-docs","/v2/api-docs","/webjars/**…

ApplicationContext获取对象时注解丢失问题及 Arthas 验证方法

引言 在使用 Spring 框架时遇到的一个常见问题&#xff1a;通过 ApplicationContext 获取到的对象无法获取到注解。 本文的目的&#xff1a;探讨这个问题的原因&#xff0c;并展示如何使用 Arthas 工具来验证和解决问题。 问题描述 描述具体的问题场景&#xff1a;通过 Appli…

MySQL—关于数据库的CRUD—(增删改查)

文章目录 关于数据库的使用&#xff1a;1. 数据库的背景知识&#xff1a;2. MYSQL数据库软件的使用&#xff08;MYSQL安装的问题在另一篇博客中讲解&#xff09;。&#xff08;1&#xff09;启动MYSQL数据库软件&#xff08;2&#xff09;开始使用数据库程序&#xff1a;1&…