怎么将.caffemodel文件转换为2进制文件?

怎么将.caffemodel文件转换为2进制文件?,第1张

将其导入ultra edit,里面有导出二进制文件选项

有各最简单的方悉樱法,windows其实自带了一个这样的工具exe2bin.exe在运行里输入cmd打开msdos方式,里面输入

c:\>exe2bin /?

就可以查看一下这个命令薯简的方式,比如

c:\>exe2bin c:\a.exe b.bin

再数陆裤用记事本查看就可以了,不过这种方法只能对exe文件有效。

文件夹里面,然后写一个main函数调用岁滚这个类就可以了,比如:复制,保存到caffe/examples/myproject/net_operator.hpp,然后同目录下写一个main.cpp,在main函数里面#include"net_operator.hpp",就可以使用这个类了:conststringnet_prototxt=""//你的网络的prototxt文件,用绝对路径,下面同理conststringpre_trained_file=""//你训练好的.caffemodel文件conststringimg_path=""//你要测试的图片路径//创建NetOperator对象NetOperatornet_operator(net_prototxt,pre_trained_file)Blob*blob=net_operator.processImage(img_path)//blob就得到了最后一层的输出结果,至于blob里面是怎么存放数据的,你需要去看看官网对它的定义写完main.cpp之后,到caffe目录下,租历make,然后它会编译你写的文件,对应生成的可执行文件。比如按我上面写的那样,make之后就会在caffe/build/examples/myproject文件夹里面生成一个main.bin,执行这个文件就可以了。因为生成乎型余的可执行文件并不是直接在代码目录下,所以前面我建议你写的路径用绝对路径另外如果你要获取的不是最后一层的输出,你需要修改一下processImage函数的返回值,通过NetOperator的成员变量net_来获取你需要的blob,比如有个blob名称为"label",你想获取这个blob,可以通过net_->blob_by_name("label")来获取,当然获取到的是shared_ptr>类型的,搜一下boostshared_ptr就知道跟普通指针有什么不同了好了,接下来是贴代码了:#include#include#include#include#include#include#include#include#includeusingnamespacecaffe//NOLINT(build/namespaces)usingstd::stringclassNetOperator{public:NetOperator(conststring&net_prototxt)NetOperator(conststring&net_prototxt,conststring&trained_file)~NetOperator(){}intbatch_size(){returnbatch_size_}Blob*processImage(conststring&img_path,boolis_color=true)Blob*processImages(constvector&img_paths,boolis_color=true)private:voidcreateNet(conststring&net_prototxt)//readtheimageandstoreitintheidxpositionofimagesintheblobvoidreadImageToBlob(conststring&img_path,intidx=0,boolis_color=true)shared_ptr>net_cv::Sizeinput_geometry_intbatch_size_intnum_channels_Blob*input_blob_TransformationParametertransform_param_shared_ptr>data_transformer_Blobtransformed_data_}NetOperator::NetOperator(conststring&net_prototxt){createNet(net_prototxt)}NetOperator::NetOperator(conststring&net_prototxt,conststring&trained_file){createNet(net_prototxt)net_->CopyTrainedLayersFrom(trained_file)}voidNetOperator::createNet(conststring&net_prototxt){#ifdefCPU_ONLYCaffe::set_mode(Caffe::CPU)#elseCaffe::set_mode(Caffe::GPU)#endifnet_.reset(newNet(net_prototxt,TEST))CHECK_EQ(net_->num_inputs(),1)num_outputs(),1)*input_layer=net_->input_blobs()[0]batch_size_=input_layer->num()num_channels_=input_layer->channels()CHECK(num_channels_==3||num_channels_==1)width(),input_layer->height())//reshapetheoutputshapeoftheDataTransformervectortop_shape(4)top_shape[0]=1top_shape[1]=num_channels_top_shape[2]=input_geometry_.heighttop_shape[3]=input_geometry_.widththis->transformed_data_.Reshape(top_shape)}Blob*NetOperator::processImage(conststring&img_path,boolis_color){//reshapethenetfortheinputinput_blob_=net_->input_blobs()[0]input_blob_->Reshape(1,num_channels_,input_geometry_.height,input_geometry_.width)net_->Reshape()readImageToBlob(img_path,0,is_color)net_->ForwardPrefilled()returnnet_->output_blobs()[0]}Blob*NetOperator::processImages(constvector&img_paths,boolis_color){intimg_num=img_paths.size()//reshapethenetfortheinputinput_blob_=net_->input_blobs()[0]input_blob_->Reshape(img_num,num_channels_,input_geometry_.height,input_geometry_.width)net_->Reshape()for(inti=0iForwardPrefilled()returnnet_->output_blobs()[0]}voidNetOperator::readImageToBlob(conststring&img_path,intidx,boolis_color){//readtheimageandresizetothetargetsizecv::Matimgintcv_read_flag=(is_color?CV_LOAD_IMAGE_COLOR:CV_LOAD_IMAGE_GRAYSCALE)cv::Matcv_img_origin=cv::imread(img_path,cv_read_flag)if(!cv_img_origin.data){LOG(ERROR)0){cv::resize(cv_img_origin,img,input_geometry_)}else{img=cv_img_origin}//transformtheimagetoablobusingDataTransformer//createaDataTransformerusingdefaultTransformationParameter(notransformation)data_transformer_.reset(newDataTransformer(transform_param_,TEST))data_transformer_->InitRand()//settheoutputofDataTransformertotheidximageoftheinputblobintoffset=input_blob_->offset(idx)this->transformed_data_.set_cpu_data(input_blob_->mutable_cpu_data()+offset)//transformtheinputimagedata_transformer_->Transform(img,&(this->transformed_data_))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8206604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存