]> AND Private Git Repository - these_gilles.git/blobdiff - PRESENTATION/diapos.rst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
final
[these_gilles.git] / PRESENTATION / diapos.rst
index adad7b43e117721554a2a9769ed1c31ea49e66c1..f4a6af8fd44b45d5ba7509730cfc4310f3c06855 100644 (file)
 TRAITEMENT D'IMAGES SUR GPU 
 ===========================
 
-Algorithmes parrallèles rapides pour le filtrage et la segmentation des images bruitées sur GPU.
+Algorithmes rapides pour le filtrage et la segmentation des images bruitées sur GPU.
 ------------------------------------------------------------------------------------------------
 
 Gilles Perrot
 +++++++++++++
-
+17 avril 2014
++++++++++++++
 Université de Franche-Comté, Institut FEMTO-ST 
 +++++++++++++++++++++++++++++++++++++++++++++++
 Département DISC - équipe AND
-+++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++
+Direction  : R. Couturier & S. Domas
+++++++++++++++++++++++++++++++++++++
 
 ----
 
-PLAN DE LA PRÉSENTATION
-=======================
-
-#. Introduction - cadre des travaux
+FILTRAGE
+========
 
-   - Les GPUs (Graphical Processing Units)
-   - Généralités sur le traitement d'image. Nos axes de recherche.
+Réduire le bruit.
 
-#. La segmentation des images
-
-   - Généralités. Travaux de référence.
-   - Parallélisation GPU d'un algorithme de segmentation de type *snake*.
-
-#. Le filtrage des images
-
-   - Généralités. Travaux de référence. 
-   - Optimisation pour GPU des filtres médian et de convolution.
-   - Conception d'un algorithme parallèle de réduction de bruit par recherche des lignes de niveaux.
-
-#. Synthèse et conclusion. 
-
-----
+.. image:: img/ex-filtrage.png
+   :width: 800px
 
-INTRODUCTION
-============
+.. note::
+ * les bruits dégradent l'image de la scène idéale et peuvent en fausser ou compliquer l'interprétation.
+ *  Les capteurs numériques et les conditions d'acquisition sont à l'origine de perturbations (bruits).
+ * Les hautes résolutions sont souvent obtenues à faible flux de photons, dont les variations engendrent du bruit. 
 
 ----
 
-INTRODUCTION
+SEGMENTATION
 ============
-Les GPUs ou *Processeurs graphiques*.
--------------------------------------
-
-.. image:: img/gpucpu1.png
-   :height: 400px
-
-
-* Processeurs *classiques* **CPU** : exécution **séquentielle** 
-
-  - Quelques unités de calcul ( les c |oe| urs).
-
-* Processeurs *graphiques* **GPU** : exécution **massivement parallèle**
-
-  - Des centaines, voire millier, d'unités de calcul, regroupées en quelques SMs (*Streaming Multiprocessors*).
-
-----  
-
-INTRODUCTION
-============
-Les GPUs ou *Processeurs graphiques*.
--------------------------------------
 
-* La multiplication des c |oe| urs dans les GPUs se fait au détriment des fonctions de contrôle et de cache.
-* Seule la mémoire *globale* est accessible par l'ensemble des fils d'exécution (les *threads*) et ses performances sont faibles.
-* L'accès efficace aux différents types de mémoires est contraignant.
-* Les échanges de données entre le GPU et son hôte CPU sont pénalisants.
-* Il est important de concevoir un partage équilibré des ressources au sein de chaque SM, pour permettre un niveau de parallélisme élevé, et donc d'envisager de bonnes performances.
-* La mise au point n'est pas aisée lorsque des centaines de milliers de threads concourent à l'exécution d'une tâche.
+Distinguer les zones statistiquement homogènes d'une image bruitée.
 
-----   
-
-INTRODUCTION
-============
-Le traitement des images
-------------------------
-
-* Beaucoup d'applications sont basées sur l'analyse ou la visualisation d'images numériques.    
-* Les capteurs numériques et les conditions d'acquisition sont à l'origine de perturbations (bruits) qui dégradent l'image de la scène idéale et peuvent en fausser ou compliquer l'interprétation.
-* La réduction de bruit demeure un thème important, car les hautes résolutions sont souvent obtenues à faible flux de photons, dont les variations engendrent du bruit. 
-* La segmentation représente aussi un enjeu crucial, mais aucun algorithme universel n'a encore été élaboré.
+.. image:: img/seg2.png
+   :width: 800px
 
-.. note:: 
+.. note::
 
  * on recense plus de 4000 algorithmes de segmentation
  * La segmentation intervient dans beaucoup d'applications : du tracking à la détection ou à l'extraction de caractéristiques diverses.
@@ -124,148 +80,129 @@ Le traitement des images
 
 ----
 
-INTRODUCTION
+SEGMENTATION
 ============
-Le traitement des images
-------------------------
+Deux approches
+--------------
 
-* L'accroissement des capacités de calcul a suivi l'augmentation des résolutions d'images.
-* Les traitements envisagés sur les images sont de plus en plus évolués ( traitements de haut niveau ) et requièrent souvent un temps de calcul accru.
-* L'architecture parallèle particulière des GPUs a permis d'améliorer considérablement les performances de certaines classes d'algorithme et fait espérer des accélérations importantes pour d'autres.
-**Nos travaux sont une contribution à cette recherche de performance.**
-
-.. note:: 
-
- * La croissance des capacités de calcul des GPUs à été beaucoup plus forte que celle des CPUs.
+.. image:: img/approches.png
+   :width: 800px
 
 ----
 
-INTRODUCTION
-============
-Traitements d'images de haut niveau
------------------------------------
+PLAN DE LA PRÉSENTATION
+=======================
 
-#. **Pré-traiter** et effectuer les traitements de haut niveau sur des images *améliorées*. 
+#. Introduction 
 
