fsp icon indicating copy to clipboard operation
fsp copied to clipboard

e-AI translator: incorrect result of fully connected operation observed when Helium (MVEI) is enabled

Open SeanMeng0509 opened this issue 5 months ago • 1 comments

Issue

Due to the change of Helium support in CMSIS-NN 5.0 and later, when the e-AI translator generated model is built with Helium enabled, the fully connected operation result could be incorrect.

Workaround

If function arm_fully_connected_s8() is called by dnn_compute() in the generated file dnn_compute.c, please call arm_vector_sum_s8() to calculate vector sums first, e.g

Before adding “arm_fully_connected_s8” in “dnn_compute.c”

arm_fully_connected_s8(&cr_buffer,&layer_shapes.model_dense_MatMul_shape.fc_params,&model_dense_MatMul_multiplier,&layer_shapes.model_dense_MatMul_shape.input_dims,dnn_buffer2,&layer_shapes.model_dense_MatMul_shape.filter_dims,model_dense_MatMul_weights,&layer_shapes.model_dense_MatMul_shape.bias_dims,model_dense_MatMul_biases,&layer_shapes.model_dense_MatMul_shape.output_dims,dnn_buffer1);

arm_fully_connected_s8(&cr_buffer,&layer_shapes.model_dense_1_MatMul_shape.fc_params,&model_dense_1_MatMul_multiplier,&layer_shapes.model_dense_1_MatMul_shape.input_dims,dnn_buffer1,&layer_shapes.model_dense_1_MatMul_shape.filter_dims,model_dense_1_MatMul_weights,&layer_shapes.model_dense_1_MatMul_shape.bias_dims,model_dense_1_MatMul_biases,&layer_shapes.model_dense_1_MatMul_shape.output_dims,dnn_buffer2);

After adding “arm_fully_connected_s8” in “dnn_compute.c”

arm_vector_sum_s8(cr_buffer.buf, layer_shapes.model_dense_MatMul_shape.filter_dims.n, layer_shapes.model_dense_MatMul_shape.output_dims.c, model_dense_MatMul_weights);
arm_fully_connected_s8(&cr_buffer,&layer_shapes.model_dense_MatMul_shape.fc_params,&model_dense_MatMul_multiplier,&layer_shapes.model_dense_MatMul_shape.input_dims,dnn_buffer2,&layer_shapes.model_dense_MatMul_shape.filter_dims,model_dense_MatMul_weights,&layer_shapes.model_dense_MatMul_shape.bias_dims,model_dense_MatMul_biases,&layer_shapes.model_dense_MatMul_shape.output_dims,dnn_buffer1);

arm_vector_sum_s8(cr_buffer.buf, layer_shapes.model_dense_1_MatMul_shape.filter_dims.n, layer_shapes.model_dense_1_MatMul_shape.output_dims.c, model_dense_1_MatMul_weights);
arm_fully_connected_s8(&cr_buffer,&layer_shapes.model_dense_1_MatMul_shape.fc_params,&model_dense_1_MatMul_multiplier,&layer_shapes.model_dense_1_MatMul_shape.input_dims,dnn_buffer1,&layer_shapes.model_dense_1_MatMul_shape.filter_dims,model_dense_1_MatMul_weights,&layer_shapes.model_dense_1_MatMul_shape.bias_dims,model_dense_1_MatMul_biases,&layer_shapes.model_dense_1_MatMul_shape.output_dims,dnn_buffer2);

SeanMeng0509 avatar Sep 03 '24 14:09 SeanMeng0509