pytorch - 用于语义分割的 Pytorch 自定义 randomcrop
问题描述
我正在尝试实现自定义数据集加载器。首先,我以 (0.98, 1,1) 之间的相同比率调整图像和标签的大小,然后我随机裁剪具有相同参数的图像和标签,以便我可以将它们输入 NN。但是,我从 PyTorch 功能中得到一个错误。这是我的代码:
class RandomCrop(object):
def __init__(self, size, padding=None, pad_if_needed=True, fill=0, padding_mode='constant'):
self.size = size
self.padding = padding
self.pad_if_needed = pad_if_needed
self.fill = fill
self.padding_mode = padding_mode
@staticmethod
def get_params(img, output_size):
w, h = img.size
th, tw = output_size
if w == tw and h == th:
return 0, 0, h, w
i = random.randint(0, h - th)
j = random.randint(0, w - tw)
return i, j, th, tw
def __call__(self, data):
img,mask = data["image"],data["mask"]
# pad the width if needed
if self.pad_if_needed and img.size[0] < self.size[1]:
img = F.pad(img, (self.size[1] - img.size[0], 0), self.fill, self.padding_mode)
mask = F.pad(mask, (self.size[1] - mask.size[0], 0), self.fill, self.padding_mode)
# pad the height if needed
if self.pad_if_needed and img.size[1] < self.size[0]:
img = F.pad(img, (0, self.size[0] - img.size[1]), self.fill, self.padding_mode)
mask = F.pad(mask, (0, self.size[0] - mask.size[1]), self.fill, self.padding_mode)
i, j, h, w = self.get_params(img, self.size)
crop_image = transforms.functional.crop(img, i, j, h, w)
crop_mask = transforms.functional.crop(mask, i, j, h, w)
return{"image": crop_image, "mask": crop_mask }
这是错误:
AttributeError: 'Image' object has no attribute 'dim'
解决方案
我错误地导入了 nn.functional.pad 而不是 transforms.functional.pad。改完之后一切顺利
推荐阅读
- python - 将函数应用于数据框以创建列表的矢量化方式
- c# - 如何使用带有 .NET Core 的 SignalR 使用 Hub 类中的服务器端计时器?
- wordpress - 重复的 WP 主题 + 插件 + Visual Composer
- ios - 插入自己的 Siri 快捷方式,如 Paytm
- angular - 将 Angular 应用程序部署到远程 IIS 服务器
- c# - C# 中的 Object Calisthenics First Class Collection 规则示例?
- .net - 如何在不启用迁移的情况下从数据库中删除列?
- powershell - PowerShell 输出到文本
- maven - 命令行:参数、选项和参数
- python - 如何在 python 中使用 mainloop(来自 tinter)?