1. Préparation de l'environnement et obtention du modèle
Avant de déployer YOLOv13 sur le RK3588, il est nécessaire de configurer l'environnement de développement et d'obtenir le code source du modèle. Il est recommandé d'utiliser un système Ubuntu 20.04 ou 22.04 pour une compatibilité optimale avec la chaîne d'outils RKNN.
Commencez par installer les dépendances requises :
sudo apt update
sudo apt install python3-pip python3-venv git cmake
Créez ensuite un environnement de travail dédié :
mkdir mon_projet_yolov13 && cd mon_projet_yolov13
python3 -m venv env_rknn
source env_rknn/bin/activate
Récupérez le dépôt officiel de YOLOv13 :
git clone https://github.com/iMoonLab/yolov13.git
cd yolov13
pip install -r requirements.txt
Pour des tests de performance sur le RK3588, les versions allégées yolov13n et yolov13s offrent le meilleur compromis. Le modèle yolov13m peut être envisagé pour une précision supérieure, au prix d'une vitesse d'inférence réduite.
Note : L'utilisation d'un environnement virtuel est fortement recommandée pour isoler les dépendances Python et éviter les conflits avec d'autres projets du système.
2. Exportation du modèle ONNX et optimisations
L'exportation vers le format ONNX est une étape critique. Des modifications sont nécessaires par rapport à la structure par défaut de YOLOv13.
Premièrement, ajustez la tête de détection dans le fichier yolov13-main/ultralytics/nn/modules/head.py, autour de la ligne 64 :
# Code original
return torch.cat([xi.reshape(bs, self.no, -1) for xi in x], 2)
# Code modifié
resultats = []
for idx in range(self.nl):
feature_conv2 = self.cv2[idx](x[idx])
feature_conv3 = self.cv3[idx](x[idx])
resultats.append(feature_conv2)
resultats.append(feature_conv3)
return resultats
Ensuite, dans le fichier yolov13-main/ultralytics/engine/model.py, ajoutez le code d'exportation près de la ligne 304 :
import torch
entree_simulee = torch.randn(1, 3, 640, 640)
noms_entrees = ["image_entree"]
noms_sorties = ["sortie_1", "sortie_2", "sortie_3", "sortie_4", "sortie_5", "sortie_6"]
torch.onnx.export(self.model, entree_simulee, "modele_yolov13n.onnx",
verbose=False, input_names=noms_entrees,
output_names=noms_sorties, opset_version=11)
print("Exportation vers ONNX terminée avec succès.")
Exécutez la commande d'exportation standard. Des avertissements peuvent apparaître sans impacter le résultat :
from ultralytics import YOLO
modele = YOLO(model='yolov13n.pt')
resultats = modele(task='detect', source='./image_test.jpg', save=True)
Le modèle ONNX généré peut être simplifié pour réduire sa complexité à l'aide de l'outil onnx-simplifier :
pip install onnx-simplifier
python -m onnxsim modele_yolov13n.onnx modele_yolov13n_optimise.onnx