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

Private GIT Repository
modif finale lnivs + keywords
[these_gilles.git] / PRESENTATION / diapos.rst
1 :title: Algorithmes rapides sur GPU
2 :author: Gilles Perrot
3
4
5 # boite arrondie fond gris
6
7 .. class:: example
8
9  lkj lkj lkj lj
10  olkj lkj
11  lkjdlkdj
12  ml kdmlk 
13
14 # 2 colonnes
15
16 .. class:: columns
17
18  .. list-table:: 
19     :widths: 50 80 
20     :header-rows: 0 
21
22     * - * kjh kj hkjh kqj hdkq jdhq lkj lj lkj lkj lj lqks,jxdxqdiqoioqiij
23         *  jkkjskdjf lskfj lskfjlksdjfls
24       - .. image:: css/logo-femto.png 
25                 :width: 300px 
26
27
28 ----
29
30 :id: titre
31
32 TRAITEMENT D'IMAGES SUR GPU 
33 ===========================
34
35 Algorithmes rapides pour le filtrage et la segmentation des images bruitées sur GPU.
36 ------------------------------------------------------------------------------------------------
37
38 Gilles Perrot
39 +++++++++++++
40 17 avril 2014
41 +++++++++++++
42 Université de Franche-Comté, Institut FEMTO-ST 
43 +++++++++++++++++++++++++++++++++++++++++++++++
44 Département DISC - équipe AND
45 +++++++++++++++++++++++++++++
46 Direction  : R. Couturier & S. Domas
47 ++++++++++++++++++++++++++++++++++++
48
49 ----
50
51 FILTRAGE
52 ========
53
54 Réduire le bruit.
55
56 .. image:: img/ex-filtrage.png
57    :width: 800px
58
59 .. note::
60  
61  * les bruits dégradent l'image de la scène idéale et peuvent en fausser ou compliquer l'interprétation.
62  *  Les capteurs numériques et les conditions d'acquisition sont à l'origine de perturbations (bruits).
63  * Les hautes résolutions sont souvent obtenues à faible flux de photons, dont les variations engendrent du bruit. 
64
65 ----
66
67 SEGMENTATION
68 ============
69
70 Distinguer les zones statistiquement homogènes d'une image bruitée.
71
72 .. image:: img/seg2.png
73    :width: 800px
74
75 .. note::
76
77  * on recense plus de 4000 algorithmes de segmentation
78  * La segmentation intervient dans beaucoup d'applications : du tracking à la détection ou à l'extraction de caractéristiques diverses.
79  * Mais aujourd'hui encore, une bonne segmentation est celle qui permet d'extraire ce que l'on attend => l'algorithme dépend du problème. 
80
81 ----
82
83 SEGMENTATION
84 ============
85 Deux approches
86 --------------
87
88 .. image:: img/approches.png
89    :width: 800px
90
91 ----
92
93 PLAN DE LA PRÉSENTATION
94 =======================
95
96 #. Introduction 
97
98    - Les GPUs ou *Graphical Processing Units*.
99    - Objectifs.
100
101 #. La segmentation des images
102
103    - Travaux de référence.
104    - Parallélisation GPU d'un algorithme de segmentation de type *snake*.
105
106 #. Le filtrage des images
107
108    - Travaux de référence. 
109    - Optimisation GPU des filtres médian et de convolution.
110    - Conception d'un algorithme GPU de débruitage par recherche des lignes de niveaux.
111
112 #. Conclusion et perspectives 
113
114 ----
115
116 INTRODUCTION
117 ============
118 Les GPUs ou *Processeurs graphiques*.
119 -------------------------------------
120
121 .. image:: img/gpucpu1.png
122    :width: 800px
123
124
125 * Processeurs *classiques* **CPU** : exécution **séquentielle** 
126
127   - Quelques unités de calcul ( les c |oe| urs).
128
129 * Processeurs *graphiques* **GPU** : exécution **massivement parallèle**
130
131   - Des centaines, voire milliers, d'unités de calcul, regroupées en SMs (*Streaming Multiprocessors*).
132
133 .. note::
134
135  * La multiplication des c |oe| urs dans les GPUs se fait au détriment des fonctions de contrôle et de cache.
136  * Seule la mémoire *globale* est accessible par l'ensemble des fils d'exécution (les *threads*) et ses performances sont faibles.
137  * AU sein de la RAM il y a différents canaux vers différents types de mémoires.
138  * L'accès efficace aux mémoires  est contraignant.
139  * Les échanges de données entre le GPU et son hôte CPU sont pénalisants.
140  * 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.
141  * La mise au point n'est pas aisée lorsque des centaines de milliers de threads concourent à l'exécution d'une tâche.
142
143  * L'accroissement des capacités de calcul a suivi l'augmentation des résolutions d'images.
144  * 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.
145  * 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.
146
147
148 ----
149
150 INTRODUCTION
151 ============
152
153 Ojectif : accélérer
154 -------------------
155
156 **Segmentation**
157  
158  * Algorithme par contours actifs, classe des  *snakes*.
159  * Implémentation CPU optimisée existante. 
160  * Conception de l'implémentation GPU.
161
162 **Filtrage**
163
164      * Filtres médians, filtres de convolution
165
166           - Opérateurs mathématiques,
167           - Conception d'une implémentation optimisée.
168
169      * Filtre par lignes de niveaux 
170         
171          - Conception d'un algorithme dédié GPU.
172          
173   
174 ----
175
176 SEGMENTATION 
177 ============
178 Travaux de référence
179 --------------------
180
181 **Level-set** ( Roberts *et al.*, 2010) 
182
183  * Images d'IRM de 256x256x256 pixels (16 millions),
184  * Temps sur GTX280 : **11 s**.
185    
186 **Snake GVF** (Smistad *et al.*, 2012)
187
188  * Images d'IRM de 256x256x256 pixels (16 millions),
189  * Temps sur C2070 : **7 s**.
190
191 .. figure:: img/brain3D-gvf.png
192    :width: 600px
193
194
195
196 .. note::
197
198  * Le domaine médical recèle la quasi totalité des implémentations GPU d'algorithmes de segmentation.
199  * Nombre d'entre elles concernent des traitements effectués en 3D par nécessité, où l'emploi du GPU s'impose assez naturellement.
200  * Les algorithmes **level-set** sont les plus implémentés sur GPU :
201  * Les algorithmes **snakes** sont très peu implémentée sur GPU :
202
203 ----
204
205 SEGMENTATION 
206 ===============================
207 *Snake* polygonal orienté région (principe)
208 -------------------------------------------
209
210 .. class:: columns
211
212   .. list-table:: 
213     :widths: 50 80 
214     :header-rows: 0 
215
216     * - .. image:: img/snake-modele.png 
217                 :width: 350px 
218       - * Objectif : déterminer le contour le plus *vraisemblable*.
219         *  Le critère de vraisemblance généralisée est, dans le cas gaussien :
220            
221            .. math::
222             
223               $$GL = \frac{1}{2}\left[ n_B.log\left(\sigma_B^2\right) + n_T.log\left(\sigma_T^2\right)\right]$$         
224        
225 * Calcul des variances :math:`\(\sigma^2\)` pour chaque contour :
226
227  * Méthode de Chesnaud *et al.* (1999) : sommes sur le **contour**. 
228  * Implique le **pré-calcul** de 3 images cumulées.
229
230 .. note::
231
232  * Cela permet d'extraire des formes aux contours mal définis, en raison d'un fort niveau de bruit par exemple. 
233
234 ----
235
236 SEGMENTATION 
237 ===============================
238 *Snake* polygonal orienté région (algo CPU)
239 --------------------------------------------
240
241 .. image:: img/cochons-it0-it1.png
242    :height: 300px
243
244
245 #. Le contour initial est rectangulaire ( 4 n |oe| uds )
246 #. 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.
247
248
249 ----
250
251 SEGMENTATION 
252 ===============================
253 *Snake* polygonal orienté région (algo CPU)
254 --------------------------------------------
255
256 .. image:: img/cochons-it21-it22.png
257    :height: 300px
258
259 .. image:: img/barre-blanche.png
260    :height: 10px
261
262 .. image:: img/cochons-it4-it5.png
263    :height: 300px
264
265 .. note:: 
266
267  * CONVERGENCE RAPIDE
268
269
270 ----
271
272 SEGMENTATION 
273 ===============================
274 Parallélisation du *Snake* polygonal sur GPU
275 --------------------------------------------
276 Identification des fonctions coûteuses
277
278 .. image:: img/algosnake1.png
279    :height: 500px
280
281 ----
282
283 SEGMENTATION 
284 ===============================
285 Parallélisation du *Snake* polygonal sur GPU
286 --------------------------------------------
287 Calcul du critère GL (1 pixel/thread)
288
289 .. image:: img/algosnake-3etages.png
290    :width: 800px
291
292
293 ----
294
295 SEGMENTATION 
296 ===============================
297 Parallélisation du *Snake* polygonal sur GPU
298 --------------------------------------------
299
300 .. image:: img/snake-pairimpair.png
301    :width: 800px
302
303 .. note::
304
305  * Pour un n |oe| ud et un pas de déplacement donnés, on évalue **en parallèle** 8 positions voisines, soit 16 segments distincts.
306  * Pour éviter les oscillations et *coller* à l'algorithme séquentiel, on distingue les n |oe| uds d'indices pairs et impairs.
307  * On évalue **en parallèle** l'ensemble des déplacements éventuels de tous les n |oe| uds de même parité. 
308
309
310
311 ----
312
313 SEGMENTATION 
314 ===============================
315 Parallélisation du *Snake* polygonal sur GPU
316 --------------------------------------------
317
318 * 1 thread par pixel.
319 * Concaténation dans un vecteur de tous les pixels composant l'ensemble des contours évalués. 
320
321   - ex : 2x 256000 éléments à l'étape 1 de l'image 100 MP. 
322
323 * Sommes des contributions des pixels : opérations de **réduction**.
324  
325   - opérations mal adaptées à l'architecture  GPU,
326   - en mémoire partagée : accélération par rapport au CPU.
327
328 .. note::
329
330  * les réduction consistent à sommer, pour chaque segment les contributions partielles par bloc calculées au 1
331
332 ----
333
334 SEGMENTATION 
335 ===============================
336 Parallélisation du *Snake* polygonal sur GPU
337 --------------------------------------------
338
339 Points positifs :
340
341  * Conservation des données en mémoire GPU. 
342  * Images cumulées (pré-calculs) effectuées en parallèle. 
343  * Discrétisation des segments en parallèle (1 thread/pixel). 
344  * Respect de l'algorithme original.
345
346 Points négatifs :
347
348  * Trop peu de calculs à effectuer.
349  * Segments de tailles et orientations variables : 
350
351    - motifs d'accès à la mémoire globale irréguliers,
352    - nombreux threads inactifs.
353  
354 .. note::
355
356  * Un seul entier est échangé entre le CPU et le GPU à chaque itération.
357  * image cumulées par une adaptation de la méthode des sommes de préfixes.
358  * Abandon  Bresenham Possible car parcours unidirectionnel du contour. 
359  * Trop peu de calculs ne permet pas de masquer les latences.
360  * Pas de coalescence possible dans les accès à la mémoire globale car la géométrie des segments varie.
361  * mémoire partagée à cause des réductions.
362
363 ----
364
365 SEGMENTATION 
366 ===============================
367 Parallélisation du *Snake* polygonal sur GPU
368 --------------------------------------------
369
370 **Performances de l'implémentation**
371
372 .. image:: img/perfs-snake.png
373    :width: 600px
374  
375 ..
376  
377 .. image:: img/perfs-snake-img.png
378    :width: 400px
379
380 ----
381
382 SEGMENTATION 
383 ===============================
384 Parallélisation du *Snake* polygonal sur GPU
385 --------------------------------------------
386
387 **Conclusion**
388
389 * Première et seule implémentation connue à ce jour.
390 * Performances intéressantes pour les grandes images.
391 * Image 10000x10000 en moins de 0,6 seconde.  
392 * Emploi non optimal du GPU : réductions, irrégularités.
393 * Temps de calcul très dépendant du contenu de l'image.
394 * Proposition d'une méthode d'initialisation alternative :
395   
396      - Recherche du contour rectangle le plus vraisemblable.  
397      - Accélération jusqu'à x15 avec de petites cibles.
398
399 **Publication**  
400
401  * *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.*
402
403 ----
404
405 LE FILTRAGE DES IMAGES
406 ======================
407
408   * Filtre médian, 
409   * Filtres de convolution, 
410   * Filtre par recherche des lignes de niveaux.
411
412 ----
413
414 LE FILTRAGE DES IMAGES
415 ======================
416 Filtre médian : principe
417 ------------------------
418
419 .. image:: img/median-principe.png
420    :width: 600px 
421
422 La valeur de sortie d'un pixel est la **médiane** des valeurs de son voisinage. 
423
424 * Bonne réduction du bruit *poivre & sel*.
425 * Assez bonne préservation des contours. 
426 * Usages fréquents avec des petites fenêtres (de 3x3 à 7x7).
427 * Quelques applications avec de grandes fenêtres.
428 * Opération de sélection coûteuse (tri).
429
430 ----
431
432 LE FILTRAGE DES IMAGES
433 ======================
434 Filtre médian : exemple
435 -----------------------
436
437 .. table:: 
438
439    =================================== ========================================   
440    .. image:: img/airplane_sap25.png    .. image:: img/airplane_sap25_med5.png  
441    =================================== ======================================== 
442    Bruit *poivre & sel* 25%            Médian 5x5                              
443    =================================== ========================================
444
445 ----
446
447 LE FILTRAGE DES IMAGES
448 ======================
449 Filtre médian GPU : travaux de référence
450 ----------------------------------------
451
452 Comparaison des implémentations GPU de référence :
453
454  - **PCMF**, Sanchez *et al.* (2013), débit max. **80 MP/s**,
455  - **ArrayFire**, commerciale (2013), débit max. **185 MP/s**,
456  - **BVM** parallélisé par Chen *et al.* (2009), débit max. **110 MP/s**. 
457
458 .. image:: img/compar-median2.png
459    :width: 500px 
460
461 .. note:: 
462
463  * PCMF : Parallel (Complementary Cumulative Derivative Function) Median Filter (histogrammes cumulatifs)
464  * CTMF : CPU à temps constant
465
466 ----
467
468 LE FILTRAGE DES IMAGES
469 ======================
470 Filtre médian GPU : Travaux de référence  
471 ----------------------------------------
472
473 Emploi de la **mémoire partagée** (exemple médian 5x5)
474
475 .. table:: 
476
477    =================================== ========================== ========================================   
478    .. image:: img/shmem.png            .. image:: img/carreB.png  .. image:: img/halo.png  
479    =================================== ========================== ======================================== 
480   
481
482 .. note:: 
483
484  - recouvrement pose problème à cause accès concurrents à la mémoire partagée.
485
486 ----
487
488 LE FILTRAGE DES IMAGES
489 ======================
490 Optimisation du filtre médian GPU  
491 ---------------------------------
492
493 .. image:: img/CPU-GPU-memcpy.png
494    :width: 650px
495
496 .. image:: img/transferts-mem.png
497    :height: 300px 
498
499 .. note::
500
501  On gagne de 13 à 43 % sur les temps de transfert.
502
503 ----
504
505 LE FILTRAGE DES IMAGES
506 ======================
507 Optimisation du filtre médian GPU  
508 ---------------------------------
509
510
511 .. image:: img/CPU-GPU-memcpy-dummykernel.png
512    :width: 750px
513
514
515 Débits maximums effectifs, en MP/s, sur C2070.
516
517  .. image:: img/debit-max-2070.png
518    :width: 300px
519
520 **Rappel :** PCMF : 80 MP/s - BVM : 110 MP/s - ArrayFire : 185 MP/s
521
522 .. note::
523
524  ça laisse environ 80ms pour faire un tri de 9 valeurs sur une image de 4096x4096 
525
526 ----
527
528 LE FILTRAGE DES IMAGES
529 ======================
530 Optimisation du filtre médian GPU  
531 ---------------------------------
532
533 **Sélection de la médiane**
534
535  * Emploi exclusif des **registres** pour charger les valeurs utiles
536
537      - mémoires individuelles au c |oe| ur du GPU,
538      - non indexables dans un tableau.
539      - maximum de 63 registres par thread et 32 K par bloc de threads.
540
541  * Pour les petites tailles : max. 7x7 avec 1 pixel/thread.
542  * Exploitation des recouvrements entre fenêtres voisines.
543    
544   
545 ----
546
547 LE FILTRAGE DES IMAGES
548 ======================
549 Optimisation du filtre médian GPU  
550 ---------------------------------
551
552 **Sélection de la médiane** (par oubli)
553
554 .. class:: columns
555
556  .. list-table:: 
557     :widths: 50 80 
558     :header-rows: 0 
559
560     * - Avantages :
561  
562         * Évite le tri complet : performances en hausse,
563         * Économie de registres : :math:`\(\lceil \frac{n}{2}\rceil +1\)` au lieu de :math:`\(n\)`,
564         * Permet de plus grandes tailles : max 11x11.
565           
566       - .. image:: img/forgetful_selection.png
567            :height: 500px
568
569 ----
570
571 LE FILTRAGE DES IMAGES
572 ======================
573 Optimisation du filtre médian GPU  
574 ---------------------------------
575
576 **Exploitation des recouvrements** : 2 pixels par thread (médian 5x5).
577
578 .. image:: img/recouvrement5.png
579      :width: 800px
580
581 * **7+2x5 = 17** étapes de sélection au lieu de **2x12 = 24**.
582 * Les plus coûteuses sont communes.
583 * À 4 pixels/thread, zone commune = 10 pixels < 14.
584
585 .. note:: 
586
587   * chaque thread utilise plus de registres
588   * mais sur un bloc, en adaptant la taille du bloc, on économise k+1 registres par paire de pixels.
589
590 ----
591
592 LE FILTRAGE DES IMAGES
593 ======================
594 Performances du médian GPU proposé (PRMF)  
595 ------------------------------------------------
596
597 .. image:: img/perf-median.png
598    :width: 650px
599
600 **Rappels :** 
601
602   - débit crête de la plateforme = 2444 MP/s.
603   - débit maximum des implémentations de référence = 185 MP/s.
604
605 ----
606
607 LE FILTRAGE DES IMAGES
608 ======================
609 Performances du filtre médian GPU proposé (PRMF)  
610 ------------------------------------------------
611
612 Image 512x512
613
614  .. image:: img/comp512.png           
615     :height: 200px
616
617 Image 4096x4096
618
619  .. image:: img/comp4k.png  
620     :height: 200px
621
622 .. note::
623
624  * débit décroit linéairement en fonction de **n**
625
626 ----
627
628 LE FILTRAGE DES IMAGES
629 ======================
630 Le filtre médian GPU   
631 --------------------
632
633 **Conclusion**
634
635  * Pas d'utilisation de la mémoire partagée.
636  * Accès optimaux : 1 lecture par pixel.
637  * Débit global amélioré de **x7** à **x10**, proche du maximum.
638  * Débit de calcul max. **5,3 GP/s**. 
639  * Médian jusqu'au 11x11 sur C2070, 21x21 sur K40. 
640  * Création d'une application web générant les codes sources.
641  * Utilisé sur images de cristallographie au synchrotron SPring-8. 
642
643 **Publications**
644
645  * *Gilles Perrot. Image processing. In* **Designing Scientific Applications on GPUs**, *pages 28-70. CRC Press, 2013.*
646  * *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.*
647
648
649 ----
650
651 LE FILTRAGE DES IMAGES
652 ======================
653 Les filtres de convolution
654 --------------------------
655
656 **Principe**
657
658  .. math::
659  
660   $$I_{out}(x, y) = \left(I_{in} * h\right) = \sum_{(i < H)} \sum_{(j < L)}I_{in}(x-j, y-i)h(j,i)$$
661
662 **Selon les valeurs du masque h**
663
664  * Réduction de bruit, détection de bords,...
665  * Potentiellement **séparable** en deux convolutions 1D.
666  
667
668 ----
669
670
671 LE FILTRAGE DES IMAGES
672 ======================
673 Les filtres de convolution GPU
674 ------------------------------
675
676 Extension des méthodes appliquées au filtre médian :
677
678  * Un seul accès mémoire par pixel.
679  * Mémorisation et calculs en registre.
680  * Optimum à 8 pixels/thread.
681
682 Implémentations de référence (C2070) :
683
684  * Nvidia atteint un débit de calcul maximum de **6,00 GP/s**.  
685
686
687 ----
688
689 LE FILTRAGE DES IMAGES
690 ======================
691 Les filtres de convolution GPU 
692 ------------------------------
693
694 **Résultats**
695
696  * Amélioration sensible des débits de calcul en 2D : 16 à 35 %.
697  * Débit de la convolution 1D horizontale jusqu'à 54% plus élevé. 
698  * Débit maximum de **8,54 GP/s**.
699  * Application à d'autres familles de signaux 1D (audio,...).
700
701
702 ----
703
704 LE FILTRAGE DES IMAGES
705 ======================
706 Filtre par recherche des lignes de niveaux 
707 ------------------------------------------
708
709 **Motivations :**
710
711  * Les algorithmes qui débruitent le mieux sont lents (BM3D).
712  * Les images naturelles sont décomposables en un ensemble de lignes de niveaux ( iso-niveau de gris ). 
713  * Concevoir un algorithme GPU original et son implémentation.
714
715 ----
716
717 LE FILTRAGE DES IMAGES
718 ======================
719 Filtre par recherche des lignes de niveaux 
720 ------------------------------------------
721
722 **Principe - modèle**
723
724  * Estimation locale, par maximum de vraisemblance.
725  * Réduction de bruit par moyennage le long de la ligne estimée.
726  * Modèle de ligne de niveaux retenu : **isoline**
727
728     = ligne brisée composée de **segments**.  
729
730  * Segments choisis parmi 32 motifs pré-calculés.
731  * Les 8 premiers motifs pour des segments de 6 pixels :
732  
733    .. image:: img/P5Q1.png
734       :width: 450px 
735
736
737 ----
738
739 LE FILTRAGE DES IMAGES
740 ======================
741 Filtre par recherche des lignes de niveaux 
742 ------------------------------------------
743
744 **Étape 1** (1 pixel/thread)
745
746  * En chaque pixel, recherche du motif maximisant la log-vraisemblance ( exemple :math:`\(n=6\)`)
747
748  .. math:: 
749
750    $$-\frac{n}{2}log\left(2\pi\right) - \frac{n}{2}log\left(\sigma^2\right) - \frac{n}{2}$$
751
752  
753  .. image:: img/lniv-mv.png
754     :width: 400px
755
756
757  * Mémorisation des paramètres du motif sélectionné dans deux matrices :math:`\(I_{\Theta}\)` (indice) et :math:`\(I_{\Sigma}\)` (moyenne, variance). 
758
759 ----
760
761 LE FILTRAGE DES IMAGES
762 ======================
763 Filtre par recherche des lignes de niveaux 
764 ------------------------------------------
765
766 **Étape 2** (1 pixel/thread)
767
768  * Isoline validée de :math:`\(n_{prec}\)` pixels. 
769  * Segment candidat de :math:`\(n_s\)` pixels.
770  * Allongement de l'isoline sous condition GLRT ?
771  
772  
773  .. math::
774     
775     $$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]$$
776  
777  .. image:: img/pipd-extension.png
778     :width: 500px   
779
780 ----
781
782 LE FILTRAGE DES IMAGES
783 ======================
784 Filtre par recherche des lignes de niveaux 
785 ------------------------------------------
786
787 **Étape 3** (optionnelle)
788
789  Compensation de la non robustesse de sélection des motifs dans les zones homogènes.
790  
791   * Conception d'un détecteur de zones homogènes.
792   * Identification des zones homogènes avec ce détecteur.
793   * Application d'un filtre moyenneur dans les zones identifiées comme homogènes (convolution).  
794  
795 .. note::
796
797  * Sous-ensembles de pixels n'ayant pas d'intersection --> MV
798  * Utilisation des motifs des segments pour gain de temps.
799  
800 ----
801
802 LE FILTRAGE DES IMAGES
803 ======================
804 Filtre par recherche des lignes de niveaux 
805 ------------------------------------------
806
807 **Résultats**
808
809  Ensemble d'images de S. Lansel (DenoiseLab, Université Stanford), filtre proposé (PI-PD)
810
811  * Amélioration moyenne du rapport Signal sur bruit: **+7,1 dB**,
812  * Indice de similarité structurelle : **+30%**,
813  * Temps de calcul (C2070, **avec** détecteur) : **7 ms**.
814  
815  Algorithme de référence BM3D
816  
817  * Amélioration moyenne du rapport Signal sur bruit: **+9,5 dB**,
818  * Indice de similarité structurelle : **+36%**,
819  * Temps de calcul : **4300 ms**.
820  
821 .. note::
822
823  * 2,4 dB d'écart, soit réduction de 43% de la puissance de bruit
824
825 --------
826
827 LE FILTRAGE DES IMAGES
828 ======================
829 Filtre par recherche des lignes de niveaux 
830 ------------------------------------------
831  
832 .. table:: 
833
834    ============================================ === ======================================== 
835    .. image:: img/zoom_noisy.png                    .. image:: img/zoom_mean5.png        
836     
837     Bruit gaussien :math:`\(\sigma=25\)`             Moyennage 5x5                                                           
838    
839    .. image:: img/zoom_pipdh.png                    .. image:: img/zoom_bm3d.png
840    
841     PI-PD                                            BM3D
842    ============================================ === ======================================== 
843
844 --------
845
846 LE FILTRAGE DES IMAGES
847 ======================
848 Filtre par recherche des lignes de niveaux 
849 ------------------------------------------
850
851 **Synthèse - conclusion**
852
853  * Rapport qualité/temps élevé.
854  * Traitement d'images HD à 20 fps.
855  * Artefacts en marche d'escalier.
856  * Parallélisation de la méthode de Buades *et al.* (2006) : 
857
858      - gain +1 dB en +0,2 ms pour 512x512.
859
860  * Algorithme dédié GPU, sans implémentation séquentielle de référence. 
861
862 **Publication**
863
864  * *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.*
865
866
867 ----
868
869 CONCLUSION GÉNÉRALE
870 ===================
871
872 * Trois types de conception mis en |~oe| uvre :
873
874     - Parallélisation GPU d'une implémentation CPU (*snake*).
875     - Implémentations optimisées pour GPU d'opérateurs mathématiques (médian, convolution).
876     - Algorithme dédié GPU et son implémentation (isolines). 
877
878 * Le portage **efficace** d'algorithme sur GPU s'avère très complexe.
879 * Certains algorithmes ne se prêtent pas à la parallélisation GPU.
880 * L'emploi de la mémoire partagée n'apporte pas les meilleures performances en cas de recouvrements.
881 * Filtrage à des débits inégalés, proches des performances crête.
882 * Filtres utilisables par tout programmeur grâce au générateur de code.
883
884
885 ----
886
887 PERSPECTIVES
888 ============
889
890  * Extension des filtres aux images couleurs et autres types de bruits (multiplicatif).
891  * Extension aux pseudo-médians de grandes tailles (microscopie).
892  * Beaucoup de traitements et domaines peuvent bénéficier des techniques proposées (audio, imagerie 3D, BM3D). 
893  * Les évolutions de l'architecture laissent entrevoir de nouvelles possibilités (parallélisme dynamique, kernels concurrents).
894
895
896 .. note::
897
898  * certaines ardeurs ont été refroidies 
899
900
901 ----
902
903 ANNEXE 1 
904 ========
905 Parallélisation du *Snake* polygonal sur GPU
906 --------------------------------------------
907
908 **Structure des données** (n |oe| uds pairs)
909
910 .. image:: img/16segments.png
911    :width: 800px
912
913 .. note:: 
914
915   * règle 1 thread par pixel
916
917 ----
918
919 ANNEXE 2 (médian)
920 =================
921 Image cristallographie SPring-8
922 -------------------------------
923
924 .. image:: img/spring82.png
925     :width: 400px
926
927 ----
928
929 ANNEXE 3 (lniv)
930 ===============
931 Détecteur de bords
932 ------------------
933
934  .. image:: img/detecteur.png
935     :width: 400px   
936
937
938
939 .. |oe| unicode:: U+0153
940    :trim:
941
942 .. |~oe| unicode:: U+0153
943    :rtrim:
944
945
946 .. |B| unicode:: U+00DF
947    :trim: