读取tif文件打印格式不对torch.Size([1, 256, 3, 256]),转为RGB和灰度模式

读取tif文件打印格式不对torch.Size([1, 256, 3, 256]),

torch.Size([1, 256, 3, 256]) torch.Size([1, 256, 3, 256]) tensor(0.) tensor(1.) tensor(0.) tensor(1.)

正常的应该是torch.Size([1, 3, 256, 256]) ,需要进行一下转换,转换为RGB格式:
注:原始文件是256×256

   
        if image_fp.endswith('.tif') or image_fp.endswith('.tiff'):
            X, Y = rio.open(image_fp).read(), rio.open(label_fp).read()
# 转换为RGB格式
            X = Image.fromarray(X.transpose(1, 2, 0))  # 转置通道顺序
            X = X.convert('RGB')

            # 转换为L模式
            Y = Image.fromarray(Y[0])  # 使用第一个通道
            Y = Y.convert('L')

            X, Y = np.array(X) / 255.0, np.array(Y) / 255.0  # 因为to_tensor接受类型为float所以为255.0
            flag = 'remote'         

修改结果 

torch.Size([1, 3, 256, 256]) torch.Size([1, 1, 256, 256]) tensor(0.) tensor(1.) tensor(0.) tensor(1.)
torch.Size([1, 3, 256, 256]) torch.Size([1, 1, 256, 256]) tensor(0.) tensor(1.) tensor(0.) tensor(1.)
torch.Size([1, 3, 256, 256]) torch.Size([1, 1, 256, 256]) tensor(0.) tensor(1.) tensor(0.) tensor(1.)
### 回答1: 可以使用 torch.nn.functional.interpolate 函数进行上采样,具体代码如下: import torch x = torch.randn(32, 256, 3) y = torch.nn.functional.interpolate(x, scale_factor=(1, 1, 3), mode='nearest') print(y.size()) # 输出 torch.Size([32, 256, 9]) ### 回答2: 要将大小为torch.Size([32, 256, 3])的张量上采样为torch.Size([32, 256, 9]),可以使用torch.nn.functional.interpolate()函数来实现。 首先,需要将尺寸为[32, 256, 3]的张量转换为[32, 3, 256],即交换最后两个维度的顺序。可以使用torch.transpose()函数实现。 ```python import torch # 原始张量大小为torch.Size([32, 256, 3]) tensor = torch.randn((32, 256, 3)) # 将最后两个维度交换位置 transposed_tensor = tensor.transpose(1, 2) ``` 然后,使用torch.nn.functional.interpolate()函数进行上采样。该函数会根据给定的目标尺寸,在最后一个维度上进行线性插值,并返回新的张量。 ```python import torch.nn.functional as F # 目标尺寸为torch.Size([32, 256, 9]) target_size = (9,) # 进行上采样 upsampled_tensor = F.interpolate(transposed_tensor, size=target_size, mode='linear') ``` 最后,再次将尺寸为[32, 3, 256]的张量转换为[32, 256, 9]的张量,即再次交换最后两个维度的顺序。 ```python # 将最后两个维度再次交换位置 result_tensor = upsampled_tensor.transpose(1, 2) ``` 最终,得到的result_tensor就是尺寸为torch.Size([32, 256, 9])的上采样后的张量。 ### 回答3: 要将torch.Size([32, 256, 3])上采样为torch.Size([32, 256, 9]), 可以使用PyTorch中的torch.nn.functional.interpolate函数来实现。 首先,我们需要将输入的维度进行调整,使其变为4维的张量。torch.Size([32, 256, 3])可以变为torch.Size([32, 3, 256, 1])。 接下来,使用torch.nn.functional.interpolate函数对调整后的张量进行上采样。在上采样时,可以指定目标大小,默认情况下,目标大小与输入大小相同。 代码如下: ```python import torch import torch.nn.functional as F # 假设输入的张量为input_tensor,维度为torch.Size([32, 256, 3]) input_tensor = torch.randn(32, 256, 3) # 将输入的维度调整为4维的张量 input_tensor = input_tensor.unsqueeze(2).permute(0, 2, 1, 3) # torch.Size([32, 3, 256, 1]) # 使用torch.nn.functional.interpolate函数进行上采样 output_tensor = F.interpolate(input_tensor, scale_factor=(1, 1, 3, 1)) # 打印上采样后的张量维度 print(output_tensor.size()) # torch.Size([32, 3, 256, 9]) ``` 使用上述代码,就可以将torch.Size([32, 256, 3])上采样为torch.Size([32, 256, 9])。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刻、苦铭心`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值