Code: Select all
class RKNNonSimulator:
def __init__(self, onnx_path):
# Create RKNN object
rknn = RKNN(verbose=False)
# Pre-process config
rknn.config(mean_values=infer_mean, std_values=infer_std, target_platform='rv1103')
# Load model
print('--> Loading model')
ret = rknn.load_onnx(model=onnx_path)
self.rknn_path = onnx_path.replace('.onnx', '.rknn')
# Build model
DATASET_PATH = "test_list_wo_labels.txt"
ret = rknn.build(do_quantization='i8', dataset=DATASET_PATH)
print('--> Init runtime environment')
ret = rknn.init_runtime()
self.rknn = rknn
def __call__(self, data, *args, **kwargs):
# data = data.squeeze(axis=1)
# data = data[..., None]
outputs = self.rknn.inference(inputs=[data], data_format=['nchw'])
return outputs[0]
def export(self):
# Export rknn model
print('--> Export rknn model')
ret = self.rknn.export_rknn(self.rknn_path)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
def byebye(self):
# Release
self.rknn.release()
看起来是正常的。但是当我使用下面的代码, 把rknn模型部署到MINI B板子上,我测试了三张不同的图片,包括一张全黑、全白、混合, 运行日志如下:The test acc is 93.320%
The test acc of ONNX is 93.320%
The test acc of RKNN is 92.105%
其中,Original array是模型输出的量化结果。# /data/RKNN/rknn_cls_demo /root/model.rknn /root/255.png
model input num: 1, output num: 1
input tensors:
index=0, name=input, n_dims=4, dims=[1, 800, 800, 1], n_elems=640000, size=640000, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=1.000000
output tensors:
index=0, name=output, n_dims=2, dims=[1, 2, 0, 0], n_elems=2, size=2, fmt=UNDEFINED, type=INT8, qnt_type=AFFINE, zp=9, scale=0.038287
input_attrs[0].size_with_stride=640000
model is NHWC input fmt
model input height=800, width=800, channel=1
load image wxhxc=800x800x1 path=/root/255.png
>>> Min value of input: 255.000000
>>> Max value of input: 255.000000
rknn_run...
RKNN_TENSOR_INT8
Original array:
99 -87
softmax with num_classes 2...
get_topk_with_indices...
inference done...
Predictions:
Class: 0, Score: 0.9992
Class: 1, Score: 0.0008
问题出在,我输入了另外一种图片,结果完全一模一样,同样再次输出Original array是99 -87。也就是说,我输入不同的图片,输出(预测)的结果都是一模一样的。这和模拟推理的结果完全不一样。我也查看过模拟推理的输出结果,每次都是不一样的。
分类模型的输出全部是同一个结果,不知道是哪里出了问题?还请不吝赐教,非常感谢!