深度学习实战(一)快速理解实现风格迁移

前言Gatys大神之前发表了一篇利用风格迁移进行作画的文章,让普通的照片具有名人的画风,效果如下: 让一篇普通的图片有了梵高的风格,厉害了。 文章链接:A Neural Algorithm of Artistic Style 其实我们也可以利用风格迁移实现自己的风格,比如本文实现的国画风格。难点在于很多国画背景与内容色差并没西方画作那么明显,有的仅用淡墨,黑白两色就可以完成
摘要由CSDN通过智能技术生成

前言

Gatys大神之前发表了一篇利用风格迁移进行作画的文章,让普通的照片具有名人的画风,效果如下:



让一篇普通的图片有了梵高的风格,厉害了。
文章链接:A Neural Algorithm of Artistic Style

其实我们也可以利用风格迁移实现自己的风格,比如本文实现的国画风格。难点在于很多国画背景与内容色差并没西方画作那么明显,有的仅用淡墨,黑白两色就可以完成。这样给风格迁移学习带来较大困难,不过通过调节学习速率和损失函数也可以实现很好的学习效果。比如本文实现的国画风格:





风格迁移1. 马




风格迁移2. 山水

是不是很有意思!接下来我们就一起来理解实现风格迁移。

实现风格迁移主要依赖于
torch7
loadcaffe
VGG-19 model

可选:
CUDA ,cuDNN,OpenCL

安装相关平台还是蛮麻烦的, 需要 protobuf, loadcaffe, torch 三件套。而且有些 trick ,比如 lua 版本要足够新否则会有包安装不上的问题 (luarocks),需要查询相关安装说明,github issue 以及 FAQ 耐心解决。

相关代码整理在我的GitHub上,感兴趣的同学可以直接克隆下来调试玩一玩。

GitHub地址:https://github.com/TONYCHANBB/Chinese_painting-style

原理

回到原理上来,作者定义了两个损失函数:style loss 和 content loss,回到文章初始的图上来



将图a的style loss 和 图p的content loss 组合起来,最小化total loss function求得x

Ltotal(p⃗ ,a⃗ ,x⃗ )=αLcontent(p⃗ ,x⃗ )+βLstyle(a⃗ ,x⃗ ) L t o t a l ( p → , a → , x → ) = α L c o n t e n t ( p → , x → ) + β L s t y l e ( a → , x → )

其中, α α , β β 对应两个loss的权重,调节它们会得到不同的效果。

如何得到两个损失函数和内容风格重建呢呢,我们回到网络结构上来,作者利用了VGG-Network16个卷积层和5个池化层,没有用全连接层,采用的平均池化。(文末有VGG的网络结构图)



对于内容重建来说,用了原始网络的五个卷积层,‘conv1_1’ (a), ‘conv2_1’ (b), ‘conv3_1’ (c), ‘conv4_1’ (d) and ‘conv5_1’ (e),即图下方中的a、b、c、d、e。VGG 网络主要用来做内容识别,在实践中作者发现,使用前三层a、b、c已经能够达到比较好的内容重建工作,d、e两层保留了一些比较高层的特征,丢失了一些细节。

对于风格重建,用了卷积层的不同子集:
‘conv1_1’ (a),
‘conv1_1’ and ‘conv2_1’ (b),
‘conv1_1’, ‘conv2_1’ and ‘conv3_1’ (c),
‘conv1_1’, ‘conv2_1’ , ‘conv3_1’and ‘conv4_1’ (d),
‘conv1_1’, ‘conv2_1’ , ‘conv3_1’, ‘conv4_1’and ‘conv5_1’ (e)

这样构建网络可以忽略图像的内容,保留风格。

内容损失函数:

Lcontent L c o n t e n t 采用平方损失函数,为每个像素的损失和

Lcontent(p⃗ ,
  • 19
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值