【问题标题】:How to load a dataset starting from list of images Pytorch如何从图像列表 Pytorch 加载图像数据集
【发布时间】:2021-02-10 21:28:52
【问题描述】:

我有一个服务从另一个服务接收二进制格式的图像(我们称之为服务 B):

from PIL import Image

img_list = []
img_bin = get_image_from_service_B()
image = Image.open(io.BytesIO(img_bin)) # Convert bytes to image using PIL

当图像通过 PIL 成功转换时,它也会附加到图像列表中。
img_list.append(image)    

当我有足够的图像时,我想使用 Pytorch 加载我的图像列表,就像它是一个数据集一样

if img_list.__len__() == 500:
     ### Load dataset and do a transform operation on the data

在该软件的先前版本中,要求只是从文件夹中检索图像,因此加载所有图像非常简单
my_dataset = datasets.ImageFolder("path/to/images/folder/", transform=transform)
dataset_iterator = DataLoader(my_dataset, batch_size=1)

现在我的问题是如何执行转换并从列表中加载数据集。

【问题讨论】:

  • 尝试使用 pytorch/serve,在那里你可以使用请求批处理选项,我认为应该这样做。否则您将不得不使用异步队列。

标签: python pytorch torch torchvision


【解决方案1】:

您可以简单地编写自定义数据集:

class MyDataset(torch.utils.data.Dataset):
  def __init__(self, img_list, augmentations):
    super(MyDataset, self).__init__()
    self.img_list = img_list
    self.augmentations = augmentations

  def __len__(self):
    return len(self.img_list)

  def __getitem__(self, idx):
    img = self.img_list[idx]
    return self.augmentations(img)
  

您现在可以将此自定义数据集插入DataLoader,您就完成了。

【讨论】:

  • 非常感谢,我想补充一点,就我而言,还需要添加一个目标self.targets = torch.LongTensor(my_targets) ,其中my_targets 基本上是另一个列表。当然__getitem__ 也将相关目标返回到图像
  • @TajinderSingh 显然有目标总是好的..
  • @Shai 非常感谢!只有一个小修复 torch.util.data.Datasettorch.utils.data.Dataset
猜你喜欢
  • 2020-05-23
  • 2020-08-07
  • 2019-12-30
  • 2021-11-30
  • 2020-12-24
  • 2017-12-19
  • 2019-05-02
  • 2019-05-01
  • 2022-12-23
相关资源
最近更新 更多