300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 瑞芯微 rknn 移植记录

瑞芯微 rknn 移植记录

时间:2019-09-06 16:51:22

相关推荐

瑞芯微 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接口说明)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。