# How to test NNFW on single model/input pair 1. Select backend through environment variables: * acl_cl: `export OP_BACKEND_ALLOPS=acl_cl` * acl_neon: `export OP_BACKEND_ALLOPS=acl_neon` * cpu: `export OP_BACKEND_ALLOPS=cpu` * different backends for different operations: ``` unset OP_BACKEND_ALLOPS export OP_BACKEND_Conv2DNode=cpu export OP_BACKEND_MaxPool2DNode=acl_cl export OP_BACKEND_AvgPool2DNode=acl_neon ``` 2. Select executor through environment variable: * linear: `export EXECUTOR=Linear` * dataflow: `export EXECUTOR=Dataflow` * parallel: `export EXECUTOR=Parallel` 3. Set library path: `export LD_LIBRARY_PATH=/path/to/nnfw/Product/armv7l-linux.debug/out/lib` ## Test NNFW through NNAPI ### Testing on random input 1. Generate random input, get reference result using tflite interpreter, dump input and result into file: ``` /path/to/tflite_run --tflite /path/to/model.tflite --dump /path/to/out.dat ``` 2. Inference with NNFW NNAPI and compare result with reference one: ``` USE_NNAPI=1 /path/to/tflite_run --tflite /path/to/model.tflite ---compare /path/to/out.dat ``` ### Testing on particular input 1. Prepare input: `tflite_run` consumes input as sequence of floats. For example, you could convert `.jpg` image into such format file with next python3 script: ``` from PIL import Image import numpy as np img = Image.open("./image.jpg") np_img = np.array(img.getdata()).reshape(img.size[0], img.size[1], 3).astype(np.float32) / 255. with open('./converted_image.dat', 'wb') as f: for i in np_img.flatten('C'): f.write(i) ``` 2. Get reference result using tflite interpreter, dump input and result into file: ``` /path/to/tflite_run --tflite /path/to/model.tflite --input /path/to/input.dat --dump /path/to/out.dat ``` 3. Inference with NNFW NNAPI and compare result with reference one: ``` USE_NNAPI=1 /path/to/tflite_run --tflite /path/to/model.tflite ---compare /path/to/out.dat ``` ## Test NNFW through NNPackage TODO: fill this section when NNPackage will be implemented