LabCom AtysCrea - INSA Lyonsciolla/deeplearning/...LabCom AtysCrea Segmentation d'images...

Preview:

Citation preview

LabCom AtysCrea

Segmentation d'images médicales IRM 3D par deep learning avec tensorflow

Journées scientifiques Python 2017

Bruno SciollaCREATIS – INSA Lyon

bruno.sciolla@creatis.insa-lyon.fr

A propos...

● Doctorat en physique théorique– Physique numérique

– Physique statistique

● CREATIS 2014-2017: Postdoc

Traitement d'images - Imagerie médicale:– Segmentation, modélisation et inférence statistique

– Deep learning

Plan

● Introduction à tensorflow et aux réseaux de neurones

● Réseaux de neurones convolutionels et segmentation sous Tensorflow

Librairies pour le deep learning (Python)

● Theano● PyTorch● Tensorflow● Keras (Tensorflow, Theano)● Lasagne (Theano)● …

http://playground.tensorflow.org/

Démo en ligne : classification

http://playground.tensorflow.org/

Démo en ligne : classification

Réseau de neurones

● Réseau classique feed-forward

● Fonction de coût – Moindres carrés (ou autres)

Implémentation

● Créer la base d'entrainement (tirage dynamique)● Définir le réseau● Définir la procédure d'entraînement● Entraîner le réseau

Préparatifs : construire une base d'entraînement

Implémentation

● Créer la base d'entrainement (tirage dynamique)● Définir le réseau● Définir la procédure d'entraînement● Entraîner le réseau

Définition du réseau (!)

Variables et placeholders

● Variables et placeholders = “Tenseurs” de taille arbitraire● Un placeholder est un conteneur qui est ensuite “alimenté”● Les autres variables sont initialisées par Tensorflow

Graphe de dépendance :

● Un graphe de dépendance est construit entre les variables :

x

W1

b1

y1

Graphe du problème de classification :

Références

Coût

Implémentation

● Créer la base d'entrainement (tirage dynamique)● Définir le réseau● Définir la procédure d'entraînement● Entraîner le réseau

Entraînement - Implémentation :

● Définition du coût (moindres carrés)● Définition de la méthode d'optimisation

Implémentation :

● Créer la base d'entrainement (tirage dynamique)● Définir le réseau● Définir la procédure d'entraînement● Entraîner le réseau

Entraînement :

Erreur moyenne : 0.021446

Implémentation

● Créer la base d'entrainement (tirage dynamique)● Définir le réseau● Définir la procédure d'entraînement● Entraîner le réseau● Observer les résultats

Résultats :

Résultats :

● Pourquoi on a utilisé Tensorflow ? Pourquoi pas seulement Numpy ?

● Au fait, on n'a jamais calculé de dérivées pour la descente de gradient...

Retour sur le graphe :

Références

Coût

Chaque variable (non placeholder) est optimisée par défaut

Calcul automatique de la dérivée

Seulement deux règles :● Chaque opérateur définit sa dérivée par rapport à ses

arguments :

● Règle de la dérivée en chaîne

Plan

● Introduction à tensorflow et aux réseaux de neurones

● Réseaux de neurones convolutionels et segmentation sous Tensorflow

Réseau de segmentation sémantique

● “Fully convolutional” / Convolutions à trous

(Long 2015)

Convolution à trous

Segmentation par deep learning

● COCO (Common Objects in Context) Challenge

● Réseaux résiduels– Réseaux très profonds (1000 layers)

– Notion de raccourcis

Implémenter un réseau de neurones convolutionnel :

Implémenter un réseau de neurones convolutionnel :

Segmentation de la prostate

● Segmentation de la zone de transition (ZT) et de la zone périphérique (ZP) dans des images IRM (T2) 3D de la prostate

Reférence Segmentation “base”

Segmentation de la prostate

● Réseau résiduel multiéchelle

Sciolla et al. CAp (Conf. Apprentissage automatique) 2017

Segmentation de la prostate

Où est la 3D ?

Yu, Heng 2017

La difficulté des différentes tâches en apprentissage profond...

Construction de la base de données

Installer les librairies

Implémenter le réseau

Entraînement

● Pré-requis : comprendre les principes !

Aller plus loin avec Tensorflow

● Zoologie de modèles (RNN, LSTM, auto-encoders, GAN, ...)

● Enregistrer/Charger un modèle

● Contrôle de l'apprentissage (Tensorboard)

Aller plus loin avec Tensorflow

● Contrôle de l'apprentissage (Tensorboard)

Aller plus loin avec Tensorflow

● Calculs multi-coeurs et GPU

Conclusions

● Tensorwork est une librairie efficace et à jour● Mécanismes variables/placeholders● Auto-différentiation et apprentissage● Utiliser Keras pour les applications “usuelles”

Toy example: segmentation of the dermis

● Problem: Segment the epidermis and dermis layer in the skin● Use an automatic segmentation tools (level-set) to annotate 200 images =

18M labels

Toy example: segmentation of the dermis

● Fully convolutional network ● “Easy” problem: Training: 5 minutes, precision 95%)

n1=8; n2=16; n3 = 32; int1 = conv_layer3(x, [1,n1] , 1)int2 = conv_layer3(int1, [n1,n1] , 1)int3 = conv_layer3(int2, [n1,n1] , 1)int4 = conv_layer3(int3, [n1,n2] , 3)int5 = conv_layer3(int4, [n2,n2] , 3)int6 = conv_layer3(int5, [n2,n3] , 5)int7 = conv_layer3(int6, [n3,n3] , 7)int8 = conv_layer1(int7, [n3,32])int8b = tf.nn.dropout(int8, keep_prob)out_lay = conv_layer1(int8b, [32,3])out_soft = tf.nn.softmax(out_lay)

Toy example: segmentation of the dermis

● Fully convolutional network ● “Easy” problem: Training: 5 minutes, precision 95%)

n1=8; n2=16; n3 = 32; int1 = conv_layer3(x, [1,n1] , 1)int2 = conv_layer3(int1, [n1,n1] , 1)int3 = conv_layer3(int2, [n1,n1] , 1)int4 = conv_layer3(int3, [n1,n2] , 3)int5 = conv_layer3(int4, [n2,n2] , 3)int6 = conv_layer3(int5, [n2,n3] , 5)int7 = conv_layer3(int6, [n3,n3] , 7)int8 = conv_layer1(int7, [n3,32] )int8b = tf.nn.dropout(int8, keep_prob)out_lay = conv_layer1(int8b, [32,3])out_soft = tf.nn.softmax(out_lay)

Recommended