1 / 23

Traitement de flux vidéo sur GPU (Processeur graphique)

Traitement de flux vidéo sur GPU (Processeur graphique). Stage au laboratoire L2S Supelec. «  On ne connaît que les choses que l’on apprivoise.  » Antoine de Saint-Exupéry. Alexandre Frizac. Traitement de flux vidéo sur GPU (Processeur graphique). Contexte

jerome
Télécharger la présentation

Traitement de flux vidéo sur GPU (Processeur graphique)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Traitement de flux vidéo sur GPU (Processeur graphique) • Contexte • 1.1 Objectif : Traiter un flux vidéo • 1.2 Convolution • 1.3 GPU : Graphic Processing Unit • 1.4 Situation initiale • Optimiser 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 Alexandre Frizac

  3. 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 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 Sur CPU : Impossible de traiter un flux vidéo haute-résolution en temps réel Sur GPU : Grâce à l’amélioration précédente, on peut envisager de traiter un flux vidéo HD en temps réel Alexandre Frizac

  4. 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 Alexandre Frizac

  5. Traitement de flux vidéo sur GPU (Processeur graphique) Contexte Optimiser les transferts entre PC et GPU Application sur une caméra HD Convolution Convolution séparée : Détection de contours Convolution avec noyau classique (Taille images en pixels)² x (Taille noyau)² Convolution avec noyau séparée (Taille images en pixels)² x 2(Taille noyau) Alexandre Frizac

  6. Traitement de flux vidéo sur GPU (Processeur graphique) Contexte Optimiser les transferts entre PC et GPU Application sur une caméra HD GPU : GraphicProcessing Unit CPU GPU Représentation simplifiée des composants • Pour 100 images 4096*4096 avec un kernel 7*7 : • Version CPU : 5196 ms • Version GPU : 41 ms Alexandre Frizac

  7. Traitement de flux vidéo sur GPU (Processeur graphique) Contexte Optimiser les transferts entre PC et GPU Application sur une caméra HD GPU : GraphicProcessing Unit Puissance comparée des CPU/GPU en GFLOPS par seconde Alexandre Frizac

  8. Traitement de flux vidéo sur GPU (Processeur graphique) Contexte Optimiser les transferts entre PC et GPU Application sur une caméra HD GPU : GraphicProcessing Unit Avantage au GPU 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 parfaitementparallélisable sur GPU Alexandre Frizac

  9. 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 Accélérer une convolution … Pour traiter 100 images 2048*2048 pixels avec un kernel 7*7 • Optimisations précédentes : • Convolution séparée • Accéléré sur GPU • Avec utilisation de la mémoire shared sur la puce du GPU Une version CPU pour comparaison : 154 863 ms, soit 0,646 images par seconde Une version GPU optimisée au niveau calcul : 726 ms, soit 137,7 ips Soit moins que 25 ips pour avoir une image fluide => Les transferts mémoires entre pc et GPU, goulot d’étranglement. Alexandre Frizac

  10. 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 Alexandre Frizac

  11. 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 Pour 100 images convoluant avec un kernel 7*7 60% du temps passé à effectuer des copies Il existe un moyen de faire des copies tout en calculant : En utilisant les streams Dans quelles conditions ce gain est intéressant ? Alexandre Frizac

  12. 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 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) Alexandre Frizac

  13. 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 d’un stream : Destruction d’un stream Utilisation de cudaMemcpyAsync au lieu de cudaMemcpy Rajout de deux nouvelles variables lors de l’appel d’un kernel Alexandre Frizac

  14. Traitement de flux vidéo sur GPU (Processeur graphique) Contexte Optimiser les transferts entre PC et GPU Application sur une caméra HD Gainobtenu Accélération par rapport à la version synchrone (Sans streams) 100 images, kernel 7*7 Alexandre Frizac

  15. Traitement de flux vidéo sur GPU (Processeur graphique) Contexte Optimiser les transferts entre PC et GPU Application sur une caméra HD Facteur d’accélération obtenu par rapport à la version CPU Gainobtenu • Pour 100 images • Avec un Kernel 7*7 • Sur une Tesla C2050 Trois streams : Idéal dans de nombreux cas Gain performances : x2 voir x3 Nombre de streams Alexandre Frizac

  16. 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 OpenCV 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 Alexandre Frizac

  17. 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 OpenCV Affichage d’une vidéo (sans traitement) Code des anciennes versions compatibles Source : wikiopencv Alexandre Frizac

  18. 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 l’acquisition et l’affichage d’image provenant de la webcam Alexandre Frizac

  19. 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 OpenCV Utilisation des fonctions intégrées d’OpenCV : Code C++ pour effectuer une détection de contours grâce à Sobel Fonctions CPU dans un premier temps Détection de contours sur CPU Contours d’une image (OpenCV) Alexandre Frizac

  20. 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 Version Matlab : Code Matlab pour détection contours Source : Projet S4 2011 Alexandre Frizac

  21. 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 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 Travaux en cours. Alexandre Frizac

  22. 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 Alexandre Frizac

  23. Traitement de flux vidéo sur GPU (Processeur graphique) Sitographie Nvidia Cuda Library • http://developer.download.nvidia.com/compute/cuda/2_3/toolkit/docs/online/modules.html Wiki OpenCV : • http://opencv.willowgarage.com/documentation/cpp/index.html 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 Alexandre Frizac

More Related