图像风格迁移

最后要生成的图片是怎样的是难以想象的,所以朴素的监督学习方法可能不会生效,

Content Loss

根据输入图片和输出图片的像素差别可以比较损失

\(l_{content} = \frac{1}{2}\sum (C_c-T_c)^2\)

Style Loss

从中间提取多个特征层来衡量损失。

利用\(Gram\) \(Matrix\)(格拉姆矩阵)可以衡量风格的相关性,对于一个实矩阵\(X\),矩阵\(XX^T\)是\(X\)的行向量的格拉姆矩阵

\(l_{style}=\sum wi(Ts-Ss)^2\)

总的损失函数

\(L_{total(S,C,T)}=\alpha l_{content}(C,T)+\beta L_{style}(S,T)\)

代码

from PIL import Image

import matplotlib.pyplot as plt

import numpy as np

import torch

import torch.optim as optim

from torchvision import transforms, models

vgg = models.vgg19(pretrained=True).features#使用预训练的VGG19,features表示只提取不包括全连接层的部分

for i in vgg.parameters():

i.requires_grad_(False)#不要求训练VGG的参数

定义一个显示图片的函数

def load_img(path, max_size=400,shape=None):

img = Image.open(path).convert('RGB')

if(max(img.size)) > max_size:#规定图像的最大尺寸

size = max_size

else:

size = max(img.size)

if shape is not None:

size = shape

transform = transforms.Compose([

transforms.Resize(size),

transforms.ToTensor(),

transforms.Normalize((0.485, 0.456, 0.406),

(0.229, 0.224, 0.225))

])

'''删除alpha通道(jpg), 转为png,补足另一个维度-batch'''

img = transform(img)[:3,:,:].unsqueeze(0)

return img

载入图像

content = load_img('./images/turtle.jpg')

style = load_img('./images/wave.jpg', shape=content.shape[-2:])#让两张图尺寸一样

'''转换为plt可以画出来的形式'''

def im_convert(tensor):

img = tensor.clone().detach()

img = img.numpy().squeeze()

img = img.transpose(1,2,0)

img = img * np.array((0.229, 0.224, 0.225)) + np.array((0.485, 0.456, 0.406))

img = img.clip(0,1)

return img

使用的图像为(左边为Content Image,右边为Style Image):

定义几个待会要用到的函数

def get_features(img, model, layers=None):

'''获取特征层'''

if layers is None:

layers = {

'0':'conv1_1',

'5':'conv2_1',

'10':'conv3_1',

'19':'conv4_1',

'21':'conv4_2', #content层

'28':'conv5_1'

}

features = {}

x = img

for name, layer in model._modules.items():

x = layer(x)

if name in layers:

features[layers[name]] = x

return features

def gram_matrix(tensor):

'''计算Gram matrix'''

_, d, h, w = tensor.size() #第一个是batch_size

tensor = tensor.view(d, h*w)

gram = torch.mm(tensor, tensor.t())

return gram

content_features = get_features(content, vgg)

style_features = get_features(style, vgg)

style_grams = {layer:gram_matrix(style_features[layer]) for layer in style_features}

target = content.clone().requires_grad_(True)

'''定义不同层的权重'''

style_weights = {

'conv1_1': 1,

'conv2_1': 0.8,

'conv3_1': 0.5,

'conv4_1': 0.3,

'conv5_1': 0.1,

}

'''定义2种损失对应的权重'''

content_weight = 1

style_weight = 1e6

训练过程

show_every = 400

optimizer = optim.Adam([target], lr=0.003)

steps = 2000

for ii in range(steps):

target_features = get_features(target, vgg)

content_loss = torch.mean((target_features['conv4_2'] - content_features['conv4_2'])**2)

style_loss = 0

'''加上每一层的gram_matrix矩阵的损失'''

for layer in style_weights:

target_feature = target_features[layer]

target_gram = gram_matrix(target_feature)

_, d, h, w = target_feature.shape

style_gram = style_grams[layer]

layer_style_loss = style_weights[layer] * torch.mean((target_gram - style_gram)**2)

style_loss += layer_style_loss/(d*h*w) #加到总的style_loss里,除以大小

total_loss = content_weight * content_loss + style_weight * style_loss

optimizer.zero_grad()

total_loss.backward()

optimizer.step()

if ii % show_every == 0 :

