基于深度学习的风格迁移转换的两种实现——style-transfer和fast-neural-style-tensorflow

本文对比了两种风格迁移技术:一种基于Caffe,适用于多种风格转换但耗时较长;另一种基于TensorFlow,转换速度快但可拓展性较弱。介绍了两种方法的实现步骤及所需环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://blog.youkuaiyun.com/zhangjunhit/article/details/70740108

style-transfer

这个主要是利用caffe+model+code直接实现任意风格的转换。

最后实现需借助 
- 一张风格图片 
- 待转换风格的目标图片 
- 训练模型

# coding
>>>python style.py -s <style_image> -c <content_image> -m <model_name> -g 0
   
  • 1
  • 2

优势: 
- 可以实现任意风格的转换 
- 可拓展性强 
缺点: 
- 耗时长(真的很长,如果用CPU的话)

fast-neural-style-tensorflow

风格快速迁移转换

顾名思义,这个比前者能够更快的进行风格转换,速度因机器而异,不过效率比前者确确实实提高了很多倍

最后实现需借助 
- 一个训练好的风格模型 
- 待转换的风格图片

# coding
>>> python eval.py --model_file <path of ckpt-done> --image_file <path of image>
   
  • 1
  • 2

优势: 
- 速度相对来说很快 
- 环境搭建相对来说更容易 
缺点: 
- 可拓展性更弱 
- 只能转换固定几种风格 
- 训练新风格模型时间长(比前者生成时间更长)

style-transfer的实现

环境介绍

Ubuntu16.04 + CPU + python2.7 + caffe

搭建caffe环境

可参考我的博客

实现前准备

# 默认已安装git,未安装请sudo apt get install git
>>>git clone https://github.com/fzliu/style-transfer

# pycaffe环境布置
>>>sudo pip install progressbar  

# 下载训练模型,这里推荐vgg16
# 方法一,使用scripts/ 下的download_models.sh这个方法可能很慢。。。。
>>>bash scripts/download_models.sh vgg16
# 方法二
>>>wget http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_16_layers.caffemodel
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

使用方法二下载的model需要放在./model/vgg16下,使用方法一下载的已经默认放在那

实现

确保在源码文件夹中

# 格式
>>>python style.py -s <style_image> -c <content_image> -m <model_name> -g 0

# 举个栗子,model_name直接写vgg16或其他,不需要加具体路径
>>>python style.py -s images/style/starry_night.jpg -c images/content/nanjing.jpg -m vgg16 -g -1
   
  • 1
  • 2
  • 3
  • 4
  • 5

提示:CPU很慢,真的很慢,估计要等一会才会有时间显示出来

参数解析: 
- -s, 风格图位置; 
- -c, 内容图位置; 
- -m, 模型位置; 
- -g, 什么模式,-1为CPU,0为单个GPU,1为两个GPU。

调整参数

# 确保在源码文件夹下,修改style.py配置文件
>>>vim style.py


# 修改文件大小,改为1024
parser.add_argument("-l", "--length", default=1024, type=float, required=False, help="maximum image length") 
def transfer_style(self, img_style, img_content, length=1024, ratio=1e5,  
n_iter=512, init="-1", verbose=False, callback=None)  

# 修改迭代次数,个人认为400就差不多了,可自行修改;50次迭代之后改变的就是背景纹理,按需更改
parser.add_argument("-n", "--num-iters", default=400, type=int, required=False, help="L-BFGS iterations")

# 还有很多其他可以修改的地方,在此就不一一赘述了
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

fast-neural-style-tensorflow的实现

环境介绍

Ubuntu16.04 + CPU + python2.7 + tensorflow 1.0

搭建tensorflow环境

可参考我的博客

实现前准备

下载已经训练好的模型

百度云盘链接

# 安装pyyaml
>>>sudo pip install pyyaml
   
  • 1
  • 2
实现

确保在源码文件夹中

# 格式
>>>python eval.py --model_file <path of ckpt-done> --image_file <path of image>

