Erreur de configuration et d'inférence de l'environnement rk3568 : RKNN_ERR_MALLOC_FAIL

Préface :
Résumons quelques-uns des problèmes rencontrés récemment lors du déploiement d'algorithmes côté carte :

1. Problème de version

Après les tests, configurez maintenant votre environnement comme suit :Insérer la description de l'image ici
Insérer la description de l'image ici

Installez rknn-toolkit2-1.5.0 sur Linux local

  1. Un nouvel environnement virtuel python créé par miniconda utilisé sous Linux local (trouvez vous-même les méthodes associées en ligne)
    Insérer la description de l'image ici
  2. Après avoir installé votre propre environnement virtuel : installez les packages de dépendances requis
 sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc 
  1. Git la bibliothèque officielle RKNN-Toolkit2 sur le local Linux : (si l'invite ne trouve pas la commande git, utilisez :sudo apt install git-all install git tool)
 git clone https://github.com/rockchip-linux/rknn-toolkit2

Insérer la description de l'image ici

  1. Entrez dans le dossier du projet Toolkit2 et modifiez le chemin dans la commande cd en fonction du chemin d'enregistrement du projet.
cd ~/rknn-toolkit2
  1. Installez les versions correspondantes nécessaires des packages de dépendances (ici j'installe la version py3.8 qui correspond à mon propre Linux)
 pip3 install -r doc/requirements_cp38-1.5.0 
  1. Installez RKNN-Toolkit2 (Python3.6 pour x86_64)
 pip3 install package/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64
  1. Vérifiez si RKNN-Toolkit2 est installé avec succès. Lorsque cette interface apparaît, cela signifie que l'installation du côté Linux local a réussi.
    Insérer la description de l'image ici
  2. Vous pouvez exécuter la détection de cas d'exemples officiels : rknn-toolkit2/examples/onnx/yolov5
    Insérer la description de l'image ici

Installation de l'environnement de la carte RK3568

  1. git code source au tableau
git clone https://github.com/rockchip-linux/rknn-toolkit2
cd ./rknn_toolkit_lite2

La structure du fichier est la suivante :
Insérer la description de l'image ici

  1. Mise en place de l'environnement
 sudo apt update
#安装python工具等
sudo apt-get install python3-dev python3-pip gcc
#安装相关依赖和软件包
pip3 install wheel
sudo apt-get install -y python3-opencv
sudo apt-get install -y python3-numpy
sudo apt -y install python3-setuptools
  1. Installation de l'outil Toolkit Lite2 :
# 进入到rknn_toolkit_lite2目录下,
cd rknn_toolkit_lite2/
# ubuntu22 python3.7
pip3 install packages/rknn_toolkit_lite2-1.5.0-cp310-cp310m-linux_aarch64.whl
  1. Vérifiez que l'installation est réussie
python3
>>> from rknnlite.api import RKNNLite
>>>
  1. Pour exécuter la démo officielle,
    vous devez trouver des exemples sous le fichier rknn_toolkit_lite2 et l'exécuter :

Exécuter ma démo : Adresse de l'entrepôt : https://gitee.com/wangyoujie11/rk3568_-demo
Insérer la description de l'image ici
Mnist_PC est placé dans l'environnement Linux de l'ordinateur local, active son propre environnement virtuel python, puis python test.py peut exécuter
Mnist_rk3568 et placé sur la carte Dans l'environnement Linux, alors python3 rk3568_test.py peut être exécuté.
Les résultats d'exécution sont les suivants :
Côté PC (1.png chargé dans le programme) :
Insérer la description de l'image ici
Côté carte RK3568 (7.png chargé dans le programme) :
Insérer la description de l'image ici

---------------------------------------------Ligne de séparation (renouvellement irrégulier )---------------------------------------------

Question une

在使用RK3568开发板的时候,在板子侧部署.rknn模型推理的时候报错:

*Exception: RKNN init failed. error code: RKNN_ERR_MALLOC_FAIL*

Veuillez ajouter une description de l'image
Ensuite, j'ai vérifié le manuel officiel et j'ai trouvé le message d'erreur : L'allocation de mémoire a échoué.
Mais il n'y a pas de solution correspondante, donc je ne peux le déboguer que par moi-même (une tasse de thé, un paquet de cigarettes, une recherche de bug pendant une journée). ..
Plus tard, j'ai trouvé le problème : la sortie de mon modèle .onnx est la suivante : il existe plusieurs sorties, vous pouvez donc exécuter votre propre modèle sous Linux local, mais en raison de contraintes de ressources sur la carte, l'allocation de mémoire de la carte échoue. La solution consiste donc à réduire la sortie de votre propre modèle .onnx. https://netron.app/Vous pouvez charger votre propre modèle .onnx pour voir l'entrée et la sortie
Insérer la description de l'image ici

#原xxx.onnx文件放在onnx文件夹下,然后创建一个新的文件夹newonnx用来存放新的.onnx模型
#版本说明这里的.onnx模型是在pytorch版本1.6.0~1.10.1直接训练的模型,并且在onnx版本在1.7.0~1.10.0之间
import onnx
model = onnx.load('./onnx/xxx.onnx')
node = model.graph.output[1]
model.graph.output.remove(node)
onnx.save(model, './newonnx/xxx.onnx')

model = onnx.load('./newonnx/xxx.onnx')
for i in range(1,9): #根据自己要删除的节点设置范围
    node = model.graph.output[1]
    model.graph.output.remove(node)
    onnx.save(model, './newonnx/xxx.onnx')

Insérer la description de l'image ici
Après avoir coupé le modèle .onnx via le code ci-dessus et
Insérer la description de l'image ici
obtenu ce nouveau modèle .onnx, vous pouvez exécuter l'API correspondante de rknn sur Linux local pour convertir le modèle .onnx en modèle .rknn, puis utiliser le modèle .rknn pour l'inférence. sur le tableau.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44236302/article/details/133083237
conseillé
Classement