《【北京迅为】itop-3568开发板NPU使用手册》- 第6章 其他模型转换
系统性地介绍了RKNPU从入门到应用开发的全流程知识体系。本手册以“认识工具—构建环境—模型转换—部署实践”为主线,为开发者在Linux和Android双平台上提供完整的NPU应用开发指导。本手册既适合嵌入式AI开发初学者系统学习,也可作为高级开发者的技术参考,帮助开发者高效利用RKNPU实现各类AI应用的部署与优化。完整教程及配套资料,关注我的B站👉或公众号,回复【RKNPU2】即可领取,你的
《【北京迅为】itop-3568开发板NPU使用手册》系统性地介绍了RKNPU从入门到应用开发的全流程知识体系。本手册以“认识工具—构建环境—模型转换—部署实践”为主线,为开发者在Linux和Android双平台上提供完整的NPU应用开发指导。
本手册既适合嵌入式AI开发初学者系统学习,也可作为高级开发者的技术参考,帮助开发者高效利用RKNPU实现各类AI应用的部署与优化。
完整教程及配套资料,关注我的B站👉【北京迅为电子】或公众号,回复【RKNPU2】即可领取,你的关注是我更新的最大动力~
【公众号】迅为电子
【交流群】861311530
【视频展示】【【北京迅为】基于RK3568/RK3588开发板的AI图像识别方案】
【视频教程】【AI深度学习推理加速器】——RKNPU2 从入门到实践(基于RK3588和RK3568)
第6章 其他模型转换
在官方提供的rknn-toolkit2工具中,默认自带了很多测试例程和模型,如下图所示:

本章节我们测试并运行这些demo程序,模型运行在RK3568开发板上,开发板上烧写android11系统,运行环境可以参考5.3.2章节进行搭建,这里只给出转换模型的步骤。
6.1 使用tensorflow框架
TensorFlow是一个软件库或框架,由Google团队设计,以最简单的方式实现机器学习和深度学习概念。它结合了优化技术的计算代数,便于计算许多数学表达式。TensorFlow有以下重要功能 - 它包含一个叫做张量概念,用来创建多维数组,优化和计算数学表达式。它包括深度神经网络和机器学习技术的编程支持。它包括具有各种数据集的高可扩展计算功能。TensorFlow使用GPU计算,自动化管理。它还包括优化相同内存和使用数据的独特功能。
1首先选择tensorflow作为我们测试的框架,进入tensorflow/ssd_mobilenet_v1/目录下,如下图所示:
cd examples/tensorflow/ssd_mobilenet_v1/

2打开test.py,确认使用板载npu推理识别图片
vi test.py

修改test.py文件,我们修改对应的平台为rk3568,修改如下所示,“-”代表需要删除的内容,“+”代表需要新增的内容。
if __name__ == '__main__':
# Create RKNN object
- rknn = RKNN(verbose=True)
+ rknn = RKNN()
# Pre-process config
print('--> Config model')
- rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128])
+ rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128], target_platform='rk3568')
print('done')
# Load model
@@ -62,7 +62,7 @@ if __name__ == '__main__':
# Init runtime environment
print('--> Init runtime environment')
- ret = rknn.init_runtime()
+ ret = rknn.init_runtime(target='rk3568')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
修改完,保存文件并退出。
3 进入到examples/tensorflow/ssd_mobilenet_v1/文件夹,输入以下命令,执行模型转换和推理模型的test.py脚本。
python3 test.py

4 运行之后,我们可以得知推理图片识别后的结果,如下图所示:

5 如上图所示,Score反映的是得分,得分越高说明和被认为的标签相似度越高,圆括号则是对应识别出的物体的坐标。命令行中出现了八行被识别物体的坐标和置信度,和out.jpg可以对应。out.jpg如下图所示:

6.2 使用caffe框架
CAFFE全称为快速特征嵌入的卷积结构,Convolutional Architecture for Fast Feature Embedding)是一个深度学习框架,最初开发于加利福尼亚大学柏克莱分校。Caffe在BSD许可下开源,使用C++编写,带有Python接口。
1 我们选择caffe作为人工智能框架,进入rknn-toolkit2-master/examples/caffe目录,
输入以下命令:
cd examples/caffe

2 MobileNet是专用于移动和嵌入式视觉应用的卷积神经网络,是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网络。通过引入两个简单的全局超参数,MobileNet在延迟度和准确度之间有效地进行平衡。MobileNets在广泛的应用场景中有效,包括物体检测、细粒度分类、人脸属性和大规模地理定位。我们选择mobilenet_v2做进一步的测试,输入以下命令
cd mobilenet_v2