-   * permet, *a priori*, de réduire le coût des traitements de haut niveau.
-   * les prétraitements ont eux aussi un coût, en temps de calcul et potentiellement en information.
-#. **Ne pas pré-traiter** et effectuer les traitements de haut niveau sur les images bruitées.
+   - Les GPUs ou *Graphical Processing Units*.
+   - Objectifs.
 
-   * permet de ne pas subir la perte d'information occasionnée par le pré-traitement.
-   * les traitements de haut niveau sont, *a priori*, plus coûteux.  
+#. La segmentation des images
 
+   - Travaux de référence.
+   - Parallélisation GPU d'un algorithme de segmentation de type *snake*.
 
-.. note:: 
+#. Le filtrage des images
+
+   - Travaux de référence. 
+   - Optimisation GPU des filtres médian et de convolution.
+   - Conception d'un algorithme GPU de débruitage par recherche des lignes de niveaux.
 
- Certains algo (LNIV) peuvent être considérés comme pré-traitement ou comme haut-niveau selon le point de vue et la classe d'algorithme.
+#. Conclusion et perspectives 
 
 ----
 
 INTRODUCTION
 ============
+Les GPUs ou *Processeurs graphiques*.
+-------------------------------------
 
-Axes des travaux présentés
---------------------------
-
-
-**Segmentation : accélérer le traitement de haut niveau**
- * La segmentation consiste à identifier des zones homogènes dans une image.   
- * Algorithme de segmentation d'images bruitées (fortement) par contours actifs, appartenant à la classe communément appelée  *snakes*.
-
-**Filtrage : accélérer les pré-traitements**
-
- Réduction de bruit additif gaussien, suivant deux méthodes de conception  :
-
-     * algorithme original, conçu spécifiquement pour GPU, conjointement à son implémentation.
-     * algorithmes existants, où l'effort de conception ne peut porter que sur l'implémentation : filtres médian et de convolution.
+.. image:: img/gpucpu1.png
+   :width: 800px
 
 
-----
+* Processeurs *classiques* **CPU** : exécution **séquentielle** 
 
-INTRODUCTION
-============
+  - Quelques unités de calcul ( les c |oe| urs).
 
-Images traitées
----------------
+* Processeurs *graphiques* **GPU** : exécution **massivement parallèle**
 
-* Nous nous sommes focalisés sur les *images naturelles* :
+  - Des centaines, voire milliers, d'unités de calcul, regroupées en SMs (*Streaming Multiprocessors*).
 
- - réalisées en lumière naturelle, en intérieur aussi bien qu'en extérieur,
- - prises avec un dispositif standard (CMOS, CCD).
+.. note::
 
-* Les traitements que nous présentons ici opèrent sur des images en 
-  niveau de gris (8 ou 16 bits). 
+ * La multiplication des c |oe| urs dans les GPUs se fait au détriment des fonctions de contrôle et de cache.
+ * Seule la mémoire *globale* est accessible par l'ensemble des fils d'exécution (les *threads*) et ses performances sont faibles.
+ * AU sein de la RAM il y a différents canaux vers différents types de mémoires.
+ * L'accès efficace aux mémoires  est contraignant.
+ * Les échanges de données entre le GPU et son hôte CPU sont pénalisants.
+ * Il est important de concevoir un partage équilibré des ressources au sein de chaque SM, pour permettre un niveau de parallélisme  élevé, et donc d'envisager de bonnes performances.
+ * La mise au point n'est pas aisée lorsque des centaines de milliers de threads concourent à l'exécution d'une tâche.
 
-.. note:: 
+ * L'accroissement des capacités de calcul a suivi l'augmentation des résolutions d'images.
+ * Les traitements envisagés sur les images sont de plus en plus évolués ( traitements de haut niveau ) et requièrent souvent un temps de calcul accru.
+ * L'architecture parallèle particulière des GPUs a permis d'améliorer considérablement les performances de certaines classes d'algorithme et fait espérer par ailleurs des accélérations importantes.
 
- Toutefois, la plupart des algorithmes que nous proposons s'étend simplement à d'autres types d'images, comme les images en couleur ou celles issues des imageries ultrasonore ou RADAR à ouverture synthétique.  
 
 ----
 
-LA SEGMENTATION DES IMAGES
-==========================
-Segmentation par contour actif
+INTRODUCTION
+============
 
-----
+Ojectif : accélérer
+-------------------
 
-SEGMENTATION PAR CONTOUR ACTIF 
-==============================
-Introduction
-------------
+**Segmentation**
+ * Algorithme par contours actifs, classe des  *snakes*.
+ * Implémentation CPU optimisée existante. 
+ * Conception de l'implémentation GPU.
 
-* Le domaine médical recèle la quasi totalité des implémentations GPU d'algorithmes de segmentation.
-* Nombre d'entre elles concernent des traitements effectués en 3D par nécessité, où l'emploi du GPU s'impose assez naturellement.
-* La segmentation par contour actif regroupe des méthodes itératives tendant à faire converger, par déformation successive, une courbe paramétrique (contour) selon un critère d'homogénéité pré-établi :
+**Filtrage**
 
- - La classe d'algorithmes la plus implémentée est celle des **level-set**, essentiellement dans sa variante *bande étroite*.
- - La classe des **snakes** n'est implémentée qu'au travers la variante GVF (Gradient Vector Flow).
+     * Filtres médians, filtres de convolution
 
-.. figure:: img/l7-gvf.png
-   :width: 600px
-   
-   À  gauche : Level-set, évolution du contour, en rouge. À droite : visualisation du champ de force d'un *snake* GVF. 
+          - Opérateurs mathématiques,
+          - Conception d'une implémentation optimisée.
 
+     * Filtre par lignes de niveaux 
+        
+         - Conception d'un algorithme dédié GPU.
+         
+  
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
-==============================
-Travaux de référence (level-set)
---------------------------------
-
-L'implémentation de Roberts *et al.*  du *level-set* à *bande étroite* est actuellement la plus performante et parvient à segmenter des images d'IRM 
+SEGMENTATION 
+============
+Travaux de référence
+--------------------
 
