瑞芯微 rknn 移植记录
·
-
调试方式
- 仿真器
- 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 接口说明)
更多推荐



所有评论(0)