繁体   English   中英

当应用于我的数据集时,VOCBboxDataset返回的数据集大小不正确

[英]VOCBboxDataset returns incorrect dataset size when applied to my dataset

我有250个图像数据集和250个带有两个类的注释文件:ball和player。 该文件夹还具有三个文本文件train.txt,val.txt,test.txt,分别包含训练,测试和验证图像的列表。

bball_labels = ('ball','player')
class BBall_dataset(VOCBboxDataset):
  def _get_annotations(self, i):
    id_ = self.ids[i]
    anno = ET.parse(os.path.join(self.data_dir, 'Annotations', id_ + 
'.xml'))
    bbox = []
    label = []
    difficult = []
    for obj in anno.findall('object'):
      bndbox_anno = obj.find('bndbox')
      bbox.append([int(bndbox_anno.find(tag).text) - 1 for tag in ('ymin', 
'xmin', 'ymax', 'xmax')])
      name = obj.find('name').text.lower().strip()
      label.append(bball_labels.index(name))
    bbox = np.stack(bbox).astype(np.float32)
    label = np.stack(label).astype(np.int32)
    difficult = np.array(difficult, dtype=np.bool)
    return bbox, label, difficult

在250个中,我已将170作为火车,将70作为val,将10作为测试图像。 但是在打印火车,val和测试数据集的长度时,我总是得到火车+12,火车+3 nad测试。 例如,在这种情况下,对于火车,val和测试,它将显示为182,73,10。 测试值不变。 每次火车和val值将分别增加12和3。

valid_dataset = BBall_dataset('BasketballDataset', 'val')
test_dataset = BBall_dataset('BasketballDataset', 'test')
train_dataset = BBall_dataset('BasketballDataset', 'train') 

print('Number of images in "train" dataset:', len(train_dataset))
print('Number of images in "valid" dataset:', len(valid_dataset))
print('Number of images in "test" dataset:', len(test_dataset))

“训练”数据集中的图像数量:182“有效”数据集中的图像数量:73“测试”数据集中的图像数量:10

为什么会发生这种情况以及如何防止这种情况发生。 并且在某种程度上也影响了我的培训过程吗?

train.txt链接( https://imgur.com/B1Gszfi)val.txt链接( https://imgur.com/kOcIZ5h

该问题是由于一个很小的情况而导致的,即在剪切,复制和粘贴图像列表时,文本文件之间存在间隙。 文本文件在记事本中创建。 在记事本中索引是不可见的,但是一旦您在github中查看文本文件(其中列表已缩小,但仍存在初始索引)并且索引仍然存在,差距就可见了。 例如,首先创建了182张图像的列表,但随后缩减为170张。因此,当我们使用“数据集创建”对象时,代码将读取文本文件的所有行,即它将读取182而不是170。我们需要确保索引数和图像数相同,可以避免此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM