Home DLIM: Reseaux neuronaux convolutifs
Post
Cancel

DLIM: Reseaux neuronaux convolutifs

Lien de la note Hackmd

Un reseau de neurones convolutif

Le but est d’extraire les caracteristiques

Les formules de convolution

Continue 1D:

\[(f * g)(x) = \int_{-\infty}^{+\infty}f(x-t)g(t)dt = \int_{-\infty}^{+\infty} f(t)g(x-t)dt\]

Discrete 2D:

\[(f*\omega)(x,y) = \sum_{dx=-a}^a\sum_{dy=-b}^b\omega(a + dx, b + dy)f(x + dx, y+dy)\]

$f$ est l’aimeg, $\omega$ le noyau, son support est $[-a,a]\times[-b, b]$

Exemple de noyaux $\omega$ (WP Noyau_(traitement_d’image)):

Conv2D

1
x = kl.Conv2D(filters = 4, kernel_size=(5, 5))(x)

L’image d’entree a 3 canaux -> chaque filtre a $5\times5\times 3 + 1$ poids L’image de sortie a 4 canaux, elle pert 4 pixels dans chaque direction

En details + stride + padding = ‘same’

1
Conv2D(filters = 2, kernel_size = (3, 3), stride = (2, 2), padding = 'same')

  • Stride: une facon de reduire la taille d’une image
  • padding = ‘same’: la sortie a la meme taille

Convolution a trous

En anglais: atrous convolution

1
Conv2D(32, kernel_size=3, dilatation_rate=(2, 2))

Ne reduit pas la taille de l’image (padding = same)

Convolution separee

  • spatiale: une conv $2D\to1$ conv. $1D$
  • profondeur: $N$ conv $2D$ sur $M$ couches $\to$ $M$ conv $2D$ puis $N$ conv $1D$

Convolution separeee spatiale

En pratique on fait:

Conv separee en profondeur

1
kl.SeparableConv2D

Ici 3 couches:

  • $3$ conv $2D$ + $4$ conv $1D$
  • $4$ couches en sortie

Gain de calcul important perte de representation $\to$ utilise

MobileNet

La convolution transposee (ou deconvolution)

Mathematiquement les deux sont des convolutions mais la conv. transposee a pour but de simuler l’operation inverse de la conv

\[\begin{aligned} \text{propagation conv transposee} &\leftrightarrow \text{retro-propagation conv}\\ \text{retro-propagation conv. transposee} &\leftrightarrow\text{propagation conv.} \end{aligned}\]

Trucs d’architecture

Types de problemes en vision

Semantic segmentation

  • Classification
  • Classification + localisation
  • Object detection
  • Instance segmentation
    • Celle qu’on va faire

U-net (2015)

Separation semantique d’images medicales

Multi-echelle

Notre projet aujourd’hui !

Copy & crops: ce sont des PONTS

  • Ca sert a faire des concatenations

Fonctions d’erreur pour la segmentation

Si chaque image de sortie represente les pixels appartenant a la classe $k$, alors on peut finir avec un softmax: $y+k = e^{z_k}/\sum_{i}e^{z_i}$

  • Erreur quadratique mse: pente douce, pas d’information d’exclusion
  • Entropie croisee: $E=-\sum_kt\log y_k+(1-t_k)\log(1-y_k)$
    • binary_crossentropy avec $t_k=0$ ou $1$
    • categorical_crossentropy avec resultats sous la forme $[0,0,..,1,..,0]$ pour indiquer la classe $k$
    • sparse_categorical_crossentropy avec les classes indiques par des entier
1
2
3
4
5
y_true = [[1, 2], [0, 2]] #image 2x2 with 3 categories
y_pred = [[0.05, 0.95, 0], [0.1, .01, 0.8], #proba for each category
         [0.7, 0.2, 0.1], [0.2, 0.2, 0.6]] #for each pixel
loss = keras.losses.SparseCategoricalCrossentropy()
loss(y_true, y_pred).numpy()

Augmenter le nombre de donnees

Souvent c’est bien utile, en particulier lorsqu’on manque de donnees.

Parfois ca rend la tache plus difficile et ca ne marche pas.

1
ImageDataGenerator
This post is licensed under CC BY 4.0 by the author.