neural-style风格迁移模型实战

Neural Style论文笔记+源码解析 引言前面在Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换中介绍了TensorFlow的配置过程,以及运用TensorFlow实现图像风格转换,主要是使用了文章A Neural Algorithm of Artistic Style中的方法,今天,我将主要对这篇文章进行解读,并对基于TensorFlow版本的Neural Style开源代码进行解析。 阅读详情

有没有想过,利用机器学习来画画,今天,我将手把手带大家进入深度学习模型neural style的代码实战当中。

neural-style模型是一个风格迁移的模型,是GitHub上一个超棒的项目,那么什么是风格迁移,我们来举一个简单的例子:

这里,我选择了将梵高的画风和我们的东北大学的工学馆相结合,让工学馆融入了 梵高的星空效果图,在经过100次的迭代后得到了带有星空效果的图片。

另外我们可以尝试与其他风格结合:

那么接下来就带大家一起进入这个项目的实战之中,如果大家想了解更多过于neural network相关的理论请自己查阅资料,我在这里就不具体介绍了。

论文地址:https://arxiv.org/abs/1508.06576

项目地址:https://github.com/cysmith/neural-style-tf

该项目可以干什么,除了上面单方面的图片效果外,我们也可以使用多种风格的样式混为一起,或者把视频导入后输出带有其他风格的视频。或者使用语义分割,实现不同的区域有不同的风格。本博客将持续更新,将最新的一些玩法更新到博客上来,同时也可能有算法的优化,这些都是后话了。

我们可以用这个项目为我们自己的学校做明信片,即使你不会画画,也可以制作一些自己风格的图片等等。

那么现在我们开始吧。


1.环境搭建


在我们下载好项目代码后,我们还需要一个权重文件,这里直接提供网盘分享:

https://pan.baidu.com/s/106YVMURhXDC0aZj6sQmasA

尝试其他文件的效果,可以访问这个网站下载:http://www.vlfeat.org/matconvnet/pretrained/

下载好了后直接放在项目的文件夹中,放在和neural_style.py一个目录下。

该项目基于tensorflow框架,这里我强烈推荐GPU版本,这里的深度学习模型不像其他的模型,有训练出来的文件,而是直接梯度下降进行转化,CPU的转化比较慢,因此这里推荐GPU的tensorflow,依赖CUDA和cudnn,CUDA依赖7.5版本以上,cudnn选择对应CUDA版本。然后打开命令行,输入以下命令:

pip install tensorflow-gpu

如果你安装过CPU版本的tensorflow,那么也不用担心,你只需要在anaconda里面新搭建一个环境,这里不做详细的解释,如果大家有疑问可以直接在网络上搜索具体的安装方法,如果有问题也可以联系我。

当然不一定非得是GPU版本,CPU版本也可以,只是转换的速度问题。

接着如果你想参与视频的转化,还需要opencv-python的包,我们输入以下命令:

pip install opencv-python

好了,那么环境的搭建基本结束,我们开始实战吧。


2.单种风格转化


在我们的项目代码中,我们发现neural_style.py这个文件,即专门用于转化图片风格。