- - 3D, de 256x256x256 pixels, sur GTX280, en **11 000 ms**
+**Level-set** ( Roberts *et al.*, 2010) 
 
-.. figure:: img/brain3D.png
-   :width: 800px
+ * Images d'IRM de 256x256x256 pixels (16 millions),
+ * Temps sur GTX280 : **11 s**.
    
-   À  gauche : évolution du contour pour une *tranche* avec, en bleu, les zones actives. À droite : visualisation  en 3D de la segmentation complète. 
+**Snake GVF** (Smistad *et al.*, 2012)
 
-----
+ * Images d'IRM de 256x256x256 pixels (16 millions),
+ * Temps sur C2070 : **7 s**.
 
-SEGMENTATION PAR CONTOUR ACTIF 
-==============================
-Travaux de référence (snake)
-----------------------------
+.. figure:: img/brain3D-gvf.png
+   :width: 600px
 
-* À notre connaissance, aucune publication ne décrit d'implémentation de *snake* polygonal ou de *snake* orienté région.
-* La référence est l'implémentation *snake GVF*  de Smistad *et al.* qui parvient à segmenter des images d'IRM
 
- - 2D, de 512x512 pixels, sur C2070, en **41 ms**.
- - 3D, de 256x256x256 pixels, sur C2070, en **7151 ms**
 
-.. figure:: img/brain3D-gvf.png
-   :width: 600px
-   
-   À  gauche : une image 2D d'IRM. À droite : visualisation  en 3D de la segmentation complète. 
+.. note::
+
+ * Le domaine médical recèle la quasi totalité des implémentations GPU d'algorithmes de segmentation.
+ * Nombre d'entre elles concernent des traitements effectués en 3D par nécessité, où l'emploi du GPU s'impose assez naturellement.
+ * Les algorithmes **level-set** sont les plus implémentés sur GPU :
+ * Les algorithmes **snakes** sont très peu implémentée sur GPU :
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 *Snake* polygonal orienté région (principe)
 -------------------------------------------
@@ -278,35 +215,25 @@ SEGMENTATION PAR CONTOUR ACTIF
 
     * - .. image:: img/snake-modele.png 
                 :width: 350px 
-      - * L'objectif est de déterminer le contour le plus *vraisemblable* (nombre et positions des n |oe| uds).
+      - * Objectif : déterminer le contour le plus *vraisemblable*.
         *  Le critère de vraisemblance généralisée est, dans le cas gaussien :
            
            .. math::
             
               $$GL = \frac{1}{2}\left[ n_B.log\left(\sigma_B^2\right) + n_T.log\left(\sigma_T^2\right)\right]$$        
        
-* Les deux régions, intérieure et extérieure (T et B), sont prises en compte dans l'évaluation du contour. Cela permet d'extraire des formes aux contours mal définis, en raison d'un fort niveau de bruit par exemple. 
-* Les variances :math:`\(\sigma^2\)` doivent être calculées pour chaque état du contour, ce qui est **très coûteux**. 
+* Calcul des variances :math:`\(\sigma^2\)` pour chaque contour :
 
-----
+ * Méthode de Chesnaud *et al.* (1999) : sommes sur le **contour**. 
+ * Implique le **pré-calcul** de 3 images cumulées.
 
-SEGMENTATION PAR CONTOUR ACTIF 
-===============================
-*Snake* polygonal orienté région (principe)
---------------------------------------------
-
-* Chesnaud *et al.* ont montré comment réaliser le calcul des variances par une **sommation 2D** le long du contour, au lieu d'une classique sommation 3D sur la surface des régions concernées.
-* Cette optimisation algorithmique implique de **pré-calculer** les trois images cumulées
-
-  .. math::
-    
-     $$S_1(i,j)=\sum_{x=0}^jx \text{ , }  S_x(i,j)=\sum_{x=0}^jI(i,x) \text{ et  } S_x^2(i,j)=\sum_{x=0}^jI(i,x)^2$$
+.. note::
 
-* Les valeurs des éléments de ces images cumulées permettent de calculer la **contribution** de chaque pixel du contour, puis de chaque segment, aux calculs des variances.
+ * Cela permet d'extraire des formes aux contours mal définis, en raison d'un fort niveau de bruit par exemple. 
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 *Snake* polygonal orienté région (algo CPU)
 --------------------------------------------
@@ -314,15 +241,14 @@ SEGMENTATION PAR CONTOUR ACTIF
 .. image:: img/cochons-it0-it1.png
    :height: 300px
 
-**Itération 1**
 
- #. Le contour initial est rectangulaire ( 4 n |oe| uds )
- #. On déplace successivement les 4 n |oe| uds jusqu'à ce que plus aucun nouveau déplacement ne provoque l'amélioration du critère.
+#. Le contour initial est rectangulaire ( 4 n |oe| uds )
+#. On déplace successivement les 4 n |oe| uds jusqu'à ce que plus aucun nouveau déplacement ne provoque l'amélioration du critère.
 
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 *Snake* polygonal orienté région (algo CPU)
 --------------------------------------------
@@ -330,52 +256,20 @@ SEGMENTATION PAR CONTOUR ACTIF
 .. image:: img/cochons-it21-it22.png
    :height: 300px
 
-**Itération 2**
-
- 3. Ajout de n |oe| uds au milieu des segments suffisamment grands.
- #. On recommence à évaluer les déplacements successifs des n |oe| uds.
-
-----
-
-SEGMENTATION PAR CONTOUR ACTIF 
-===============================
-*Snake* polygonal orienté région (algo CPU)
---------------------------------------------
+.. image:: img/barre-blanche.png
+   :height: 10px
 
 .. image:: img/cochons-it4-it5.png
    :height: 300px
 
