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