SVHN Data вопросы - PullRequest
       36

SVHN Data вопросы

0 голосов
/ 14 апреля 2019

Я читал и работал над SO вопросами, связанными с наборами данных Street View House Numbers (SVHN). Файлы доступны в 2 разных местах:

Stanford:
Набор данных номеров домов с видом на улицу (SVHN)

kaggle:
Номера домов с видом на улицу (SVHN) | Kaggle

Мой вопрос связан с форматом файлов digitStruct.mat для каждого набора изображений (поезд, тест и дополнительные материалы). Они определяют размеры имени, метки и ограничительной рамки для каждого изображения. Как я понимаю, файл mat написан как структура Matlab в формате HDF5 (которую можно прочитать с помощью h5py).

Я смог получить доступ к файлам digitStruct.mat из kaggle и прочитать их с помощью h5py. Я не могу открыть те же файлы с сайта в Стэнфорде с h5py (или с HDFView). Некоторые сообщения SO, которые я прочитал, указывают, что файлы Stanford являются более старым форматом Matlab и должны читаться с scipy.io.loadmat.

  • Файлы в Стэнфорде и kaggle одинаковые?
  • Если нет, в чем различия?
  • Можно ли открыть файлы Stanford digitStruct.mat с помощью h5py?
  • Если это так, каким способом мне следует загружать и извлекать файлы tarford Standford? (К вашему сведению, я использую Win-7 и использую HTTP-загрузку и WinZip для извлечения.)

Я добавляю дополнительную информацию, чтобы документировать различное поведение, наблюдаемое в разных файлах .mat. Это может помочь с диагнозом.

Я могу открывать и обрабатывать файлы .mat из kaggle с помощью этого вызова:

h5f = h5py.File('digitStruct.mat','r')

Для файлов из Стэнфорда я получаю разные ошибки в зависимости от файла и функции, используемой для открытия.

Команда ниже выполняется без сообщения об ошибке. Это заставляет меня поверить, что это не файл Matlab v7.3, который можно открыть с помощью h5py.

mat = scipy.io.loadmat('./Stanford/test_32x32.mat')

Оба эти вызова не работают (предоставляется краткое сообщение об ошибке):

mat = scipy.io.loadmat('./test/digitStruct.mat')
Traceback...
NotImplementedError: Please use HDF reader for matlab v7.3 files

h5f = h5py.File('./test/digitStruct.mat','r')
Traceback...
OSError: Unable to open file (file signature not found)

Кроме того, я не могу открыть test/digitStruct.mat с HDFView. Мой вывод для файлов Stanford digitStruct.mat: они могут быть файлами Matlab v7.3, но были повреждены при загрузке. Однако я не уверен, что сделал не так (так как я могу без проблем загружать и читать файлы kaggle).

1 Ответ

1 голос
/ 16 апреля 2019

С какой-то работой детектива Linux я разобрался в проблеме. Как я и подозревал, файлы digitStruct.mat, извлеченные из файлов *.tar.gz на сайте Stanford, являются файлами HDF5 (Matlab v7.3) и были повреждены при загрузке.

Для подтверждения я загрузил 3 файла tar.gz с помощью браузера в системе Linux, затем использовал команду tar для их извлечения и успешно открыл с помощью h5py в Linux. Затем я перенес их в свою систему Windows, и каждый из них работал, как и ожидалось, с h5py.

Это немного удивительно, так как в прошлом я использовал WinZip для извлечения файлов tarball. Очевидно, в них есть что-то особенное, что вызвало коррупцию.
Надеюсь, это спасет кого-то от такой же головной боли в будущем.

Примечание: файлы 3 xxxx_32x32.mat являются более старым форматом Matlab, к которому необходимо обращаться с помощью scipy.io.loadmat()

...