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.