【深度学习 | 风格迁移】神经网络风格迁移,原理详解附详细案例源码

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍

图像迁移技术

    • 图像风格迁移技术
      • Neural Style Transfer(神经风格迁移)
        • 内容 & 风格表示
        • 论文实现(Keras实现)

论文复现系列专栏,欢迎大家支持!

✨相关源码和模型的下载链接地址✨ : 点击链接进行跳转

图像风格迁移技术

图像风格迁移是指将一张图像的内容与另一张图像的风格相融合,生成具有新风格的图像。

风格(style)是指图像中不同空间尺度的纹理、颜色和视觉图案,内容(content)是指图像的高级宏观结构

风格迁移这一想法与纹理生成的想法密切相关,在 2015 年开发出神经风格迁移之前,这一想法就已经在图像处理领域有着悠久的历史。但事实证明,与之前经典的计算机视觉技术实现相比,基于深度学习的风格迁移实现得到的结果是无与伦比的,并且还在计算机视觉的创造性应用中引发了惊人的复兴。

风格迁移其主要应用场景如在艺术创作场景,将不同艺术风格应用于图像,可以创造出独特的艺术效果,使作品具有新的视觉呈现。或者在社交平台上风格化滤镜,图像增强等。

历史发展历程

  • 早期方法:最早的图像风格迁移方法是基于优化的方法,如L. A. Gatys等人提出的"Neural Style Transfer"(神经风格迁移)算法。该算法通过最小化内容图像与风格图像之间的差异,同时最大化生成图像与风格图像之间的相似性来实现风格迁移。这种方法需要进行大量的迭代优化,计算成本较高。

  • 基于卷积神经网络(CNN)的方法:随着深度学习的发展,基于卷积神经网络的方法逐渐成为主流。Gatys等人的方法启发了后续的研究者,他们提出了一系列基于CNN的图像风格迁移算法,如"Perceptual Losses for Real-Time Style Transfer and Super-Resolution"(实时风格迁移和超分辨率的感知损失)和"Instance Normalization: The Missing Ingredient for Fast Stylization"(实例归一化:快速风格化的缺失要素)。

  • 基于生成对抗网络(GAN)的方法:生成对抗网络是一种强大的深度学习架构,被广泛用于图像生成任务。在图像风格迁移中,也有研究者采用GAN来实现更好的风格迁移效果。例如,“CycleGAN: Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks”(CycleGAN:使用循环一致性对抗网络进行无配对图像转换)是一种无需成对训练数据的图像风格迁移方法,它可以在不同风格的图像之间进行转换。

下表对上文的几种常见的图像风格迁移算法优缺点进行描述。

算法名称特点优缺点
Neural Style Transfer(神经风格迁移)- 基于优化的方法,生成图像与风格图像之间的相似性较高
- 需要进行大量的迭代优化,计算成本较高。
- 可能会出现一些艺术上的不稳定性,生成图像的细节不够清晰。
优点:生成图像与风格图像相似度高。
缺点:计算成本高,生成图像细节不清晰。
Fast Neural Style Transfer(快速神经风格迁移)- 通过引入一个风格化网络,加速了风格迁移的过程。
- 可以实时地对图像进行风格迁移。
- 生成的图像细节相对较清晰。
优点:风格迁移速度快,生成图像细节清晰。
缺点:对大尺寸图像的处理可能存在困难。
CycleGAN(循环一致性对抗网络)- 无需成对训练数据,可以在不同风格的图像之间进行转换。
- 基于生成对抗网络,生成的图像质量较高。
- 可以处理无配对的训练数据,具有较大的灵活性。
优点:无需成对训练数据,生成图像质量高。
缺点:对于复杂的风格迁移任务,可能需要更多的训练数据。

相关学习资源

  • 论文:

    • Gatys, L. A., Ecker, A. S., & Bethge, M. (2016). A neural algorithm of artistic style. arXiv preprint arXiv:1508.06576.
    • Johnson, J., Alahi, A., & Fei-Fei, L. (2016). Perceptual losses for real-time style transfer and super-resolution. In European conference on computer vision (pp. 694-711). Springer, Cham.
    • Ulyanov, D., Vedaldi, A., & Lempitsky, V. (2016). Instance normalization: The missing ingredient for fast stylization. arXiv preprint arXiv:1607.08022.
    • Zhu, J. Y., Park, T., Isola, P., & Efros, A. A. (2017). Unpaired image-to-image translation using cycle-consistent adversarial networks. In Proceedings of the IEEE international conference on computer vision (pp. 2223-2232).
  • 代码实现:

    • Neural Style Transfer in TensorFlow
    • Fast Neural Style Transfer in PyTorch
    • CycleGAN in PyTorch

Neural Style Transfer(神经风格迁移)

自Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 于 2015 年发表的文章“A neural algorithm of artistic style”以来,风格迁移开始不断地改进,也出现了许多变体。

其中风格迁移的流程可以为以下公式

style transfer

这是原论文的演示图(左下角的小图为对应的风格)

在这里插入图片描述

内容 & 风格表示

我们需要让输出的目标图像既符合原始图像和目标风格,就需要内容和风格进行表示。

在深度学习实现上,我们需要确定我们的的目标是什么,就是保存原始图像的内容,同时采用参考图像的风格。那么就有一个适当的损失函数将对其进行最小化,如下:
l o s s = d i s t a n c e ( s t y l e ( r e f e r e n c e _ i m a g e ) − s t y l e ( g e n e r a t e d _ i m a g e ) ) + d i s t a n c e ( c o n t e n t ( o r i g i n a l _ i m a g e ) − c o n t e n t ( g e n e r a t e d _ i m a g e ) ) loss = distance(style(reference\_image) - style(generated\_image)) + \\ distance(content(original\_image) - content(generated\_image)) loss=distance(style(reference_image)style(generated_image))+distance(content(original_image)content(generated_image))
这里的 distance 是一个范数函数(用来衡量向量或矩阵的大小或长度),比如 L2 范数;content 是一个函数,输入一张图像,并计算出其内容的表示;style 是一个函数,输入一张图像,并计算出其风格的表示。将这个损失最小化,会使得 style(generated_image) 接近于 style(reference_image)、content(generated_image) 接近于 content(generated_image),从而实现我们定义的风格迁移。

Gatys 等人通过深度卷积神经网络能够从数学上定义 style和 content 两个函数。

内容
在CNN卷积网络进行对象识别任务中,随着层次的加深对象的信息输出更加的明确,较前的层数特征图输出到一些更加通用的结构,比如猫狗分类中的基础边缘线条,而更深的层可以捕捉到更加全局和抽象的结构,如猫耳,猫眼睛。根据这个模式,我们可以通过不同深度的层特征图重建输入图像以可视化层所包含输入图像的信息,如下图可以看到深层的特征图包含了图像中对象的全局排列信息(高级、抽象),但是像素值信息会丢失。浅层的层特征图重建图像几乎是完整的精确像素值。

在这里插入图片描述

这样一来在内容上的损失函数便是在一个预训练模型(需要在大型数据集下训练好的能有效提取特征的模型)同一深的层激活的范式数,这样至少在深的层看来,二者图像的内容是一致的。

风格
同样的,不同深度的层特征图包含了不同空间尺度的输入图像的信息,基于此Gatys等人在每一层特征图中采用格拉姆矩阵(Gram matrix)(描述特征图之间的相关性),即特征值的内积,以在不同空间尺度下提取不同滤波器的特征图之间的相互关系(纹理),得到输入图像的多尺度的纹理信息(不捕获全局排列信息)。如上图层激活所包含的风格信息(颜色和局部排列信息),abcde图为不同子集的CNN层的风格重建图像的风格,(“conv1 1”(a)、“conv1 1”和“conv2 1”(b)、“conv1 1”、“conv2 1”和“conv3 1”(c)、“conv1 1”、“conv2 1”、“conv3 1”和“conv4 1”(d)、“conv1 1”、“conv2 1”、“conv3 1”、“conv4 1”和“conv5 1”(e)) 这会输出与参考图像风格越来越模式匹配的输出,且会忘记其全局排列信息.

通过使输出图像和风格图像在不同尺度的层激活都有相似的相互关系,即不同尺度的纹理都很相同,便可以实现风格的迁移。

此外,在风格和内容上我们还需要定义贡献强度,这里我们可以通过损失函数的权重来实现即可

通过这两种构建损失函数进行优化,便可以使得模型输出图像符合在深层次中“看到”的图像内容是一致的,不同层中特征图的内部特征相互关系的是相似的以实现目标

论文实现(Keras实现)

神经风格迁移可以用任何预训练的模型进行实现(只要能够很好实现前面所述的目标即可),原论文所实现的是VGG19网络。

神经风格迁移流程一般为 计算层激活 -> 计算损失函数 -> 梯度下降最优化损失函数

  1. 网络层激活:输出目标图像,原始图像,参考图像的层激活输出
  2. 计算损失函数: 通过所求的层激活计算对应的内容和风格损失函数
  3. 梯度下降优化:通过梯度下降的方式减小损失函数,训练模型参数使得模型能学习到参考图像风格的纹理和保持内容的不变

具体在实现上来说流程如下

  1. 使图像尺寸大小相似(如果差异很大,由于模型中尺度变换会使得风格迁移很麻烦)

  2. 读取图像, 加载预训练模型,得到层激活

  3. 根据层激活构建需要最小化的最终损失(需要注意的是在重建图像需要添加总变差损失平滑图像)

    在图像重建或图像去噪任务中,通常将总变差损失与其他损失函数(如均方误差损失)相结合,通过权衡平滑性和重建准确性。在这里需要注意的是Loss的权重值。

    如果强调注重风格则可能会没有任何内容的结构,如从左到右是强调内容的强度,其中层次越深,生成的图像纹理越抽象(每列上方的数字表示强调照片内容匹配与艺术品风格之间的比率α/β)

    image-20240111162718809

  4. 设置梯度下降优化算法(论文所实现的方案为L-BFGS 算法,)

  5. 训练模型

以下是是实现的一个效果,在这里插入图片描述

在这里插入图片描述

该技术对图像仅仅是改变图像纹理(风格迁移),如果风格参考图像有明显的纹理信息和高度自相关时(原论文采用的梵高画像就有着很好的纹理特征),且内容信息不复杂,不需要高层次细节就能被识别,该算法效果最好,因此该算法通常也难以迁移一个抽象的风格,比如将一个肖像的绘画风格迁移过来,这是一个很抽象的流程,该算法更多的可以看作是信号处理过程,所以不要指望能发生魔法般的效果👀。

此外,该算法实现风格迁移速度很慢(我们可以适当减少训练轮次或减小图片像素,建议在晚上睡觉前跑一遍👀),尤其是图像较大的情况,但是这种低层次的纹理变化很简单,我们可以通过花费大量的时间参考某一个固定风格图像批量生成许多输入 - 输出样例图像,并训练一个小型前馈卷积神经网络学习这种变换,就可以非常快速进行这种变换(秒级)

✨相关源码和模型的下载链接地址✨ : 点击链接进行跳转

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

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

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

相关文章

yolov8 瑞芯微 RKNN 的 C++部署,部署工程难度小、模型推理速度快

之前写过两次yolov8目标检测部署,后续继续思考,针对部署还有优化空间,本示例的部署方式优化了部署难度,加快了模型推理速度(略微增加了后处理的时耗)。 特别说明:如有侵权告知删除,…

麒麟OS + DM8数据库(Graalvm for JDK17) 测试

1、添加依赖 implementation com.dameng:DmJdbcDriver18:8.1.3.62 implementation com.baomidou:mybatis-plus-boot-starter:3.5.4 2、application.yml 数据源配置 spring: datasource: driver-class-name: dm.jdbc.driver.DmDriver #com.mysql.cj.jdbc.Driver url: jdbc:d…

高效微调大型预训练模型的Prompt Learning方法

目录 前言1 prompt learning简介2 prompt learning步骤2.1 选择模型2.2 选择模板(Template)2.3 Verbalizer的构建 3 Prompt Learning训练策略3.1 Prompting组织数据,优化参数3.2 增加Soft Prompts,冻结模型,优化Prompt…

【2023年度总结与2024展望】---23年故事不长,且听我来讲

文章目录 前言一、学习方面1.1 攥写博客1.2 学习内容1.3 参加比赛获得证书 二、生活方面2.1写周报记录生活 三、运动方面四、CSDN的鼓励五、24年展望总结 前言 时光飞逝,又是新的一年,遥想去年2023年我也同样在这个时间段参加了CSDN举办的年度总结活动&a…

PDF结构详解

文章目录 介绍前言高保真的文件什么是PDF?PDF的一些优点版本摘要谁在使用PDF?有用的免费软件谁应该阅读 构建一个简单PDF文件基本PDF语法File StructureDocument ContentPage Content 构建简单PDF文件头目录,交叉引用表和文件尾主要对象图形内…

0基础学习VR全景平台篇第137篇:720VR全景,DJI无人机遥控器调参

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 这节课以御2为例 介绍的是无人机调参 步骤一:下载DJI Go 4并注册账号 步骤二:拿下遥杆并装好,展开遥控天线。将无人机与遥控器相连&#xff…

【AI视野·今日Sound 声学论文速览 第四十三期】Mon, 8 Jan 2024

AI视野今日CS.Sound 声学论文速览 Mon, 8 Jan 2024 Totally 6 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers MusicAOG: an Energy-Based Model for Learning and Sampling a Hierarchical Representation of Symbolic Music Authors Yikai Qian, Tia…

OpenHarmony4.0Release系统应用常见问题FAQ

前言 自OpenHarmony4.0Release发布之后,许多小伙伴使用了配套的系统应用源码以及IDE作为基线开发,也遇到了各种各样的问题,这篇文档主要收录了比较常见的一些问题解答。 FAQ 系统应用源码在哪 目前OpenHarmony系统应用分为3种模式&#x…

九州金榜|为什么本科生“回炉”读职校?

近年来,“本科学历+技能证书”成为不少大学毕业生求职时的配置,本科毕业生“回炉”职业院校学习技能的现象引发社会关注。 为什么会引发这种现象发生呢?现在学校教育学的是理论知识,而“回炉”确实学习的实操&#xff…

065:vue中将一维对象数组转换为二维对象数组

第065个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

IDEA 启动错误提示:Command line is too long. Shorten command line

IDEA 启动错误提示:Command line is too long. Shorten command line Command line is too long. Shorten command line IDEA 启动错误提示:Command line is too long. Shorten command line快速修改原因解释 快速修改 Edit Configurations->configu…

将台式机变为服务器,服务器设置静态IP的方法

一.查看IP: 同时按winR,输入cmd,打开终端。输入 ifconfig查看IP地址 查看网关: route -n二、配置静态IP地址 进入root权限 sudo -i进入.yaml文件,开始配置静态IP地址 vim /etc/netplan /*.yaml文件地址是/etc/netplan/01-network-manager-…

如何使用PR制作抖音视频?抖音短视频创作素材剪辑模板PR项目工程文件

如何使用PR软件制作抖音视频作品?Premiere Pro 抖音短视频创作素材剪辑模板PR项目工程文件。 3种分辨率:10801920、10801350、10801080。 来自PR模板网:https://prmuban.com/37058.html

Scrapy框架自学

配置国内镜像源 # pip设置配置 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set trusted-host pypi.tuna.tsinghua.edu.cn创建虚拟环境 # 使用conda创建虚拟环境(具体内容请参考课件) conda create -n py_s…

JetBrains 开发工具——免费教育许可申请流程

JetBrains 开发工具——免费教育许可申请流程 本文将详细介绍通过教育邮箱申请Free Educational Licenses. Free Educational Licenses地址 1.选择符合自己的申请入口 2.填写申请表单提交 官方指南 😃😃😃

Ncast盈可视 高清智能录播系统 IPSetup.php信息泄露+RCE漏洞复现(CVE-2024-0305)

0x01 产品简介 Ncast盈可视 高清智能录播系统是广州盈可视电子科技有限公司一种先进的音视频录制和播放解决方案,旨在提供高质量、高清定制的录播体验。该系统采用先进的摄像和音频技术,结合强大的软件平台,可以实现高清视频录制、多路音频采集、实时切换和混音、定制视频分…

git 中的概念

git 中的概念 在使用 Git 版本控制的过程中,有些概念我们必须有所了解,这样才能更有效率也更有意义的学下去。 有清楚且正确的概念认知,不但有助于我们学习如何操作 Git 命令,更重要的是,学习 Git 的相关知识也会更加…

Making Large Language Models Perform Better in Knowledge Graph Completion

Making Large Language Models Perform Better in Knowledge Graph Completion 基本信息 博客贡献人 鲁智深 作者 Yichi Zhang, Zhuo Chen, Wen Zhang, Huajun Chen 隶属于浙江大学计算机学院和软件学院 摘要 本文主要探讨了如何将有用的知识图谱结构信息融入大语言模型中…

获取ffmpeg转码的实时进度

文章目录 前言一、需求二、实现获取 ffmpeg 转码的实时进度1、思路梳理2、源码修改 三、运行结果 前言 本文记录查看 ffmpeg 进行转码时的实时进度。所用的工程基于上个博客编译成功的工程:使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c 一、需求 使用 ffmepg 对音…

AIGC ChatGPT 4 Prompt 万能提示词公式

最近大家都在使用ChatGPT来帮助自己完成相应的工作。很多时候大家提出的问题得不到很清晰,很明确的答案。 我们应该怎么样来和ChatGPT进行有效的沟通呢? 例如我们先来问一问ChatGPT: 要获得最准确的回复,请确保遵循以下建议: 明确性:请尽量明确描述您的问题。确保提供足…