下面我们列出相关的参数:

  • --content_img:内容图像的文件名。示例:lion.jpg
  • --content_img_dir:内容映像的相对或绝对目录路径。默认值:./image_input
  • --style_imgs:样式图像的文件名。要使用多个样式图像,请传递以空格分隔的列表。 示例:--style_imgs starry-night.jpg
  • --style_imgs_weights:每个样式图像的混合权重。 默认值 :( 1.0仅假设1个样式图像)
  • --style_imgs_dir:样式图像的相对或绝对目录路径。默认值:./styles
  • --init_img_type:用于初始化网络的映像。选择:content,random,style。默认值:content
  • --max_size:输入图像的最大宽度或高度。默认值:512
  • --content_weight:内容丢失功能的权重。默认值:5e0
  • --style_weight:风格损失功能的重量。默认值:1e4
  • --tv_weight:总变分损失函数的权重。默认值:1e-3
  • --temporal_weight:时间损失函数的权重。默认值:2e2
  • --content_layers:用于内容图像的以空格分隔的 VGG-19图层名称。默认值:conv4_2
  • --style_layers:用于样式图像的以空格分隔的 VGG-19图层名称。默认值:relu1_1 relu2_1 relu3_1 relu4_1 relu5_1
  • --content_layer_weights:每个内容层的空间分隔权重与内容丢失。默认值:1.0
  • --style_layer_weights:每个样式图层的空间分隔权重丢失。默认值:0.2 0.2 0.2 0.2 0.2
  • --original_colors:布尔标志,指示样式是否已传输但不是颜色。
  • --color_convert_type:用于亮度匹配转换为原始颜色的颜色空间(YUV,YCrCb,CIE L * u * v *,CIE L * a * b *)。选择:yuv,ycrcb,luv,lab。默认值:yuv
  • --style_mask:布尔标志,指示样式是否转移到蒙版区域。
  • --style_mask_imgs:样式掩码图像的文件名(例如:) face_mask.png。要使用多个样式蒙版图像,请传递以空格分隔的列表。 示例:--style_mask_imgs face_mask.png face_mask_inv.png
  • --noise_ratio:如果网络初始化,内容图像和噪声图像之间的插值random。默认值:1.0
  • --seed:随机数生成器的种子。默认值:0
  • --model_weights:VGG-19网络的权重和偏差。默认值:imagenet-vgg-verydeep-19.mat
  • --pooling_type:卷积神经网络中的池化类型。选择:avg,max。默认值:avg
  • --device:GPU或CPU设备。强烈建议使用GPU模式但需要NVIDIA CUDA。选择:/gpu:0 /cpu:0。默认值:/gpu:0
  • --img_output_dir:将输出写入的目录。 默认值:./image_output
  • --img_name:输出图像的文件名。默认值:result
  • --verbose:布尔标志,指示是否应将语句打印到控制台。

 看着应该很让人眼花缭乱吧,那么我们进入实战来了解吧,项目里面有一些图片和风格图,而默认的图片输入路径是image_input,默认的输出路径是image_output,默认的风格图片保存地址是styles,大家如果把图片放在相应的位置即可直接运行,如果想放在其他位置则需要更改内容映像的相对或绝对目录路径:--content_img_dir。

那么我们先来实战一波,这里我在image_input里放上来了一张自己的图片,我起名school.jpg,在styles里有一张星空的图片,大家自行选择,如果图片放在固定文件夹那就不需要更改映像路径,也就是content_img_dir这个参数。

定位到项目文件夹,打开cmd,输入以下命令:

gpu版本:

python neural_style.py --content_img school.jpg --style_imgs starry-night.jpg --max_size 620 --max_iterations 100 --original_colors --verbose

cpu版本:

python neural_style.py --content_img school.jpg --style_imgs starry-night.jpg --max_size 620 --max_iterations 100 --original_colors --device /cpu:0 --verbose

大家注意到了这两行代码的区别就在于多了一个--device参数,就是确认使用CPU还是GPU,默认是GPU,如果使用GPU可以不填这个参数,如果是CPU需要填写。

下面解释一下常用的参数:--content_img是选择需要转换风格的图片,把图片放在image_input这个文件夹里,content_img的参数就是这个文件夹里图片的名字,记得加上文件的后缀。--style_imgs的参数选择是放在styles文件夹里面的图片文件名。--max_size是你选择需要转化的图片最大像素长度,我不建议使用过大的图片,大家转化图片时可以尽可能缩小图片大小,Windows自带的照片编辑器可以更改,大家查看图片像素大小也很简单,右键图片->属性->详细信息即可看到图片的长宽各多少像素,建议长尽量不要超过1000,不然性能一般的电脑可能会卡住。--max_iterations这个参数是图片迭代次数,次数过小可能有欠拟合,没有风格图片的风格;但是过大有过拟合现象,即原有的图片失去自己的特征,建议100-1000,根据自己图片来定。因为图片好坏在于个人审美,因此大家可以多导出几张选择自己觉得最适合的图片。最后的--verbose参数是在命令行是否反馈数据,如果没有就是命令行没有任何显示,建议还是加上。我这里直接迭代100次,下面是导出的图片。

我们发现,这张图片虽然有了梵高的画作星空的油画特征,可是颜色却是自己本来的颜色,那么如何导出和风格图片差不多的颜色呢,这里就要简单说明一下上述命令中的--original_colors,这个命令加上后就会让输入图片色彩保留自己的特征,如果大家想要风格图片的色彩特征的话可以直接删除这个--original_colors,然后再次转换得出以下图片:

这是一样的迭代次数,只是色彩参照不一样,大家根据自己喜好选取。

那么更多的参数调整请看上述的表,我介绍的参数是最基本的,大家可以入手的参数。


3多种风格转换


这里需要介绍另一个参数:--style_imgs_weights,就是权重。比如,我想要有两种风格的图片,两种风格更侧重哪个风格,这就是权重。比如我要给一张图片蒙娜丽莎和中国水墨画的风格,假设蒙娜丽莎的图片是mnls.jpg,中国水墨画的图片叫china.jpg。那么我们可以这样使用:

