调试方式
仿真器Python 与 芯片的结合调试,通过target 设置芯片类型和芯片device_id,从而与npu获得连接主要流程步骤
参照demo,如下是自己封装的简单接口class RknnHandle:def __init__(self, mean_values, std_values):self.rknn = RKNN()self.rknn.config(mean_values=mean_values, std_values=std_values,quantized_method='channel', quantized_algorithm='mmse')def load_caffemodel(self, caffe_prototxt, caffe_model):print('--> Loading caffe model')ret = self.rknn.load_caffe(model=caffe_prototxt, blobs=caffe_model)# ret = self.rknn.load_caffe(model=caffe_prototxt, proto='caffe', blobs=caffe_model)if ret != 0:print('Load failed!')print(caffe_prototxt)print(caffe_model)exit(ret)print('done')def build_model(self, dataset='../data/list_ir_rknn.txt', isdo_quantization=True):print('--> Building model')ret = self.rknn.build(do_quantization=isdo_quantization, dataset=dataset)if ret != 0:print('Build resnet50 failed!')exit(ret)print('done')def export_rknn_model(self, rknn_model):print('--> Export RKNN model')ret = self.rknn.export_rknn(rknn_model)if ret != 0:print('Export rknn failed! ' + rknn_model)exit(ret)print('done')def init_runtime_environment(self):print('--> Init runtime environment')ret = self.rknn.init_runtime()if ret != 0:print('Init runtime environment failed')exit(ret)print('done')def inference(self, *args):img = args[0]print('--> Running model')outputs = self.rknn.inference(inputs=[img])return outputs
精度下降问题
分析精度损失原因, rknn提供逐层分析的工具(主要通过cosine 和 mse 距离比较每层的特征)。可以通过设置 verbose参数,输出打印模式,获取更为详细的结构修改config中的参数,quantized_method='channel', quantized_algorithm='mmse'都有助于模型精度的提高混合精度。通过配置参数,可以运行时有些层用fp16,有些用 int如果有些层不知道,分段可以尝试一下,不支持的层可以 cpu 自己实现模型整体分析
性能,内存等可以通过eval_perf,eval_memory进行详细的分析。
参考文档
Rockchip_Quick_Start_RKNN_Toolkit2_CN-1.1.0.pdf
Rockchip_User_Guide_RKNN_Toolkit2_CN-1.1.0.pdf (python接口说明)
Rockchip_RK356X_User_Guide_RKNN_API_V1.1.0_CN.pdf(c接口说明)