Page 1 of 1

如何将keras模型转成rknn

Posted: 2024-03-27 2:04
by weiwowuqing
我是刚入门的新手,现在遇到了一个问题。我在网上找了一个训练英语手写字体的程序,然后得到了一个模型,现在遇到的问题是如何将这个模型转成可以在板子上运行的rknn模型。
训练的代码:https://www.kaggle.com/code/m3rcury02/handwriting-recog
模型后缀: h5格式
这是模型的参数
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320

max_pooling2d (MaxPooling2D (None, 13, 13, 32) 0
)

conv2d_1 (Conv2D) (None, 13, 13, 64) 18496

max_pooling2d_1 (MaxPooling (None, 6, 6, 64) 0
2D)

conv2d_2 (Conv2D) (None, 4, 4, 128) 73856

max_pooling2d_2 (MaxPooling (None, 2, 2, 128) 0
2D)

flatten (Flatten) (None, 512) 0

dense (Dense) (None, 64) 32832

dense_1 (Dense) (None, 128) 8320

dense_2 (Dense) (None, 26) 3354

=================================================================
Total params: 137,178
Trainable params: 137,178
Non-trainable params: 0 请问我该怎么做

Re: 如何将keras模型转成rknn

Posted: 2024-03-29 2:17
by Crocodile
weiwowuqing wrote: 2024-03-27 2:04 我是刚入门的新手,现在遇到了一个问题。我在网上找了一个训练英语手写字体的程序,然后得到了一个模型,现在遇到的问题是如何将这个模型转成可以在板子上运行的rknn模型。
训练的代码:https://www.kaggle.com/code/m3rcury02/handwriting-recog
模型后缀: h5格式
这是模型的参数
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320

max_pooling2d (MaxPooling2D (None, 13, 13, 32) 0
)

conv2d_1 (Conv2D) (None, 13, 13, 64) 18496

max_pooling2d_1 (MaxPooling (None, 6, 6, 64) 0
2D)

conv2d_2 (Conv2D) (None, 4, 4, 128) 73856

max_pooling2d_2 (MaxPooling (None, 2, 2, 128) 0
2D)

flatten (Flatten) (None, 512) 0

dense (Dense) (None, 64) 32832

dense_1 (Dense) (None, 128) 8320

dense_2 (Dense) (None, 26) 3354

=================================================================
Total params: 137,178
Trainable params: 137,178
Non-trainable params: 0 请问我该怎么做
您好,想要将 h5 格式的模型转换为 rknn 的格式,根据 rknn 的官方文档 02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V1.6.0_CN.pdf 不支持直接转换,但是可以使用先转换为 ONNX 模型再转换为 rknn 模型的方式来实现。

Code: Select all

import keras
import keras2onnx
import onnx
from keras.models import load_model
model = load_model('xxxx.h5')   #您的 h5 权重文件
onnx_model = keras2onnx.convert_keras(model, model.name)
temp_model_file = 'xxxx.onnx'   #输出
onnx.save_model(onnx_model, temp_model_file)
注意: 这只是一个简单的示例,需要根据实际情况进行修改,详情请参考 https://pypi.org/project/keras2onnx/
装换为 rknn 模型的方式可以参考文档或是wiki中的RKNN实例使用指南https://wiki.luckfox.com/zh/Luckfox-Pico/RKNN-example ,希望这对您有所帮助