对13章风格迁移任务进行讲解,并对其中的部分操作如pil与tensor呼唤进行具体介绍,方便后续调用!
目录
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

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

被折叠的 条评论
为什么被折叠?



