数据增强时对原图和分割图做相同的变换

方法一:

使用torch.manual_seed(17)固定随机数种子,再用torchvision.transforms做变换
但是这种方法有时候会失效,可能是transforms函数不能在别的py文件中写好调用到本文件,需要都写在一个文件中

方法二

把单通道的label和image拼在一起成了2通道或者3通道(两张同样的image+1张label)的图像,随机变换之后,再分离通道,得到单通道图像,于是得到了同样变换的label和image

pytorch数据增强,包括image和label同时变化

img和array互相转换

from PIL import Image  
import numpy as np
 
im = Image.open("a.jpg")
im.show() 
 
img = np.array(im)      # image类 转 numpy
 
img = img[:,:,0]        #第1通道
im=Image.fromarray(img) # numpy 转 image类
im.show() 

Numpy:numpy与image互转(np.array/np.asarray,Image.fromarray)

array增加一个纬度(增加一个纬度才能在这个纬度上拼接)

b = np.arange(5)
print(b.shape)  # 输出(5,)
b = np.expand_dims(b,axis=0)
print(b.shape)  # 输出(1,5)

array在特定纬度上拼接

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(7,13).reshape(2,3)
c = np.concatenate([a,b],axis=0)
d = np.vstack([a,b])
print(a) # 输出[[1 2 3] [4 5 6]]
print(b) # 输出[[ 7  8  9] [10 11 12]]
print(c) # 输出[[ 1  2  3] [ 4  5  6] [ 7  8  9] [10 11 12]]
print(d) # 输出[[ 1  2  3] [ 4  5  6] [ 7  8  9] [10 11 12]]

tensor添加和删除纬度

# 删除
c = torch.squeeze(x, dim=3)  # 删除第三维度
d = torch.squeeze(x)  # 若不标注删除第几维度,则会删除所有为1的维度
# 添加
e = torch.unsqueeze(x, dim=0)  # 在第一维度添加维度

更新

以上方法不稳定,建议直接修改官方transform库的源码

posted @ 2023-02-19 14:12  梅雨明夏  阅读(294)  评论(0编辑  收藏  举报