F.A.Q (Frequently Asked Qustions)

Index

IA - Machine Learning (ML) - Deep Learning (DL)

L’intelligence artificielle évolue de manière fulgurante et se retrouve dans tous les domaines. Cela commence sérieusement à inquiéter les quidams et surtout les états (Démocratique !). Maintenant ce n’est pas vraiment les possibilités de l’IA qui inquiète mais plutôt les dérives de son utilisation. Dans cette vidéo de David Louapre (ScienceEtonnante), certes de 2016, il nous donne une très bonne introduction très didactique sur l’IA. Après cette vidéo vous aurez un meilleur aperçu des possibilités de l’IA et de ces limites actuelles….

 

La Convolution.

Préambule :

Dans les modèles d’IA Machine Leraning (ML) ou Deep Learning (DL) traitant des images, il est commun d’utiliser la Convolution. La Convolution n’est pas propre à l’IA, celle-ci l’utilise afin de détecter dans les images des caractéristiques pertinentes avant de les transférer dans une fonction d’activation. Au vue de l’importance de la Convolution dans l’IA et en particulier dans le Deep Leraning, il me semblait important de donner un aperçu un peu plus théorique sur la question.

La Convolution Temporelle.

En mathématiques, la convolution est une opération mathématique. Elle est définie comme l’intégrale (somme) du produit de deux fonctions. La fonction primaire est réfléchie ( c.-à-d. inversée suivant l’axe des X et décalée à  |– Infini |). On effectue l’intégrale de |- Infini à + Infini|.

Sampling Theorem – Discrétisation d’un signal analogique.

Sans entrer dans des considérations trop mathématiques, comme l’analyse d’images est purement numérique en IA, il me semble important d’introduire les bases du Sampling.

Que nous dit se schéma :
     – Dans le domaine temporel, une Signal Analogique (X) multiplier ou Moduler par un train d’impulsions de Dirac (soit un échantillonnage).
     – Transfert du Domaine Temporel par FFT (Fast Fourier Transform) dans le Domaine Fréquentiel.
     – Dans le Domaine Fréquentiel le résultat est une (Convolution).
     – Rem : L’opération est réversible, une Multiplication dans le Domaine Fréquentiel correspond à une Convolution dans le Domaine Temporel.
     – Pour passer du Domaine Fréquentiel au Domaine Temporel on utilise la IFFT (Inverse Fast Fourier Transform).

Traitement d’images Numérique par Convolutions & Filtres.

Le traitement d’analyse d’images numérique fait appel évidement à toute la théorie d’analyse discrète des signaux comme exposé précédemment.
Comme dans la convolution temporelle, la convolution numérique consiste à balayer une matrice de dimension (m x n) suivant les axes m et n par un kernel de convolution (n x p) et d’en faire le produit de « Hadamard ».                                                                                                                                                                                                                                                                Rem: Le produit Matriciel de Hadamard est à ne pas confondre avec le produit matriciel.

Produit Matriciel.

Produit Matriciel de deux matrice A(m x n) et B(n x p).
Le produit n’est possible que si m de A = à n de B. Autrement dit le nombre de ligne de la matrice A doit être égale au nombre de colonne de la matrice B.

Produit Matriciel de Hadamard.

Le produit matriciel de Hadamard n’est possible si les dimensions de la matrice A et B  (m x n) et  (n x p) sont égales.

Principe de la Convolution d’image 2D.

Soit une matrice image de dimension (m x n) et un kernel de Convolution de dimension (n x p). On déplace le kernel par pas suivant m=1 ensuite suivant m=2 ….. Suivant m=m, on décale d’une ligne et on recommence l’opération.

Deux problèmes se posent avec la convolution. Après l’opération de convolution, la taille de l’image d’origine se rétrécit et cela n’est pas toujours souhaitable. Le deuxième problème est que, lorsque le noyau se déplace sur l’image d’origine, il touche le bord de l’image et l’entièreté de l’mage n’est pas entièrement convoluée.                                                                Pour résoudre ces problèmes on utilise le concept de Padding.

Le Padding.

Le Padding consiste à augmenter artificiellement la taille de la matrice d’origine (m x m) pas une série de zéro permettant d’opérer la Convolution sur toute l’image. Contrairement à la convolution sans padding celui-ci augmente la dimension de ma matrice résultante.                                                                                                                                                                        Si nous prenons l’exemple d’un matrice A(m x m) avec m=5 et un kernel de convolution K(n x n) avec n=3. Le Padding P sera égal à (P = Kn – 1) – P=3 – 1 = 2.                                        La dimension de la matrice résultante sera égal à [(Am + 2P – Kn + 1) x (Am + 2P – Kn + 1)].
Soit : [(5 + 4 – 3 + 1) * ( 5 + 4 – 3 + 1)] = 7 * 7 = 49.