print('Total Loss:',total_loss.item())

plt.imshow(im_convert(target))

plt.show()

将输入的图像和最后得到的混合图作比较:

没有达到最好的效果,还有可以优化的空间√

参考:

Image Style Transfer Using Convolutional Neural Networks论文

Udacity——PyTorch Scholarship Challenge

keras图像风格迁移

风格迁移: 在内容上尽量与基准图像保持一致,在风格上尽量与风格图像保持一致. 1. 使用预训练的VGG19网络提取特征 2. 损失函数之一是"内容损失"(content loss) ...

fast neural style transfer图像风格迁移基于tensorflow实现

引自:深度学习实践:使用Tensorflow实现快速风格迁移 一.风格迁移简介 风格迁移(Style Transfer)是深度学习众多应用中非常有趣的一种,如图,我们可以使用这种方法把一张图片的风格“ ...

Distill详述「可微图像参数化」:神经网络可视化和风格迁移利器!

近日,期刊平台 Distill 发布了谷歌研究人员的一篇文章,介绍一个适用于神经网络可视化和风格迁移的强大工具:可微图像参数化.这篇文章从多个方面介绍了该工具. 图像分类神经网络拥有卓越的图像生成能力 ...

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

1.简介 本教程主要讲解如何实现由 Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的Neural-Style 算法.Neural-Style 或者 ...

Gram格拉姆矩阵在风格迁移中的应用

Gram定义 n维欧式空间中任意k个向量之间两两的内积所组成的矩阵,称为这k个向量的格拉姆矩阵(Gram matrix) 根据定义可以看到,每个Gram矩阵背后都有一组向量,Gram矩阵就是由这一组向 ...

『cs231n』通过代码理解风格迁移

『cs231n』卷积神经网络的可视化应用 文件目录 vgg16.py import os import numpy as np import tensorflow as tf from downloa ...

Keras实现风格迁移

风格迁移 风格迁移算法经历多次定义和更新,现在应用在许多智能手机APP上. 风格迁移在保留目标图片内容的基础上,将图片风格引用在目标图片上. 风格本质上是指在各种空间尺度上图像中的纹理,颜色和视觉图案 ...

ng-深度学习-课程笔记-14: 人脸识别和风格迁移(Week4)

1 什么是人脸识别( what is face recognition ) 在相关文献中经常会提到人脸验证(verification)和人脸识别(recognition). verification就 ...

[DeeplearningAI笔记]卷积神经网络4.6-4.10神经网络风格迁移

4.4特殊应用:人脸识别和神经网络风格转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.6什么是神经网络风格转换neural style transfer 将原图片作为内容图片Cont ...

随机推荐

Webstorm 下的Angular2.0开发之路

人一旦上了年纪,记忆力就变得越来越不好. 最近写了许多的博文,倒不是为了给谁看,而是方便自己来搜索,不然一下子又忘记了. 如果恰巧帮助到了你,也是我的荣幸~~~~~~~~~~~~ 废话不多说,看正题~ ...

【JS】FOR循环通关只循环一次length提高性能

