图片风格转换

本文探讨了图片风格转换的数学原理,通过计算不同图片featuremap间的欧式距离和协方差来衡量内容与风格的相似度。优化目标是生成图片与内容图片特征层的欧式距离最小,与风格图片的协方差最大化。最后,文章提供了代码实现和训练结果展示。
摘要由CSDN通过智能技术生成

在此之前

我们一定要搞明白模型背后的数学原理

我们的Loss损失函数是什么

计算每个featuremap之间的欧及里的距离可以知道2个图片的相近度

计算featuremap之间的协方差 可以计算2个图片的风格相似度

优化就是优化 生成的图片和内容图片每个层里面的featuremap之间的欧及里的距离

生成图片和要转换的风格图片 每层里面featuremap之间的协方差之间的距离

 

代码实现

import numpy as np

import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.optim as optim

import PIL
from PIL import Image
import matplotlib.pyplot as plt

import torchvision.transforms as transforms
import torchvision.models as models

# cuda

use_cuda = torch.cuda.is_available()
dtype = torch.cuda.FloatTensor if use_cuda else torch.FloatTensor

# images
"""
图片的加载和预处理
"""
imsize = 200  # desired size of the output image

loader = transforms.Compose([
    transforms.Scale(imsize),  # scale imported image
    transforms.ToTensor()])  # transform it into a torch tensor


def image_loader(image_name):
    image = Image.open(image_name)
    image = Variable(loader(image))
    # fake batch dimension required to fit network's input dimensions
    image = image.unsqueeze(0)
    return image


style = image_loader("./images/picasso.jpg").type(dtype)
content = image_loader("./images/dancing.jpg").type(dtype)

assert style.size() == content.size(),"we need to import style and content images of the same size"


# display

unloader = transforms.ToPILImage()  # reconvert into PIL image


def toimage(tensor):
    image = tensor.clone().cpu()  # we clone the tensor to not do changes on it
    image = image.view(3, imsize, imsize)  # remove the fake batch dimension
    image = unloader(image)
    return image


# content loss
"""
图片2个mapfeature之间的欧及里得距离可以判断2个图片的内容相似度
每个mapfeature之间的协方差矩阵则表示2个图片之间风格相似度
这就是这个loss的理论基础
生成一个图片使得 与内容图片内容相近  风格相近  分别算2个不不同loss即可
"""
class ContentLoss(nn.Module):
    def __init__(self, target, weight):
        super(ContentLoss, self).__init__()
        # we 'detach' the target content from the tree used
        #
        self.target = target
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值