跳到主要内容

运行

视频解码

功能介绍

通过构造VideoDecoder类实例可实现视频解码功能,解码功能配置项及各项约束与支持情况请参考VideoDecodeConfig类数据结构说明。

视频解码支持自定义输出数据格式,通过自定义回调函数传入解码功能配置项,方便用户解码后的数据,详情可参考VdecCallBacker类数据结构说明。

接口调用流程

首先根据需求定义需要的输出数据组合方式,根据组合方式参考VdecCallBacker定义回调函数传入解码功能配置项,然后实例化VideoDecoder类,最后调用decode成员函数完成解码,获取数据。

视频解码接口调用流程参考如下:

图1 视频解码接口调用流程

mxVision提供VideoDecoder类进行视频解码,关键步骤说明如下:

  1. 定义输出数据组合形式。

    • 输出数据包含视频帧解码后得到的的Image类数据、当前解码帧的“frameId”和通道“channelId”。
    • 可根据需要选择获取以上哪些数据。
  2. 定义输出回调函数。

    • 根据要获取的数据定义回调函数,在函数内组装自定义数据。
    • 回调函数输入参数固定为VideoDecodeCallBack形式,函数内可选择输出。
    • 请勿在回调函数内实现过于复杂的操作,建议只进行自定义获取解码数据操作。
  3. 构造视频解码配置项。

    配置项及各项约束与支持情况请参考VideoDecodeConfig数据结构说明。

  4. 实例化视频解码类。

    将配置好的VideoDecodeConfig传入构造函数接口,实例化视频解码类。

  5. 调用decode接口对视频进行解码。

示例代码

如下提供关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

import os
import numpy as np
import time
from mindx.sdk import base
from mindx.sdk.base import Image, ImageProcessor
from mindx.sdk.base import VideoDecoder, VideoDecodeConfig, VdecCallBacker
decoded_data_list = []
## 视频解码回调函数
def vdec_callback(decodedImage, channelId, frameId):
# 解码完成的Image类存入列表中
decoded_data_list.append(decodedImage)

## 初始化VdecCallBacker类并注册回调函数
vdecCallBacker = VdecCallBacker()
vdecCallBacker.registerVdecCallBack(vdec_callback)
## 初始化VideoDecodeConfig类并设置参数
vdecConfig = VideoDecodeConfig()
vdecConfig.skipInterval = 0
vdecConfig.inputVideoFormat = base.h264_main_level
vdecConfig.outputImageFormat = base.nv12
vdecConfig.width = 1920
vdecConfig.height = 1080
## 初始化VideoDecoder
videoDecoder = VideoDecoder(vdecConfig, vdecCallBacker, device_id, channel_id)
## 获取需解码视频帧文件名
srcDataList = ["frame-{}.data".format(i) for i in range(100)]
## 循环取帧解码
for i, fileName in enumerate(srcDataList):
## 读取视频帧数据存入file
file = np.fromfile(fileName, dtype='uint8')
## 视频帧数据解码
videoDecoder.decode(file, i)

父主题: 媒体数据处理

模型推理

功能介绍

使用mxVision模型推理功能通过给定输入和指定模型,进行推理获得输出结果,支持om格式的模型推理,可使用ATC工具构建的动态Batch、动态分辨率和分档动态维度模型进行推理。模型推理输入为张量Tensor类型,由用户使用mxvision提供的接口构造使用。当前mxvision提供的python接口只支持同步推理。

接口调用流程

使用模型推理前,用户需准备好输入数据以及需要加载的模型,根据模型路径或者内存方式初始化Model类,通过调用Model类的infer接口获取模型推理结果。

模型推理调用流程参考如下:

图1 模型推理接口调用流程

