简介
随着计算机视觉的流行,opencv 也专门开发了 dnn 模块来实现 深度神经网络相关 的功能;
虽然 opencv 无法训练模型,但它支持 载入其他 深度学习框架训练好的模型,并使用该模型进行预测 inference;
而且 opencv 在载入模型时会使用 dnn 模块对模型进行重写,使得模型运行效率更高; 【怎么重写的,为什么效率高,后续研究】
故如果想在 opencv 中融入深度学习模型,可以先使用 深度学习框架 训练好模型,再使用 dnn 模块载入。
完整教程参见 https://github.com/opencv/opencv/wiki/Deep-Learning-in-OpenCV
应用范围
支持算法领域:图像识别、目标检测、图像分割
支持的深度学习框架:tensorflow、pytorch、caffe、DLDT、Darknet,
同时还支持 自定义层解析、非极大值抑制、获取各层信息 等操作;
不同框架对应的 API、文件类型不同,具体 API 介绍
API 介绍
dnn.readNet
一个通用的 API,作用是 从支持的 深度学习框架 中 加载 深度学习网络和模型权重
def readNet(model, config=None, framework=None)
model:模型训练好的参数 文件,支持格式有 *.caffemodel--
Caffe、*.pb--
TensorFlow、*.t7
或 *.net--
Torch、 *.weights--
Darknet、*.bin--
DLDT.
config:包含网络结构或者叫网络配置的文本文件,支持的格式有:*.prototxt--
Caffe、*.pbtxt--
TensorFlow、*.cfg
--arknet、*.xml--
DLDT.
framework:指定 深度学习框架,如 tensorflow,
该函数自动检测训练模型所采用的深度学习框架,然后调用 readNetFromCaffe
、readNetFromTensorflow
、readNetFromTorch
或 readNetFromDarknet
中的某个函数.
cv2.dnn.readNetFromCaffe(model, config)
cv2.dnn.readNetFromTensorflow(model, config)
cv2.dnn.readNetFromTorch(model, config)
cv2.dnn.readNetFromDarknet(model, config)
参数同上
dnn.blobFromImage
dnn.blobFromImages
案例-图像识别
...
案例-目标检测
...
参考资料:
https://zhuanlan.zhihu.com/p/111508792 知乎 哈尔滨工业大学 计算机科学与技术硕士
https://zhuanlan.zhihu.com/p/140012286 知乎 计算机视觉/搬砖 【实例较多,但没有资源链接】
https://cloud.tencent.com/developer/article/1419634 干货 | tensorflow模型导出与OpenCV DNN中使用
https://www.aiuai.cn/aifarm941.html OpenCV4.X - DNN模块 Python APIs
https://zhuanlan.zhihu.com/p/88745033 googlenet 识别一张图 blobFromImage 和多张图 blobFromImages,唐宇迪视频代码
https://blog.csdn.net/qq_43019451/article/details/105894552 opencv-python dnn模块使用CUDA加速
https://cloud.tencent.com/developer/article/1610535 C++,用法讲的比较详细
https://blog.csdn.net/stq054188/article/details/108697929 C++ yolov4
http://www.360doc.com/content/21/0128/20/68330161_959454821.shtml C++ mask rcnn 缺陷检测
https://opencv.org/releases/