gpt4 book ai didi

pytorch Dataloader - 如果输入数据返回多个训练实例

转载 作者:行者123 更新时间:2023-12-04 03:34:23 31 4
gpt4 key购买 nike

问题

我有以下问题:

我想使用 pytorchs DataLoader(以类似于 here 的方式)但我的设置有点不同:

在我的数据文件夹中,我有不同街道情况的图像(让我们称它们为 image_total,我想在靠近的人周围使用裁剪图像(称为 image_crop_[idx]足够的相机。所以可能会发生一些图像给我一个或多个裁剪图像,而其他图像给我零图像,因为它们没有显示任何人或它们太远。

因为我有很多图像,所以我想使实现尽可能高效。

我希望可以使用这样的东西:

我想加载 image_total 并检查其中是否有有用的裁剪。如果是这样,我会提取裁剪后的图像并获得类似 [image_crop_0, image_crop_1, image_crop_2,...]

的列表

现在我的问题:这可能与 pytorchs DataLoader 兼容吗?我看到的问题是我的类的````getitem```-方法会向任意实例返回零。我想使用恒定的批量大小进行训练。

注意事项

  • 也许 DataLoader 支持这个(我没找到)
  • 我必须使用缓冲区或类似的东西
  • 后备方案是预处理数据,但这不是最有效的解决方案

最佳答案

the fallback would be to pre process the data, but this would not be the most efficient solution

的确,这可能是最简单有效的解决方案。您的数据集当前具有动态大小,这与 DataLoader 不兼容,DataLoader 应输出固定大小的内容用于训练。

另一种解决方案可能是预处理 pytorch 数据集中的数据 __init__ 以创建所有人的列表及其相应的图像:

[("img1", p1), ("img1", p2), ..., ("imgn", pk)]

其中 pi 是图像中的人物边界框。然后,在您的 __getitem__ 方法中,您可以读取图像并裁剪相应的人:

class PersonDataset(Dataset):

def __init__(self):
self.images = ["img1", "img2", ..., "image"]
self.persons = [("img1", p1), ("img1", p2), ..., ("imgn", pk)]

def __getitem__(self, index):
img, box = self.persons[index]
img = rad_image(img)
return crop(img, box)

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

这不是最有效的方法,因为它可能会导致图像被多次读取,但如果使用 DataLoader 并使用多个 worker,这应该不会成为瓶颈。

您必须实现如何创建 self.persons。基本上,您必须读取所有注释文件并提取图像的人物边界框列表。

关于pytorch Dataloader - 如果输入数据返回多个训练实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67209968/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com