0

我最近从本教程中构建了数字,一切都很好,我终于训练了我的 AlexNet 模型(还训练了一个 SqueezNet,以便我可以在这里上传模型)!问题是当我从 Digits 下载我的模型时,我无法将它加载到我的程序中进行测试!我已经使用从这个链接下载的 GoogleNet 测试了我的程序 ,它工作正常!我在这个函数中使用 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 错误:blo bFromProto 中的断言失败 (pbBlob.raw_data_type() == caffe::FLOAT16)
,文件 /home/nvidia/build-opencv/opencv/modules/dnn/src/caffe/caffe_im
porter.cpp,第 242 行异常: /home/nvidia/build-opencv/opencv/modules/dnn/src/caffe/caffe_importer .cpp:242: 错误: (-215) pbBlob.raw_data_type() == caffe::FLOAT16 in function blo
bFromProto


OpenCV 错误:在setInput、文件 /home/nvidia/build-opencv/opencv/modules/dnn/src/dnn.cpp中未找到请求的对象(未找到请求的 blob“数据”) ,第
1606 行终止后调用'cv::Exception' 实例
what(): /home/nvidia/build-opencv/opencv/modules/dnn/src/dnn.cpp:1606: 错误: (-204) 函数中未找到请求的 blob“数据”设置输入

中止(核心转储)

任何帮助将不胜感激<3

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

您可以在此处下载经过训练的 squeezNet 模型(.prototxt 和 .caffemodel)

4

2 回答 2

0

OpenCV DNN 模型需要 BVLC 格式的 caffemodel。但是,NVCaffe 以比 BVLC Caffe 更有效的格式存储 caffe 模型。如果您想要与 BVLC/Caffe 和 NVcaffe 兼容的模型。

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

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

于 2018-06-11T05:46:33.377 回答
0

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

于 2018-04-30T10:53:43.643 回答