问题来源于jqueryAPI 原文: Iteration An array has a length property that is useful for iteration: for ( var ...

SQL Server 查询表的记录数(3种方法,推荐第一种)

http://blog.csdn.net/smahorse/article/details/8156483 --SQL Server 查询表的记录数 --one: 使用系统表. SELECT obje ...

Xcode error: conflicting types for 'XXXX'

问题描述:在main方法中调用了一个写在main方法后面的方法,比如: void main(){ A(); } void A(){} Xcode编译后就报错:conflicting types for ...

iTween基础之功能简介

图像风格迁移Android,图像风格迁移(Pytorch)相关推荐

  1. 图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解

    点击蓝字关注我们 AI研习图书馆,发现不一样的世界 风格迁移 图像风格化迁移是一个很有意思的研究领域,它可以将一张图的风格迁移到另外一张图像上,由此还诞生了Prisma和Ostagram这样的商业化产 ...

  2. 深度学习项目二: 图像的风格迁移和图像的快速风格迁移 (含数据和所需源码)

    图像风格迁移是指,将一幅内容图的内容,和一幅或多幅风格图的风格融合在一起,从而生成一些有意思的图片 一:传统的图像风格迁移 为了让我们生成的迁移图在风格上与风格图片尽可能相似,在内容上尽可能与内容图相 ...

  3. 图像风格迁移与快速风格迁移的对比(感知损失)

    最近一段时间要写数字图像处理的文献综述,<深度学习在图像风格迁移中的原理与应用综述>.只能感慨自己一时选题不审,导致期末火葬场啊-- 这个问题我纠结了一天,看了N多篇文献(全是英文的-), ...

  4. opencv与python学哪一个好_教你如何用OpenCV、Python和深度学习技术对图像和实时视频进行神经风格迁移...

    编者按:在这篇教程中,作者AdrianRosebrock将教你如何用OpenCV.Python和深度学习技术对图像和实时视频进行神经风格迁移. 2015年,Gatsys等人在论文ANeuralAlgo ...

  5. Neural Style Transfer 风格迁移经典论文讲解与 PyTorch 实现

    今天花半小时看懂了"Image Style Transfer Using Convolutional Neural Networks Leon"这篇论文,又花半小时看懂了其 PyT ...

  6. 风格迁移应用_[风格迁移][超分][ECCV2016]Perceptual Losses for Real...

    论文标题:Perceptual Losses for Real-Time Style Transfer and Super-Resolution 这是首次提出使用预训练模型来在图像变换任务中使用感知损 ...

  7. CVPR 2019 | Adobe提出新型超分辨率方法:用神经网络迁移参照图像纹理

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 选自arXiv 作者:Zhifei Zhang等 机器之心编译 参 ...

  8. cnn风格迁移_简述风格迁移Neural-Style细节

    什么是风格迁移? 风格迁移是使用某些手段(合法的), 把图像从原风格转换到另外一个风格, 同时保证图像内容没有变化, 举个栗子, 下面的这类图片应该是很多人见过了 可以看到在把画风变成梵高的星夜后, ...

  9. CVPR 2019 论文解读 | 基于多级神经纹理迁移的图像超分辨方法 (Adobe Research)

    基于多级神经纹理迁移的图像超分辨方法 超分辨(Super-Resolution)图像恢复旨在从低分辨模糊图像中恢复出高分辨的清晰图像,是计算机视觉中的一个重要任务,在工业界有非常强的应用前景.CVPR ...

  10. Android Material风格的应用(三)--DrawerLayout

    添加抽屉导航 Android Material风格的应用(一)--AppBar TabLayout Android Material风格的应用(二)--RecyclerView Android Mat ...

最新文章

  1. Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式
  2. Android Parcelable 源码解析
  3. 关于return和exit
  4. Ajax初体验(一)
  5. 内存还剩余很多,却使用 swap 分区
  6. 携程启动“2021混合办公试验”,梁建章:拥抱疫情之外的在家办公
  7. 微信上传图文素材接口报41005错误解决方法
  8. 大智慧 软件 开发语言_中科闻歌中标深圳税务局智慧税务中台软件开发服务项目...
  9. 解析nextTick---vue3任务调度
  10. Photoshop 操作显示滞后问题及解决方法
  11. 输错密码?这个 sudo 会“嘲讽”你
  12. Scrapyd API的安装
  13. STM32的硬件SPI驱动AD7124的方法
  14. delphi 剪切板变量_Delphi监视剪贴板内容
  15. cesium——鼠标拾取坐标并转换为经纬高
  16. 离散数学 1. 符号表、集合和命题
  17. chcp 437>nul graftabl 936>nul
  18. TR069服务器配置DHCP/IP/PING/Tracert/HTTP/PPPoE等仿真诊断模板及IPWAN和PPPoE WAN模板创建
  19. android模拟器访问电脑本机
  20. 计算机的宽带用户名没有了怎么办,电脑没办法建立宽带连接怎么办

热门文章

  1. 使用jxls模板解析导出数据时添加单元格样式
  2. tbschedule源码分析配置
  3. Elas Digital:定义一个Token的最简易方法
  4. 再次回归 IDEA 的部分修改记录...
  5. Anaconda版本与Python版本对应关系
  6. Xmind8 下载与破解激活教程
  7. IIS7管理器设置网站首页
  8. 打开计算机管理iis,iis管理器怎么打开?Win7打开iis管理器的操作方法
  9. Java批量下载有道单词发音+与Anki卡片整合
  10. ESP8266 WIFI 模块连接OneNet测试