NPU跑AI模型的问题记录.

工作需要, 买了萤火虫的NPU开发板. RK3399Pro

1.在Linux Ubuntu 中,Vscode 不能找到模块. RKNN

原因是, linux中默认装了python 2.7 , 而RKNN是装在python 3.5下的.
解决方法很简单, 改一下vscode 的解释器即可
在这里插入图片描述
如果改了不管用, 可以在代码中的第一行加上 , 然后保存的时候会有个蓝色的提示弹出来. 请注意, 点击即可.

#!/usr/bin/python3.5
# -*- coding:utf-8 -*-

在这里插入图片描述

第2个问题. 报错如下.

Traceback (most recent call last):
  File "/home/firefly/Desktop/AI/toRKNNModel.py", line 43, in <module>
    rknn.build(do_quantization=False)
  File "/home/firefly/.local/lib/python3.5/site-packages/rknn/api/rknn.py", line 231, in build
    inputs = self.rknn_base.net.get_input_layers()
AttributeError: 'NoneType' object has no attribute 'get_input_layers'

原因是我的代码一开始用错了方法, 使用的是 load_tensorflow 加载的模型, 这个方法只能加载TensorFlow的模型. 而我要加载的是onnx模型, 显然是不对的.

    rknn.load_tensorflow(tf_pb='aimodel.onnx',
                         inputs=['input_x'],
                         outputs=['probability'],
                         input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])

后查源代码中的示例, 改成, 下面的代码.

ret = rknn.load_onnx(model='aimodel.onnx') 
if ret != 0:
     print('Load aimodel.onnx failed!')
     exit(ret)
 print('done')

第3个问题,google.protobuf.message.DecodeError: Truncated message.

这个就有点头大了

 /usr/local/lib/python3.5/dist-packages/onnx_tf/common/__init__.py:87: UserWarning: FrontendHandler.get_outputs_names is deprecated. It will be removed in future release.. Use node.outputs instead.
  warnings.warn(message)
E Catch exception when loading onnx model: deeplabv3model.onnx!
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 556, in rknn.api.rknn_base.RKNNBase.load_onnx
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 497, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx.__init__
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 498, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx.__init__
E   File "/home/firefly/.local/lib/python3.5/site-packages/google/protobuf/message.py", line 185, in ParseFromString
E     self.MergeFromString(serialized)
E   File "/home/firefly/.local/lib/python3.5/site-packages/google/protobuf/internal/python_message.py", line 1083, in MergeFromString
E     if self._InternalParse(serialized, 0, length) != length:
E   File "/home/firefly/.local/lib/python3.5/site-packages/google/protobuf/internal/python_message.py", line 1120, in InternalParse
E     pos = field_decoder(buffer, new_pos, end, self, field_dict)
E   File "/home/firefly/.local/lib/python3.5/site-packages/google/protobuf/internal/decoder.py", line 631, in DecodeField
E     raise _DecodeError('Truncated message.')
E google.protobuf.message.DecodeError: Truncated message.
Load deeplabv3model.onnx failed!

注意看是最后的一句话. Truncated message, 我刚开始只看了第一行, 搞了1个小时…晕.

经过一番搜索在 https://www.electronjs.org/apps/netron 下载到了 netron 神经网络模型查看器. 个人喜欢exe形式的程序, 比较简单.

经过一番百度.
https://blog.youkuaiyun.com/dou3516/article/details/111920462
看来可能是字符集的坑。
怀疑是文件读取后异常,大概率是字符集问题,查看并尝试修改系统字符集
通过locale命令看到系统字符集是C.UTF-8

修改为 en_US.UTF-8 修改方法 https://blog.youkuaiyun.com/aa1209551258/article/details/81745394
LANG=en_US.UTF-8
结果还是不行, 还是报同样的错误, 我怀疑是onnx文件有问题了.
于是我看了下onnx的文件大小是126mb, 而我自己电脑上的是200多mb… 明显的大小不一致

重新复制一份. 问题解决.不再提示这个问题. 但是提示 killed

读取没完成 提示 Killed.

你的设备显存不足

解决方法:想办法节约显存,比如(1)关闭其他进程;(2)禁用桌面显示系统;

安装rknntoolkit的时候报错

x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=562 -DPSUTIL_LINUX=1 -I/home/roota/Desktop/AI/rknntools/include -I/usr/include/python3.6m -c psutil/_psutil_common.c -o build/temp.linux-x86_64-3.6/psutil/_psutil_common.o
    psutil/_psutil_common.c:9:10: fatal error: Python.h: 没有那个文件或目录
     #include <Python.h>
              ^~~~~~~~~~
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

尝试安装 python-dev

sudo apt-get install python-dev

结果依旧报同样的错误,多数情况是可以解决的.
尝试使用

sudo apt-get install python3.6-dev

竟然OK通了. 这里主要的问题是版本问题.

再次执行. 下面的代码…

pip3 install rknn-toolkit/packages/rknn_toolkit-1.4.0-cp36-cp36m-linux_x86_64.whl

安装成功.

### Deep Sort 使用 NPU 加速的方法和配置 #### 配置环境和支持库 为了使 Deep Sort 能够利用神经网络处理单元 (NPU),需要安装并配置支持 NPU 的框架以及相应的依赖项。通常情况下,这涉及到安装华为 Ascend 平台的相关 SDK 和驱动程序。 ```bash pip install mindspore # 如果使用的是 MindSpore 框架 ``` MindSpore 是一个能够充分利用昇腾 AI 处理器特性的深度学习平台[^1]。 #### 修改模型推理部分以适应 NPU 为了让 Deep Sort 利用 NPU 进行加速,在加载预训练模型时需指定设备为 NPU: ```python import torch from torchvision import transforms from models.deep_sort.model_factory import create_model device = 'npu' if torch.cuda.is_available() else 'cpu' model_path = "path_to_your_pretrained_weights" transform = transforms.Compose([ transforms.ToTensor(), ]) # 创建模型实例并将模型移动到指定设备上 net = create_model().to(device) # 加载权重文件 checkpoint = torch.load(model_path, map_location=device) net.load_state_dict(checkpoint['state_dict']) ``` 上述代码片段展示了如何创建模型并将其迁移到 NPU 上运行[^2]。 #### 数据预处理优化 当采用 NPU 执行特征提取任务时,建议调整数据管道中的图像尺寸和其他参数,以便更好地匹配硬件特性,从而提高效率。例如,可以尝试批量大小、分辨率等方面的微调实验来找到最优组合。 #### 性能评估与监控 完成以上更改之后,应该对整个流程进行全面测试,确保所有组件正常工作的同时记录下性能指标的变化情况。可以通过对比 CPU/GPU 版本下的表现差异来进行分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值