无法使用opencv readnetfromcaffe加载数字训练的caffe模型

时间:2018-04-26 09:27:12

标签: c++ caffe opencv3.1 nvidia-digits

我最近建立了来自this tutorial的数字,一切正常,我终于训练了我的AlexNet模型(还训练了一个SqueezNet,以便我可以在这里上传模型)!问题是当我从Digits下载我的模型时,我无法将其加载到我的程序中进行测试!我已经使用GoogleNet下载的from this link测试了我的程序,它运行正常! 我在此函数中使用OpenCV readNetFromCaffe来加载Caffe模型

void deepNetwork::loadModel( cv::String  model ,cv::String  weight ,string lablesPath,int ps){
patchSize=ps;
labeslPath=lablesPath;
 try
{
    net = dnn::readNetFromCaffe(weight,model);
    cerr<<"loaded succ"<<endl;
}
catch (cv::Exception& e)
{
    std::cerr << "Exception: " << e.what() << std::endl;

}}

加载我的模型时出现以下错误

  

OpenCV错误:断言失败(pbBlob.raw_data_type()==   caffe :: FLOAT16)在blo中   bFromProto,文件   /家庭/ NVIDIA /集结的OpenCV / OpenCV的/模块/ DNN / src目录/朱古力/ caffe_im
  porter.cpp,第242行例外:   /家庭/ NVIDIA /集结的OpenCV / OpenCV的/模块/ DNN / src目录/朱古力/ caffe_importer   .cpp:242:错误:(-215)pbBlob.raw_data_type()== caffe :: FLOAT16 in   功能blo   bFromProto

     

OpenCV错误:未找到请求的对象(请求的blob“数据”   没找到)我
  n setInput,file   /home/nvidia/build-opencv/opencv/modules/dnn/src/dnn.cpp,line
  1606在抛出'cv :: Exception'的实例后终止调用   什么():   /home/nvidia/build-opencv/opencv/modules/dnn/src/dnn.cpp:1606:错误:   (-204)在函数setInput

中找不到请求的blob“数据”      

中止(核心倾销)

任何帮助将不胜感激<3

opencv版本3.3.1也测试了(3.3.0,3.4.1)同样的错误! 在没有Cuda,Cudnn或Caffe的系统上进行测试,只需要纯c ++和OpenCv ...... 但是我用Cuda,Cudnn和caffe训练我的模型在aws ec2实例(p3.2xlarge)上!

you can download the trained squeezNet model (.prototxt and .caffemodel) here

2 个答案:

答案 0 :(得分:0)

终于,我发现了问题! 这是一个版本问题我有数字6.1.1使用nvcaffe 0.17.0进行培训,这与以前的Caffe和OpenCv库不兼容!你必须将NvCaffe降级到版本0.15.14,它将轻松打开OpenCv!

答案 1 :(得分:0)

OpenCV DNN模型期望采用BVLC格式的caffemodel。但是,NVCaffe以更有效的格式存储caffe模型,这种格式与BVLC Caffe不同。 如果您想要与BVLC / Caffe以及NVcaffe兼容的型号。

在solver.prototxt中添加此标志 store_blobs_in_old_format = true

请阅读DIGITS NVCaffe文档。 NVCaffe Documenation - store_blobs_in_old_format