当前位置: 首页 > 知识库问答 >
问题:

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

高墨一
2023-03-14

我有以下问题:

我想使用pytorchs DataLoader(类似于这里),但我的设置有所不同:

在我的datafolder中,我有不同街道状况的图像(称为image\u total),我想使用裁剪后的图像(称为image\u crop\u[idx]在离摄像机足够近的人周围。因此,有些图像可能会给我一张或多张裁剪过的图像,而另一些图像会给我零张图像,因为它们没有显示任何人或它们离我很远。

由于我有很多图像,我希望使实现尽可能高效。

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

我想加载image_total并检查其中是否有有用的作物。如果是这样,我提取裁剪的图像,并得到一个列表,如[image_crop_0,image_crop_1,image_crop_2,...]

现在我的问题是:这是否可能与pytorchs DataLoader兼容?我看到的问题是,我的类的``getitem```方法将对任意实例返回零。我想使用恒定的批量进行培训。

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

共有1个答案

越嘉茂
2023-03-14

回退方法是预处理数据,但这不是最有效的解决方案

事实上,这可能是最简单、最有效的解决方案。您的数据集当前具有动态大小,这与DataLoader不兼容,DataLoader应输出固定大小的内容以供培训。

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

[(“img1”,p1),(“img1”,p2),…,(“imgn”,pk)]

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

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。人员。基本上,您必须读取所有注释文件并提取图像的人员列表边界框。

 类似资料:
  • 问题内容: 因此,我一直遵循Google的官方tensorflow指南,并尝试使用Keras构建一个简单的神经网络。但是,在训练模型时,它不使用整个数据集(具有60000个条目),而是仅使用1875个条目进行训练。有可能解决吗? 输出: 这是我一直在为此工作的原始Google colab笔记本:https ://colab.research.google.com/drive/1NdtzXHEpiN

  • 为了评估我们的监督模型的泛化能力,我们可以将数据分成训练和测试集: from sklearn.datasets import load_iris iris = load_iris() X, y = iris.data, iris.target 考虑如何正常执行机器学习,训练/测试分割的想法是有道理的。真实世界系统根据他们拥有的数据进行训练,当其他数据进入时(来自客户,传感器或其他来源),经过训

  • 本文向大家介绍tensorflow 固定部分参数训练,只训练部分参数的实例,包括了tensorflow 固定部分参数训练,只训练部分参数的实例的使用技巧和注意事项,需要的朋友参考一下 在使用tensorflow来训练一个模型的时候,有时候需要依靠验证集来判断模型是否已经过拟合,是否需要停止训练。 1.首先想到的是用tf.placeholder()载入不同的数据来进行计算,比如 这种方式很简单,也很

  • 编写一个方法,根据字符(char)[输入]是否是要编码的有效字符,返回true或false。即,如果输入[输入字符]为'a'-'z'或'a'-'z',则返回true,否则返回false。 为什么我的答案错了???? 公共静态布尔isValidChar_Q1(char chr){ }

  • 问题内容: 我想跑 分句。没有训练模型,因此我将单独训练模型,但是我不确定我使用的训练数据格式是否正确。 我的训练数据是每行一句话。我找不到与此有关的任何文档,只有此线程(https://groups.google.com/forum/#!topic/nltk- users/bxIEnmgeCSM )揭示了一些有关训练数据格式的信息。 句子标记器的正确训练数据格式是什么? 问题答案: 嗯,是的,P

  • 问题内容: 我像这样使用scikit-learn的SVM: 我的问题是,当我使用分类器预测训练集成员的班级时,即使在scikit- learns实现中,分类器也可能是错误的。(例如) 问题答案: 是的,可以运行以下代码,例如: 分数是0.61,因此将近40%的训练数据被错误分类。部分原因是,即使默认内核是(理论上也应该能够对任何训练数据集进行完美分类,只要您没有两个带有不同标签的相同训练点),也可