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

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

description

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 - PowerPoint PPT Presentation

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ?

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

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)

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

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 :

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

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

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

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

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

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