2017-02-20 14 views
1

通常訓練されたカフェモデルは.caffemodel拡張子にあり、実際にはbinary protobufフォーマットです。トレーニングされたcaffeモデルをh5形式でC++ caffe netにロードする方法は?

CaffeモデルをCaffeネットにhdf5形式でロードする方法はありますか?

私は、hdf5形式のpython caffeで訓練されたモデルを持っています。

私のアプリケーションはC++ C++バージョンを使用しています。私はPythonよりもC++を使用します。

caffe訓練モデルのモデルをhdf5形式でC++ caffe netに読み込むにはどうすればいいですか?

私はcaffeがhdf5dataレイヤーを内部に持っていることを知っています。 そのためのサンプルプログラムはありますか?

EDIT:

私はCopyTrainedLayersFromHDF5()APIを使用して実行時エラー以下ました。

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 ([email protected]=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 

EDIT 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} 
+0

私は.h5ファイルをチェックしました。バイナリ形式です。 – batuman

+0

バイナリ形式は正しいですか?もしあなたが 'h5ls model_80000.h5'なら何を得るのですか? caffeがファイルにそこにない '' data''データセットを持つことを期待しているかのように見えます... – Shai

+0

h5lsコマンドはEDIT1のように私に与えました。私はデータセットを見る。 – batuman

答えて

1

あなたはnetオブジェクトメソッドvoid CopyTrainedLayersFromHDF5(const string trained_filename);を検討したことがありますか?それはあなたが探しているものをしているようです。

"HDF5Data"層については、ここでは2つのことを混乱させています。あなたが持っているhdf5ファイルには、というネットのの訓練されたパラメータが格納されています。対照的に、"HDF5Data"層は、ネットのトレーニングにトレーニング例を格納します。

+1

あなたの解答は正しいです。私はh5ファイルをC++ Caffeにロードできるように作業する必要があります。 – batuman

関連する問題