当前位置:   article > 正文

OpenCV中DNN模块_opencvdnn模块

opencvdnn模块

DNN模块简介: 

        OpenCV自3.3版本开始,加入了对深度学习网络的支持,即DNN模块,它支持主流的深度学习框架生成与到处模型的加载。

        OpenCV中的深度学习模块(DNN)只提供了推理功能,不涉及模型的训练,支持多种深度学习框架,比如TensorFlow,Caffe,Torch和Darknet。

  • 轻量型。DNN模块只实现了推理功能,代码量及编译运行开销远小于其他深度学习模型框架。

  • 使用方便。DNN模块提供了内建的CPU和GPU加速,无需依赖第三方库,若项目中之前使用了OpenCV,那么通过DNN模块可以很方便的为原项目添加深度学习的能力。

  • 通用性。DNN模块支持多种网络模型格式,用户无需额外的进行网络模型的转换就可以直接使用,支持的网络结构涵盖了常用的目标分类,目标检测和图像分割的类别

 一、dnn.blobFromImage

作用:根据输入图像,创建维度N(图片的个数),通道数C,高H和宽W次序的blobs。

  1. blobFromImage(image,
  2. scalefactor=None,
  3. size=None,
  4. mean=None,
  5. swapRB=None,
  6. crop=None,
  7. ddepth=None):

参数:

  • image:cv2.imread 读取的图片数据

  • scalefactor: 缩放像素值,如 [0, 255] - [0, 1]

  • size: 输出blob(图像)的尺寸,如 (netInWidth, netInHeight)

  • mean: 从各通道减均值. 如果输入 image 为 BGR 次序,且swapRB=True,则通道次序为 (mean-R, mean-G, mean-B).

  • swapRB: 交换 3 通道图片的第一个和最后一个通道,如 BGR - RGB

  • crop: 图像尺寸 resize 后是否裁剪. 如果crop=True,则,输入图片的尺寸调整resize后,一个边对应与 size 的一个维度,而另一个边的值大于等于 size 的另一个维度;然后从 resize 后的图片中心进行 crop. 如果crop=False,则无需 crop,只需保持图片的长宽比

  • ddepth: 输出 blob 的 Depth. 可选: CV_32F 或 CV_8U

示例:

  1. import cv2
  2. from cv2 import dnn
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. img_cv2 = cv2.imread("test.jpeg")
  6. print("原图像大小: ", img_cv2.shape)
  7. inWidth = 256
  8. inHeight = 256
  9. outBlob1 = cv2.dnn.blobFromImage(img_cv2,
  10. scalefactor=1.0 / 255,
  11. size=(inWidth, inHeight),
  12. mean=(0, 0, 0),
  13. swapRB=False,
  14. crop=False)
  15. print("未裁剪输出: ", outBlob1.shape)
  16. outimg1 = np.transpose(outBlob1[0], (1, 2, 0))
  17. outBlob2 = cv2.dnn.blobFromImage(img_cv2,
  18. scalefactor=1.0 / 255,
  19. size=(inWidth, inHeight),
  20. mean=(0, 0, 0),
  21. swapRB=False,
  22. crop=True)
  23. print("裁剪输出: ", outBlob2.shape)
  24. outimg2 = np.transpose(outBlob2[0], (1, 2, 0))
  25. plt.figure(figsize=[10, 10])
  26. plt.subplot(1, 3, 1)
  27. plt.title('输入图像', fontsize=16)
  28. plt.imshow(cv2.cvtColor(img_cv2, cv2.COLOR_BGR2RGB))
  29. plt.axis("off")
  30. plt.subplot(1, 3, 2)
  31. plt.title('输出图像 - 未裁剪', fontsize=16)
  32. plt.imshow(cv2.cvtColor(outimg1, cv2.COLOR_BGR2RGB))
  33. plt.axis("off")
  34. plt.subplot(1, 3, 3)
  35. plt.title('输出图像 - 裁剪', fontsize=16)
  36. plt.imshow(cv2.cvtColor(outimg2, cv2.COLOR_BGR2RGB))
  37. plt.axis("off")
  38. plt.show()

 二、dnn.NMSBoxes

作用:根据给定的检测boxes和对应的scores进行NMS(非极大值抑制)处理。

  1. NMSBoxes(bboxes,
  2. scores,
  3. score_threshold,
  4. nms_threshold,
  5. eta=None,
  6. top_k=None)

参数:

  • boxes: 待处理的边界框 bounding boxes

  • scores: 对于于待处理边界框的 scores

  • score_threshold: 用于过滤 boxes 的 score 阈值

  • nms_threshold: NMS 用到的阈值

  • indices: NMS 处理后所保留的边界框的索引值

  • eta: 自适应阈值公式中的相关系数

  • top_k: 如果 top_k>0,则保留最多 top_k 个边界框索引值.

三、dnn.readNet

作用:加载深度学习网络及其模型参数

readNet(model, config=None, framework=None)

参数:

  • model: 训练的权重参数的模型二值文件,支持的格式有:*.caffemodel(Caffe)、*.pb(TensorFlow)、*.t7 或 *.net(Torch)、 *.weights(Darknet)、*.bin(DLDT).

  • config: 包含网络配置的文本文件,支持的格式有:*.prototxt (Caffe)、*.pbtxt(TensorFlow)、*.cfg (Darknet)、*.xml (DLDT).

  • framework: 所支持格式的框架名

1、加载采用Caffe的配置网络和训练的权重参数

readNetFromCaffe(prototxt, caffeModel=None)

2、加载采用Darknet的配置网络和训练的权重参数

readNetFromDarknet(cfgFile, darknetModel=None)

3、加载采用Tensorflow 的配置网络和训练的权重参数

readNetFromTensorflow(model, config=None)

4、加载采用 Torch 的配置网络和训练的权重参数

readNetFromTorch(model, isBinary=None)

5、加载 .onnx 模型网络配置参数和权重参数

readNetFromONNX(onnxFile)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/926835
推荐阅读
相关标签
  

闽ICP备14008679号