-**Itérations 4 et 5**
-
-----
-
-SEGMENTATION PAR CONTOUR ACTIF 
-===============================
-*Snake* polygonal orienté région (algo CPU)
---------------------------------------------
-
-.. figure:: img/im014.png
-   :height: 400px
-
-   Image de 512x512 : contour final de 256 n |oe| uds en 14ms.
-
-* Les résultats de segmentation dépendent des paramètres de la séquence d'optimisation (pas des déplacements, contour initial, seuil d'ajout des n |oe| uds)
-
-----
-
-SEGMENTATION PAR CONTOUR ACTIF 
-===============================
-*Snake* polygonal orienté région (algo CPU)
---------------------------------------------
+.. note:: 
 
-.. figure:: img/snakegpu1.png
-   :height: 400px
+ * CONVERGENCE RAPIDE
 
-   Image de 4000x4000 : contour final de 447 n |oe| uds en 700ms.
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 Parallélisation du *Snake* polygonal sur GPU
 --------------------------------------------
@@ -386,19 +280,19 @@ Identification des fonctions coûteuses
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 Parallélisation du *Snake* polygonal sur GPU
 --------------------------------------------
-Détail de la fonction de calcul du critère GL
+Calcul du critère GL (1 pixel/thread)
 
-.. image:: img/algosnake2b.png
-   :height: 500px
+.. image:: img/algosnake-3etages.png
+   :width: 800px
 
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 Parallélisation du *Snake* polygonal sur GPU
 --------------------------------------------
@@ -412,56 +306,50 @@ Parallélisation du *Snake* polygonal sur GPU
  * Pour éviter les oscillations et *coller* à l'algorithme séquentiel, on distingue les n |oe| uds d'indices pairs et impairs.
  * On évalue **en parallèle** l'ensemble des déplacements éventuels de tous les n |oe| uds de même parité. 
 
-----
-
-SEGMENTATION PAR CONTOUR ACTIF 
-===============================
-Parallélisation du *Snake* polygonal sur GPU
---------------------------------------------
-
-**Structure des données** (n |oe| uds pairs)
 
-.. image:: img/snake-segments-pairs.png
-   :width: 800px
-
-.. note:: 
-
-  * règle 1 thread par pixel
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 Parallélisation du *Snake* polygonal sur GPU
 --------------------------------------------
 
-**Obtention du critère**
+* 1 thread par pixel.
+* Concaténation dans un vecteur de tous les pixels composant l'ensemble des contours évalués. 
+
+  - ex : 2x 256000 éléments à l'étape 1 de l'image 100 MP. 
 
-* Parallélisation :  1 thread par pixel. 
-* Une seule taille de segment : la taille du plus long. 
-* Bourrage avec des threads inactifs pour les segments plus courts.
-* Calcul réalisé en 3 étapes par 3 fonctions parallèles GPU (*kernels*)
+* Sommes des contributions des pixels : opérations de **réduction**.
+  - opérations mal adaptées à l'architecture  GPU,
+  - en mémoire partagée : accélération par rapport au CPU.
 
- #. Calcul des coordonnées des pixels. Lecture des paramètres de chaque pixel dans les images cumulées. Sommes partielles, par bloc, des contributions des segments.  
- #. Calcul final des contributions des segments par sommation des résultats du *kernel* précedent.
- #. Calcul des valeurs du critère pour chaque contour évalué. Sélection du meilleur contour.
+.. note::
 
+ * les réduction consistent à sommer, pour chaque segment les contributions partielles par bloc calculées au 1
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 Parallélisation du *Snake* polygonal sur GPU
 --------------------------------------------
 
-**Propriétés de l'implémentation**
+Points positifs :
 
  * Conservation des données en mémoire GPU. 
- * Les images cumulées sont calculées en parallèle. 
- * Abandon de l'algorithme de Bresenham pour la discretisation des segments. 
- * Trop peu de calculs à effectuer. 
- * Pas de coalescence possible dans les accès à la mémoire globale.
- * Emploi de la mémoire partagée.    
+ * Images cumulées (pré-calculs) effectuées en parallèle. 
+ * Discrétisation des segments en parallèle (1 thread/pixel). 
+ * Respect de l'algorithme original.
+
+Points négatifs :
+
+ * Trop peu de calculs à effectuer.
+ * Segments de tailles et orientations variables : 
+
+   - motifs d'accès à la mémoire globale irréguliers,
+   - nombreux threads inactifs.
  
 .. note::
 
@@ -474,7 +362,7 @@ Parallélisation du *Snake* polygonal sur GPU
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 Parallélisation du *Snake* polygonal sur GPU
 --------------------------------------------
@@ -487,36 +375,39 @@ Parallélisation du *Snake* polygonal sur GPU
 ..
  
 .. image:: img/perfs-snake-img.png
-   :width: 600px
+   :width: 400px
 
 ----
 
-SEGMENTATION PAR CONTOUR ACTIF 
+SEGMENTATION 
 ===============================
 Parallélisation du *Snake* polygonal sur GPU
 --------------------------------------------
 
 **Conclusion**
 
-* Première et seule implémentation à ce jour.
-* Performances intéressantes pour les grandes images. 1OO MP en moins de 0,6 seconde.  
+* Première et seule implémentation connue à ce jour.
+* Performances intéressantes pour les grandes images.
+* Image 10000x10000 en moins de 0,6 seconde.  
+* Emploi non optimal du GPU : réductions, irrégularités.
 * Temps de calcul très dépendant du contenu de l'image.
-* Le GPU n'est pas employé de manière optimale : réductions, threads inactifs, non coalescence.
-* Le GPU apporte un gain important sur les premières itérations, quand les segments sont grands.
-* Initialisation optionnelle par maximum de vraisemblance. Accélération jusqu'à x15 avec de petites cibles.
+* Proposition d'une méthode d'initialisation alternative :
   
-----
+     - Recherche du contour rectangle le plus vraisemblable.  
+     - Accélération jusqu'à x15 avec de petites cibles.
 
-LE FILTRAGE DES IMAGES
-======================
-Filtre médian - Filtres de convolution - Filtre par lignes de niveaux
+**Publication**  
+
+ * *G. Perrot, S. Domas, R. Couturier, and N. Bertaux*. **Gpu implementation of a region based algorithm for large images segmentation.** *In Computer and Information Technology (CIT), 2011 IEEE 11th International Conference on, pages 291–298.*
 
 ----
 
 LE FILTRAGE DES IMAGES
 ======================
