一、Opencv调用Caffe模型

Step1:VS 基础设置

  1. 包含文件目录.\include
  2. 库文件目录.\lib
  3. 链接器添加opencv_world420.lib

Step2:Python代码

import cv2 as cv
import numpy as np
# 加载模型
model = cv.dnn.readNetFromCaffe("deploy.prototxt", "model.caffemodel")
# 读取image文件并进行处理转换
image = cv.imread("test.jpg")
blob = cv.dnn.blobFromImage(image, scalefactor=1.0., size=(224, 224), mean=0)
# 图像处理方法写在这
# 传入网络中
model.setInput(blob)
predcitions = model.forward()
# 输出结果
print(predcitions)

Step3:C++代码

#include<iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include<opencv2/dnn.hpp>
#include<io.h>
// 预处理图像
cv::Mat preprocess(cv::Mat src_img) 
	cv::Mat preprocessed_img = cv::dnn::blobFromImage(src_img, 1., cv::Size(224, 224), 0);
	// 图像预处理过程写在这
	return preprocessed_img;
void main()
	std::string model_prototxt = "deploy.prototxt";
	std::string model_path = "model.caffemodel";
	std::string path = "test.jpg";
   int mode = 1;
	//加载模型
	cv::dnn::Net net = cv::dnn::readNetFromCaffe(model_prototxt, model_path);
	// GPU模式开启, 否则使用CPU模式
   if (mode == 1)
       net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
       net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
    //读取image文件并进行处理转换
    cv::Mat image_src = cv::imread(image_path);
    cv::Mat blob = preprocess(image_src);
    //传入网络中
    net.setInput(blob);
    std::vector<float> predictions = net.forward();
    //输出结果
    float max = 0.0, label = 0.0;
    for (int i = 0; i < predictions.size(); i++)
    if (max < predictions[i])
    max = predictions[i];
    label = i;
    std::cout << image_path << std::endl;
    std::cout << label << "--" << max << std::endl;
	system("pause");

Step4:对比总结

  1. CPU模式下相对caffe提升大70%提速,GPU只有大概20-30%速度提升
  2. 第一张图像需要加载模型,caffe 原生接口推理速度与 opencv 推理速度相当,第二张图像开始,opencv 的推理时间是 caffe 的1/4~1/3
  3. CPU版本,opencv 对比 caffe 不再需要费时费力引入散碎的包和头文件了
  4. GPU版本,对比caffe需要的依赖文件更多了,导致包更大,建议慎用
  5. 完全独立出来运行,opencv支持更好的代码自由度。
  6. opencv 还支持 pytorch,tensorflow等模型的部署接口,照葫芦画瓢,上手也容易。

二、调用Tensorflow pb模型文件

  1. cv::dnn::readNetFromTensorflow只需要一个pb文件即可
  2. 暂时可能不支持2.0以上tensorflow模型,待定
  3. 待完善
Windows:Opencv 调用深度学习模型部署推理过程一、Opencv调用Caffe模型Step1:VS 基础设置Step2:Python代码Step3:C++代码Step4:对比总结二、调用Tensorflow pb模型文件一、Opencv调用Caffe模型Step1:VS 基础设置包含文件目录.\include库文件目录.\lib链接器添加opencv_world420.libStep2:Python代码import cv2 as cvimport numpy as np# 我的研究方向不是计算机视觉,这段时间开始的CV学习纯粹是出于兴趣,在此记录下自己的学习历程,也方便感兴趣的同伴一起学习。 目前,我学习主要参照的是《OpenCV 4计算机视觉项目实战(原书第2版)》,所学习的代码也是来自于这本书。因为我比较习惯c++和c#的代码,所以更偏向于从c++版本的opencv开始学起。 这次主要学习的是opencv导入深度学习模型。 配置Opencv opencv是一个开源的视觉代码框架,首先使用从官网下载的安装包来获取opencv的源代码。 官网上提供了多个版本的openc
  OpenCv 从V3.3版本开始支持调用深度学习模型,例如Caffe, Tensorflow, darknet等.详细见下图,具体的使用方法,可以参考官网: https://docs.opencv.org/3.4.1/d6/d0f/group__dnn.html   目前Opencv可以支持的网络有GoogLeNet, ResNet-50,MobileNet-SSD from Caff...
opencv的DNN推理模块是不直接支持pytorch训练出来的pth文件。一般来说,可以将pth文件转成onnx格式,再用opencv调用onnx文件,即可实现推理。 pth文件转onnx文件时,因为onnx对于pth中某些定义的层是不支持的,难免会碰到一些问题。近期,对一些分割网络进行了部署,碰到的一些问题记录在下。 RuntimeError: ONNX export failed: Couldn’t export operator aten::adaptive_avg_pool2d onnx不支持
1.CommonSettings设置 cuda版本要填相应的,cudnn复制到cuda的路径下,其他的就不用修改了。 下面这个cuda框架要查你的gpu计算能力,按照对应的填,比如750ti是50,GTX1080是6.1等等。 compute_35,sm_35;compute_50,sm_50 官网查询之外也可以利用cuda的C:\ProgramData\NVIDIA Corporatio
1)opencv的DNN模块集成了很多深度学习模型,包括人脸检测、图像分类、分割、目标检测等,集成了Pytorch、tensorflow、paddlepaddle等模型框架(参看代码库OpenCV/dnn) 2)深度学习推理模型一般步骤:加载模型,包括配置文件和权重文件;输入图像预处理,转换成模型可接受的文件类型和尺寸;模型预测后处理,对于目标检测,主要是NMS后处理方法;
目录1 运行环境和前期准备2 生成.pbtxt描述文件3 测试 DNN是OpenCV中的深度神经网络模块,OpenCV 3.3以后,dnn模块支持caffeTensorFlow和torch三种深度学习框架,OpenCV 3.4.1以后,支持tensorflow深度学习框架,可以直接读取已经训练好的模型完成相应的检测任务。 1 运行环境和前期准备 1、Windows 10 64位 2、OpenC...
要在OpenCV调用TensorFlow模型,需要使用OpenCV的dnn模块。以下是一些基本步骤: 1. 下载TensorFlow模型并将其转换为OpenCV支持的格式(如Caffe或Torch)。 2. 在OpenCV中加载模型文件。 3. 准备输入图像并将其转换为模型所需的格式。 4. 将输入图像传递给模型并获取输出。 5. 处理输出并将其显示或保存。 需要注意的是,不是所有的TensorFlow模型都可以直接在OpenCV中使用。一些模型可能需要进行修改或转换才能在OpenCV中使用。
[code=python] lDo you wish to build TensorFlow with CUDA support? [y/N]: y CUDA support will be enabled for TensorFlow. Found CUDA 10.0 in: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/lib/x64 C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/include Found cuDNN 7 in: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/lib/x64 C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/include [/code]