大家。
我有一个原型文件,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。
有什么想法我可以在下一步做吗? 例如,研究其他材料或其他材料。 非常感谢。
答案 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