Pour une matrice A(5 x 5) – K(5 x 5).
P = 5 – 1 =4
C = [(5 + 8 -5 + 1) * (5 + 8 -5 + 1)] = 9 * 9 = 81

Exemple :  Padding Convolution  – A(5 x 5) – K(3 x 3) – P=2 – C(7 x 7)

Comme dernière remarque, dans la convolution de réseau CNN (Convolutional Neural Network), il est également fait usage du (Stride) et du (Pooling) que j’aborderais dans la partie CNN.

Filtrage numérique d’image par Convolution.

Introduction.

Le filtrage d’une image numérique permet de modifier son spectre spatial. On peut par exemple chercher à atténuer les hautes fréquences pour la rendre moins nette, à réduire le bruit, ou au contraire à accentuer les hautes fréquences pour accentuer la netteté. La dérivation est aussi une opération de filtrage, employée pour la détection des bords. Le filtrage par convolution s’applique aux filtres linéaires à réponse impulsionnelle finie, dont la réponse impulsionnelle est relativement petite. Il existe d’autres techniques de filtrage, comme le filtrage par transformée de Fourier ou le filtrage récursif.

 

Principe du filtrage spatial

Le filtrage spatial correspond à des opérations permettant de modifier chaque pixel de l’image en fonction des valeurs des pixels de son voisinage.
Un filtre spatial est donc défini par :
     – Le support du filtre : taille et forme du voisinage considéré : c’est souvent un carré de taille impaire (3×3, 5×5, 7×7, …) mais cela peut être une croix, un disque, etc. ;
     – La position du pixel central dans le support ;

Filtrage spatial convolutif

Nous avons vu dans un précédent chapitre le théorème de convolution.
 im1∗im2↔IM1×IM2                                                                                                                                                                                                                                                                                      c’est-à-dire que le produit de convolution de deux images a pour transformée de Fourier le produit de leurs transformées de Fourier.
On peut appliquer cette propriété dans le cas du filtrage.                                                                                                                                                                                                                               Ainsi:                                                                                                                                                                                                                                                                                     im(x,y)∗h(x,y)↔IM(u,v)×H(u,v)                                                                                                                                                                                                                                                                       Cela signifie que le filtrage en fréquence vu au chapitre précédent peut aussi se réaliser par une opération de convolution sur l’image, où :                                                                                h(x,y)
·  est la réponse impulsionnelle du filtre ;
 H(u,v)
·  est la fonction de transfert du filtre ;
·  avec h↔H;
·  h est la TFD−1 de H
On parle alors de filtrage spatial convolutif.

Masque de convolution.

En traitement d’image, le filtrage spatial convolutif est généralement défini par un masque de convolution.
On définit le masque de convolution associé au filtre h
par :
 m(x,y)=h(−x,−y)

L’opération de convolution de l’image im par h
s’écrit alors :

Différent Type de filtres : (Exemples)

Identité – dentity : Kernel (3×3) = ([[0,0,0],[0,1,0],[0,0,0]])
Edge detection – Détection de contours : Kernel (3×3) = ([[0,1,0],[1,-4,1],[0,1,0]])
Box Blur – moyenner : Kernel (3×3) = ([[1,1,1],[1,1,1],[1,1,1]]) * (1/9)
Gaussian Blur – Flouttage : Kernel (3×3) = ([[1,2,1],[2,4,2],[1,2,1]]) * (1/16)
Edge Reinforcement – Renforcement de bords : Kernel (3×3) = ([[0,0,0],[-1,1,0],[0,0,0]])
Pushback – Repoussage : Kernel (3×3) = ([[-2,-1,0],[-1,1,1],[0,1,2]])
Sharpen – Augmentation de Contraste : Kernel (3×3) = ([[0,-1,0],[-1,5,-1],[0,-1,0]])
Sharpen – Augmentation de Contraste : Kernel (5×5) = ([[0,0,0,0,0],[0,0,-1,0,0],[0,-1,5,-1,0],[0,0,-1,0,0],[0,0,0,0,0]])

Et bien d’autres plus toutes les variantes.

Rem : il existe d’autres filtres non Convolutif comme par exemple le filtre Median (filtre statistique non linéaire) qui utilise le principe de fenêtre glissante sur le signal comme un filtre de convolution.

 

Calcul d’un Kernel de filtre de Convolution (spatial convolutif):

Rem : La compréhension ainsi que le calcul de filtre ou de kernel (discret) de convolution est assez complexe, un bon bagage mathématique est nécessaire.

Le filtre moyenner est un filtre passe-bas (réduit les hautes fréquences) utilisé comme réduction de bruit.                                                                                                                              Considérons le masque de taille 3×3 de la figure ci-dessous, contenant des coefficients de valeur m1 à m9 .                                                                                                                                 La couleur rouge indique le pixel central  ainsi que le voisinage du pixel (x,y) :

Filtre Box Blur – Moyenner  (3x3):

L’opération réalisée pour calculer la valeur du pixel (x,y) après filtrage sera alors :

g(x,y) = m1 x im(x-1, y-1) + m2 x im(x-1, y) + m3 x im(x-1, y+1)+ m4 x im(x,y-1) + m5 x im(x,y) + m6 x im(x,y+1)+ m7 x im(x+1,y-1) + m8 x im(x+1,y) + m9 x im(x+1,y+1)

Pour obtenir comme résultat la somme des pixels voisins dans un voisinage 3×3, le masque à utiliser sera.

Pour obtenir la moyenne des pixels voisins dans un voisinage 3×3, le masque à utiliser sera :

Filtre Gaussian Blur – Flouttage : Kernel (3x3).

Le filtre gaussien est un filtre linéaire et sa performance dépend de la valeur de sa variance (Sigma).
Plus l’image sera bruitée plus la variance devra être augmentée. A contrario plus l’image sera floue.

 

Le kernel doit toujours être impair (3×3), (5×5), (7×7) etc.. Ceci permet de toujours avoir une cellule centrale. Un Kernel plus grand donnera plus de flou (Blur).
Par exemple pour un Sigma = 1 et un Kernel (5×5) le filtre approximatif sera :

Conclusions : le cas de ces deux filtres est assez simple. Pour des filtres par exemple de détection de contour la Dérivée et/ou le Laplacien de la fonction Gaussienne est nécessaire.

Autres Type de Kernel (3 x 3) Filtres de convolution.

Programme de Filtrage d’image par Convolution sans API.

Rem : Le programme peut utiliser le Padding.                                                                                                                                                                                                                                   Exécution un peu lente car la fonction de convolution n’est pas compilée.

CNN – Convolutional Neural Networks.

Dans un réseau CNN, le but est d’utiliser un certain nombre de filtrage par convolution pour en détecter les éléments important de l’image traitée et de réduire au maximum la taille de la matrice résultante. Pour finir cette matrice est transférée à un Réseau Dense (entièrement connecté) et analysé par une fonction d’activation de type (ex : Sigmoïde) pour en déterminer une probabilité.

CNN – Vgg16 – Classification and Detection (Old).

VGG16 est un modèle de réseau neuronal convolutif proposé par K. Simonyan et A. Zisserman de l’Université d’Oxford dans l’article « Very Deep Convolutional Networks for Large-Scale Image Recognition ». (Testé Dans ImageNet 14 millions d’images et 1000 Classes).

Schéma Type Vgg16:

Schéma de principe :

Schéma Ex : Couche Dense :

Analysons les premières couches de convolution du modèle Vgg16 (API - Tensorflow + Keras).

# Layer 1 – Conv1
Conv2D(filters=64, kernel_size=(3,3), padding= »same » activation= »relu »,
input_shape=(Images_With,
Images_Height,
Images_channel))

On effectue sur l’image Input (128x128x3) une convolution (64 filtres) sur les trois couches RGB avec Padding et filtre (3×3). Le résultat est une matrice (128x128x64).
Fonction d’activation RELU (Rectifiled Linear Unit).

# Layer 2 – Conv2
Conv2D(filters=64, kernel_size=(3,3), padding= »same », activation= »relu »)
MaxPool2D(pool_size=(2,2), strides=(2,2))

Idem on effectue la convolution sur la matrice résultante (128x128x64) + padding et activation RELU. Le résultat est une matrice (128x128x64).
                                                                                                                                                                                                                                                                                                                               Le but étant de réduire la matrice au maximum avant la couche Dense, on utilise une autre couche (Max Pooling). Cette couche permet la réduction du nombre de paramètres et augmenter son efficacité par extraction des valeurs maximum, ou des valeurs moyenne.
Le Strides est le pas de déplacement du kernel sur la matrice.

Dans notre exemple, la matrice qui sera présentée à la convolution suivante sera divisée par 2 soit une matrice (64x64x64).
# Layer 3 – Conv3
Conv2D(filters=128, kernel_size=(3,3), padding= »same », activation= »relu »)
Le résultat sera une matrice de (64x64x128).

Etc……

Maintenant il n’est pas illégitime de se poser quelques question.

Quels filtres sont utilisés dans les couches de convolutions ?
Nombres de couches de convolution nécessaire ?

Personnellement je n’ai pas de réponse.

Pour les filtres j’ai lu l’information que dans les CNN, les filtres ne sont pas définis. La valeur de chaque filtre est apprise pendant le processus d’apprentissage (back propagation). Les layers hidden (Black Box) étant capables d’apprendre les valeurs de différents filtres mieux que l’homme ne pourraient être en mesure de le faire !.

Pour la structure des Réseaux neuronaux, chaque problème demande un réseau adapté. Celui-ci est-il construit sur base mathématique ou sur simulation ? je suppose que les deux approches vont de pair ? rem : je ne parle pas ici de la mise en équation du problème.

 

Quelques références.