rebuild
This commit is contained in:
186
tools/model_rknn_transform.py
Normal file
186
tools/model_rknn_transform.py
Normal file
@ -0,0 +1,186 @@
|
||||
import os
|
||||
import pdb
|
||||
import urllib
|
||||
import traceback
|
||||
import time
|
||||
import sys
|
||||
import numpy as np
|
||||
import cv2
|
||||
from config import config as conf
|
||||
from rknn.api import RKNN
|
||||
|
||||
import config
|
||||
|
||||
# ONNX_MODEL = 'resnet50v2.onnx'
|
||||
# RKNN_MODEL = 'resnet50v2.rknn'
|
||||
ONNX_MODEL = 'checkpoints/resnet18_scale=1.0/best.onnx'
|
||||
RKNN_MODEL = 'checkpoints/resnet18_scale=1.0/best.rknn'
|
||||
|
||||
|
||||
# ONNX_MODEL = 'v3_small_0424.onnx'
|
||||
# RKNN_MODEL = 'v3_small_0424.rknn'
|
||||
|
||||
def show_outputs(outputs):
|
||||
# print('***************outputs', outputs)
|
||||
output = outputs[0][0]
|
||||
# print('len(outputs)',len(output), output)
|
||||
output_sorted = sorted(output, reverse=True)
|
||||
top5_str = 'resnet50v2\n-----TOP 5-----\n'
|
||||
for i in range(5):
|
||||
value = output_sorted[i]
|
||||
index = np.where(output == value)
|
||||
for j in range(len(index)):
|
||||
if (i + j) >= 5:
|
||||
break
|
||||
if value > 0:
|
||||
topi = '{}: {}\n'.format(index[j], value)
|
||||
else:
|
||||
topi = '-1: 0.0\n'
|
||||
top5_str += topi
|
||||
# pdb.set_trace()
|
||||
print(top5_str)
|
||||
|
||||
|
||||
def readable_speed(speed):
|
||||
speed_bytes = float(speed)
|
||||
speed_kbytes = speed_bytes / 1024
|
||||
if speed_kbytes > 1024:
|
||||
speed_mbytes = speed_kbytes / 1024
|
||||
if speed_mbytes > 1024:
|
||||
speed_gbytes = speed_mbytes / 1024
|
||||
return "{:.2f} GB/s".format(speed_gbytes)
|
||||
else:
|
||||
return "{:.2f} MB/s".format(speed_mbytes)
|
||||
else:
|
||||
return "{:.2f} KB/s".format(speed_kbytes)
|
||||
|
||||
|
||||
def show_progress(blocknum, blocksize, totalsize):
|
||||
speed = (blocknum * blocksize) / (time.time() - start_time)
|
||||
speed_str = " Speed: {}".format(readable_speed(speed))
|
||||
recv_size = blocknum * blocksize
|
||||
|
||||
f = sys.stdout
|
||||
progress = (recv_size / totalsize)
|
||||
progress_str = "{:.2f}%".format(progress * 100)
|
||||
n = round(progress * 50)
|
||||
s = ('#' * n).ljust(50, '-')
|
||||
f.write(progress_str.ljust(8, ' ') + '[' + s + ']' + speed_str)
|
||||
f.flush()
|
||||
f.write('\r\n')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# Create RKNN object
|
||||
rknn = RKNN(verbose=True)
|
||||
|
||||
# If resnet50v2 does not exist, download it.
|
||||
# Download address:
|
||||
# https://s3.amazonaws.com/onnx-model-zoo/resnet/resnet50v2/resnet50v2.onnx
|
||||
if not os.path.exists(ONNX_MODEL):
|
||||
print('--> Download {}'.format(ONNX_MODEL))
|
||||
url = 'https://s3.amazonaws.com/onnx-model-zoo/resnet/resnet50v2/resnet50v2.onnx'
|
||||
download_file = ONNX_MODEL
|
||||
try:
|
||||
start_time = time.time()
|
||||
urllib.request.urlretrieve(url, download_file, show_progress)
|
||||
except:
|
||||
print('Download {} failed.'.format(download_file))
|
||||
print(traceback.format_exc())
|
||||
exit(-1)
|
||||
print('done')
|
||||
|
||||
# pre-process config
|
||||
print('--> config model')
|
||||
# rknn.config(mean_values=[123.675, 116.28, 103.53], std_values=[58.82, 58.82, 58.82])
|
||||
rknn.config(
|
||||
mean_values=[[127.5, 127.5, 127.5]],
|
||||
std_values=[[127.5, 127.5, 127.5]],
|
||||
target_platform='rk3588',
|
||||
model_pruning=False,
|
||||
compress_weight=False,
|
||||
single_core_mode=True)
|
||||
# rknn.config(
|
||||
# mean_values=[[127.5, 127.5, 127.5]], # 对于单通道图像,可以设置为 [[127.5]]
|
||||
# std_values=[[127.5, 127.5, 127.5]], # 对于单通道图像,可以设置为 [[127.5]]
|
||||
# target_platform='rk3588', # 设置目标平台
|
||||
# # quantize_dtype='int8',
|
||||
# # quantize_algo='normal',
|
||||
# # output_optimize=False,
|
||||
# # output_format='rknnb'
|
||||
# )
|
||||
print('done')
|
||||
|
||||
# Load model
|
||||
print('--> Loading model')
|
||||
ret = rknn.load_onnx(model=ONNX_MODEL)
|
||||
if ret != 0:
|
||||
print('Load model failed!')
|
||||
exit(ret)
|
||||
print('done')
|
||||
|
||||
# Build model
|
||||
print('--> Building model')
|
||||
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')
|
||||
# ret = rknn.build(do_quantization=False, dataset='./dataset.txt')
|
||||
if ret != 0:
|
||||
print('Build model failed!')
|
||||
exit(ret)
|
||||
print('done')
|
||||
|
||||
# Export rknn model
|
||||
print('--> Export rknn model')
|
||||
ret = rknn.export_rknn(RKNN_MODEL)
|
||||
if ret != 0:
|
||||
print('Export rknn model failed!')
|
||||
exit(ret)
|
||||
print('done')
|
||||
|
||||
# Set inputs
|
||||
img = cv2.imread('./dog_224x224.jpg')
|
||||
# img = cv2.imread('./data/gift_test/Havegift/20241213-161415-cb8e0762-f376-45d1-8f36-7dc070990fa5/subimg/cam1_9_tid2_fid(18, 33250169482).png')
|
||||
# print('img', img)
|
||||
# with open('pixel_values.txt', 'w') as file:
|
||||
|
||||
# for y in range(img.shape[0]):
|
||||
# for x in range(img.shape[1]):
|
||||
# b, g, r = img[y, x]
|
||||
# file.write(f'{r},{g},{b}\n')
|
||||
|
||||
# img = cv2.imread('./810115161912_810115161912_20240131-145622_0da14e4d-a3da-499f-b512-2d4168ab1c87_front_addGood_70f75407b7ae_29_01.jpg')
|
||||
img = cv2.resize(img, (224, 224))
|
||||
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
|
||||
|
||||
# img = conf.test_transform(img)
|
||||
# img = img.numpy()
|
||||
# img = img.transpose(1, 2, 0)
|
||||
|
||||
# Init runtime environment
|
||||
print('--> Init runtime environment')
|
||||
ret = rknn.init_runtime()
|
||||
# ret = rknn.init_runtime('rk3588')
|
||||
if ret != 0:
|
||||
print('Init runtime environment failed!')
|
||||
exit(ret)
|
||||
print('done')
|
||||
|
||||
# Inference
|
||||
print('--> Running model')
|
||||
T1 = time.time()
|
||||
outputs = rknn.inference(inputs=[img])
|
||||
# outputs = rknn.inference(inputs=img)
|
||||
T2 = time.time()
|
||||
print('消耗时间 >>> {}'.format(T2 - T1))
|
||||
with open('result_0415_128.txt', 'a') as f:
|
||||
f.write(str(outputs))
|
||||
# pdb.set_trace()
|
||||
print('***outputs', outputs)
|
||||
np.save('./onnx_resnet50v2_0.npy', outputs[0])
|
||||
x = outputs[0]
|
||||
output = np.exp(x) / np.sum(np.exp(x))
|
||||
outputs = [output]
|
||||
show_outputs(outputs)
|
||||
print('done')
|
||||
|
||||
rknn.release()
|
Reference in New Issue
Block a user