-Filtre médian
--------------
+
+  * Filtre médian, 
+  * Filtres de convolution, 
+  * Filtre par recherche des lignes de niveaux.
 
 ----
 
@@ -530,38 +421,39 @@ Filtre médian : principe
 
 La valeur de sortie d'un pixel est la **médiane** des valeurs de son voisinage. 
 
-* Bonne réduction de bruits gaussien et *poivre & sel*
-* Valeurs de sortie appartenant au voisinage.
-* Opération de sélection coûteuse (tri).
+* Bonne réduction du bruit *poivre & sel*.
+* Assez bonne préservation des contours. 
 * Usages fréquents avec des petites fenêtres (de 3x3 à 7x7).
-* Quelques applications avec de grandes fenêtres (au delà de 21x21).
+* Quelques applications avec de grandes fenêtres.
+* Opération de sélection coûteuse (tri).
 
 ----
 
 LE FILTRAGE DES IMAGES
 ======================
-Filtre médian : usage
----------------------
+Filtre médian : exemple
+-----------------------
 
 .. table:: 
 
-   =================================== ======================================== ============================================  
-   .. image:: img/airplane_sap25.png    .. image:: img/airplane_sap25_med5.png   .. image:: img/airplane_sap25_med3_it2.png
-   =================================== ======================================== ============================================   
-   Bruit *poivre & sel* 25%            Médian 5x5                               Médian 3x3 - 2 passes
-   =================================== ======================================== ============================================
+   =================================== ========================================   
+   .. image:: img/airplane_sap25.png    .. image:: img/airplane_sap25_med5.png  
+   =================================== ======================================== 
+   Bruit *poivre & sel* 25%            Médian 5x5                              
+   =================================== ========================================
 
 ----
 
 LE FILTRAGE DES IMAGES
 ======================
-Filtre médian GPU : Travaux de référence
+Filtre médian GPU : travaux de référence
 ----------------------------------------
 
-* Sanchez *et al.* ont proposé le **PCMF** et l'ont comparé, sur C2075, avec les implémentations GPU de référence pour une image 8 bits de 512x512 (débit max. **80 MP/s**) :
+Comparaison des implémentations GPU de référence :
 
- - **ArrayFire**, bibliothèque commerciale, débit max. **185 MP/s**
- - **BVM** parallélisé par Kachelrie |B|, débit max. **110 MP/s** 
+ - **PCMF**, Sanchez *et al.* (2013), débit max. **80 MP/s**,
+ - **ArrayFire**, commerciale (2013), débit max. **185 MP/s**,
+ - **BVM** parallélisé par Chen *et al.* (2009), débit max. **110 MP/s**. 
 
 .. image:: img/compar-median2.png
    :width: 500px 
@@ -578,11 +470,19 @@ LE FILTRAGE DES IMAGES
 Filtre médian GPU : Travaux de référence  
 ----------------------------------------
 
-Emploi de la **mémoire partagée** pour pré-charger les valeurs utiles à chaque bloc de threads.
+Emploi de la **mémoire partagée** (exemple médian 5x5)
+
+.. table:: 
+
+   =================================== ========================== ========================================   
+   .. image:: img/shmem.png            .. image:: img/carreB.png  .. image:: img/halo.png  
+   =================================== ========================== ======================================== 
+  
+
+.. note:: 
+
+ - recouvrement pose problème à cause accès concurrents à la mémoire partagée.
 
-.. image:: img/shmemhalo.png   
-   :width: 800px
 ----
 
 LE FILTRAGE DES IMAGES
@@ -590,12 +490,11 @@ LE FILTRAGE DES IMAGES
 Optimisation du filtre médian GPU  
 ---------------------------------
 
-Transferts des données optimisés
-
- CPU :math:`\(\rightarrow\)` GPU texture :KERNEL:  GPU globale :math:`\(\rightarrow\)` CPU non paginée
+.. image:: img/CPU-GPU-memcpy.png
+   :width: 650px
 
- .. image:: img/transferts-mem.png
-   :width: 650px 
+.. image:: img/transferts-mem.png
+   :height: 300px 
 
 .. note::
 
@@ -608,7 +507,12 @@ LE FILTRAGE DES IMAGES
 Optimisation du filtre médian GPU  
 ---------------------------------
 
-Débits maximums effectifs, en MP/s, pour des images en 8 et 16 bits, incluant les transferts optimisés (C2070).
+
+.. image:: img/CPU-GPU-memcpy-dummykernel.png
+   :width: 750px
+
+
+Débits maximums effectifs, en MP/s, sur C2070.
 
  .. image:: img/debit-max-2070.png
    :width: 300px
@@ -628,10 +532,14 @@ Optimisation du filtre médian GPU
 
 **Sélection de la médiane**
 
