【OpenCV】VS2017+OpenCV部署深度学习模型

OpenCV部署深度学习模型


前言

OpenCV是一个流行的计算机视觉库,它提供了很多方便的功能,包括部署深度学习模型。
你可以使用Opencv与已经训练好的深度学习模型进行目标检测、图像分类、图像生成等任务。

一、DNN是什么?

OpenCV的深度学习模块DNN,只提供预测的功能,不能使用DNN进行模型训练,但是它支持多种深度学习框架。OpenCV从版本3.3开始支持深度神经网络推理运算的支持模块-DNN模块,它支持多种深度学习框架的模型,如Tensorflow、Caffe、Torch、Darknet,以及ONNX格式的模型。4.1.2版本加入了dnn::Model类以及针对不同任务的类,dnn::ClassificationModel,dnn::DetectionModel,dnn::SegmentationModel,可以进行网络的自动预处理和后处理,更加简化了流程。
DNN的优点:
轻量级:DNN只实现模型预测,推理的功能,代码量和编译运行开销时间小于其他深度学习模型框架
使用方便:无需其他依赖第三方库,只需要下载好对应不同深度学习框架下已经训练好的模型,或者是模型的配置文件,模型参数
通用性:DNN支持网络结构涵盖多种计算机视觉应用,目标分类,目标检测和图像分割的类别

二、模型导出

Pytorch已经原生支持导出ONNX模型,具体可以参见官方教程和文档。
一个最简化的导出Demo如下。

import torch
import torchvision

model = torchvision.models.mobilenet_v2(pretrained=True)
x = torch.rand(1, 3, 224, 224)
save_path = "./model_file/mobilenetv2.onnx"
torch.onnx.export(model, x, save_path,
    input_names=["input"], output_names=["output"], opset_version=11)

三、部署示例

本例程使用转换得到的ONNX模型进行部署边缘检测网络DexiNed,分为单图预测和批量预测。
代码如下:

#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <chrono>
#include <fstream>

using namespace std;
using namespace cv;
using namespace cv::dnn;

std::string onnxPath = "D:/Vs2017_Solution/OpenCV_dnn/Datas/1824.onnx";
std::string imagePath = "./Datas/imgs";

cv::dnn::Net net;

void ModelInit(string onnxPath)
{
   
	net = cv::dnn::readNetFromONNX(onnxPath);
	// 设置计算后台和计算设备
	// CPU(默认)
	/* net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
	 net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);*/
	 // CUDA
	net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
	net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
}

// 单图推理
bool ModelInference(const cv::Mat& srcImage)
{
   
	auto start = chrono::high_resolution_clock::now();
	cv::Mat image = srcImage.clone();
	//预处理(尺寸变换、通道变换、归一化)
	image.convertTo(image, CV_32FC3);
	
	auto end1 
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shanhedian2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值