La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Traitement de flux vidéo sur GPU (Processeur graphique) « On ne connaît que les choses que lon apprivoise. » Antoine de Saint-Exupéry Alexandre Frizac.

Présentations similaires


Présentation au sujet: "Traitement de flux vidéo sur GPU (Processeur graphique) « On ne connaît que les choses que lon apprivoise. » Antoine de Saint-Exupéry Alexandre Frizac."— Transcription de la présentation:

1 Traitement de flux vidéo sur GPU (Processeur graphique) « On ne connaît que les choses que lon apprivoise. » Antoine de Saint-Exupéry Alexandre Frizac dimanche 9 mars 2014 Stage au laboratoire L2S Supelec

2 dimanche 9 mars Alexandre Frizac Traitement de flux vidéo sur GPU (Processeur graphique) 1Contexte 1.1 Objectif : Traiter un flux vidéo 1.2 Convolution 1.3 GPU : Graphic Processing Unit 1.4 Situation initiale 2Optimiser les transferts entre PC et GPU 2.1 Programmer avec Cuda 2.2 Différences entre synchrone ou asynchrone 2.3 Optimiser grâce aux streams 2.4 Gain obtenu 3 Application sur une caméra HD 3.1 Acquisition des images 3.2 Traitement du flux vidéo sur CPU 3.3 Convolution sur GPU

3 dimanche 9 mars Alexandre 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 à lamé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 dun flux vidéo haute-définition (HD) en temps réel sur GPU Traitement dun flux vidéo haute-définition

4 dimanche 9 mars Alexandre 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

5 dimanche 9 mars Alexandre 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

6 dimanche 9 mars Alexandre 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

7 dimanche 9 mars Alexandre 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

8 dimanche 9 mars Alexandre Frizac Traitement de flux vidéo sur GPU (Processeur graphique) Utilisation du langage Cuda : Cuda : Compute Unified Device Architecture Permet de lancer des kernels (fonctions) en parallèle très simplement Extension du C (compilée grâce à nvcc) Disponible depuis 2007 Utilisation possible dun IDE Contexte Optimiser les transferts entre PC et GPU Application sur une caméra HD GPU : Graphic Processing Unit Programmer avec CUDA :

9 dimanche 9 mars Alexandre 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

10 dimanche 9 mars Alexandre 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: ms, soit 0,646 images par seconde Une 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ée 2. Accéléré sur GPU 3. 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

11 dimanche 9 mars Alexandre 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étranglement Cause : Temps de transfert des images & mode de fonctionnement du programme

12 dimanche 9 mars Alexandre 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 copies Pour 100 images convoluant avec un kernel 7*7 Il existe un moyen de faire des copies tout en calculant : En utilisant les streams Dans quelles conditions ce gain est intéressant ?

13 Différence entre synchrone et asynchrone Nombre de cycle nécessaires pour n images : Synchrone : n * 3 cycles Asynchrone : n + 2 cycles (Cas ou Tup = Tkernel = Tdown) dimanche 9 mars Alexandre 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 sattendent Asynchrone : Le CPU nattend pas le GPU Pour utiliser le mode asynchrone : Les streams

14 dimanche 9 mars Alexandre 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 asynchrone Fonctionne avec de la mémoire non pagineable Création dun stream : Destruction dun stream Utilisation de cudaMemcpyAsync au lieu de cudaMemcpy Rajout de deux nouvelles variables lors de lappel dun kernel

15 dimanche 9 mars Alexandre 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)

16 dimanche 9 mars Alexandre 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 Facteur daccé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

17 dimanche 9 mars Alexandre Frizac Traitement de flux vidéo sur GPU (Processeur graphique) OpenCV : Open Source Computer Vision (Version 2.3) Traitement dimages en temps réel Ouverture dun 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 images OpenCV

18 dimanche 9 mars Alexandre 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 dune vidéo (sans traitement) Code des anciennes versions compatibles OpenCV

19 dimanche 9 mars Alexandre 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 Matlab Utilisation de la toolbox Image Acquisition Code Matlab permettant lacquisition et laffichage dimage provenant de la webcam

20 dimanche 9 mars Alexandre 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 temps Détection de contours sur CPU OpenCV Utilisation des fonctions intégrées dOpenCV : Code C++ pour effectuer une détection de contours grâce à Sobel Contours dune image (OpenCV)

21 dimanche 9 mars Alexandre 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 Matlab Code Matlab pour détection contours Source : Projet S Version Matlab :

22 dimanche 9 mars Alexandre 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

23 dimanche 9 mars Alexandre 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) dune librairie externe : OpenCV Utilisation dun environnement Linux (Red Hat, puis Ubuntu) Programmation sous Linux, sans IDE Perspective Finaliser implémentation Matlab/OpenCV Algorithme itératif Multi-GPU

24 dimanche 9 mars Alexandre Frizac Traitement de flux vidéo sur GPU (Processeur graphique) Sitographie Wiki OpenCV : Nvidia Cuda Library Rapport de Benoît Pencrec'h Stage IUT au L2S


Télécharger ppt "Traitement de flux vidéo sur GPU (Processeur graphique) « On ne connaît que les choses que lon apprivoise. » Antoine de Saint-Exupéry Alexandre Frizac."

Présentations similaires


Annonces Google