|
caffe模型转成rknn未量化模型后,推理出来的结果出现了精度下降的问题。希望能够得到回复,谢谢。图片中为推理的误差,和图片结果差异,附上推理和转换模型代码。模型放在了附件
- # -*- coding: utf-8 -*-
- """
- detection head of caffe model by cv2.dnn
- """
- import numpy as np
- import cv2
- from cv2 import dnn
- from rknn.api import RKNN
- def caffe2rknn():
- # 创建RKNN执行对象
- rknn = RKNN(verbose=False)
- rknn.config(batch_size=20,
- channel_mean_value='127.5 127.5 127.5 127.5',
- reorder_channel='2 1 0',
- epochs=10,
- quantized_dtype='asymmetric_quantized-u8'
- )
- print('--> Loading Caffe model')
- rknn.load_caffe(model='./ASSD-person.prototxt',
- proto='caffe',
- blobs='./ASSD-person.caffemodel')
- print('done')
- # 创建解析pb模型
- print('--> Building model')
- ret = rknn.build(do_quantization=False)
- print('done')
- # 导出保存rknn模型文件
- rknn.export_rknn('./Person_ASSD_noquantization-caffe.rknn')
- # Release RKNN Context
- rknn.release()
- def detection_by_cv2(img):
- img = cv2.imread(img)
- img = cv2.resize(img, (1159, 655))
- output_blob_name = ["conv10_3", "conv13_3", "conv15_3", "conv16_3"]
- blob = dnn.blobFromImage(img, 1 / 127.5, (1159, 655), (127.5, 127.5, 127.5))
- print("Caffe-Input:", blob.shape, blob.dtype)
- net = dnn.readNetFromCaffe('./ASSD-person.prototxt',
- './ASSD-person.caffemodel')
- net.setInput(blob)
- outputs = net.forward(output_blob_name)
- outputs = [i.ravel() for i in outputs]
- print("Caffe-Output:", len(outputs), outputs[1].shape)
- return outputs
- def rknn_detection(image):
- rknn = RKNN()
- print('--> Load RKNN Model')
- ret = rknn.load_rknn('./Person_ASSD_noquantization-caffe.rknn')
- if ret != 0:
- print('load rknn model failed')
- exit(ret)
- else:
- print('load rknn model done')
- print('---->begin init runtime')
- ret = rknn.init_runtime(target=None)
- if ret == 0:
- print('init run time success')
- else:
- print('init runtime failed')
- print('Class Asssd successfully')
- # Set inputs
- img = cv2.imread(image)
- img = cv2.resize(img, (1159, 655))
- img = img.astype(np.float32)
- input_image = img[np.newaxis, :, :, :]
- # Inference
- print('--> Running rknn model')
- # outputs
- outputs = rknn.inference(inputs=[input_image], data_type='float32')
- print('rknn-outputs-->', len(outputs), outputs[0].shape)
- rknn.release()
- return outputs
- def check_caffe_rknn_output(img):
- """4outputs"""
- outputs_caffe = detection_by_cv2(img)
- outputs_rknn = rknn_detection(img)
- for ca_val, rk_val in zip(outputs_caffe, outputs_rknn):
- print('========================================================')
- print('caffe_model--->', ca_val)
- print('rknn_model---->', rk_val)
- print('rk - ca --->', ca_val - rk_val)
- print('Max: %0.3f.' % np.max(np.abs(ca_val - rk_val)))
- print('Sum: %0.3f ' % np.sum((ca_val - rk_val) ** 2))
- if __name__ == "__main__":
- img = './a.jpg'
- check_caffe_rknn_output(img)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|