pytorch中图像的分块(patch)操作(使用了.permute()维度转换)

由于近期代码中有分块的使用,于是进行了搜索总结及探索,如有不正确的,请批评指正。

这里并不能很直观的看到,下面就看一下在图像分块上面的操作

首先给定一张图片

pytorch中图像的分块(patch)操作(使用了.permute()维度转换)_第1张图片
然后在pytorch上读者张图片

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


def readImage(path='D:\微信图片_20200304231857.jpg', size=256):#这里可以替换成自己的图片
    mode = Image.open(path)
    transform1 = transforms.Compose([
        transforms.Scale(size),
        transforms.CenterCrop((size, size)),
        transforms.ToTensor()
    ])
    mode = transform1(mode)
    return mode


def showTorchImage(image):
    mode = transforms.ToPILImage()(image)
    plt.imshow(mode)
    plt.show()


if __name__ == '__main__':
    mode = readImage(size=256)
    showTorchImage(mode)

输出图片的大小:

import torch
print(mode.size())

可以看到图片的大小为256*256的,是RGB型的
在这里插入图片描述

得到图片为:
pytorch中图像的分块(patch)操作(使用了.permute()维度转换)_第2张图片
然后将图片分为四块:
image=mode
image=image.view(3,4,64,256)
showTorchImage(image[0])
showTorchImage(image[1])
showTorchImage(image[2])
showTorchImage(image[3])
得到的结果是这样的:
pytorch中图像的分块(patch)操作(使用了.permute()维度转换)_第3张图片
这里很奇怪,
第一:我们分割为四块却显示不出第四块,另外产生了重影的图像,并不能看清楚分割的真实情况。
猜想是分割时维度产生变换,于是添加维度变换

image=mode
image=image.view(3,4,64,256)
image=image.permute(1,0,2,3)#交换维度
showTorchImage(image[0])
showTorchImage(image[1])
showTorchImage(image[2])
showTorchImage(image[3])

pytorch中图像的分块(patch)操作(使用了.permute()维度转换)_第4张图片
可以看到这样效果就展示出来了。
为什么需要维度转换呢?
直接通过view操作的办法是不科学的,把我们实际想要的patch的通道给打乱了。所以上面的数字才会是彩色,因为RGB三个通道被打乱了。为什么会把通道搞混淆了呢?这个就需要了解pytorch是以什么样的方式存储tensor数据了

你可能感兴趣的:(pytorch)