📅  最后修改于: 2020-11-11 01:13:40             🧑  作者: Mango
导入所有必需的库并将VGG-19添加到我们的设备后,我们必须将图像加载到要申请样式传输的内存中。我们有一个内容图像,样式图像和目标图像将是这两个图像的组合。并非每个图像都需要具有相同的大小或像素。为了使图像相等,我们还将应用图像变换过程。
我们必须将内容图像和样式图像加载到内存中,以便我们可以对此执行操作。加载过程在样式传递过程中起着至关重要的作用。我们需要内存中的图像,并且在加载过程之前将无法进行样式转换过程。
码:
#defining a method with three parameters i.e. image location, maximum size and shape
def load_image(img_path,max_size=400,shape=None):
# Open the image, convert it into RGB and store in a variable
image=Image.open(img_path).convert('RGB')
# comparing image size with the maximum size
if max(image.size)>max_size:
size=max_size
else:
size=max(image.size)
# checking for the image shape
if shape is not None:
size=shape
#Applying appropriate transformation to our image such as Resize, ToTensor and Normalization
in_transform=transforms.Compose([
transforms.Resize(size),
transforms.ToTensor(),
transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))])
#Calling in_transform with our image
image=in_transform(image).unsqueeze(0) #unsqueeze(0) is used to add extra layer of dimensionality to the image
#Returning image
return image
#Calling load_image() with our image and add it to our device
content=load_image('ab.jpg').to(device)
style=load_image('abc.jpg',shape=content.shape[-2:]).to(device)
导入图像之前,我们需要将张量图像转换为numpy图像,以确保与plot包的兼容性。之前,我们已经使用熟悉的image_converts帮助函数来完成此操作,该函数先前已在“图像识别”中的“图像变换”中使用。
def im_convert(tensor):
image=tensor.cpu().clone().detach().numpy()
image=image.transpose(1,2,0)
image=image*np.array((0.5,0.5,0.5))+np.array((0.5,0.5,0.5))
image=image.clip(0,1)
return image
如果我们运行此辅助方法,则将生成错误。我们必须从图像形状和数组形状中删除一维条目。因此,我们将在转置方法之前压缩图像。
image=image.squeeze()
码:
fig, (ax1,ax2)=plt.subplots(1,2,figsize=(20,10))
ax1.imshow(im_convert(content))
ax1.axis('off')
ax2.imshow(im_convert(style))
ax2.axis('off')
当我们在Google Colab Notebook上运行它时,它将为我们提供预期的输出: