VOCBboxDataset возвращает неправильный размер набора данных при применении к моему набору данных
У меня есть 250 наборов данных изображений и 250 файлов аннотаций с двумя классами: мяч и игрок. В папке также есть три текстовых файла 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 и тест. Например, в этом случае он будет отображаться как 182,73,10 для поезда, val и test. Значение теста не изменяется. Каждый раз стоимость поезда и Валь будет увеличиваться на 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))
Количество изображений в наборе данных "train": 182 Количество изображений в наборе данных "valid": 73 Количество изображений в наборе данных "test": 10
Почему это происходит и как это предотвратить. И также это как-то влияет на мой тренировочный процесс?
ссылка train.txt ( https://imgur.com/B1Gszfi) ссылка val.txt ( https://imgur.com/kOcIZ5h)
1 ответ
Проблема возникла из-за небольшой упущенной ситуации, когда текстовые файлы имели пробелы, поскольку список изображений был вырезан, скопирован и вставлен в один и тот же файл. Текстовые файлы были созданы в блокноте. В блокноте индекс не виден, но пропуски видны, когда вы просматриваете текстовые файлы в github, где первоначальное индексирование все еще присутствует, и индексирование остается, даже если размер списка был сокращен. Например, сначала был создан список из 182 изображений, но позже он урезан до 170. Поэтому, когда мы используем объект "Создание набора данных", код читает все строки текстового файла, т.е. он будет читать 182 вместо 170. Нам нужно убедиться, что Номер индекса и номер изображения одинаковы, чтобы избежать этой проблемы.