【OpenCV进阶】DNN模型详细解读

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处


前言

参考opencv官网解读:Deep Neural Network module
在这里插入图片描述

一、API-blobFormImage

reference:OpenCV中blobFromImage函数详细解释
作用:图像输入神经网络之前的预处理,即对输入图像进行归一化操作
函数参数如下

Mat cv::dnn::blobFromImage(
InputArray image,
double scalefactor = 1.0,
const Size & size = Size(),
const Scalar & mean = Scalar(),
bool swapRB = false,
bool crop = false,
int ddepth =8,

参数含义如下:

image:输入图像
scalefactor: multiplier for image values.
mean :
size:指的不是输入图像的尺寸,是指所需要的尺寸,也就是返回的Mat中数据的尺寸。
swapRB:是否交换R和B分量,true即转为BGR,false就意为着不需要转化
crop:输入图像大小与size不符的时候,是否需要裁剪
ddepth:图像的数据类型,目前仅支持32F和8U。即32位的浮点数( CV_32F ),因为DNN中很多参数都是浮点数,所以该参数设置默认即可。

这些参数是模型规定好的,相当于出厂设置,opencv4当中专门关于DNN的一部分内容,其中的models.yml文件就是输入图像的参数设置要求,如下路径可以查到:
D:\opencv-4.1.0\opencv\sources\samples\dnn
在这里插入图片描述
在这里插入图片描述

二、API-forward

作用:目标检测的前向推断,并推断出输出层的名字
用法:

Net net;
net.forward();

其中net是数据类型为Net类,命名方式不固定,可以是net1,或是net2等等。

三、API-readNetFrom深度学习框架()

1.API-readNetFromTensorflow(model,cfg)

作用:读取Tensorflow框架下的模型

使用方法:

Net net1;
net1=readNetFromTensorflow(model,cfg);
或是Net net1=readNetFromTensorflow(model,cfg);

2.API-readNetFromDarknet(cfg,model)

作用:读取Darknet框架下的YOLO模型,也只能是YOLO

3.API-readNetFromCaffe(prototxt, model)

作用:用于进行SSD网络的caffe框架的加载

参数说明

prototxt表示caffe网络的结构文本
model表示已经训练好的参数结果

四、API-net.SetInput

作用:表示将图片输入到DNN网络中

五、API-setPreferableBackend()

作用:设置加速的计算后台
括号中可填入以下参数:
如果没有IE 加速引擎的话,默认是opencv。

DNN_BACKEND_DEFAULT
DNN_BACKEND_INFERENCE_ENGINE
DNN_BACKEND_OPENCV

六、API-setPreferableTarget()

作用:表示在哪种设备上进行加速。
括号中可填入以下参数:

DNN_TARGET_CPU //如果电脑上没有GPU,只能对CPU加速。
DNN_TARGET_OPENCL //必须是英特尔的图像卡(GPU ),对其加速。
DNN_TARGET_OPENCL_FP16
DNN_TARGET_MYRIAD //英特尔的神经网络加速棒( NCS ),对其加速。
DNN_TARGET_FPGA
DNN_TARGET_CUDA
DNN_TARGET_CUDA_FP16

加载网络模型与读取各层信息

全部代码

#include<iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\dnn.hpp>
using namespace cv::dnn;
using namespace std;
using namespace cv;

string model = "D:/opencv-4.1.0/models/ssd/MobileNetSSD_deploy.caffemodel";
string cfg = "D:/opencv-4.1.0/models/ssd/MobileNetSSD_deploy.prototxt";

int main() {
	Net net;
	net= readNetFromCaffe(cfg, model);
	
	vector<string>layer_names = net.getLayerNames();
	for (int i = 0; i < layer_names.size(); i++) {
		int id = net.getLayerId(layer_names[i]);
		auto layer = net.getLayer(id);
		printf("layer_id:%d,type:%s,name:%s\n", id, layer->type.c_str(), layer->name.c_str());
	}
	waitKey(0);
	return 0;
}

在这里插入图片描述

reference:
cv.dnn介绍及常用模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌小超

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

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

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

打赏作者

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

抵扣说明:

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

余额充值