《深度学习之PyTorch实战计算机视觉》学习笔记(9)

本文是基于PyTorch的计算机视觉实战笔记,讲解如何利用vgg16模型进行图像风格迁移。通过定义内容和风格度量值,使用神经网络模型调整内容图片,使其融合风格图片的风格,最终生成风格化图片。
摘要由CSDN通过智能技术生成

这部分是利用pytorch 进行实战,利用迁移vgg16 来实现图片的风格迁移
代码基于python3.7, pytorch 1.0,cuda 10.0 .

pytorch图像风格迁移实战

获取一张内容图片和一张风格图片;定义两个度量值,一个度量叫作内容度量值,另一个度量叫作风格度量值,其中的内容度量值用于衡
量图片之间的内容差异程度,风格度量值用于衡量图片之间的风格差异程度;最后,建立神经网络模型,对内容图片中的内容和风格图片
的风格进行提取,以内容图片为基准将其输入建立的模型中,并不断调整内容度量值和风格度量值,让它们趋近于最小,最后输出的图片
就是内容与风格融合的图片。----来自《深度学习之PyTorch实战计算机视觉》

import torch
from torch.autograd import Variable
import torchvision
from torchvision import transforms, models
import copy
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
# 数据预处理,加载数据
transform = transforms.Compose([transforms.Resize([224,224]),
                               transforms.ToTensor()])

def loading(path = None):
    img = Image.open(path)
    img = transform(img)
    img = img.unsqueeze(0)
    return img

content_img = loading('images/4.jpg')
content_img = Variable(content_img).cuda()
style_img = loading('images/5.jpg')
style_img = Variable(style_img).cuda()
# 内容度量值可以使用均方误差作为损失函数:
class Content_loss(torch.nn.Module):
    def __init__(self,weight,target):
        super(Content_loss,self).__init__()
        self.weight = weight                    # weight 是一个权重用来控制最后风格和内容的占比
        self.target = target.detach() * weight  # target是通过卷积获取到的输入图像中的内容,target.detach()用于对提取到的内容进行锁定,不需要进行梯度
        self.loss_fn = torch.nn.MSELoss()
    def forward(self, input):
        self.loss = self.loss_fn(input*self.weight, self.target)  #  进行计算损失值
        return 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值