关键接口说明如下:

  1. 模型初始化。

    用户需根据实际业务情况确认模型加载方式,选择从文件加载模型从内存加载模型。如果从内存加载,需要先将模型文件读取到内存,可通过以下两种方式传入。

    • 从文件加载模型,可选择直接向Model接口传入模型路径,进行初始化。
    • 通过结构体ModelLoadOptV2中的“loadType”字段指定加载方式后,再传入Model接口,其中加载方式在模型方面区分从文件加载模型,还是从内存加载模型,在内存方面区分是由系统内部管理,还是由用户管理,具体可参见ModelLoadOptV2
  2. 调用infer接口获取模型推理结果。

示例代码

以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

import numpy as np
from mindx.sdk import base
from mindx.sdk.base import Tensor, Model
## 模型推理
## 构造输入Tensor(以二进制输入为例)
## 读取前处理好的numpy array二进制数据
input_array = np.load("preprocess_array.npy")
## 构造输入Tensor类并转移至device侧
input_tensor = Tensor(input_array)
input_tensor.to_device(device_id)
## 构造输入Tensor列表
input_tensors = [input_tensor]
## 模型路径
model_path = "resnet50_batchsize_1.om"
## 初始化Model类
model = Model(modelPath=model_path, deviceId=device_id)
## 执行推理
outputs = model.infer(input_tensors)

父主题: 使用API接口方式开发(Python)

运行

运行样例前,需设置mxVison环境变量。

source {mxVison安装目录}/mxVision/set_env.sh

运行

用户准备好自己的源码文件“main.py”,以及Python运行环境。

使用python3执行文件,命令参考如下。

python3 main.py

:::note 说明

父主题: 使用API接口方式开发(Python)

模型支持列表

模型种类

模型框架

使用后处理动态库

获取途径

YOLOv3

TensorFlow

(tensorinfer框架)modelpostprocessors/libyolov3postprocess.so

ResNet-50

TensorFlow

(tensorinfer框架)modelpostprocessors/libresnet50postprocess.so

Faster Rcnn

TensorFlow

(tensorinfer框架)modelpostprocessors/libfasterrcnnpostprocess.so

MindSpore

(tensorinfer框架)modelpostprocessors/libfasterrcnnpostprocess.so

YOLOv4

Pytorch

(tensorinfer框架)modelpostprocessors/libyolov3postprocess.so

SSD-VGG16

Caffe

(tensorinfer框架)modelpostprocessors/libssdvggpostprocess.so

SSD MobileNet v1 FPN

TensorFlow

(tensorinfer框架)modelpostprocessors/libssdmobilenetfpnpostprocess.so

CRNN

TensorFlow

(tensorinfer框架)modelpostprocessors/libcrnnpostprocess.so

YOLOv5

Pytorch

(tensorinfer框架)modelpostprocessors/libyolov3postprocess.so

FasterRCNN-FPN/CascadeRCNN-FPN

Pytorch

(tensorinfer框架)modelpostprocessors/libfasterrcnnpostprocess.so

ResNet-18

TensorFlow

(tensorinfer框架)modelpostprocessors/libresnet50postprocess.so

CTPN

TensorFlow

(tensorinfer框架)modelpostprocessors/libctpnpostprocess.so

CTPN

MindSpore

(tensorinfer框架)modelpostprocessors/libctpnpostprocess.so

DeepLabv3

MindSpore

(tensorinfer框架)modelpostprocessors/libdeeplabv3post.so

BERT-Base (Uncased)

TensorFlow

(tensorinfer框架)modelpostprocessors/libresnet50postprocess.so

U-Net

MindSpore

(tensorinfer框架)modelpostprocessors/libunetmindsporepostprocess.so

Mask R-CNN

Pytorch

(tensorinfer框架)modelpostprocessors/libmaskrcnnmindsporepost.so

FaceNet

TensorFlow

无需后处理。

SSD MobileNet v1 FPN

MindSpore

(tensorinfer框架)modelpostprocessors/libSsdMobilenetFpn_MindsporePost.so

OpenPose

TensorFlow

(tensorinfer框架)modelpostprocessors/libopenposepostprocess.so

