如何解码caffemodel中的权重并转发图像?

时间:2016-07-19 09:53:18

标签: c++ neural-network protocol-buffers deep-learning caffe

大家。

我有一个原型文件,caffemodel文件和一个图像。 我想在caffemodel文件中提取权重并转发图像 获得关于原始文本文件的输出向量(例如,用于分类的1000维向量)。

我知道$(CAFFE_ROOT)/src/caffe/proto/caffe.proto中的文件定义 protobuf消息结构,caffemodel文件是序列化的 这些结构。

我还研究了如何编码消息结构。 例如,如果我有一个消息结构:

message Test2 {
    required string b = 2;
}

并将b的值设置为"测试",然后在编码后, 我得到" 12 07 74 65 73 74 69 6e 67"

但我仍然不知道如何使用caffemodel文件中的权重转发图像,只使用C和C ++编程。 我想解码caffemodel文件并通过我的C和转发图像 C ++代码,而不是使用Caffe或Protobuf提供的API。

有什么想法我可以在下一步做吗? 例如,研究其他材料或其他材料。 非常感谢。

1 个答案:

答案 0 :(得分:4)

Caffe的代码非常清晰易读。开始研究protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<ProfileView>().HasRequired(x => x.Viewer) .WithMany(x => x.ProfilesViewed); } 文件,具体是$CAFFE_DIR/tools/caffe.cpp函数。

重要行:

int test()

Net<float> caffe_net(FLAGS_model, caffe::TEST); caffe_net.CopyTrainedLayersFrom(FLAGS_weights); const vector<Blob<float>*>& result = caffe_net.Forward(&iter_loss); 也有有用的代码。

$CAFFE_DIR/examples/cpp_classification/classification.cpp