Traitement de flux vidéo sur GPU (processeurs graphiques)

Download Report

Transcript Traitement de flux vidéo sur GPU (processeurs graphiques)

Traitement de flux vidéo sur GPU
(Processeur graphique)
Stage au laboratoire L2S
Supelec
mercredi 8 avril 2015
« 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)
1 Contexte
1.1 Objectif : Traiter un flux vidéo
1.2 Convolution
1.3 GPU : Graphic Processing Unit
1.4 Situation initiale
2 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
mercredi 8 avril 2015
Alexandre Frizac
2
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
mercredi 8 avril 2015
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
Convolution
Noyau de
convolution
Pixel source +
Pixels voisins
Pixel résultat
Convolution : Somme de produit
mercredi 8 avril 2015
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
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)
mercredi 8 avril 2015
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
GPU : Graphic Processing 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
mercredi 8 avril 2015
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
Puissance comparée des CPU/GPU en GFLOPS par seconde
mercredi 8 avril 2015
Alexandre Frizac
7
Traitement de flux vidéo sur GPU (Processeur graphique)
Optimiser les transferts entre PC
et GPU
Contexte
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
mercredi 8 avril 2015
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 …
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
Soit moins que 25 ips pour
avoir une image fluide
Pour traiter 100 images 2048*2048 pixels avec un kernel 7*7
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
=> Les transferts mémoires entre pc et GPU, goulot d’étranglement.
mercredi 8 avril 2015
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
mercredi 8 avril 2015
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 ?
mercredi 8 avril 2015
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
Dif
Nombre de cycle néc
Synchrone : n * 3
Asynchrone : n + 2
mercredi 8 avril 2015
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 :
Utilisation de cudaMemcpyAsync au lieu de cudaMemcpy
Rajout de deux nouvelles variables lors de l’appel d’un kernel
Destruction d’un stream
mercredi 8 avril 2015
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
Gain obtenu
Accélération par rapport à la version synchrone (Sans streams)
100 images, kernel 7*7
mercredi 8 avril 2015
Alexandre Frizac
15
Traitement de flux vidéo sur GPU (Processeur graphique)
Contexte
Optimiser les transferts entre PC
et GPU
Facteur d’accélération
obtenu par rapport à la
version CPU
Application sur une caméra HD
Gain obtenu
• Pour 100 images
• Avec un Kernel 7*7
• Sur une Tesla C2050
Trois streams : Idéal dans de
nombreux cas
Nombre de streams
Gain performances :
x2 voir x3
mercredi 8 avril 2015
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
mercredi 8 avril 2015
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
mercredi 8 avril 2015
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
mercredi 8 avril 2015
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
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)
mercredi 8 avril 2015
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
mercredi 8 avril 2015
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.
mercredi 8 avril 2015
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
mercredi 8 avril 2015
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
mercredi 8 avril 2015
Alexandre Frizac
24