OpenVX Neural Network Extension Library (vx_nn)#
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 name |
Function |
Kernel name |
---|---|---|
Activation |
vxActivationLayer |
org.khronos.nn_extension.activation_layer |
Argmax |
vxArgmaxLayerNode |
com.amd.nn_extension.argmax_layer |
Batch Normalization |
vxBatchNormalizationLayer |
com.amd.nn_extension.batch_normalization_layer |
Cast |
vxCastLayer |
com.amd.nn_extension.cast_layer |
Concat |
vxConcatLayer |
com.amd.nn_extension.concat_layer |
Convolution |
vxConvolutionLayer |
org.khronos.nn_extension.convolution_layer |
Crop |
vxCropLayer |
com.amd.nn_extension.crop_layer |
CropAndResize |
vxCropAndResizeLayer |
com.amd.nn_extension.crop_and_resize_layer |
Deconvolution |
vxDeconvolutionLayer |
org.khronos.nn_extension.deconvolution_layer |
Detection Output |
vxDetectionOutputLayer |
com.amd.nn_extension.detection_output |
Fully Connected |
vxFullyConnectedLayer |
org.khronos.nn_extension.fully_connected_layer |
Gather |
vxGatherLayer |
com.amd.nn_extension.gather_layer |
Local Response Normalization |
vxNormalizationLayer |
org.khronos.nn_extension.normalization_layer |
Non Max Suppression |
vxNMSLayer |
com.amd.nn_extension.nms_layer |
Permute |
vxPermuteLayer |
com.amd.nn_extension.permute_layer |
Pooling |
vxPoolingLayer |
org.khronos.nn_extension.pooling_layer |
Prior Box |
vxPriorBoxLayer |
com.amd.nn_extension.prior_box_layer |
Reduce Min |
vxReduceMinLayer |
com.amd.nn_extension.reduce_min_layer |
ROI Pooling |
vxROIPoolingLayer |
org.khronos.nn_extension.roi_pooling_layer |
Scale |
vxScaleLayer |
com.amd.nn_extension.scale_layer |
Slice |
vxSliceLayer |
com.amd.nn_extension.slice_layer |
Softmax |
vxSoftmaxLayer |
org.khronos.nn_extension.softmax_layer |
Tensor Add |
vxTensorAddNode |
org.khronos.openvx.tensor_add |
Tensor Compare |
vxTensorCompareNode |
com.amd.nn_extension.tensor_compare |
Tensor Convert Depth |
vxTensorConvertDepthNode |
org.khronos.openvx.tensor_convert_depth |
Tensor Convert from Image |
vxConvertImageToTensorNode |
com.amd.nn_extension.convert_image_to_tensor |
Tensor Convert to Image |
vxConvertTensorToImageNode |
com.amd.nn_extension.convert_tensor_to_image |
Tensor Exponential |
vxTensorExpNode |
com.amd.nn_extension.tensor_exp |
Tensor Log |
vxTensorLogNode |
com.amd.nn_extension.tensor_log |
Tensor Matrix Multiply |
vxTensorMatrixMultiplyNode |
org.khronos.openvx.tensor_matrix_multiply |
Tensor Max |
vxTensorMaxNode |
com.amd.nn_extension.tensor_max |
Tensor Min |
vxTensorMinNode |
com.amd.nn_extension.tensor_min |
Tensor Multiply |
vxTensorMultiplyNode |
org.khronos.openvx.tensor_multiply |
Tensor Subtract |
vxTensorSubtractNode |
org.khronos.openvx.tensor_subtract |
Tile |
vxTileLayer |
com.amd.nn_extension.tile_layer |
TopK |
vxTopKLayer |
com.amd.nn_extension.topk_layer |
Upsample Nearest Neighborhood |
vxUpsampleNearestLayer |
com.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