RetinaNet

TensorFlow

(tensorinfer框架)modelpostprocessors/retinanetpostprocess.so

HigherHRnet

Pytorch

(tensorinfer框架)modelpostprocessors/libhigherhrnetpostprocess.so

YoloV7Detection

Pytorch

PPYOLOEPlusDetection

Paddle

父主题: 模型支持参考

模型后处理配置参数

各个模型所需要的配置参数见下表。

表1 YOLOv3模型后处理配置参数(yolov3_tf_bs1_fp16.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。80
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)。18[0, 100]
BIASE每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3[0.0, 1.0]
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3[0.0, 1.0]
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45[0.0, 1.0]
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3[0, 16]
ANCHOR_DIM每个feature map对应的anchor框数量。3[0, 16]
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW,2表示NCHWC。0
FRAMEWORKString类型,可选值有MindSpore,PyTorch,TensorFlow 和Caffe。TensorFlow
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表2 ResNet-50模型后处理配置参数(resnet50_aipp_tf.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。1001[0, 2000]
SOFTMAX布尔型,是否需要在后处理中做softmax计算。false
TOP_K前K个可能性最大的类。1[0, 16]

表3 FasterRcnn模型后处理配置参数(faster_rcnn_uncut.cfg)

参数名

描述

默认值

取值区间

CLASS_NUM

类别数量。

91

[0, 1000]

SCORE_THRESH

目标是否为某种类别物体的阈值,大于阈值即认为是该目标。

0.5

[0.0, 1.0]

IOU_THRESH

两个框的IOU阈值,超过阈值即认为同一个框。

0.45

[0.0, 1.0]

SEPARATE_SCORE_THRESH

各个类别对应的阈值。

CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

MODEL_TYPE

可选以下三个值:

0:original

1:nms_cut(模型未做非极大值抑制)

2:FPN

0

FRAMEWORK

可选以下三个值:

  • TensorFlow
  • MindSpore
  • Pytorch

TensorFlow

NMS_FINISHED

modelinfer框架特有的属性值,为布尔值:

  • false:模型本身不存在NMS算子,需后处理进行NMS操作。
  • true:模型本身存在NMS算子,不需后处理进行NMS操作。

true

:“MODEL_TYPE”和“FRAMEWORK”参数配套说明如下:

  • orginal配套TensorFlow框架。
  • nms_cut配套TensorFlow或MindSpore框架。
  • FPN配套Pytorch框架。

表4 ssd_vgg模型后处理配置参数(ssd_vgg16_caffe_release.cfg)

参数名描述默认值
CLASS_NUM类别数量。5
SCORE_THRESH目标阈值。0.4
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表5 Ssd-Mobilenet-v1-Fpn模型后处理配置参数(ssd_mobilenetv1_fpn.cfg)

参数名描述默认值
CLASS_NUM类别数量。3
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.5
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表6 CRNN模型后处理配置参数(crnn_ssh_2.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。0[0, 10000]
OBJECT_NUM可检测的字符数上限。0[0, 1000]
BLANK_INDEX空白符的索引值。0[0, 10000]
WITH_ARGMAX模型backbone是否已经做了argmax。false

表7 modelinfer框架ResNet特征模型后处理配置参数(resnet_feature_caffe_release.cfg)

参数名描述默认值
ACTIVATION_FUNCTION用来激活模型输出数据的激活函数。None

表8 modelinfer框架ResNet多分类属性模型后处理配置参数(resnet_attribute_caffe_release.cfg)

参数名描述默认值
ATTRIBUTE_NUM模型输出属性的数量。5
ACTIVATION_FUNCTION激活函数的类型,目前仅支持sigmoid函数。
ATTRIBUTE_INDEX模型输出属性的索引。请确保索引的数量与ATTRIBUTE_NUM值相等。

表9 modelinfer框架ResNet二分类属性模型后处理配置参数(resnet_attribute_caffe_release.cfg)

参数名描述默认值
CLASS_NUM类别数量。5

表10 modelinfer框架YOLOv4模型后处理配置参数(yolov4_pt_bs1_fp16.cfg)

参数名描述默认值
CLASS_NUM类别数量。80
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)18
BIASES每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3
ANCHOR_DIM每个feature map对应的anchor框数量。3
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW。0
FRAMEWORK_TYPE模型框架,0表示Pytorch,1表示MindSpore。0
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表11 YOLOv4模型后处理配置参数(yolov4_pt_bs1_fp16.cfg)

参数名描述默认值
CLASS_NUM类别数量。80
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)。18
BIASES每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3
ANCHOR_DIM每个feature map对应的anchor框数量。3
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW,2表示NCHWC。0
FRAMEWORKString类型,可选值有MindSpore,PyTorch,TensorFlow 和Caffe。MindSpore
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)
YOLO_VERSION使用的yolo模型版本。(必选)YOLO_VERSION=4

表12 YOLOv5模型后处理配置参数(yolov5_pt_bs1_fp32.cfg)

参数名描述默认值取值空间
CLASS_NUM类别数量。80[0, 1000]
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)。18[0, 1000]
BIASE每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3[0.0, 1.0]
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3[0.0, 1.0]
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45[0.0, 1.0]
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3[0, 1000]
ANCHOR_DIM每个feature map对应的anchor框数量。3[0, 1000]
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW,2表示NCHWC(当前仅支持的PyTorch框架模型)。2[0, 1000]
FRAMEWORKString类型,可选值有MindSpore,PyTorch,TensorFlow 和Caffe。PyTorch
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)
YOLO_VERSION使用的yolo模型版本。(必选)YOLO_VERSION=5

表13 modelinfer框架FasterRCNN-Fpn/CascadeRCNN-Fpn模型后处理配置参数(fasterrcnn.cfg或cascadercnn.cfg)

参数名描述默认值
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标,实验使用0.3。0.5
FPN_SWITCHFPN开关,这两个模型均要设为true。false

表14 DeepLabV3+(TensorFlow)模型后处理配置参数(deeplabv3.cfg)

参数名描述默认值
CLASS_NUM类别数量。21
FRAMEWORK_TYPE深度学习框架类型选择。TensorFlow框架选择0

表15 CTPN模型后处理配置参数(ctpn_tf.cfg)

参数名描述默认值取值区间
IS_ORIENTED是否进行检测框倾斜。false
BOX_IOU_THRESH检测小框的iou阈值。0.7[0.0, 1.0]
TEXT_IOU_THRESH最终文本框的iou阈值。0.2[0.0, 1.0]
TEXT_PROPOSALS_MIN_SCORE检测小框的最小分数过滤。0.7[0.0, 1.0]
LINE_MIN_SCORE最终文本框的最小分数过滤。0.9[0.0, 1.0]
IS_MINDSPORE是否为MindSpore框架。false

表16 CTPN模型后处理配置参数(ctpn_mindspore.cfg)

参数名描述默认值取值区间
IS_ORIENTED是否进行检测框倾斜。false
BOX_IOU_THRESH检测小框的iou阈值。0.7[0.0, 1.0]
TEXT_IOU_THRESH最终文本框的iou阈值。0.2[0.0, 1.0]
TEXT_PROPOSALS_MIN_SCORE检测小框的最小分数过滤。0.7[0.0, 1.0]
LINE_MIN_SCORE最终文本框的最小分数过滤。0.9[0.0, 1.0]
IS_MINDSPORE是否为MindSpore框架。true

表17 ResNet-18模型后处理配置参数(resnet18_aipp_tf.cfg)

参数名描述默认值
CLASS_NUM类别数量。2

表18 DeepLabv3(MindSpore)模型后处理配置参数(deeplabv3.cfg)

参数名描述默认值
CLASS_NUM类别数量。21
MODEL_TYPE模型推理输出数据的排布格式,0表示NHWC,1表示NCHW。1
FRAMEWORK_TYPE深度学习框架类型选择。MindSpore框架选择2

表19 BERT-Base (Uncased) 模型后处理配置参数(bert.cfg)

参数名描述默认值
CLASS_NUM类别数量。2
CHECK_MODEL检查模型兼容性。false

表20 DeepLabV3+(Pytorch)模型后处理配置参数(deeplabv3.cfg)

参数名描述默认值
CLASS_NUM类别数量。21
CHECK_MODEL检查模型兼容性。true
MODEL_TYPE模型推理输出数据的排布格式,0表示NHWC,1表示NCHW。1
FRAMEWORK_TYPE深度学习框架类型选择。Pytorch框架选择1

表21 U-Net模型后处理配置参数(unet_simple.cfg)

参数名描述默认值
CLASS_NUM类别数量。2
POST_TYPE模型后处理方式,0表示对模型logits输出(NHWC型)做argmax,1表示对模型argmax输出结果(NHW型)透传。1
RESIZE_TYPE对像素图做插值还原的方式,暂只支持两种方式: 0:不做插值还原。 1:最邻近插值还原。1

表22 Mask R-CNN模型后处理配置参数(mask_rcnn_2017.cfg)

参数名描述默认值取值区间
CLASS_NUM推理类别总数,背景不计算在内。80[0, 100]
SCORE_THRESH置信度得分阈值,可根据业务场景调整。0.7[0.0, 1.0]
IOU_THRESHIOU阈值,可根据业务场景调整。0.5[0.0, 1.0]
RPN_MAX_NUMRegion Proposal Network最大个数。1000[0, 1000]
MAX_PER_IMG按置信度排序,每张图预测框的最大值。128[0, 150]
MASK_THREAD_BINARY输入RCNN的掩码阈值。0.5[0.0, 1.0]
MASK_SHAPE_SIZEmask_rcnn中掩码的形状,只支持单参数表示正方形。28[0, 100]
MODEL_TYPE可选以下两个值。 0:MindSpore 1:Pytorch0
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表23 Ssd_Mobilenet_v1_Fpn_for_MindSpore模型后处理配置参数(ssd_mobilenetv1_fpn.cfg))

参数名描述默认值取值区间
CLASS_NUM类别数量。81[0, 100]
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.5[0.0, 1.0]
IOU_THRESH目标重合程度的阈值,大于阈值即认为两个目标框对应同一个目标。0.6[0.0, 1.0]
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表24 OpenPose模型后处理配置参数(openpose.cfg)

参数名描述默认值取值区间
KEYPOINT_NUM关键点个数,加上背景(背景算一个)。19[0, 100]
FILTER_SIZE高斯滤波核的长(或宽)。25[0, 100]
SIGMA高斯滤波核的方差。3[0, 10]

表25 HigherHRnet模型后处理配置参数(higherhrnet.cfg)

参数名描述默认值取值区间
KEYPOINT_NUM关键点个数。17[0, 20]
SCORE_THRESH关键点阈值。0.1[0.0, 1.0]

表26 Unet++模型后处理配置参数(unet_nested.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。3
POST_TYPE模型后处理方式,0表示对模型logits输出(NHWC型)做argmax,1表示对模型argmax输出结果(NHW型)透传。1[0, 16]
RESIZE_TYPE对像素图做插值还原的方式,暂只支持两种方式: 0:不做插值还原。 1:最邻近插值还原。1[0, 16]

表27 RetinaNet模型后处理配置参数(retinanet_tf.cfg)

参数名描述默认值取值区间
CLASS_NUM代表数据集类别数量(默认COCO数据集是80类)。80[0, 100]
MODEL_TYPE代表模型类别,目前仅支持TensorFlow模型。0[0, 100]
SCORE_THRESH代表分数阈值。0.5[0.0, 1.0]

父主题: 模型支持参考

在线提单