Подтвердить что ты не робот

Caffe: понимание ожидаемой структуры данных lmdb для blobs

Я пытаюсь понять, как данные интерпретируются в Caffe. Для этого я взглянул на Minst Tutorial Рассматривая определение входных данных:

layers {
  name: "mnist"
  type: DATA
  data_param {
    source: "mnist_train_lmdb"
    backend: LMDB
    batch_size: 64
    scale: 0.00390625
  }
  top: "data"
  top: "label"
}

Теперь я посмотрел mnist_train_lmdb и взял одну из записей (показано в шестнадцатеричном формате):

0801101C181C229006
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000054B99F973C2400000000000000000000000000000000
000000000000DEFEFEFEFEF1C6C6C6C6C6C6C6C6AA34000000000000
00000000000043724872A3E3FEE1FEFEFEFAE5FEFE8C000000000000
000000000000000000000011420E4343433B15ECFE6A000000000000
00000000000000000000000000000000000053FDD112000000000000
000000000000000000000000000000000016E9FF5300000000000000
000000000000000000000000000000000081FEEE2C00000000000000
000000000000000000000000000000003BF9FE3E0000000000000000
0000000000000000000000000000000085FEBB050000000000000000
00000000000000000000000000000009CDF83A000000000000000000
0000000000000000000000000000007EFEB600000000000000000000
00000000000000000000000000004BFBF03900000000000000000000
0000000000000000000000000013DDFEA60000000000000000000000
00000000000000000000000003CBFEDB230000000000000000000000
00000000000000000000000026FEFE4D000000000000000000000000
00000000000000000000001FE0FE7301000000000000000000000000
000000000000000000000085FEFE3400000000000000000000000000
000000000000000000003DF2FEFE3400000000000000000000000000
0000000000000000000079FEFEDB2800000000000000000000000000
0000000000000000000079FECF120000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
2807

(Я добавил здесь разрывы строк, чтобы увидеть цифру "7".)

Теперь мой вопрос: , где описывается этот формат? Или иначе, если определено, что первые 36 байтов являются своего рода заголовком, а последние 8 байтов имеют некоторое соответствие ярлыков?

Как я могу построить собственные данные? Ни Blob Tutorial, ни Layers Definition не дают о необходимых форматах. Мое намерение - не использовать данные изображения, а временные ряды

Спасибо!

4b9b3361

Ответ 1

Я понял, что буферы протокола должны входить в игру здесь. Поэтому я попытался десериализовать его против некоторых типов, определенных в caffe.proto.

Datum выглядит идеально:

{Caffe.Datum}
    Channels: 1
    Data: {byte[784]}
    Encoded: false
    FloatData: Count = 0
    Height: 28
    Label: 7
    Width: 28

Итак, ответ прост: Это сериализованное представление экземпляра типизированного набора данных, определенного для caffe.proto

Btw. поскольку английский не является моим родным языком, мне пришлось сначала понять, что "Datum" - это единственная форма "данных"

Когда дело доходит до использования ваших собственных данных, оно структурируется следующим образом:

Обычными параметрами blob для данных являются номер N x channel K x высота H x ширина W. Память Blob имеет большое значение в макете, поэтому последняя /самый правый размер изменяется быстрее всего. Например, значение по индексу (n, k, h, w) физически находится в индексе ((n * K + k) * H + h) * W + w.

Смотрите Blobs, Layers и Nets: анатомия модели Caffe для справки

Ответ 2

Я могу попытаться ответить на ваш второй вопрос. Поскольку Caffe принимает данные только в виде нескольких выбранных форматов, таких как lmdb, hdf5 и т.д., Лучше всего конвертировать (или генерировать - в случае синтетических данных) ваши данные в эти форматы. Следующие ссылки могут помочь вам в этом. Если у вас возникли проблемы с import hdf5 в Python, вы можете обратиться к этой странице.

Создание файла LMDB в Python

Запись файла HDF5 в Python

HDF5 больше примеров