1.什么是OpenCV DNN模块

DNN,即Deep Neural Networks模块。OpenCV一共有两个模块,Machine learning 和 Deep Neural Networks模块,前者主要集成了传统机器学习的相关函数,而后者集成了深度神经网络相关的函数。最好的部分是支持加载来自不同框架的不同模型,使用它我们可以执行几个深度学习功能。从3.3版开始,OpenCV就支持来自不同框架的模型。

2.为什么选择OpenCV DNN模块

OpenCV DNN模块只支持图像和视频的深度学习推理。它不支持微调和训练。不过,OpenCV DNN模块可以作为任何初学者进入基于深度学习的计算机视觉领域的一个完美起点。

3.OpenCV DNN模块支持的不同深度学习功能

我们建立了利用OpenCV DNN模块,可以对图像和视频进行基于深度学习的计算机视觉推理。让我们看看它支持的所有功能。有趣的是,我们能想到的大多数深度学习和计算机视觉任务都得到了支持。下面的列表将让我们对这些特性有一个很好的了解。

图像分类。
对象检测。
图像分割。
文本检测与识别。
姿态估计。
深度估计。
行人与人脸验证与检测。
行人重识别
这个列表非常广泛,并提供了许多实际的深度学习用例。通过访问OpenCV存储库的Wiki页面,可以了解更多细节。

我们将详细讨论目标检测和人体姿态估计,以给出使用OpenCV DNN选择不同模型的工作思路。

4.OpenCV DNN模块支持的不同模型

为了支持我们上面讨论的所有应用程序,我们需要许多预先训练过的模型。此外,还有许多最先进的算法可供选择。下表根据不同的深度学习应用列出了一些模型。

上述模型并非详尽无遗。还有更多的模式。正如前面提到的,在一个博客中完整地列出或详细讨论每一项内容几乎是不可能的。上面的列表让我们很好地了解了DNN模块在探索计算机视觉中的深度学习方面的实用性。

5.OpenCV DNN模块支持的不同框架

image.png

由于每次对模型进行训练非常耗费时间,因此可以直接加载训练好的模型。
Opencv4提供了dnn::readNet()函数
image.png
image.png

6.程序流程

加载模型文件—-利用bolbFromImages将需要识别图像的尺寸进行调整—-将图像数据通过setInput输入给网络模型—-利用forward完成神经网络前向计算,得到预测结果。