- * Emploi exclusif des **registres** pour charger les valeurs utiles.
- * Limitations à 63 registres par thread et 32 K par bloc de threads.
- * Envisageable pour les médians de petite taille (jusqu'à 7x7 avec 1 thread/pixel).
- * Exploitation des recouvrements entre fenêtres de pixels voisins.
+ * Emploi exclusif des **registres** pour charger les valeurs utiles
+
+     - mémoires individuelles au c |oe| ur du GPU,
+     - non indexables dans un tableau.
+     - maximum de 63 registres par thread et 32 K par bloc de threads.
+
+ * Pour les petites tailles : max. 7x7 avec 1 pixel/thread.
+ * Exploitation des recouvrements entre fenêtres voisines.
    
   
 ----
@@ -649,10 +557,12 @@ Optimisation du filtre médian GPU
     :widths: 50 80 
     :header-rows: 0 
 
-    * - Bonnes performances envisagées :
-
-         * Économie de registres.
-         * Évite le tri complet. 
+    * - Avantages :
+        * Évite le tri complet : performances en hausse,
+        * Économie de registres : :math:`\(\lceil \frac{n}{2}\rceil +1\)` au lieu de :math:`\(n\)`,
+        * Permet de plus grandes tailles : max 11x11.
+          
       - .. image:: img/forgetful_selection.png
            :height: 500px
 
@@ -663,12 +573,14 @@ LE FILTRAGE DES IMAGES
 Optimisation du filtre médian GPU  
 ---------------------------------
 
-**Exploitation des recouvrements**
+**Exploitation des recouvrements** : 2 pixels par thread (médian 5x5).
 
 .. image:: img/recouvrement5.png
      :width: 800px
 
-**Intérêt :**  Économie de registres - chaque thread traite 2 pixels. 
+* **7+2x5 = 17** étapes de sélection au lieu de **2x12 = 24**.
+* Les plus coûteuses sont communes.
+* À 4 pixels/thread, zone commune = 10 pixels < 14.
 
 .. note:: 
 
@@ -679,34 +591,17 @@ Optimisation du filtre médian GPU
 
 LE FILTRAGE DES IMAGES
 ======================
-Optimisation du filtre médian GPU  
----------------------------------
-
-**Masquage des latences**
-
-* Accès à la mémoire globale : 2 pixels par thread.
-* Instruction Level Parallelism (ILP) : Ordre des instructions minimisant l'interdépendance.
-
-  .. figure:: img/bitonic.png
-     :height: 300px 
-
-     Identification des extrema dans le vecteur initial d'un médian 5x5
-
-.. note:: 
-
-   * au delà de 2 pixels par thread, le gain sur les latences est compensé par la perte sur le calcul / niveau de parallèlisme.
-   * ILP maximisée en appliquant une méthode simple; utilisée par ex. dans la technique des réseaux de tri bitoniques. 
-
-----
-
-LE FILTRAGE DES IMAGES
-======================
-Performances du filtre médian GPU proposé (PRMF)  
+Performances du médian GPU proposé (PRMF)  
 ------------------------------------------------
 
 .. image:: img/perf-median.png
    :width: 650px
 
+**Rappels :** 
+
+  - débit crête de la plateforme = 2444 MP/s.
+  - débit maximum des implémentations de référence = 185 MP/s.
+
 ----
 
 LE FILTRAGE DES IMAGES
@@ -724,6 +619,10 @@ Image 4096x4096
  .. image:: img/comp4k.png  
     :height: 200px
 
+.. note::
+
+ * débit décroit linéairement en fonction de **n**
+
 ----
 
 LE FILTRAGE DES IMAGES
@@ -734,28 +633,25 @@ Le filtre médian GPU
 **Conclusion**
 
  * Pas d'utilisation de la mémoire partagée.
- * Débit global amélioré de x7 à x10, proche du maximum.
- * Débit de calcul atteignant **5,3 GP/s**. 
- * Médian jusqu'au 9x9 sur C2070, 21x21 sur K40. 
+ * Accès optimaux : 1 lecture par pixel.
+ * Débit global amélioré de **x7** à **x10**, proche du maximum.
+ * Débit de calcul max. **5,3 GP/s**. 
+ * Médian jusqu'au 11x11 sur C2070, 21x21 sur K40. 
  * Création d'une application web générant les codes sources.
- * Utilisé pour le pré-traitement d'images de cristallographie  au synchrotron **SPring-8** (Japon).
-.. image:: img/SPring8.png
-    :height: 200px 
+ * Utilisé sur images de cristallographie au synchrotron SPring-8. 
 
-----
+**Publications**
+
+ * *Gilles Perrot. Image processing. In* **Designing Scientific Applications on GPUs**, *pages 28-70. CRC Press, 2013.*
+ * *Gilles Perrot, Stéphane Domas, and Raphaël Couturier.* **Fine-tuned high-speed implementation of a gpu-based median filter.** *Journal of Signal Processing Systems, pages 1–6, 2013.*
 
-LE FILTRAGE DES IMAGES
-======================
-Les filtres de convolution 
---------------------------
 
 ----
 
 LE FILTRAGE DES IMAGES
 ======================
-Les filtres de convolution : généralités  
------------------------------------------
+Les filtres de convolution
+--------------------------
 
 **Principe**
 
@@ -763,73 +659,30 @@ Les filtres de convolution : généralités
  
   $$I_{out}(x, y) = \left(I_{in} * h\right) = \sum_{(i < H)} \sum_{(j < L)}I_{in}(x-j, y-i)h(j,i)$$
 
-**Usage, selon les valeurs du masque h**
+**Selon les valeurs du masque h**
 
- * réduction de bruit,
- * détection de bords,...
-
-.. note::
-
- * selon h --> convo séparable ou non séparable
+ * Réduction de bruit, détection de bords,...
+ * Potentiellement **séparable** en deux convolutions 1D.
 
 ----
 
-LE FILTRAGE DES IMAGES
-======================
-Les filtres de convolution GPU
-------------------------------
-
-Le fabricant Nvidia propose la plus rapide des implémentations connue :
-
-Convolution **non séparable** sur image de 2048x2048, masque h de 5x5, sur **GTX280**.
-
-* Débit global : **945 MP/s**.
-* Débit de calcul : **3,00 GP/s** 
-
-----
 
 LE FILTRAGE DES IMAGES
 ======================
 Les filtres de convolution GPU
 ------------------------------
 
-Exploitation des recouvrements
-
- * un seul accès mémoire par pixel, mémorisation en registre.
- * mise à jour de tous les calculs concernés
-
-.. image:: img/convoOverlap2.png
-   :width: 400px
-
-Application des techniques présentées pour le filtre médian :
-
-* Optimum à 8 pixels par thread.
-* Débit global : **966 MP/s**.
-* Débit de calcul : **3,47 GP/s** 
-
-Sur **C2070**, nos débits sont de **1666 MP/S** et **5280 MP/s**. Les débits maximum atteignent **2140 MP/s** et **8540 MP/s** (4090x4096, masque 3x3) 
-
-----
-
-LE FILTRAGE DES IMAGES
-======================
-Les filtres de convolution GPU 
-------------------------------
-
-Convolution **séparable** sur C2070.
+Extension des méthodes appliquées au filtre médian :
 
-Implémentation Nvidia (mémoire partagée)
+ * Un seul accès mémoire par pixel.
+ * Mémorisation et calculs en registre.
+ * Optimum à 8 pixels/thread.
 
- * Débit global max : **1933 MP/s**.
- * Débit de calcul max : **6000 MP/s** 
+Implémentations de référence (C2070) :
 
-Notre implémentation
+ * Nvidia atteint un débit de calcul maximum de **6,00 GP/s**.  
 
- * Optimum à 8 pixels par thread.
- * Une convolution 1D en mémoire partagée, l'autre en registres. Copie intermédiaire en mémoire globale (cache 1D rapide).
- * Débit global : **2028 MP/s**.
- * Débit de calcul : **7626 MP/s** 
- * Le gain est obtenu sur la convolution 1D en registres.
 
 ----
 
@@ -838,18 +691,13 @@ LE FILTRAGE DES IMAGES
 Les filtres de convolution GPU 
 ------------------------------
 
-**Conclusion**
+**Résultats**
 
- * Amélioration limitée des débits globaux en raison de la prépondérance des temps de transfert.
- * Amélioration sensible sur les débits de calcul (de 17 à 33 %).
- * Le traitement 1D est jusqu'à 66% plus rapide. Applicable à d'autres signaux 1D.
+ * Amélioration sensible des débits de calcul en 2D : 16 à 35 %.
+ * Débit de la convolution 1D horizontale jusqu'à 54% plus élevé. 
+ * Débit maximum de **8,54 GP/s**.
+ * Application à d'autres familles de signaux 1D (audio,...).
 
-----
-
-LE FILTRAGE DES IMAGES
-======================
-Filtre par recherche des lignes de niveaux 
-------------------------------------------
 
 ----
 
@@ -871,16 +719,19 @@ LE FILTRAGE DES IMAGES
 Filtre par recherche des lignes de niveaux 
 ------------------------------------------
 
-**Principe**
+**Principe - modèle**
 
- * Estimation locale, par maximum de vraisemblance, des lignes de niveaux.
+ * Estimation locale, par maximum de vraisemblance.
  * Réduction de bruit par moyennage le long de la ligne estimée.
- * Les lignes de niveaux estimées sont modélisées par des lignes brisées nommées **isolines**.  
- * Les segments des lignes brisées sont choisis parmi des motifs pré-établis (32 motifs).
+ * Modèle de ligne de niveaux retenu : **isoline**
 
+    = ligne brisée composée de **segments**.  
+
+ * Segments choisis parmi 32 motifs pré-calculés.
+ * Les 8 premiers motifs pour des segments de 6 pixels :
    .. image:: img/P5Q1.png
-      :width: 500px 
+      :width: 450px 
 
 
 ----
@@ -890,18 +741,20 @@ LE FILTRAGE DES IMAGES
 Filtre par recherche des lignes de niveaux 
 ------------------------------------------
 
-**Principe (étape 1)**
+**Étape 1** (1 pixel/thread)
 
- * En chaque pixel, recherche du motif maximisant la log-vraisemblance ( :math:`\(n=6, \sigma^2 =\)` variance )
+ * En chaque pixel, recherche du motif maximisant la log-vraisemblance ( exemple :math:`\(n=6\)`)
 
  .. math:: 
 
    $$-\frac{n}{2}log\left(2\pi\right) - \frac{n}{2}log\left(\sigma^2\right) - \frac{n}{2}$$
 
- * Mémorisation des paramètres des motifs sélectionnés dans deux matrices :math:`\(I_{\Theta}\)` et :math:`\(I_{\Sigma}\)`. 
-
  .. image:: img/lniv-mv.png
-    :width: 500px
+    :width: 400px
+
+
+ * Mémorisation des paramètres du motif sélectionné dans deux matrices :math:`\(I_{\Theta}\)` (indice) et :math:`\(I_{\Sigma}\)` (moyenne, variance). 
 
 ----
 
@@ -910,16 +763,19 @@ LE FILTRAGE DES IMAGES
 Filtre par recherche des lignes de niveaux 
 ------------------------------------------
 
-**Principe (étape 2)**
-
- * Allongement itératif des segments sous condition GLRT.
+**Étape 2** (1 pixel/thread)
 
+ * Isoline validée de :math:`\(n_{prec}\)` pixels. 
+ * Segment candidat de :math:`\(n_s\)` pixels.
+ * Allongement de l'isoline sous condition GLRT ?
  .. math::
     
-    $$(n_{s_1s_2}+n_{s_3})\left[log\left(\widehat{\sigma_{s_1s_2}}^2\right) - log\left(\widehat{\sigma_{s_3}}^2\right) \right]$$
+    $$GLRT=T-\scriptstyle (n_{prec}+n_s)\left[log\left(\widehat{\sigma_{prec+s}}^2\right) - log\left(\widehat{\sigma_{prec}}^2\right) - log\left(\widehat{\sigma_{s}}^2\right) \right]$$
  
- .. image:: img/pipd-detail.png
-    :width: 900px   
+ .. image:: img/pipd-extension.png
+    :width: 500px   
 
 ----
 
@@ -928,16 +784,14 @@ LE FILTRAGE DES IMAGES
 Filtre par recherche des lignes de niveaux 
 ------------------------------------------
 
-**Principe (étape 3)**
+**Étape 3** (optionnelle)
 
  Compensation de la non robustesse de sélection des motifs dans les zones homogènes.
  
-  * identification des zones homogènes avec un détecteur de bords.
-  * Application d'un filtre moyenneur dans ces zones.  
+  * Conception d'un détecteur de zones homogènes.
+  * Identification des zones homogènes avec ce détecteur.
+  * Application d'un filtre moyenneur dans les zones identifiées comme homogènes (convolution).  
  
- .. image:: img/detecteur.png
-    :width: 400px   
-
 .. note::
 
  * Sous-ensembles de pixels n'ayant pas d'intersection --> MV
@@ -952,18 +806,22 @@ Filtre par recherche des lignes de niveaux
 
 **Résultats**
 
Sur l'ensemble d'images de S. Lansel (DenoiseLab, Université Stanford)
Ensemble d'images de S. Lansel (DenoiseLab, Université Stanford), filtre proposé (PI-PD)
 
- * Amélioration moyenne du rapport Signal sur bruit: **+7,1 dB**
- * Indice de similarité structurelle : **+30%**
- * Temps de calcul : **7 ms**
+ * Amélioration moyenne du rapport Signal sur bruit: **+7,1 dB**,
+ * Indice de similarité structurelle : **+30%**,
+ * Temps de calcul (C2070, **avec** détecteur) : **7 ms**.
  
Comparaison avec BM3D
Algorithme de référence BM3D
  
- * Amélioration moyenne du rapport Signal sur bruit: **+9,5 dB**
- * Indice de similarité structurelle : **+36%**
- * Temps de calcul : **4300 ms**
+ * Amélioration moyenne du rapport Signal sur bruit: **+9,5 dB**,
+ * Indice de similarité structurelle : **+36%**,
+ * Temps de calcul : **4300 ms**.
  
+.. note::
+
+ * 2,4 dB d'écart, soit réduction de 43% de la puissance de bruit
+
 --------
 
 LE FILTRAGE DES IMAGES
@@ -976,12 +834,11 @@ Filtre par recherche des lignes de niveaux
    ============================================ === ======================================== 
    .. image:: img/zoom_noisy.png                    .. image:: img/zoom_mean5.png        
     
-
-   Bruit gaussien :math:`\(\sigma=25\)`             Moyennage 5x5                                                           
+    Bruit gaussien :math:`\(\sigma=25\)`             Moyennage 5x5                                                           
    
    .. image:: img/zoom_pipdh.png                    .. image:: img/zoom_bm3d.png
    
-   PI-PD                                            BM3D
+    PI-PD                                            BM3D
    ============================================ === ======================================== 
 
 --------
@@ -995,32 +852,96 @@ Filtre par recherche des lignes de niveaux
 
  * Rapport qualité/temps élevé.
  * Traitement d'images HD à 20 fps.
- * Artefacts en marche d'escalier. Réduits par la méthode de Buades *et al.* (+1 dB, +0,2 ms pour 512x512).
- * Extension aux images couleurs et autres types de bruits (multiplicatif). 
- * Algorithme original sans implémentation de référence séquentielle. Conception GPU dès l'origine. 
+ * Artefacts en marche d'escalier.
+ * Parallélisation de la méthode de Buades *et al.* (2006) : 
+
+     - gain +1 dB en +0,2 ms pour 512x512.
+
+ * Algorithme dédié GPU, sans implémentation séquentielle de référence. 
+
+**Publication**
+
+ * *Gilles Perrot, Stéphane Domas, Raphaël Couturier, and Nicolas Bertaux.* **Fast gpu-based denoising filter using isoline levels.** *Journal of Real-Time Image Processing, pages 1–12, 2013.*
+
 
 ----
 
-CONCLUSION GÉNÉRALE - PERSPECTIVES
-==================================
+CONCLUSION GÉNÉRALE
+===================
+
+* Trois types de conception mis en |~oe| uvre :
 
-* Trois types de conception mis en  |oe| uvre.  
-* Le portage efficace d'algorithme peut s'avérer très complexe, voire sans intérêt.
+    - Parallélisation GPU d'une implémentation CPU (*snake*).
+    - Implémentations optimisées pour GPU d'opérateurs mathématiques (médian, convolution).
+    - Algorithme dédié GPU et son implémentation (isolines). 
+
+* Le portage **efficace** d'algorithme sur GPU s'avère très complexe.
+* Certains algorithmes ne se prêtent pas à la parallélisation GPU.
 * L'emploi de la mémoire partagée n'apporte pas les meilleures performances en cas de recouvrements.
-* L'écriture de code performant est fastidieuse et les codes non paramétriques.
-* Création d'un programme générateur.
+* Filtrage à des débits inégalés, proches des performances crête.
+* Filtres utilisables par tout programmeur grâce au générateur de code.
+
 
-* Beaucoup de traitements peuvent bénéficier des techniques proposées.
-* Les évolutions de l'architecture laissent entrevoir de nouvelles possibilités.
-* Extension à d'autres domaines. 
+----
+
+PERSPECTIVES
+============
+
+ * Extension des filtres aux images couleurs et autres types de bruits (multiplicatif).
+ * Extension aux pseudo-médians de grandes tailles (microscopie).
+ * Beaucoup de traitements et domaines peuvent bénéficier des techniques proposées (audio, imagerie 3D, BM3D). 
+ * Les évolutions de l'architecture laissent entrevoir de nouvelles possibilités (parallélisme dynamique, kernels concurrents).
 
 
 .. note::
 
  * certaines ardeurs ont été refroidies 
 
+
+----
+
+ANNEXE 1 
+========
+Parallélisation du *Snake* polygonal sur GPU
+--------------------------------------------
+
+**Structure des données** (n |oe| uds pairs)
+
+.. image:: img/16segments.png
+   :width: 800px
+
+.. note:: 
+
+  * règle 1 thread par pixel
+
+----
+
+ANNEXE 2 (médian)
+=================
+Image cristallographie SPring-8
+-------------------------------
+
+.. image:: img/spring82.png
+    :width: 400px
+
+----
+
+ANNEXE 3 (lniv)
+===============
+Détecteur de bords
+------------------
+
+ .. image:: img/detecteur.png
+    :width: 400px   
+
+
+
 .. |oe| unicode:: U+0153
    :trim:
 
+.. |~oe| unicode:: U+0153
+   :rtrim:
+
+
 .. |B| unicode:: U+00DF
    :trim: