OpenVX Neural Network Extension Library (vx_nn)

February 2, 2022 ยท View on GitHub

vx_nn is an OpenVX Neural Network extension module. This implementation supports only floating-point tensor data type and does not support 8-bit and 16-bit fixed-point data types specified in the OpenVX specification.

List of supported tensor and neural network layers:

Layer nameFunctionKernel name
ActivationvxActivationLayerorg.khronos.nn_extension.activation_layer
ArgmaxvxArgmaxLayerNodecom.amd.nn_extension.argmax_layer
Batch NormalizationvxBatchNormalizationLayercom.amd.nn_extension.batch_normalization_layer
CastvxCastLayercom.amd.nn_extension.cast_layer
ConcatvxConcatLayercom.amd.nn_extension.concat_layer
ConvolutionvxConvolutionLayerorg.khronos.nn_extension.convolution_layer
CropvxCropLayercom.amd.nn_extension.crop_layer
CropAndResizevxCropAndResizeLayercom.amd.nn_extension.crop_and_resize_layer
DeconvolutionvxDeconvolutionLayerorg.khronos.nn_extension.deconvolution_layer
Detection OutputvxDetectionOutputLayercom.amd.nn_extension.detection_output
Fully ConnectedvxFullyConnectedLayerorg.khronos.nn_extension.fully_connected_layer
GathervxGatherLayercom.amd.nn_extension.gather_layer
Local Response NormalizationvxNormalizationLayerorg.khronos.nn_extension.normalization_layer
Non Max SuppressionvxNMSLayercom.amd.nn_extension.nms_layer
PermutevxPermuteLayercom.amd.nn_extension.permute_layer
PoolingvxPoolingLayerorg.khronos.nn_extension.pooling_layer
Prior BoxvxPriorBoxLayercom.amd.nn_extension.prior_box_layer
Reduce MinvxReduceMinLayercom.amd.nn_extension.reduce_min_layer
ROI PoolingvxROIPoolingLayerorg.khronos.nn_extension.roi_pooling_layer
ScalevxScaleLayercom.amd.nn_extension.scale_layer
SlicevxSliceLayercom.amd.nn_extension.slice_layer
SoftmaxvxSoftmaxLayerorg.khronos.nn_extension.softmax_layer
Tensor AddvxTensorAddNodeorg.khronos.openvx.tensor_add
Tensor ComparevxTensorCompareNodecom.amd.nn_extension.tensor_compare
Tensor Convert DepthvxTensorConvertDepthNodeorg.khronos.openvx.tensor_convert_depth
Tensor Convert from ImagevxConvertImageToTensorNodecom.amd.nn_extension.convert_image_to_tensor
Tensor Convert to ImagevxConvertTensorToImageNodecom.amd.nn_extension.convert_tensor_to_image
Tensor ExponentialvxTensorExpNodecom.amd.nn_extension.tensor_exp
Tensor LogvxTensorLogNodecom.amd.nn_extension.tensor_log
Tensor Matrix MultiplyvxTensorMatrixMultiplyNodeorg.khronos.openvx.tensor_matrix_multiply
Tensor MaxvxTensorMaxNodecom.amd.nn_extension.tensor_max
Tensor MinvxTensorMinNodecom.amd.nn_extension.tensor_min
Tensor MultiplyvxTensorMultiplyNodeorg.khronos.openvx.tensor_multiply
Tensor SubtractvxTensorSubtractNodeorg.khronos.openvx.tensor_subtract
TilevxTileLayercom.amd.nn_extension.tile_layer
TopKvxTopKLayercom.amd.nn_extension.topk_layer
Upsample Nearest NeighborhoodvxUpsampleNearestLayercom.amd.nn_extension.upsample_nearest_layer

Example 1: Convert an image to a tensor of type float32

Use the below GDF with RunVX.

import vx_nn

data input = image:32,32,RGB2
data output = tensor:4,{32,32,3,1},VX_TYPE_FLOAT32,0
data a = scalar:FLOAT32,1.0
data b = scalar:FLOAT32,0.0
data reverse_channel_order = scalar:BOOL,0
read input input.png
node com.amd.nn_extension.convert_image_to_tensor input output a b reverse_channel_order
write output input.f32

Example 2: 2x2 Upsample a tensor of type float32

Use the below GDF with RunVX.

import vx_nn

data input = tensor:4,{80,80,3,1},VX_TYPE_FLOAT32,0
data output = tensor:4,{160,160,3,1},VX_TYPE_FLOAT32,0

read input tensor.f32
node com.amd.nn_extension.upsample_nearest_layer input output
write output upsample.f32