d2l风格迁移--包含tensor与pil图片互换操作

本文介绍了使用深度学习进行风格迁移的任务,具体涉及读取原图片、图像预处理与后处理、VGG19模型抽取图像特征、定义内容损失和风格损失(包括格拉姆矩阵)、以及训练过程中的全变分损失。通过调整不同损失函数的权重,实现了在保持内容图像基本结构的同时,融合风格图像的艺术风格。

对13章风格迁移任务进行讲解,并对其中的部分操作如pil与tensor呼唤进行具体介绍,方便后续调用!

目录

1.读取原图片:

2.转换函数

3.抽取图像特征与net构件

4.定义损失

5.训练


1.读取原图片:

d2l.set_figsize()
content_img = d2l.Image.open('img/rainier.jpg')
d2l.plt.imshow(content_img);

style_img = d2l.Image.open('img/autumn-oak.jpg')
d2l.plt.imshow(style_img);

2.转换函数

rgb_mean = torch.tensor([0.485, 0.456, 0.406])
rgb_std = torch.tensor([0.229, 0.224, 0.225])
def preprocess(img, image_shape):
    transforms = torchvision.transforms.Compose([
        torchvision.transforms.Resize(image_shape),
        torchvision.transforms.ToTensor(),
        torchvision.transforms.Normalize(mean=rgb_mean, std=rgb_std)])
    return transforms(img).unsqueeze(0)

def postprocess(img):
    img = img[0].to(rgb_std.device)  # 表示移动到rgb_std的device上
    img = torch.clamp(img.permute(1, 2, 0) * rgb_std + rgb_mean, 0, 1)  # 此时img为hwc
    return torchvision.transforms.ToPILImage()(img.permute(2, 0, 1))  # 此时per后为chw

  PIL图像用可以用img.size返回其(weigh,height),与tensor正好相反!!进行逆std与mean运算时应为(h,w,c),tensor中为(bs,c,h,w),进行ToPILImage操作时应为(c,h,w)

  应用,注:使用d2l.plt.imshow()传入一个pil图像可以直接显示:

# 加载图像并进行预处理
img_tensor = transforms.ToTensor()(Image.open('img/rainier.jpg'))
# 将张量转换为 PIL 图像对象
img_pil = transforms.ToPILImage()(img_tensor)
# 在 Jupyter Notebook 中显示图像
d2l.plt.imshow(img_pil)
img_pil.size
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值