OpenCV4.X - DNN模塊 Python APIs

原文: OpenCV4.X - DNN模塊 Python APIs - AIUAI

OpenCV 4.X 版本集成了很多直接利用 DNN 模塊的 Python API 接口.

安裝:

sudo pip install opencv-python

使用:

from cv2 import dnn
# Variables with simple values
DNN_BACKEND_DEFAULT = 0
DNN_BACKEND_HALIDE = 1

DNN_BACKEND_INFERENCE_ENGINE = 2

DNN_BACKEND_OPENCV = 3
DNN_BACKEND_VKCOM = 4

DNN_TARGET_CPU = 0
DNN_TARGET_MYRIAD = 3
DNN_TARGET_OPENCL = 1

DNN_TARGET_OPENCL_FP16 = 2

DNN_TARGET_VULKAN = 4

__loader__ = None
__spec__ = None

1. dnn.blobFromImage

定義:

def blobFromImage(image, 
                  scalefactor=None, 
                  size=None, 
                  mean=None, 
                  swapRB=None, 
                  crop=None, 
                  ddepth=None): 
    pass

作用:

根據輸入圖像,創建 NCHW 次序的 4-dim blobs.

參數:

[1] - image: cv2.imread 讀取的圖片數據;

[2] - scalefactor: 縮放像素值,如 [0, 255] - [0, 1].

[3] - size: 輸出圖像的尺寸,如 (netInWidth, netInHeight).

[4] - mean: 從各通道減均值. 如果輸入 image 爲 BGR 次序,且swapRB=True,則通道次序爲 (mean-R, mean-G, mean-B).

[5] - swapRB: 交換 3 通道圖片的第一個和最後一個通道,如 BGR - RGB.

[6] - crop: 圖像尺寸 resize 後是否裁剪. 如果crop=True,則,輸入圖片的尺寸調整resize後,一個邊對應與 size 的一個維度,而另一個邊的值大於等於 size 的另一個維度;然後從 resize 後的圖片中心進行 crop. 如果crop=False,則無需 crop,只需保持圖片的長寬比.

[7] - ddepth: 輸出 blob 的 Depth. 可選: CV_32F 或 CV_8U.

示例:

import cv2
from cv2 import dnn
import numpy as np 
import matplotlib.pyplot as plt

img_cv2 = cv2.imread("test.jpg")
print("[INFO]Image shape: ", img_cv2.shape)

inWidth = 256
inHeight = 256
outBlob1 = cv2.dnn.blobFromImage(img_cv2,
                                scalefactor=1.0 / 255,
                                size=(inWidth, inHeight),
                                mean=(0, 0, 0),
                                swapRB=False,
                                crop=False)
print("[INFO]outBlob1 shape: ", outBlob1.shape)
outimg1 = np.transpose(outBlob1[0], (1, 2, 0))

outBlob2 = cv2.dnn.blobFromImage(img_cv2,
                                scalefactor=1.0 / 255,
                                size=(inWidth, inHeight),
                                mean=(0, 0, 0),
                                swapRB=False,
                                crop=True)
print("[INFO]outBlob2 shape: ", outBlob2.shape)
outimg2 = np.transpose(outBlob2[0], (1, 2, 0))

plt.figure(figsize=[10, 10])
plt.subplot(1, 3, 1)
plt.title('Input image', fontsize=16)
plt.imshow(cv2.cvtColor(img_cv2, cv2.COLOR_BGR2RGB))
plt.axis("off")
plt.subplot(1, 3, 2)
plt.title('Output image - no crop', fontsize=16)
plt.imshow(cv2.cvtColor(outimg1, cv2.COLOR_BGR2RGB))
plt.axis("off")
plt.subplot(1, 3, 3)
plt.title('Output image - crop', fontsize=16)
plt.imshow(cv2.cvtColor(outimg2, cv2.COLOR_BGR2RGB))
plt.axis("off")
plt.show()

image

2. dnn.blobFromImages

定義:

def blobFromImages(images, 
                   scalefactor=None, 
                   size=None, mean=None, 
                   swapRB=None, 
                   crop=None, 
                   ddepth=None): 
    pass

作用:

批量處理圖片,創建 4-dim blobs. 其它參數類似於 dnn.blobFromImage.

3. dnn.Net_readFromModelOptimizer

定義:

def Net_readFromModelOptimizer(xml, bin):
    pass

作用:

從 Intel’s Model Optimizer intermediate representation 創建網絡.

參數:

[1] - xml: XML 網絡拓撲結果的配置文件.

[2] - bin: 訓練權重值的二值文件.

4. dnn.NMSBoxes

定義:

def NMSBoxes(bboxes, 
             scores, 
             score_threshold, 
             nms_threshold, 
             eta=None, 
             top_k=None): 
    pass

作用:

根據給定的 boxes 和對應的 scores 進行 NMS 處理.

參數:

[1] - boxes: 待處理的邊界框 bounding boxes.

[2] - scores: 對於於待處理邊界框的 scores.

[3] - score_threshold: 用於過濾 boxes 的 score 閾值.

[4] - nms_threshold: NMS 用到的閾值.

[5] - indices: NMS 處理後所保留的邊界框的索引值.

[6] - eta: 自適應閾值公式中的相關係數:nms_thresholdi+1=etanms_thresholdinms\_threshold_{i+1} = eta \cdot nms\_threshold_i

[7] - top_k: 如果 top_k>0,則保留最多 top_k 個邊界框索引值.

5. dnn.NMSBoxesRotated

定義:

def NMSBoxesRotated(bboxes, 
                    scores, 
                    score_threshold, 
                    nms_threshold, 
                    eta=None, 
                    top_k=None):
    pass

6. dnn.readNet

定義:

def readNet(model, config=None, framework=None):
    pass

作用:

從支持的格式中加載深度學習網絡和模型參數.

參數:

[1] - model: 訓練的權重參數的模型二值文件,支持的格式有:*.caffemodel(Caffe)、*.pb(TensorFlow)、*.t7*.net(Torch)、 *.weights(Darknet)、*.bin(DLDT).

[2] - config: 包含網絡配置的文本文件,支持的格式有:*.prototxt (Caffe)、*.pbtxt (TensorFlow)、*.cfg (Darknet)、*.xml (DLDT).

[3] - framework: 所支持格式的框架名.

該函數自動檢測訓練模型所採用的深度框架,然後調用 readNetFromCaffereadNetFromTensorflowreadNetFromTorchreadNetFromDarknet 中的某個函數.

7. dnn.readNetFromCaffe

定義:

def readNetFromCaffe(prototxt, caffeModel=None): 
    pass

作用:

加載採用 Caffe 的配置網絡和訓練的權重參數.

7. dnn.readNetFromDarknet

定義:

def readNetFromDarknet(cfgFile, darknetModel=None):
    pass

作用:

加載採用 Darknet 的配置網絡和訓練的權重參數.

8. dnn.readNetFromModelOptimizer

定義:

def readNetFromModelOptimizer(xml, bin): 
    pass

作用:

加載採用Intel’s Model Optimizer intermediate representation 的配置網絡和訓練的權重參數.

9. dnn.readNetFromONNX

定義:

def readNetFromONNX(onnxFile):
    pass

作用:

加載 .onnx 模型網絡配置參數和權重參數.

10. dnn.readNetFromTensorflow

定義:

def readNetFromTensorflow(model, config=None):
    pass

作用:

加載採用 Tensorflow 的配置網絡和訓練的權重參數.

[1] - model: .pb 文件.

[2] - config: .pbtxt 文件.

11. dnn.readNetFromTorch

定義:

def readNetFromTorch(model, isBinary=None): 
    pass

作用:

加載採用 Torch 的配置網絡和訓練的權重參數.

[1] - model: 採用 torch.save()函數保存的文件.

所支持的 Torch nn.Module 網絡層有:

- nn.Sequential
- nn.Parallel
- nn.Concat
- nn.Linear
- nn.SpatialConvolution
- nn.SpatialMaxPooling, nn.SpatialAveragePooling
- nn.ReLU, nn.TanH, nn.Sigmoid
- nn.Reshape
- nn.SoftMax, nn.LogSoftMax

12. dnn.readTensorFromONNX

定義:

def readTensorFromONNX(path):
    pass

作用:

.pb 文件創建 blob.

[1] - path: 包含 input tensor 的.pb 文件.

13. dnn.resetMyriadDevice

定義:

def resetMyriadDevice():
    """
    resetMyriadDevice() -> None
    .   @brief Release a Myriad device is binded by OpenCV.
    .   *
    .   * Single Myriad device cannot be shared across multiple processes which uses
    .   * Inference Engine's Myriad plugin.
    """
    pass

14. dnn.shrinkCaffeModel

定義:

def shrinkCaffeModel(src, dst, layersTypes=None):
    pass

作用:

將 Caffe 網絡的所有權重轉換爲半精度浮點數值(half precision floating point).

參數:

[1] - src: Caffe 網路的原始單精度浮點數值權重模型文件(後綴一般爲.caffemodel).

[2] - dst: 轉換後的權重文件.

[3] - layersTypes: 待轉換參數的網絡層類型,默認是隻轉換卷積層和全連接層的權重參數.

15. dnn.writeTextGraph

定義:

def writeTextGraph(model, output):
    #note: To reduce output file size, trained weights are not included.
    pass

作用:

將以 protocol buffer 格式的二值網絡,創建爲文本表示(Create a text representation for a binary network stored in protocol buffer format.)

參數:

[1] - model: 二值網絡(binary network)的路徑.

[2] - output: 創建的輸出文件路徑.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章