3打开test.py,确认使用板载npu推理识别图片
vi test.py
![]()
修改test.py文件,我们修改对应的平台为rk3568,修改如下所示,“-”代表需要删除的内容,“+”代表需要新增的内容。
if __name__ == '__main__':
# Create RKNN object
- rknn = RKNN(verbose=True)
+ rknn = RKNN()
# Pre-process config
print('--> Config model')
- rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128])
+ rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128], target_platform='rk3568')
print('done')
# Load model
@@ -62,7 +62,7 @@ if __name__ == '__main__':
# Init runtime environment
print('--> Init runtime environment')
- ret = rknn.init_runtime()
+ ret = rknn.init_runtime(target='rk3568')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
修改完,保存文件并退出。
4 进入到examples/caffe/mobilenet_v2文件夹,输入以下命令,执行模型转换和推理模型的test.py脚本。
python3 test.py
![]()
5 运行之后,如下图所示:

6 从上图中我们可以得知前五个推理结果,其中最有可能的识别结果是第155个标签
(标签说明链接:https://github.com/leferrad/tensorflow-mobilenet/blob/master/imagenet/labels.txt),置信度为0.9912。按照mobilenetv2的标签,第155物体的标签应该是Maltese dog,
Maltese terrier, Maltese,中文为马耳他犬,和图片相符。

6.3 使用tflite框架
1 TensorFlow Lite 是 TensorFlow 移动和嵌入式设备轻量级解决方案。它使设备机器学习具有低延迟和更小的二进制体积。TensorFlow Lite 同时支持 Android 神经网络 API的硬件加速。TensorFlow Lite 使用多项技术降低延迟,例如移动 app 内核优化、pre-fused 激活、允许更快更小(定点)模型的量化内核。
2 现在选择tflite作为我们的人工智能框架。输入以下命令:
cd examples/tflite

3 MobileNet是基于深度级可分离卷积构建的网络,其实这种结构最早是出现在GoogleNet v3的inception中,它是将标准卷积拆分为了两个操作:深度卷积(depthwise convolution) 和逐点卷积(pointwise convolution),Depthwise convolution和标准卷积不同,对于标准卷积其卷积核是用在所有的输入通道上(input channels),而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise convolution是depth级别的操作。我们选择mobilenet_v1做进一步的测试,
输入以下命令:
cd mobilenet_v1

4 打开test.py,确认使用板载npu推理识别图片
vi test.py
![]()
修改test.py文件,我们修改对应的平台为rk3568,修改如下所示,“-”代表需要删除的内容,“+”代表需要新增的内容。
if __name__ == '__main__':
# Create RKNN object
- rknn = RKNN(verbose=True)
+ rknn = RKNN()
# Pre-process config
print('--> Config model')
- rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128])
+ rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128], target_platform='rk3568')
print('done')
# Load model
@@ -62,7 +62,7 @@ if __name__ == '__main__':
# Init runtime environment
print('--> Init runtime environment')
- ret = rknn.init_runtime()
+ ret = rknn.init_runtime(target='rk3568')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
修改完,保存文件并退出。
5 进入到examples/tflite/mobilenet_v1文件夹,输入以下命令,执行模型转换和推理模型的test.py脚本。
python3 test.py
![]()
6运行结果如下图所示。TOP5记录了推理结果,其中概率最高也就是0.935,对应第156个标签的物体。
6.4 使用onnx框架
1 ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存储模型数据并交互。ONNX的规范及代码主要由微软,亚马逊 ,Facebook 和 IBM 等公司共同开发,以开放源代码的方式托管在Github上。目前官方支持加载ONNX模型并进行推理的深度学习框架有: Caffe2, PyTorch, MXNet,ML.NET,TensorRT 和 Microsoft CNTK,并且 TensorFlow 也非官方的支持。现在选择ONNX作为人工智能框架,进入rknn-toolkit2-master/examples/onnx目录,输入以下命令:
cd examples/onnx/

2 YOLO 是 2016 年提出来的目标检测算法,在当时比较优秀的目标检测算法有 R-CNN、Fast R-CNN 等等,但 YOLO 算法还是让人感到很新奇与兴奋。YOLO 是 You only look once的缩写,意思是你只需看一次就可以预测,灵感就来自于我们人类自己,因为人看一张图片时,扫一眼就可以得知这张图片不同类型目标的位置。YOLO 胜在它的简单与快速。我们选择yolov5做进一步的测试,输入以下命令
cd yolov5

3打开test.py,确认使用板载npu推理识别图片
vi test.py
![]()
修改test.py文件,我们修改对应的平台为rk3568,修改如下所示,“-”代表需要删除的内容,“+”代表需要新增的内容。
if __name__ == '__main__':
# Create RKNN object
- rknn = RKNN(verbose=True)
+ rknn = RKNN()
# Pre-process config
print('--> Config model')
- rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128])
+ rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128], target_platform='rk3568')
print('done')
# Load model
@@ -62,7 +62,7 @@ if __name__ == '__main__':
# Init runtime environment
print('--> Init runtime environment')
- ret = rknn.init_runtime()
+ ret = rknn.init_runtime(target='rk3568')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
修改完,保存文件并退出。
4 进入到examples/onnx/yolov5文件夹,输入以下命令,执行模型转换和推理模型的test.py脚本。
python3 test.py
5 运行之后,如下图所示:

6 从上图我们可以得知onnx在板载npu推理后的结果。得分(score)显示出推理识别结果为三人(person)一车(bus),对应的置信度分别在0.998, 0.997, 0.979,0.992和所识别的原始图片相符合。

6.5 使用darknet框架
1 darknet是一个较为轻型的完全基于C与CUDA的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(OpenCV都可以不用),移植性非常好,支持CPU与GPU两种计算方式。(https://github.com/hgpvision/darknet)相比于TensorFlow来说,darknet并没有那么强大,但这也成了darknet的优势:darknet完全由C语言实现,没有任何依赖项,当然可以使用OpenCV,但只是用其来显示图片、为了更好的可视化;darknet支持CPU(所以没有GPU也不用紧的)与GPU(CUDA/cuDNN,使用GPU当然更块更好了)。正是因为其较为轻型,没有像TensorFlow那般强大的API,所以给我的感觉就是有另一种味道的灵活性,适合用来研究底层,可以更为方便的从底层对其进行改进与扩展。现在选择darknet作为人工智能框架,进入rknn-toolkit2-master/examples/onnx目录,输入以下命令:

2 YOLO 是 2016 年提出来的目标检测算法,在当时比较优秀的目标检测算法有 R-CNN、Fast R-CNN 等等,YOLO 是 You only look once的缩写,意思是你只需看一次就可以预测,灵感就来自于我们人类自己,因为人看一张图片时,扫一眼就可以得知这张图片不同类型目标的位置。YOLO 胜在它的简单与快速。这次我们使用的是第三代yolo版本yolov3。YOLOV3相对于v2版本主要改进:调整了网络结构;利用多尺度特征进行对象检测;对象分类用Logistic取代了softmax。我们选择yolov3_416x416做进一步的测试,输入以下命令:
cd yolov3_416x416

3打开test.py,确认使用板载npu推理识别图片
vi test.py
![]()
修改test.py文件,我们修改对应的平台为rk3568,修改如下所示,“-”代表需要删除的内容,“+”代表需要新增的内容。
if __name__ == '__main__':
# Create RKNN object
- rknn = RKNN(verbose=True)
+ rknn = RKNN()
# Pre-process config
print('--> Config model')
- rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128])
+ rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128], target_platform='rk3568')
print('done')
# Load model
@@ -62,7 +62,7 @@ if __name__ == '__main__':
# Init runtime environment
print('--> Init runtime environment')
- ret = rknn.init_runtime()
+ ret = rknn.init_runtime(target='rk3568')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
修改完,保存文件并退出。
4 进入到examples/darknet/yolov3_416x416文件夹,输入以下命令,执行模型转换和推理模型的test.py脚本。
python3 test.py
5 运行结果如下所示:

6 完成推理后我们可以得到一个results.jpg。打开后发现里面有推理后的结果,包括被识别的物体和对应的置信度。

results.jpg如下图所示:

6.6 使用pytorch框架
1 PyTorch是一个Python的开源机器学习库。它用于自然语言处理等应用程序。它最初由Facebook人工智能研究小组开发,而优步的Pyro软件则用于概率编程。最初,PyTorch由Hugh Perkins开发,作为基于Torch框架的LusJIT的Python包装器。有两种PyTorch变种。PyTorch在Python中重新设计和实现Torch,同时为后端代码共享相同的核心C库。PyTorch开发人员调整了这个后端代码,以便有效地运行Python。他们还保留了基于GPU的硬件加速以及基于Lua的Torch的可扩展性功能。现在选择pytorch作为我们的人工智能框架,输入以下命令:
cd pytorch/

2 经典网络ResNet(Residual Networks)由Kaiming He等人于2015年提出,论文名为《Deep Residual Learning for Image Recognition》,ResNet要解决的是深度神经网络的”退化(degradation)”问题,即使用浅层直接堆叠成深层网络,不仅难以利用深层网络强大的特征提取能力,而且准确率会下降,这个退化不是由于过拟合引起的。ResNet也称为残差网络。我们选择resnet18做进一步的测试,输入以下命令:
cd resnet18

3打开test.py,确认使用板载npu推理识别图片
vi test.py
![]()
修改test.py文件,我们修改对应的平台为rk3568,修改如下所示,“-”代表需要删除的内容,“+”代表需要新增的内容。
if __name__ == '__main__':
# Create RKNN object
- rknn = RKNN(verbose=True)
+ rknn = RKNN()
# Pre-process config
print('--> Config model')
- rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128])
+ rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128], target_platform='rk3568')
print('done')
# Load model
@@ -62,7 +62,7 @@ if __name__ == '__main__':
# Init runtime environment
print('--> Init runtime environment')
- ret = rknn.init_runtime()
+ ret = rknn.init_runtime(target='rk3568')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
修改完,保存文件并退出。
4 进入到examples/文件夹,输入以下命令,执行模型转换和推理模型的test.py脚本。
python3 test.py
![]()
5 运行结果如下图所示:

更多推荐



所有评论(0)