Télécharger la présentation
Publié parBarbe Lenoir Modifié depuis plus de 10 années
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 lundi 27 mars 2017 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 lundi 27 mars 2017 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 lundi 27 mars 2017 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 lundi 27 mars 2017 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 (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 lundi 27 mars 2017 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 : Graphic Processing Unit GPU CPU 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 27 mars 2017 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 : Graphic Processing Unit Puissance comparée des CPU/GPU en GFLOPS par seconde lundi 27 mars 2017 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 : Graphic Processing Unit Programmer avec CUDA : 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 d’un IDE lundi 27 mars 2017 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 GPU : Graphic Processing 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 parfaitement parallélisable sur GPU lundi 27 mars 2017 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 Accélérer une convolution … 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 Soit moins que 25 ips pour avoir une image fluide Une version CPU pour comparaison : ms, soit 0,646 images par seconde Une version GPU optimisée au niveau calcul : ms, soit 137,7 ips Pour traiter 100 images 2048*2048 pixels avec un kernel 7*7 => Les transferts mémoires entre pc et GPU, goulot d’étranglement. lundi 27 mars 2017 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 Représentation simplifiée des connexions entre PC et Device Goulot d’étranglement Cause : Temps de transfert des images & mode de fonctionnement du programme lundi 27 mars 2017 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 Situation Initiale Pour 100 images convoluant avec un kernel 7*7 Les temps de transferts sont la clé 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 ? lundi 27 mars 2017 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 Différences entre synchrone ou asynchrone 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) Synchrone : CPU et GPU s’attendent Asynchrone : Le CPU n’attend pas le GPU Pour utiliser le mode asynchrone : Les streams lundi 27 mars 2017 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 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 : Utilisation de cudaMemcpyAsync au lieu de cudaMemcpy Rajout de deux nouvelles variables lors de l’appel d’un kernel Destruction d’un stream lundi 27 mars 2017 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 Gain obtenu Accélération par rapport à la version synchrone (Sans streams) 100 images, kernel 7*7 lundi 27 mars 2017 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 Gain obtenu Facteur d’accélération obtenu par rapport à la version CPU 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 lundi 27 mars 2017 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 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 lundi 27 mars 2017 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 OpenCV Affichage d’une vidéo (sans traitement) Code des anciennes versions compatibles Source : wikiopencv lundi 27 mars 2017 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 Acquisition des images Matlab Utilisation de la toolbox ‘Image Acquisition’ Code Matlab permettant l’acquisition et l’affichage d’image provenant de la webcam lundi 27 mars 2017 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 OpenCV Fonctions CPU dans un premier temps Détection de contours sur CPU 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 27 mars 2017 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 Traitement du flux vidéo sur CPU Matlab Version Matlab : Code Matlab pour détection contours Source : Projet S4 2011 lundi 27 mars 2017 Alexandre Frizac
22
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. lundi 27 mars 2017 Alexandre Frizac
23
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 27 mars 2017 Alexandre Frizac
24
Traitement de flux vidéo sur GPU (Processeur graphique)
Sitographie Nvidia Cuda Library Wiki OpenCV : Rapport de Benoît Pencrec'h Stage IUT au L2S lundi 27 mars 2017 Alexandre Frizac
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.