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