Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как загрузить обученную модель кафе в формате h5 в c++ caffe net?

Автор вопроса: batumanОтветов: 1

Обычно обученные модели кафе имеют расширение .caffemodel, а на самом деле они имеют формат binary protobuf.

Есть идеи, как загрузить модель кафе в формате hdf5 в сеть кафе на С++?

У меня есть модель, обученная с помощью python caffe в формате hdf5.

Мое приложение находится на С++ с использованием версии caffe С++, и я предпочитаю использовать С++, чем python.

Как прочитать модель в обученной модели caffe в формате hdf5 в c++ caffe net?

Я знаю, что внутри caffe есть слой hdf5data. Есть ли пример программы для этого?

ИЗМЕНИТЬ:

Я использовал API CopyTrainedLayersFromHDF5() и получил следующие ошибки времени выполнения.

HDF5-DIAG: Error detected in HDF5 (1.8.11) thread 140737353775552:
  #000: ../../../src/H5G.c line 463 in H5Gopen2(): unable to open group
    major: Symbol table
    minor: Can't open object
  #001: ../../../src/H5Gint.c line 320 in H5G__open_name(): group not found
    major: Symbol table
    minor: Object not found
  #002: ../../../src/H5Gloc.c line 430 in H5G_loc_find(): can't find object
    major: Symbol table
    minor: Object not found
  #003: ../../../src/H5Gtraverse.c line 861 in H5G_traverse(): internal path traversal failed
    major: Symbol table
    minor: Object not found
  #004: ../../../src/H5Gtraverse.c line 641 in H5G_traverse_real(): traversal operator failed
    major: Symbol table
    minor: Callback failed
  #005: ../../../src/H5Gloc.c line 385 in H5G_loc_find_cb(): object 'data' doesn't exist
    major: Symbol table
    minor: Object not found
F0220 15:32:14.272573 24576 net.cpp:811] Check failed: data_hid >= 0 (-1 vs. 0) Error reading weights from model_800000.h5
*** Check failure stack trace: ***
    @     0x7ffff64afdcd  google::LogMessage::Fail()
    @     0x7ffff64b1d08  google::LogMessage::SendToLog()
    @     0x7ffff64af963  google::LogMessage::Flush()
    @     0x7ffff64b263e  google::LogMessageFatal::~LogMessageFatal()
    @     0x7ffff691c3a3  caffe::Net<>::CopyTrainedLayersFromHDF5()
    @           0x40828d  ExtractFeature::ExtractFeature()
    @           0x40ce78  main
    @     0x7ffff5bf8f45  __libc_start_main
    @           0x4080c9  (unknown)

Program received signal SIGABRT, Aborted.
0x00007ffff5c0dc37 in __GI_raise (sig=sig@entry=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) cd
[17]+  Stopped                 gdb ./endtoendlib

ИЗМЕНИТЬ 1:

>>h5ls model_800000.h5 command gave me

conv1                    Group
conv2                    Group
forget_gate              Dataset {1, 250, 1, 1274}
inception_3a             Group
inception_3b             Group
inception_4a             Group
inception_4b             Group
inception_4c             Group
inception_4d             Group
inception_4e             Group
inception_5a             Group
inception_5b             Group
input_gate               Dataset {1, 250, 1, 1274}
input_value              Dataset {1, 250, 1, 1274}
ip_bbox_unscaled0.p0     Dataset {4, 250}
ip_bbox_unscaled0.p1     Dataset {4}
ip_bbox_unscaled1.p0     Dataset {4, 250}
ip_bbox_unscaled1.p1     Dataset {4}
ip_bbox_unscaled2.p0     Dataset {4, 250}
ip_bbox_unscaled2.p1     Dataset {4}
ip_bbox_unscaled3.p0     Dataset {4, 250}
ip_bbox_unscaled3.p1     Dataset {4}
ip_bbox_unscaled4.p0     Dataset {4, 250}
ip_bbox_unscaled4.p1     Dataset {4}
ip_conf0.p0              Dataset {2, 250}
ip_conf0.p1              Dataset {2}
ip_conf1.p0              Dataset {2, 250}
ip_conf1.p1              Dataset {2}
ip_conf2.p0              Dataset {2, 250}
ip_conf2.p1              Dataset {2}
ip_conf3.p0              Dataset {2, 250}
ip_conf3.p1              Dataset {2}
ip_conf4.p0              Dataset {2, 250}
ip_conf4.p1              Dataset {2}
output_gate              Dataset {1, 250, 1, 1274}
post_fc7_conv.p0         Dataset {1024, 1024, 1, 1}
post_fc7_conv.p1         Dataset {1024}
  • Да, я проверил файл .h5, и он в двоичном формате. batuman 20.02.2017
  • но правильный ли двоичный формат? если вы h5ls model_80000.h5 что вы получите? похоже, что caffe ожидает, что файл будет иметь набор данных 'data', которого там нет... Shai 20.02.2017
  • Команда h5ls дала мне как в EDIT1. Я вижу набор данных. batuman 20.02.2017
  • как вы сохранили этот model_80000.h5 файл? это спасло кофе? Метод caffe net.ToHDF5(...), который сохраняет веса в файле hdf5, сохраняет параметры в data (и, возможно, diff) наборах данных. В вашем файле нет этого набора данных. вы можете попробовать вручную настроить файл и добавить data/ ко всем наборам данных в файле... Shai 20.02.2017

deep-learningprotocol-buffersneural-networkcaffehdf5

Ответы

Ответ 1 · рейтинг 1 · Shai

Рассматривали ли вы метод объекта net void CopyTrainedLayersFromHDF5(const string trained_filename); ? Кажется, он делает то, что вы ищете.

Что касается слоя "HDF5Data": здесь вы путаете две вещи. В вашем файле hdf5 хранятся обученные параметры сети. Напротив, слой "HDF5Data" хранит обучающие примеры, используемые для обучения сети.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы