Guide d'implémentation de YOLOv5 avec TensorRT et DeepStream sur Jetson Nano

Introduction

Les algorithmes de détection d'objets ont connu un essor considérable depuis l'introduction des algorithmes YOLO. Grâce aux recherches continues des développeurs du monde entier, ces algorithmes évoluent rapidement avec des performances toujours améliorées. Actuellement, ces méthodes offrent une excellente capacité de traitement en temps réel. Combinées à la maturité des technologies de traitement d'images, les solutions YOLO sont largement adoptées dans le domaine de la détection d'objets. Cependant, lorsque l'on tente de déployer directement des modèles entraînés sur des plateformes embarquées, les résultats de détection sont souvent inférieurs aux attentes. Ce guide détaillera comment améliorer la vitesse de détection YOLO sur des plateformes embarquées.

Installation de Torch et TorchVision

1. Téléchargement du package torch-1.8.0-cp36-cp36m-linux_aarch64.whl

Méthode 1 : Téléchargement depuis le site officiel

Méthode 2 : Téléchargement depuis Baidu Netdisk, code d'extraction : 9g88

Dans le terminal, entrez les commandes suivantes :

sudo apt-get install python3-pip libopenblas-base libopenmpi-dev 
pip3 install Cython
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl    # Remplacez par votre propre chemin vers le fichier .whl
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev

2. Installation de la version correspondante de TorchVision

git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
python3 setup.py install --user

Configuration de l'environnement YOLOv5

git clone https://github.com/ultralytics/yolov5.git
python3 -m pip install --upgrade pip 
cd yolov5
pip3 install -r requirements.txt -i https://mirror.baidu.com/pypi/sample

Une fois l'environnement configuré, effectuez une première inférence qui téléchargera le modèle yolov5.pt :

python3 detect.py

Accélération de l'inférence avec TensorRT

1. Clonage du projet TensorRT

git clone https://github.com/wang-xinyu/tensorrtx.git

2. Conversion du fichier .pt en fichier .wts

cd tensorrtx
cp yolov5/gen_wts.py ~/yolov5
cd ~/yolov5
python3 gen_wts.py yolov5s.pt 

3. Génération du fichier .engine et exécution de la détection

cd ~/tensorrtx/yolov5
mkdir build && cd build
mv ~/yolov5/yolov5s.wts ./
cmake .. 
./yolov5 -s yolov5s.wts yolov5s.engine s # La génération du fichier engine prend du temps
./yolov5 -d yolov5s.engine ../samples    # Les résultats d'inférence sont sauvegardés dans le dossier samples

Installation de DeepStream & détection vidéo avec caméra CSI YOLOv5

1. Téléchargement de DeepStream

Lien de téléchargement disponible sur le site officiel de NVIDIA

2. Installation des dépendances

sudo apt install \
libssl1.0.0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4=2.11-1 \
libgstrtspserver-1.0-dev

3. Installation de DeepStream

git clone https://gitee.com/mirrorgit/librdkafka
cd librdkafka
git reset --hard 7101c2310341ab3f4675fc565f64f0967e135a6a
./configure
make -j4
sudo make install
sudo mkdir -p /opt/nvidia/deepstream/deepstream-5.1/lib
sudo cp /usr/local/lib/librdkafka* /opt/nvidia/deepstream/deepstream-5.1/lib

4. Exécution des exemples officiels

cd /opt/nvidia/deepstream/deepstream-5.1/samples/configs/deepstream-app/
deepstream-app -c source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt 

Exécute la détection vidéo sur 8 canaux avec un débit moyen de 28 images par seconde.

Détection avec YOLOv5 + TensorRT + DeepStream

1. Téléchargement de Yolov5-in-DeepStream

git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git

Le dossier Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo manque les fichiers yolo.o et yoloPlugins.o qui doivent être ajoutés manuellement.

2. Ajout des étiquettes au fichier téléchargé

cd Yolov5-in-Deepstream-5.0/Deepstream 5.0
cp ~/darknet/data/coco.names ./labels.txt

3. Modification de config_infer_primary_yoloV5.txt

Modifiez le fichier config_infer_primary_yoloV5.txt selon vos besoins spécifiques.

4. Copie des fichiers .engine et libmyplugins.so dans le dossier Deepstream

cp ~/tensorrtx/yolov5/build/yolov5s.engine ./ # Copiez le fichier moteur généré précédemment dans le dossier actuel
cp ~/tensorrtx/yolov5/build/libmyplugins.so ./

5. Génération du fichier libnvdsinfer_custom_impl_Yolo.so

cd nvdsinfer_custom_impl_Yolo
make -j 

6. Exécution de DeepStream accéléré pour YOLOv5

cd .. 
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt 

Si cette étape échoue, vérifiez le chemin vidéo dans [source0] du fichier deepstream_app_config_yoloV5.txt. Le chemin par défaut est : /opt/nvidia/deepstream/deepstream-5.1/samples/configs/deepstream-app/

7. Détection avec caméra CSI

Modifiez le fichier deepstream_app_config_yoloV5.txt, commentez la section [source0] et ajoutez le contenu suivant :

[source1]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP 5=CSI
type=5
camera-csi-sensor-id=1
camera-width=1280
camera-height=720
camera-fps-n=30
camera-fps-d=1

camera-csi-sensor-id indique quel caméra CSI activer. Non spécifié, il utilise généralement la caméra CSI 0 par défaut.

Problèmes potentiels lors de l'installation

Pour résoudre la plupart des problèmes rencontrés lors de l'installation, se référer aux ressources communautaires et documentation officielle de NVIDIA concernant l'utilisation de YOLOv5 avec DeepStream et TensorRT sur les plateformes Jetson.

Conclusion

Ce guide a présenté une méthode pour accélérer les modèles YOLO en utilisant conjointement TensorRT et Deepstream. Pour utiliser vos propres modèles, assurez-vous que la version YOLO est compatible avec la version TensorRT, sinon la génération du fichier moteur échouera. Il est également nécessaire de modifier le fichier tensorrtx/yolov5/yololayer.h avec static constexpr int CLASS\_NUM = num, où num correspond au nombre d'obejts que votre modèle doit détecter. En modifient le fichier config_infer_primary_yoloV5.txt, vous pouvez sélectionner le fichier moteur et le fichier d'étiquettes, tandis que l'ajout/suppression de sections [source] dans deepstream_app_config_yoloV5.txt permet de choisir le mode de détection.

Étiquettes: jetson nano YOLOv5 TensorRT deepstream vision embarquée

Publié le 7 juillet à 21h24