Traitement de flux vidéo sur Traitement de flux vidéo sur GPUGPU
(Processeur graphique)(Processeur graphique)
« On ne connaît que les choses que l’on apprivoise. »
Antoine de Saint-Exupéry
Alexandre Frizaclundi 24 avril 2023
Stage au laboratoire L2SSupelec
lundi 24 avril 2023 2Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
1 Contexte1.1 Objectif : Traiter un flux vidéo
1.2 Convolution 1.3 GPU : Graphic Processing Unit1.4 Situation initiale
2 Optimiser les transferts entre PC et GPU 2.1 Programmer avec Cuda2.2 Différences entre synchrone ou asynchrone2.3 Optimiser grâce aux streams2.4 Gain obtenu
3 Application sur une caméra HD3.1 Acquisition des images3.2 Traitement du flux vidéo sur CPU3.3 Convolution sur GPU
lundi 24 avril 2023 3Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Objectif : Traiter un flux vidéo
Grâce à l’amélioration précédente, on peut envisager de traiter un flux vidéo HD en temps réel
Sur CPU : Impossible de traiter un flux vidéo haute-résolution en temps réel
Sur GPU :
Traitement d’un flux vidéo haute-définition (HD) en temps réel sur GPU
Traitement d’un flux vidéo haute-définition
lundi 24 avril 2023 4Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Convolution
Noyau de convolution
Pixel source + Pixels voisins
Pixel résultat
Convolution : Somme de produit
lundi 24 avril 2023 5Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
(Taille images en pixels)² x (Taille noyau)²Convolution avec noyau classique
(Taille images en pixels)² x 2(Taille noyau)Convolution avec noyau séparée
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Convolution
Convolution séparée :
Détection de contours
lundi 24 avril 2023 6Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
GPU : Graphic Processing Unit
GPUCPU
Représentation simplifiée des composants
Pour 100 images 4096*4096 avec un kernel 7*7 :• Version CPU : 5196 ms• Version GPU : 41 ms
lundi 24 avril 2023 7Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
GPU : Graphic Processing Unit
Puissance comparée des CPU/GPU en GFLOPS par seconde
lundi 24 avril 2023 9Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
GPU : Graphic Processing Unit
Le GPU est efficace sur des calculs indépendants
Chaque pixel du résultat est une somme de produits indépendantes des autres résultats
La convolution est adaptée et parfaitement parallélisable sur GPU
Avantage au GPU
lundi 24 avril 2023 10Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Situation Initiale
Une version CPU pour comparaison : 154 863 ms, soit 0,646 images par secondeUne version GPU optimisée au niveau calcul : 726 ms, soit 137,7 ips
Pour traiter 100 images 2048*2048 pixels avec un kernel 7*7
Accélérer une convolution …
Optimisations précédentes :1. Convolution séparée2. Accéléré sur GPU3. Avec utilisation de la mémoire shared sur la puce du GPU
=> Les transferts mémoires entre pc et GPU, goulot d’étranglement.
Soit moins que 25 ips pour avoir une image fluide
lundi 24 avril 2023 11Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Situation Initiale
Représentation simplifiée des connexions entre PC et Device
Goulot d’étranglementCause : Temps de transfert des images & mode de fonctionnement du programme
lundi 24 avril 2023 12Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Situation Initiale
60% du temps passé à effectuer des copiesPour 100 images convoluant avec un kernel 7*7
Il existe un moyen de faire des copies tout en calculant : En utilisant les streamsDans quelles conditions ce gain est intéressant ?
Différence entre synchrone et asynchroneNombre de cycle nécessaires pour n images :
Synchrone : n * 3 cyclesAsynchrone : n + 2 cycles
lundi 24 avril 2023 13Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Différences entre synchrone ou asynchrone
Synchrone : CPU et GPU s’attendent
Asynchrone : Le CPU n’attend pas le GPU
Pour utiliser le mode asynchrone :
Les streams
lundi 24 avril 2023 14Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Optimiser grâce aux streams
Une nécessité pour le mode asynchroneFonctionne avec de la mémoire non pagineable
Création d’un stream :
Destruction d’un stream
Utilisation de cudaMemcpyAsync au lieu de cudaMemcpyRajout de deux nouvelles variables lors de l’appel d’un kernel
lundi 24 avril 2023 15Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Gain obtenu
100 images, kernel 7*7
Accélération par rapport à la version synchrone (Sans streams)
lundi 24 avril 2023 16Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Gain obtenuFacteur
d’accélération obtenu par rapport à la version CPU
Gain performances :x2 voir x3
Nombre de streams
• Pour 100 images• Avec un Kernel 7*7• Sur une Tesla C2050
Trois streams : Idéal dans de nombreux cas
lundi 24 avril 2023 17Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
OpenCV : Open Source Computer Vision (Version 2.3)Traitement d’images en temps réel
Ouverture d’un flux vidéo simplifiéMais soumis aux problèmes de la librairie
Code ouvrant un flux vidéo et changeant sa résolution
Source : wikiopencv
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Acquisition des imagesOpenCV
lundi 24 avril 2023 18Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Acquisition des images
Source : wikiopencv
Affichage d’une vidéo (sans traitement)
Code des anciennes versions compatibles
OpenCV
lundi 24 avril 2023 19Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Acquisition des imagesMatlab
Utilisation de la toolbox ‘Image Acquisition’
Code Matlab permettant l’acquisition et l’affichage d’image provenant de la webcam
lundi 24 avril 2023 20Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Traitement du flux vidéo sur CPU
Fonctions CPU dans un premier tempsDétection de contours sur CPU
OpenCV
Utilisation des fonctions intégrées d’OpenCV :
Code C++ pour effectuer une détection de contours grâce à Sobel
Contours d’une image (OpenCV)
lundi 24 avril 2023 21Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Traitement du flux vidéo sur CPUMatlab
Code Matlab pour détection contours
Source : Projet S4 2011
Version Matlab :
lundi 24 avril 2023 22Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte Optimiser les transferts entre PC et GPU
Application sur une caméra HD
Convolution sur GPU
Travaux en cours.
Retard tant sur la version Matlab que sur la version OpenCV
Solutions possibles :• Utilisation des ‘mexs functions’ pour Matlab• Correction des problèmes de librairie OpenCV
lundi 24 avril 2023 23Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Bilan
• Accélération facteur 2 voir 3• Traitement sur une webcam (OpenCV/Matlab)
Bilan personnel :• Programmation GPU (Cuda et C++)• Utilisation (et installation) d’une librairie externe : OpenCV• Utilisation d’un environnement Linux (Red Hat, puis Ubuntu)• Programmation sous Linux, sans IDE
Perspective
• Finaliser implémentation Matlab/OpenCV• Algorithme itératif• Multi-GPU
lundi 24 avril 2023 24Alexandre Frizac
Traitement de flux vidéo sur GPU (Processeur graphique)
Sitographie
• http://opencv.willowgarage.com/documentation/cpp/index.htmlWiki OpenCV :
• http://developer.download.nvidia.com/compute/cuda/2_3/toolkit/docs/online/modules.htmlNvidia Cuda Library
Rapport de Benoît Pencrec'h• http://web1.lss.supelec.fr/perso/gac_nicolas/encadrements/stage_pencrech_L2S_2010.pdf
Stage IUT au L2S - 2010