VOCBboxDataset возвращает неверный размер набора данных при применении к моему набору данных

#python-3.x #computer-vision #google-colaboratory #chainer #chainercv

#python-3.x #компьютерное зрение #google-colaboratory #цепочка #chainercv

Вопрос:

У меня есть набор данных из 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 как train, 70 как val и 10 как тестовые изображения. Но при печати длины набора данных train, val и test я всегда получаю train 12, train 3 над тестом. Например, в этом случае он будет отображаться как 182,73,10 для train, val и test. Тестовое значение не изменяется. Каждый раз значения train и 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))
  

Количество изображений в наборе данных «train»: 182
Количество изображений в «допустимом» наборе данных: 73
Количество изображений в «тестовом» наборе данных: 10

Почему это происходит и как это предотвратить. А также влияет ли это каким-либо образом на мой процесс обучения?

train.txt ссылка (https://imgur.com/B1Gszfi) val.txt ссылка (https://imgur.com/kOcIZ5h)

Комментарии:

1. Попробуйте $ cat <path/to/BasketballDataset>/ImageSets/Main/train.txt | wc -l . Если выходные данные соответствуют 182, ваш train.txt неверно определено.

2. Еще раз привет, Юки Хасимото сан… Я проверил его, и он возвращает 182. Здесь что вы подразумеваете под «плохо определенным» в train.txt ? Я вручную поместил имена файлов изображений в блокнот. Существует ли предписанный способ создания таких текстовых файлов. Как избежать подобных вещей в будущем?

3. Я имею в виду, что он не соответствует «VOC-format». Если у вас есть исходные VOC train.txt вам лучше сравнить его с вашим train.txt . или вы можете вставить train.txt к тексту этого вопроса.

4. Я сравнил два типа, но не смог найти никаких различий .. не уверен, на что обратить внимание. Я вставил текстовые файлы train и val в конец текста вопроса. Спасибо.

5. Разве вы сами не видели ссылку? The train.txt содержит пустые строки из L171-L182…

Ответ №1:

Проблема была связана с небольшой упущенной ситуацией, когда в текстовых файлах были пробелы, поскольку список изображений был вырезан, скопирован и вставлен в тот же файл. Текстовые файлы были созданы в блокноте. В блокноте индекс не отображается, но пробелы видны при просмотре текстовых файлов в github, где первоначальная индексация все еще присутствует, и индексация сохраняется, даже если размер списка был урезан. Например, сначала был создан список из 182 изображений, но позже его сократили до 170. Поэтому, когда мы используем объект создания набора данных, код считывает все строки текстового файла, то есть он будет читать 182 вместо 170. Нам нужно убедиться, что номер индекса и номер изображения одинаковы, чтобы избежать этой проблемы.