CPU:

python neural_style.py --content_img school.jpg --style_imgs mnls.jpg china.jpg --max_size 620 --max_iterations 200 --device /cpu:0 --verbose --style_imgs_weights 0.5 0.5

GPU:

python neural_style.py --content_img school.jpg --style_imgs mnls.jpg china.jpg --max_size 620 --max_iterations 200 --verbose --style_imgs_weights 0.5 0.5

我对--style_imgs这个参数选择两张图片,名字用空格隔开即可,在--style_imgs_weights这个参数,假如说我希望两种风格影响一样,即五五分,那么我的这个参数在--style_imgs_weights后面直接输入0.5 0.5,要注意的是权重的参数总和需要为1。

大家可以把很多风格,不一定是两个,也可以是三个或四个,按一定的权重设置,然后输出多风格的图片。

下面一张是蒙娜丽莎风格的图片:

这张是中国水墨画风格的图片:

如下是两种风格1:1的组合:

效果可能并不是很明显,不过的确是有差异的,大家可以自己动手尝试去做好看的图片。

 


制作图片的一些要点


1.注意迭代的次数,放止过拟合与欠拟合的现象。

2.好看的图片一定要选对风格,否则就算拟合的再好,风格不适合图片也不好看的。

3.选择的图片和风格图片物体大小也会影响输出图片。

4.多风格图片注意风格之间的权重关系。


终归这是别人的一个成果,我们只是调用了别人的成果,有兴趣的建议理解该算法并且尝试研究超越该算法。

Torch7学习(七)——Neural-Style代码解析 neural style代码解析Torch的框架 阅读详情

相关推荐

快速风格迁移(Fast Neural Style Transfer)及pytorch实现

Fast Neural Style Transfer 1、简介 在原始风格迁移中,是以一张图片作为参数来训练它。 生成一张图片则需要数分钟不等的时间。 如果以网络来转换图片,我们训练这个网络,那么则能够快速的将图片进行风格转换,而无需迭代一张图片数百至千次。 于是我们所需要做的则是定义这个风格转换网络。 2、网络定义 网络结构如上。类似于自编码解构,先压缩图片,再还原回来。 此外,网络的上采样,采用的是先放大图片再卷积的形式,而非反卷积。 于是构建出网络: class ResBlock(nn.Modul

weixin_48866452的博客 8339

9.11_neural-style

如果你是一位摄影爱好者,也许接触过滤镜。它能改变照片的颜色样式,从而使风景照更加锐利或者令人像更加美白。但一个滤镜通常只能改变照片的某个方面。如果要照片达到理想中的样式,经常需要尝试大量不同的组合,其复杂程度不亚于模型调参。在本节中,我们将介绍如何使用卷积神经网络自动将某图像中的样式应用在另一图像之上,即样式迁移(style transfer)[1]。这里我们需要两张输入图像,一张是内容图像,另一张是样式图像,我们将使用神经网络修改内容图像使其在样式上接近样式图像。图9.12中的内容图像为本书作者在西雅图郊

taifyang的博客 466

神经风格迁移(Neural Style Transfer)简介

这是对一个Neural Style Transfer project的总结,GitHub链接是:戳我 神经风格迁移是将一幅图片的内容和另一幅艺术图片的风格结合,生成一张艺术化的图片的过程。输入是一张内容图和一张风格图,输出是风格化的结果。 神经风格迁移的两大关键分别是风格表征和图像重建。 风格表征,顾名思义,就是用什么方法来提取风格、表示风格,如何建立模型(也叫纹理建模)。根据Yongche...

xyp_8023的博客 5678

《红色警戒1》典藏中文版懒人包:Win10/Win11一键安装与兼容性优化指南

在软件工程领域,**兼容性**是确保旧有程序在现代系统上稳定运行的核心挑战,尤其对于依赖特定运行库和API的经典软件。其技术原理通常涉及**运行库封装**、API转译层(如DirectX包装器)以及系统调用劫持,以解决新旧系统环境差异导致的启动失败、渲染错误或功能缺失问题。这种技术封装方案具有显著的工程价值,能极大降低用户的使用门槛,将复杂的配置过程简化为“解压即玩”,尤其适用于游戏怀旧、历史软件研究等场景。本文聚焦于《红色警戒1》典藏版整合包,它正是通过集成**DirectX 9.0c**、**Visua

weixin_30719711的博客 482

开源推荐:5个最实用的AIGC风格迁移项目

随着生成式人工智能(AIGC)技术的爆发,风格迁移已成为图像生成、艺术创作、设计辅助等领域的核心技术。本文聚焦5个开源项目,涵盖CycleGANStyleGANControlNetStable Diffusion风格迁移扩展五大主流技术路线,从基础算法到工业级应用全面覆盖,提供从理论到实践的完整指南。核心概念:解析风格迁移的数学定义与技术框架算法解析:5大项目的核心算法与Python实现实战指南:从环境搭建到代码调试的完整流程应用场景:不同技术路线的典型落地场景资源推荐。

AI 原生应用开发的博客 1346

图像风格迁移实战:从Neural Style到AdaIN

图像风格迁移实战:从Neural Style到AdaIN ,人工智能,计算机视觉,大模型,AI,在计算机视觉领域,图像风格迁移是一项极具魅力且富有创意的技术。它旨在将一幅图像(风格图像)的艺术风格迁移到另一幅图像(内容图像)上,生成同时具有内容图像的语义信息和风格图像视觉风格的新图像。从早期的 Neural Style(神经风格迁移)到后来的 AdaIN(自适应实例归一化),图像风格迁移技术在算法效率、效果质量等方面都取得了巨大的进步。本文将深入探讨这两种经典方法,结合详细的代码示例,带你了解图像风格。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

7个顶级TensorFlow计算机视觉项目全解析:从入门到实战的完整指南

目标检测是计算机视觉的核心任务之一,YOLO(You Only Look Once)以其快速的检测速度和较高的精度成为实时目标检测的首选算法。YOLO TensorFlow++项目不仅实现了YOLO算法的TensorFlow版本,还支持在移动设备上的实时运行。 该项目包含训练代码和预训练模型,支持多种数据集,并且提供了详细的性能优化指南。通过该项目,开发者可以快速构建实时目标检测应用,如视频监控

gitblog_01404的博客 410

图像风格迁移实战:GAN与Neural Style技术对比

本文旨在为读者提供图像风格迁移技术的全面理解,特别聚焦于GAN和Neural Style两种方法的对比分析。我们将涵盖从基础理论到实际应用的完整知识链。文章首先介绍核心概念,然后分别深入两种技术,接着进行对比分析,最后提供实战代码和应用展望。图像风格迁移:将一幅图像的内容与另一幅图像的风格相结合的技术GAN(生成对抗网络):由生成器和判别器组成的对抗性训练框架:基于卷积神经网络特征提取的风格迁移方法图像风格迁移是将内容图像的结构与风格图像的艺术特征相结合的技术。

AI架构师小马 1001

图像风格迁移-Image Style Transfer Using Convolutional Neural Networks

论文:Image Style Transfer Using Convolutional Neural Networks 论文链接图像风格迁移最近两年比较火,看起来也比较有趣,所以这两天闲暇时候看了一些文章了解了下其中的原理,特来分享。本篇博文要介绍的是2016年的CVPR论文,该文章用CNN网络来做图像风格迁移,作者是Gatys。Gatys在2015年的时候就发过一篇关于图像风格迁移的文章:A N

AI之路 2万+

神经风格迁移(Neural Style Transfer)

神经风格迁移是一种利用卷积神经网络 (CNN) 将艺术风格从风格图像迁移到内容图像的技术。该方法基于预训练的 VGG 等模型,无需大量训练数据,仅需内容与风格两张图像。通过提取内容图像的高层特征和风格图像的 Gram 矩阵(表征纹理特征),结合内容损失与风格损失进行优化,使用梯度下降迭代调整输入图像,在保留内容结构的同时融入风格纹理。通过调整损失权重和所选网络层,可以控制风格化效果的程度与特性。

盼小辉丶的博客 2846

AIGC实战——神经风格迁移(Neural Style Transfer)

神经风格迁移是一种利用卷积神经网络 (CNN) 将艺术风格从风格图像迁移到内容图像的技术。该方法基于预训练的 VGG 等模型,无需大量训练数据,仅需内容与风格两张图像。通过提取内容图像的高层特征和风格图像的 Gram 矩阵(表征纹理特征),结合内容损失与风格损失进行优化,使用梯度下降迭代调整输入图像,在保留内容结构的同时融入风格纹理。通过调整损失权重和所选网络层,可以控制风格化效果的程度与特性。

盼小辉丶的博客 3005

告别卡顿:移动端实时风格迁移的Fast Neural Style模型部署指南

你是否曾在手机上尝试艺术风格迁移时遭遇漫长等待?是否因模型体积过大导致应用安装失败?本文将带你基于gh_mirrors/model/models项目中的Fast Neural Style模型,实现移动端毫秒级风格迁移效果,让梵高星空、毕加索抽象等艺术风格实时呈现在你的照片中。 ## 项目背景与模型优势 GitHub加速计划提供的[model/models](https://link.gitco...

gitblog_00736的博客 880

neural_style使用说明1

neural_style使用说明1

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

基于深度学习的风格迁移实现得到的结果是无与伦比的,并且还在计算机视觉的创造性应用中引发了惊人的复兴。 风格迁移其主要应用场景如在**艺术创作**场景,将不同艺术风格应用于图像,可以创造出独特的艺术效果,使作品具有新的视觉呈现。或者在社交平台上风格化滤镜,图像增强等。

计算机魔术师的blog 1万+

地震数据可视化必备:5分钟读懂SEGY道头字段全解析(含坐标定位指南)

本文深入解析了SEGY文件格式中道头坐标字段的提取与可视化方法。针对地震数据处理中的常见痛点,详细介绍了sx/sy、gx/gy等关键坐标字段的二进制解析、比例因子应用、单位转换及常见问题解决方案,并提供了实用的Python代码示例,帮助开发者实现从SEGY文件到三维空间可视化的完整流程。

echo99的专栏 1008

从光猫到机顶盒:H10G-13融合网关双系统网络配置全解析(含超密获取技巧)

本文详细解析了中国移动H10G-13融合网关的双系统网络配置,涵盖光猫路由与安卓电视盒子的协同工作。通过晶晨S905L3芯片的优化,设备实现高效网络接入与安卓9.0系统的定制化应用,特别适合酒店和民宿行业的智能化改造。文章还提供了超密获取技巧和线刷固件包的实用指南。

weixin_42525264的博客 942

使用 PyTorch 进行 风格迁移(Neural-Transfer)

1.简介 本教程主要讲解如何实现由 Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的Neural-Style算法。Neural-Style 或者叫 Neural-Transfer,可以让你使用一种新的风格将指定的图片进行重构。这个算法使用三张图片,一张输入图片,一张内容图片和一张风格图片,并将输入的图片变得与内容图片相似,且拥有风格图片的优...

TensorFlowNews 5359

别再拿空气标定法糊弄了!手把手教你搞定水下相机标定(附Python代码)

本文详细解析水下相机标定的关键技术,揭示传统空气标定法失效原因,并提供基于单视点模型(SVP)的完整Python解决方案。通过折射效应分析、标定板设计优化和代码实战演示,帮助读者掌握水下标定核心方法,有效提升水下视觉系统测量精度。

weixin_30530939的博客 207

风格迁移-fast-neural-style-tensorflow 代码阅读及注释

风格迁移-fast-neural-style-tensorflow 代码阅读及注释 标签: Tensorflow 这篇文章主要是记录在使用及阅读fast-neural-style-tensorflow代码时候的一些疑虑的解决,也可以看做是把fast-neural-style-tensorflow做一个精简化,因为虽然fast-neural-style-tensorflow给出了源代码,但是对于初...

CoderWangSon 3456

【OpenFOAM】-olaFlow-算例6- waveFloatingObject

波浪作用下的浮体的刚体运动,属于流固耦合(FSI)问题

ou_no的博客 3537

【WorkBuddy专栏09】WorkBuddy多模态能力深度揭秘

【WorkBuddy专栏09】AI不止会聊天——WorkBuddy多模态能力深度揭秘

AI人人懂 2104

ONNX 模型库 fast_neural_style:快速神经风格迁移模型的推理、转换与源码解析

本文以 ONNX 模型仓库(models)中 [validated/vision/style_transfer/fast_neural_style](https://link.gitcode.com/i/7463b7b1e43f79169e411499aaa50a7a) 目录的官方文档为主体,围绕 5 种艺术风格(Mosaic、Candy、Rain Princess、Udnie、Pointilis

gitblog_00687的博客 670

13、数据来源介绍与操作指南

本文详细介绍了多种数据源的特点、操作步骤及适用场景,包括元数据数据源、MongoDB数据源、Pentaho Data Integration数据源、OLAP数据源、Pentaho分析数据源和OLAP4J数据源。通过流程图和表格对比,帮助用户理解不同数据源的选择与使用方法,并提供了实际应用案例和注意事项,旨在提升数据获取与分析效率,支持高效报告生成。

ik678901234的博客 148
上一篇: Cyclegan生成式对抗网络,使用tensorflow快速实战
下一篇: 机器学习实战——k近邻算法
CExploer
博客等级 码龄8年 147粉丝 24原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值