簡介
隨着計算機視覺的流行,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/