Caffe模型简单读写及修改

                                                   Caffe模型简单读写及修改

   Caffe模型训练好以后,有时候我们只需要提取特征,而不需要最后的分类全连接层,只需要前面一层的特征层的参数。人脸识别模型就是典型的例子,训练的时候最后一个全连接为人的身份类别全连接,实际应用部署只需要前一层提特征,然后人脸特征比对,因此最后一层并不需要,而最后一层全连接又占据了大量的参数,模型.caffemodel非常大,因此需要去掉最后一层参数再部署。

Code:

#include  

/*这些包含文件在caffe.hpp中都有包含  此处写出来只是为了清楚读写模型参数需要的函数在哪里,依赖什么?*/

//#include  

//#include  

//#include  

//#include  

//#include  

//#include  

//#include  

//#include  

//#include  

//#include  

//#include "caffe/common.hpp" 

//#include "caffe/proto/caffe.pb.h" 

//#include "caffe/util/io.hpp" 

//using google::protobuf::io::FileInputStream;

//using google::protobuf::io::FileOutputStream;

//using google::protobuf::io::ZeroCopyInputStream;

//using google::protobuf::io::CodedInputStream;

//using google::protobuf::io::ZeroCopyOutputStream;

//using google::protobuf::io::CodedOutputStream;

//using google::protobuf::Message;

 

using namespace caffe;

using namespace std;

int main()

{

    std::string model_dir = "your .caffemodel path";

    std::string save_dir ="your .txt path";

    std::string finalsave_dir = "your  new caffemodel path";

 

    //声明网络参数对象,即NetParameter对象

    NetParameter proto;

 

//1、读取caffemodel参数到NetParameter对象

    ReadProtoFromBinaryFile(model_dir, &proto);

 

//2、以proto格式写入txt

    WriteProtoToTextFile(proto, save_dir);     

 

/*3、写完之后,可以打开txt手动剔除最后一层参数,然后存储到.caffemodel */

 

    //NetParameter proto2; 

//4、从txt读取修改过的参数到Netparameter

    //ReadProtoFromTextFileOrDie(save_dir, &proto2);

 

     //5、重新将新修改过的proto写入.caffemodel

    //WriteProtoToBinaryFile(proto2, finalsave_dir); 

    return 0;

}

 

你可能感兴趣的:(算法的工程部署与移植)