# 举个栗子,假设wave.ckpt-done放在了源码文件夹中的models文件夹中
>>>python eval.py --model_file models/wave.ckpt-done --image_file img/test.jpg
# 默认生成位置在generated,默认生成文件名称为res.jpg。可自行在eval.py中更改
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
训练新的风格模型

下载

vgg16训练模型(500多M)

训练数据集(12.6G)

或者使用wget命令下载

# vgg16训练模型
>>>wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz

# 训练数据集
>>>wget http://msvocds.blob.core.windows.net/coco2014/train2014.zip
   
  • 1
  • 2
  • 3
  • 4
  • 5

移动模型到对应目录中

# 在源码文件夹中新建文件夹
>>>mkdir pretrained

# 下载完成之后需要进行解压
>>>tar -zxvf vgg_16_2016_08_28.tar.gz

# 移动文件夹到pretrained
>>>cp <path of vgg16> <pretrained>
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

训练新的模型

# 解压数据集
>>>unzip train2014.zip

# 进入数据集
>>>cd train2014

# 建立软链接,方便训练命令的输入
>>>ln -s <train2014的绝对路径> train2014

# 进入源码文件夹中
# 开始训练, wave.yml是作者预先配置好的文件,如果训练自己的模型,需要自己新写一份yml文件
>>>python train.py -c conf/wave.yml
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

总结

如果只是单纯的想玩玩风格转换的话,可以试试fast-neural-style-tensorflow,不过训练新模型还是不建议(特殊需要除外),耗时耗力

如果想锻炼自己,从零开始学习,可以从读论文开始,然后试试style-transfer代码

### 图像风格迁移常用算法 图像风格迁移是一种基于深度学习的方法,用于将一幅图像的内容与另一幅图像的风格相结合。以下是几种常用的图像风格迁移算法: #### 1. Gatys et al. 的经典方法 Gatys 等人在早期提出了经典的图像风格迁移方法[^1]。这种方法的核心思想是通过卷积神经网络(CNN)提取图像的内容风格特征,并分别优化目标图像以匹配这些特征。具体内容信息通常由 CNN 高层特征图表示,而风格信息则通过 Gram 矩阵捕捉。 #### 2. Fast Style Transfer (Johnson et al.) Fast Style Transfer 是一种加速版的经典风格迁移方法[^3]。它引入了一个前馈神经网络来生成带有所需风格的目标图像,从而避免了每次都需要迭代优化的过程。此方法显著提高了运行效率,使其更适合实际应用场景。 #### 3. AdaIN (Adaptive Instance Normalization) AdaIN 方法主要针对实时风格迁移进行了改进[^2]。通过对实例归一化参数的自适应调整,它可以快速地将单张风格图像迁移到多张内容图像上。相比其他方法,AdaIN 更加高效且易于实现。 #### 4. Neural Style Transfer with Wavelets Wavelet-based NST 结合小波变换与传统 CNN 提取方式,在保留细节的同时实现了更高质量的风格转换效果[^1]。不过由于计算复杂度较高,因此在速度方面可能不如上述两种轻量化方案理想。 #### 5. CycleGAN Pix2Pix 虽然严格意义上讲它们属于图像翻译范畴而非纯粹意义上的“风格迁移”,但 GANs 技术同样能够很好地完成跨域间视觉样式转化任务[^3]。特别是无配对数据集支持下的 unsupervised learning framework ——CycleGAN更是扩展了这一领域的边界。 ```python import tensorflow as tf from tensorflow.keras import layers, models def build_model(): vgg = tf.keras.applications.VGG19(include_top=False, weights='imagenet') content_layers = ['block5_conv2'] style_layers = ['block1_conv1', 'block2_conv1', 'block3_conv1', 'block4_conv1', 'block5_conv1'] outputs = [vgg.get_layer(name).output for name in (content_layers + style_layers)] model = models.Model(vgg.input, outputs) return model ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值