- 💂 个人主页:风间琉璃
- 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
前言
本文基本上来自以下官方手册:https://learnopencv.com/deep-learning-with-opencvs-dnn-module-a-definitive-guide/
计算机视觉领域自 1960 年代后期以来一直存在。图像分类和对象检测是计算机视觉中最古老的问题,研究人员几十年来一直试图解决。使用神经网络和深度学习,我们已经达到了计算机可以开始以高精度实际理解和识别物体的阶段,在许多情况下甚至超过人类。要了解神经网络和计算机视觉深度学习,OpenCV DNN 模块是一个很好的起点。凭借其高度优化的 CPU 性能,初学者即使没有非常强大的支持 GPU 的系统,也可以轻松入门。
一、OpenCV DNN模块
OpenCV是最好的计算机视觉库之一。此外,它还具有运行深度学习推理的功能。最好的部分是支持从不同框架加载不同的模型,使用它我们可以执行多种深度学习功能。自 3.3 版以来,支持来自不同框架的模型的功能一直是 OpenCV 的一部分。尽管如此,许多该领域的新人并没有意识到OpenCV的这一重要功能。因此,他们往往会错过许多有趣和良好的学习机会。
OpenCV DNN 模块仅支持对图像和视频进行深度学习推理。它不支持微调和训练。尽管如此,OpenCV DNN 模块对于任何初学者来说都是一个完美的起点,可以进入基于深度学习的计算机视觉并四处玩耍。
OpenCV DNN 模块最好的一点是它针对英特尔处理器进行了高度优化。在对实时视频进行推理时,我们可以获得良好的 FPS,用于对象检测和图像分割应用。当使用使用特定框架预先训练的模型时,我们通常会使用 DNN 模块获得更高的 FPS。例如,让我们看一下不同框架的图像分类推理速度。
以上结果是 DenseNet121 模型的推理时序。令人惊讶的是,OpenCV比TensorFlow的原始实现快得多,同时落后于PyTorch。事实上,TensorFlow 的推理时间接近 1 秒,而 OpenCV 的推理时间不到 200 毫秒。
二、OpenCV DNN 模块应用
通过使用OpenCV DNN模块,我们可以对图像和视频进行基于深度学习的计算机视觉推理。我们能想到的大多数深度学习和计算机视觉任务都得到了支持。
1. 图像分类;
2. 目标检测;
3. 图像分割;
4. 文字检测和识别;
5. 姿态估计;
6. 深度估计
7. 人脸验证和检测;
8. 人体重新识别;
为了支持上面讨论的应用,我们需要很多预先训练好的模型。而且的确存在着一些可供选择的SOTA 模型。下面表格列出了用于不同场合的深度学习模型。
上面的表格虽然给出的模型很多但并未穷尽OpenCV DNN模块中所有的模型。仍然还有很多网络模型上述表格中并没有给出。就像前面所示,列出所有模型并进行讨论在一个博文中无法完成。上述表格只是告诉我们一个可行的方法去何选择计算机视觉中不同的深度学习模型。
三、DNN支持的深度学习框架
1.Caffe
在利用OpenCV DNN 调用Caffe中的预训练模型是,我们需要两个文件,一个就是model.caffemodel 文件,其中包含了预训练权重。 另一个是扩展名为.prototxt的模型架构文件。它就像一个纯文本文件,具有类似JSON的结构,其中包含所有神经网络层的定义。要清楚地了解此文件,请访问此链接。
2.TensorFlow
使用基于TensorFlow预训练的模型,我们需要两个文件,一个是模型权重参数文件,另一个是定义有模型配置的protobuf文件。权重参数文件的后缀为 .pd,也就是protobuf文件,存储有所有预训练的网络参数。 如果之前你使用过TensorFlow,.pb 文件就是模型的检查点,即 在模型存储以及权系数固定之后存储的文件。 模型配置在 protobuf文件中,具有 .pbtxt 文件后缀。
注意:在Tensorflow的新的版本中,网络参数文件不再使用 .pb的文件格式。如果你使用自己存储的模型的话,文件的格式可能是 .ckpt 或者 .h5 格式,此时在使用OpenCV DNN之前需要一些中间步骤进行处理。这种情况下,先看到模型转换成 ONNX格式,然后在转换成 .pb格式,这样可以保证所有结果都和所期望的那样。
3.Torch和PyTorch
为了载入Torch 模型文件,我们需要包含有预训练权重参数的文件。通常这个文件具有 .t7 或者 .net的文件后缀。最新的Torch版本的网络模型具有 .pth 的文件后缀。将这些文件首先转换成 ONNX是最好的处理方法。转换成ONNX文件之后,你可以直接通过OpenCV DNN所支持的ONNX模型方式载入网络。
4.Darknet
OpenCV DNN 也支持著名的 DarkNet学习框架。 如果你使用过官方的基于Darknet学习框架的YOLO模型就可以了解这一点。通常,我们通过具有 .weights 后缀的文件来载入 Darknet模型。Darknet模型的网络配置文件的后缀是 .cfg。
5.转换成ONNX格式
可以通过软件工具将来自于 Keras 或者Pytorch的网络模型转换成 ONNX 格式文件。在OpenCV DNN 中不能够直接使用来自于Keras, Pytorch学习框架中的网络模型。通常将这些模型转换成ONNX的格式(Open Neural Network Exchange),这样可以使用他们,甚至将它们转换成其他学习框架中的模型,比如 TensorFlow, PyTorch。在OpenCV DNN中我们需要后缀为 .onnx 的权重参数文件来载入 ONNX 模型。通过访问 OpenCV 官方文件 来了解不同的学习框架,他们权重阐述文件以及配置文件。
这里所见到的所有模型都是经过OpenCV DNN 模块完美测试过的。理论上,前面所有学习框架下的网络都可以在DNN模块中工作。我们只需要找到正确的权重参数文件以及相应的神经网络结构文件即可。
结束语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。
最后,博主要一下你们的三连呀(点赞、评论、收藏),不要钱的还是可以搞一搞的嘛~
不知道评论啥的,即使扣个666也是对博主的鼓舞吖 💞 感谢 💐