C++调用caffe分类模型-Opencv3.4.3
前言
opencv是图像领域中非常优秀的一个开源库,近年来,随着深度学习的发展,深度在图像识别、物体检测、语义分割等领域已经达到落地的程度。opencv开源库也一直在支持各种分类、检测model的调用,虽然还不够全面。。。opencv从3.3开始已经支持分类模型的调用,包括caffe、tensorflow、pytorch等框架训练出的模型。从3.4.2开始,支持yolov3的调用,这真的是一个很大的进步,可以把物体检测真正落地。
Opencv3.4.3调用caffe模型
那废话就不说了,直接上源代码吧,非常清晰明了。
#include <opencv2/dnn.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/utils/trace.hpp>
using namespace cv;
using namespace cv::dnn;
#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
/* Find best class for the blob (i. e. class with maximal probability) */
static void getMaxClass(const Mat &probBlob, int *classId, double *classProb)
{Mat probMat = probBlob.reshape(1, 1); //reshape the blob to 1x1000 matrixPoint classNumber;minMaxLoc(probMat, NULL, classProb, NULL, &classNumber);*classId = classNumber.x;
}
static std::vector<String> readClassNames(const char *filename = "synset_words.txt")
{std::vector<String> classNames;std::ifstream fp(filename);if (!fp.is_open()){std::cerr << "File with classes labels not found: " << filename << std::endl;exit(-1);}std::string name;while (!fp.eof()){std::getline(fp, name);if (name.length())classNames.push_back(name.substr(name.find(' ') + 1));}fp.close();return classNames;
}
int main()
{CV_TRACE_FUNCTION();String modelTxt = "bvlc_googlenet.prototxt";String modelBin = "bvlc_googlenet.caffemodel";String imageFile = "cup_1.jpg";Net net = dnn::readNetFromCaffe(modelTxt, modelBin);if (net.empty()){std::cerr << "Can't load network by using the following files: " << std::endl;std::cerr << "prototxt: " << modelTxt << std::endl;std::cerr << "caffemodel: " << modelBin << std::endl;std::cerr << "bvlc_googlenet.caffemodel can be downloaded here:" << std::endl;std::cerr << "http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel" << std::endl;exit(-1);}Mat img = imread(imageFile);if (img.empty()){std::cerr << "Can't read image from the file: " << imageFile << std::endl;exit(-1);}//GoogLeNet accepts only 224x224 RGB-imagesMat inputBlob = blobFromImage(img, 1, Size(224, 224),Scalar(104, 117, 123)); //Convert Mat to batch of imagesMat prob;cv::TickMeter t;for (int i = 0; i < 10; i++){CV_TRACE_REGION("forward");net.setInput(inputBlob, "data"); //set the network inputt.start();prob = net.forward("prob"); //compute outputt.stop();}int classId;double classProb;getMaxClass(prob, &classId, &classProb);//find the best classstd::vector<String> classNames = readClassNames();std::cout << "Best class: #" << classId << " '" << classNames.at(classId) << "'" << std::endl;std::cout << "Probability: " << classProb * 100 << "%" << std::endl;std::cout << "Time: " << (double)t.getTimeMilli() / t.getCounter() << " ms (average from " << t.getCounter() << " iterations)" << std::endl;system("pause");return 0;
}
关于代码中所用到的文件:bvlc_googlenet.caffemodel、bvlc_googlenet.prototxt、synset_words.txt
其中:bvlc_googlenet.caffemodel是模型文件,是GoogleNet在ImageNet上训练好的模型,bvlc_googlenet.prototxt是googleNet的结构文件,synset_words.txt是ImageNet上的类别信息。
实验结果
Best class: #812 'space shuttle'
Probability: 99.9828%
Time: 53.3045 ms (average from 10 iterations)
Best class: #504 'coffee mug'
Probability: 68.0434%
Time: 52.8983 ms (average from 10 iterations)
C++调用caffe分类模型-Opencv3.4.3相关推荐
- 【opencv】调用caffe、tensorflow、darknet模型
本文参考自:opencv调用cCaffe.TensorFlow.Torch.PyTorch训练好的模型 往往,当我们训练好一个模型后,就可以通过OpenCV加载模型使用该模型,完成分类和实时预测的任务 ...
- Caffe、TensorFlow、MXnet三个开源库对比+主流分类模型对比
库名称 开发语言 支持接口 安装难度(ubuntu) 文档风格 示例 支持模型 上手难易 Caffe c++/cuda c++/python/matlab *** * *** CNN ** MXNet ...
- r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化
本文内容原创,未经作者许可禁止转载! 目录 一.前言 二.摘要 三.关键词 四.算法原理 五.经典应用 六.R建模 1.载入相关包(内含彩蛋): 1.1 library包载入 1.2 pacman包载 ...
- caffe训练分类模型教程
caffe训练分类模型教程 1.已有图像存放在train和val下,book和not-book(两类)的图片数量相同 在caffe/data下新建一個myself文件夾,并新建两个文件夹分别命名为tr ...
- 如何调用 caffe 训练好的模型对输入图片进行测试
如何调用 caffe 训练好的模型对输入图片进行测试 该部分包括两篇文章 win10 下 caffe 的第一个测试程序(附带详细讲解) 主要讲解如何利用 caffe 来训练模型. 如何调用 caffe ...
- logistic回归 如何_第七章:利用Python实现Logistic回归分类模型
免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...
- 独家 | 教你用Pytorch建立你的第一个文本分类模型!
作者:Aravind Pai 翻译:王威力 校对:张一豪 本文约3400字,建议阅读10+分钟 本文介绍了利用Pytorch框架实现文本分类的关键知识点,包括使用如何处理Out of Vocabula ...
- 百度开源业内首个口罩人脸检测及分类模型,携手开发者共同抗疫
2020-02-13 15:33:32 允中 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 抗击疫情,众志成城,人工智能技术正被应用到疫情防控中来. 2月13日,百度宣布免费开源业内首个口罩人 ...
- 机器学习多目标分类模型解法
机器学习被广泛的应用于推荐.风控等场景.经典的机器学习建模数据是由特征列和单一目标列构成的,比如要做广告的CTR预测,其实模型关心的是一个广告曝光后是否会被点击,这是一个单一目标场景的建模过程.但是在 ...
- Lesson 5.分类模型决策边界与模型评估指标
Lesson 5.分类模型决策边界与模型评估指标(上) 在逻辑回归的算法基础内容结束之后,我们还需要补充一些关于分类模型的基础知识,包括观察分类模型判别性能的决策边界基本的概念与实现方法,同时也包括对 ...
最新文章
- C#中判断空字符串的3种方法性能分析【月儿原创】
- 上周新闻回顾:微软补丁个个紧急 奥运网络百花齐放
- IEEE:2021年的机遇、挑战以及关键的科技趋势
- 1月31日云栖精选夜读:阿里云客户案例研究:罗辑思维
- C++面试笔记(2)
- 基于.NET实现数据挖掘--朴素贝叶斯算法
- 【51单片机快速入门指南】4.3.2: MPU6050:一阶互补滤波、二阶互补滤波和卡尔曼滤波获取欧拉角
- SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements) ——《Using SQlite》读书笔记 .
- 手柄游戏之《恶魔城暗影之王》推荐
- pr视频两边模糊_干货!Pr教程:如何在视频中添加模糊效果?
- 40 个科研学术网站,赶紧来收藏一波!
- Qt 实现 别踩白块儿。
- 教你如何使用 Python 将 pdf 文档进行 加密 解密——python实用小技能分享
- Qt creator学习笔记(一)认识Qt
- 编译原理(1)词法分析程序(C++实现)
- 理解F.dropout 和nn.ReLU(inplace=True)中inplace的作用
- 神经网络的主要应用领域,神经网络技术及其应用
- 与 vmx86 驱动程序的版本不匹配解决方法
- Windows 10 安装STF实战
- CANoe的使用之Diva工程新建