lundi 31 mai 2010


La vision par ordinateur est-elle paradoxale ?
______________________________________
Préambule :
Il s'agit là d'une introduction que j'ai souvent utilisée dans mes cours ou dans le cadre de conférences sur la vision par ordinateur, qui fut l'un de mes domaines de recherche.
Je me suis efforcé de développer une approche pédagogique éliminant systématiquement les notions difficiles et/ou trop théoriques. Néanmoins, pardonnez-moi si les explications restent parfois ardues et font "un peu cours".
Le domaine est en lui-même complexe et il me semble impossible d'éliminer totalement toutes les références un peu délicates... cependant, j'espère qu'il peut intéresser et j'encourage donc cette lecture, car les conclusions développées ouvrent des voies qui peuvent surprendre...
______________________________________
Simuler un comportement intelligent... avec un ordinateur correctement programmé, dans l'un des cas suivants (ou dans une combinaison plus ou moins importante de ces différents cas) :

__On ne sait pas comment on fait,
__De multiples solutions semblent possibles,
__La quantité de données à traiter est considérable,
__On ne sait pas où est l'information,
__Il n'existe ni théorie, ni modèle du problème,
__etc.

par exemple :

__Se déplacer efficacement dans un environnement réel inconnu,
__Choisir une stratégie efficace dans un contexte hostile,
__Reconnaître rapidement des objets complexes du monde réel,
__etc.

... relève du domaine large de l'Intelligence Artificielle (IA), où l'objectif est justement de simuler à l'aide d'un ordinateur correctement programmé un comportement humaine relevant, a priori, de l'intelligence.

Quand on pense "IA", on pense généralement aux approches dites "logiques" ou "déclaratives" comme le langage Prolog ou les Systèmes Experts, mais ici nous développons une autre approche - en général moins connue - celle des systèmes "Auto-Adaptatifs".
Notons par exemple que notre cerveau (d'où a priori émane notre intelligence) ne peut raisonnablement se concevoir comme un système "déclaratif" (utilisant réellement toute une batterie de règles "déclaritives" du genre :
si (le patient présente des hémorragies et que ses dents tombent) alors (il a le scorbut), etc.)
mais plutôt comme un système fondamentalement "adaptatif".

La Vision Par Ordinateur (VPO) est un bon exemple d'un domaine où l'homme est par définition performant et où l'ordinateur a encore beaucoup à faire pour l'égaler... Est-ce seulement possible ? Oui, dans certaines situations bien définies la VPO existe... mais alors la VPO ne serait-elle pas paradoxale ?
Au sens de VPO nous pensons à l'ensemble de la chaîne de traitement partant de l'image d'une scène réelle formée sur le plan focal d'une caméra pour aboutir à une déclaration sur la scène analogue à celle que ferait un humain, du genre :
"ce sont deux oiseaux sur une branche d'arbre"
ou plus simplement :
"c'est un oiseau."

La VPO est aussi un bon exemple pour montrer comment l'intelligence artificielle peut apparaître dans une machine et comment on peut lever le paradoxe... mais sans bien savoir le localiser, en fait.
Les problèmes rencontrés par les humains sont de plus en plus traités par ordinateurs. Il s'agit donc de les programmer et avant tout de bien les identifier.
Ces problèmes peuvent être classés en deux catégories :

__des problèmes que nous appellerons "déterministes".
Ils peuvent être simples ou très complexes, mais reposent toujours sur des théories ou des techniques connues, et les spécialistes, tout du moins, savent toujours comment les traiter. On peut toujours les résoudre avec des algorithmes.

__des problèmes que nous appellerons "aléatoires", en raison de l'absence de théorie, et pour lesquels on ne sait absolument pas comment nous faisons. Il n'y a pas d'algorithme.
Un algorithme n'est rien d'autre qu'une recette du genre :
Si (le visiteur du musée a plud de 10 ans)
alors (il paiera 10 euros)
sinon (il paiera 5 euros)
codée par les informaticiens dans un langage de programmation donné, et un programe dansun ordinateur est toujours un ensemble, plus ou moins complexe, structuré sur la base de multiples algorithmes plus ou moins enchevêtrés.

Des exemples de problèmes déterministes :


Un exemple de problème aléatoire :

Le problème consistant à réaliser une machine de vision (VPO) utilisée pour reconnaître rapidement des objets, comme le fait un être humain, est un bon exemple de problème aléatoire.

On ne sait pas comment on fait. On ne sait pas où sont les informations. Il n'existe pas de théorie globale de la vision. On sait comment fonctionne l'oeil, ce qui circule sur le nerf optique, ... , mais à partir d'un certain moment on ne sait plus bien ce qui se passe...

Et ce n'est pas parce que l'on sait, en utilisant des systèmes d'imagerie médicale, que telle zone du cerveau est active quand un humain regarde des oiseaux sur une branche, que l'on peut en déduire comment il faut faire pour écrire un programme informatique permettant à un ordinateur de déclarer : "ce sont des oiseauxsur une branche" !

On ne dispose pas d'un algorithme pouvant être programmé sur un ordinateur. Et pourtant, dans certains domaines, des machines de VPO existent et sont aussi performantes que l'homme.

Mais s'il n'y a pas d'algorithme, alors comment fait-on ?

On commence par décomposer le problème global en sous-problèmes, et chaque sous-problème en sous-sous-problèmes, et ainsi de suite...


Il arrive un moment où l'on constate que pour certains sous-problèmes on dispose d'un algorithme.
Cela est généralement vrai pour les sous-problèmes proches de l'entrée du système, juste après la caméra, par exemple. Ces sous-problèmes qui relèvent de domaines pour lesquels certaines théories existent (Traitement du Signal (TS), ou Traitement d'Images (TI)) sont programmés sur ordinateur.

Il reste alors toute une série de sous-problèmes qui demeurent aléatoires.
Ceux-là relèvent typiquement d'un traitement d' "intelligence artificielle"
Pour résoudre ces problèmes, on développe différentes approches :


L'approche HEURISTIQUE :

On ne sait pas résoudre directement le problème posé, mais on écrit des programmes qui font des essais et des erreurs jusqu'à proposer une solution. La solution trouvée est rarement optimale, mais quand on ne sait pas bien faire, on est simplement content de pouvoir faire. C'est un bon modèle de ce que serait la méthode développée par un être humain cherchant à sortir d'un labyrinthe. On ne trouve pas tout de suite le bon chemin mais si on arrive à sortir, on est satisfait. La question de savoir sortir d'un labyrinthe est une image. Cette stratégie peut s'appliquer à bien des problèmes que l'homme cherche à résoudre... on fait des essais et de erreurs... et puis une solution apparaît.

Parexemple, il est possible de programmer un petit robot pour qu'il apprenne à résoudre des problèmes de manipulation de cubes.

On ne dit pas au robot (dans son programme) comment il doit enlever le cube jaune pour retirer le cube vert. On le lui donne que des règles générales de manipulation de cubes. En revanche on lui donne les moyens de chaîner les régles lui permettant de trouver la solution quelque soit la configuration de cubes du départ et la question posée. C'est typiquement la stratégie développée par le langage de programmation "Prolog" qui n'est pas basé sur une approche algorithmique mais sur approche déclarative. On déclare des règles spécifiques du domaine traité, et le langage "Prolog" "sait" les chaîner pour aboutir à une solution.

L'approche AUTO-ADAPTATIVE

Un excellent exemple bien connu est celui des réseaux de neurones.

Les réseaux de neurones formels sont formés de petits automates électroniques ou plus généralement d'un petit programme pour lequel on a un algorithme.
Il y a toujours trois étapes copiant de manière caricaturale ce que l'on sait globalement du cerveau biologique :
1)) définir un neurone formel, programme ou processeur, simulant le comportement plus ou moins simplifié d'un neurone.
2)) définir une architecture plus ou moins complexe interconnectant une grande quantité de neurones formels, parfois plusieurs millions.
3)) définir un processus faisant fonctionner l'ensemble.

Ces trois approches ne sont finalement qu'un modèle, parmi d'autres, de ce que pourrait être le fonctionnement de notre propre cerveau :

1)) Le neurone :



Que dit "en gros" la loi de Hebb ?Que la sortie du neurone (axone) est activée si beaucoup d'entrées (dendrites) le sont.
Quand on connecte tous ces neurones, on dit que l'on obtient un réseau de neurones.

2)) L'architecture :

Un cerveau humain comporterait au moins mille milliards de neurones...

chacun connecté à dix mille autres ...


PROBLÈME :

On ne sait évidemment pas réaliser un réseau de neurones formels comprenant au moins mille milliards de neurones, chacun relié à dix mille autres comme c'est le cas dans le cerveau humain. Cette architecture donne le vertige et, si nous savions la réaliser, je doute que l'on trouve un algorithme simple permettant de la faire fonctionner.




3)) Le processus ... il est inconnu !!!

Ce "processus" semble relever d'un énorme problème de complexité, et justement certains pensent que l'intelligence émergerait d'un certain niveau... un très très haut niveau de complexité.


Mais revenons à notre simple VPO pour laquelle nous n'avons toujours pas d'algorithme, et commençons par le commencement :

Comment peut-on construire un neurone formel ?


Si ce schéma vous semble trop compliqué dites-vous simplement que les entrées :

(e1, e2, ... , ei, ... )

prennent en fait les valeurs des pixels d'une image quelconque numérisée, celle que l'on trouve en mémoire d'un appareil photo numérique par exemple.

Donc :

Si (beaucoup d'entrées " ei " reçoivent des pixels sombres)

alors (la sortie S = 1)

sinon (la sortie S=0)

C'est tout.

Maintenant que nous avons un neurone, et un simple algorithme, nous allons le dupliquer et réaliser un petit réseau de trois neurones en les interconnectant de la manière suivante pour réaliser notre architecture :


Puis, pour faire fonctionner l'ensemble, nous allons mettre des " réglages de pondération " sur toutes les entrées des trois neurones (les petites flèches mauves) et nous allons définir une "recette", un algorithme assez simple consistant à tenir compte de l'avis... de la décision ici codée avec trois bits :

(d0, d1, d2)

d'une personne extérieure (appelée "professeur") jugeant les performances du système et prenant une décision en consultant la réponse d système qu'il observe en sortie :

(s0, s1, s2)

Notez bien que cet algorithme ne se préoccupe absolument pas de ce que nous ferions quand nous reconnaissons des objets.


La formule ci-dessus peut paraître un peu compliquée mais elle ne fait rien d'autre que de réaliser la recette décrite.

Ce petit réseau de neurones formels est connu sous le nom de "Perceptron" parce qu'il est possible de lui à apprendre à percevoir... à reconnaître des objets simples, par exemples des chiffres et des lettres.

On peut identifier deux phases principales de fonctionnement :

__Première étape : phase d'apprentissage
On commence par présenter un chiffre au perceptron. La sortie indique n'importe quoi. Le professeur corrige en indiquant la solution. On recommence le même processus en présentant d'autres lettres.Au bout d'un temps plus ou moins long, le système commence à donner de bonnes réponses. Evidemment, dans ce cas, le professeur ne fait pas de correction. On ne change pas une équipe qui gagne. Le système répond de mieux en mieux, et le professeur le corrige de moins en moins souvent. Il arrive qu'il n'y ait presque plus d'erreurs.

__ Deuxième étape : phase de reconnaissance
Le système ne fait plus d'erreur. Le professeur se retire. Le Perceptron est autonome, il reconnaît tous les chiffres qu'on lui montre. Il a appris à les reconnaître sans qu'à un seul moment on lui ait dit comment faire.

__Une phase de réactualisation éventuelle peut être développée. Si on montre au Perceptron un chiffre qu'il n'a pas appris à reconnaître, il peut se tromper, ou tomber juste, mais c'est le hasard. Il est évident que si le professeur ne revient pas pour corriger de nouveau les réponses du système, ce dernier ne va pas "inventer" un nouveau "nom" pour ce nouveau chiffre... cependant cette possibilité n'est pas à exclure dans le cas de programmes informatiques plus performants...

En fait, le Perceptron est un très limité et son intérêt est essentiellement pédagogique.

Il existe des réseaux plus performants mais évidemment bien plus complexes à mettre en oeuvre comme le modèle en couche ci-dessous, où l'on perçoit la complexité de l'architecture.

Cette complexité se retrouve évidemment au niveau de l'algorithme à mettre en oeuvre pour gérer la phase d'apprentissage du système. Il faut bien noter qu'un réseau performant ne semble pas pouvoir être autrement que très complexe...


Il n'est pas question ici d'entrer dans la définition de l'algorithme du gradient permettant au modèle en couche d'obtenir des performances honorables pour reconnaître des objets.

Disons simplement que la méthode générale reste la même : utiliser, lors de la phase d'apprentissage, un professeur qui juge et corrige le système jusqu'à ce qu'il réponde correctement.

Maintenant nous avons un exemple d'un système Auto-Adaptatif - AA, comprenant :

__un grand nombre de neurones formels,

__une architecture complexe les interconnectant,

__un algorithme permettant de faire converger l'ensemble vers la reconnaissance d'objets particuliers.

Encore une fois, on espère que de cette complexité émergera de bonnes performances...

Nous pourrions appeler ce système :
"processus AA"
et si nous l'intégrons dans l'ensemble du dispositif comportant les parties solubles par différents algorithmes, nous obtenons un exemple de système de VPO, soit VPO1 :


Je crois que vous admettrez que l'ensemble de la construction du VPO1 pourrait être repris en utilisant cette fois, pour résoudre les parties relevant de problèmes aléatoires, une autre approche.

Par exemple, cette fois, une approche Heuristique et non Auto-Adaptative.C'est ainsi que nous obtenons donc un deuxième système de VPO, soit VPO2.

On peut admettre que VPO2 n'a pas exactement les mêmes performances que VPO1 et même qu'il ne s'applique pas nécessairement au même type de données d'entrées.

de même construisons VOP3, et ainsi de suite


On peut créer toute une population de systèmes de vision :

VPO1, VPO2, VPO3, ... ,VPOi, ... , VPOn.

Si l'on dispose d'une telle population, ... comme si chaque VPOi était vu cette fois comme un neurone à lui tout seul... est-ce que l'on pourrait les combiner, les interconnecter pour qu'ils puissent coopérer et mettre en commun leurs différentes compétences?

Le schéma ci-dessus est exactement celui que j'ai dessiné sur le tableau blanc de mon bureau, quand j'étais professeur des universités à La Rochelle, pour proposer un sujet de thèse à un étudiant doctorant.



Je lui ai dit :

"Il faudrait essayer de connecter entre eux une population de "n" systèmes de vision (des VPO)pour qu'ils puissent coopérer. Mais cette interconnexion devrait être dynamique, non figée, qu'elle puisse se remettre en cause d'elle-même à tout moment pour s'adapter au problème à traiter, voire à de multiples objets proposés par le professeur."

L'étudiant à soutenu sa thèse à la fin des années 90.
Le système global implanté sur ordinateur a montré que ses performances dans la reconnaissance d'objets étaient toujours supérieure à celle d'un seul système de vision (VPO)

Mais quelle était donc , en gros, la nature de l'interconnexion dynamique des systèmes de vision ?

Des "Classifieurs" ont été constitués de "n" VPO placés sur les entrées d'un autre réseau de neurones formels en couches :


Une nouvelle population a été obtenue, celle des "Classifieurs" :



Chaque "Classifieur" a été vu comme un individu, et les combinaisons d'entrées comme les chromosomes caractéristiques de cet individu.

Puis, des algorithmes d'optimisation évolutionnistes - dits algorithmes génétiques - ont été utilisés pour faire évoluer constamment l'ensemble du système (en fonction de mutations continuelles similaires à toute une série de sélections naturelles) vers les meilleures connexions à un instant donné.

Ce type de système massivement Auto-Adaptatif montre trois choses :

__qu'il est inutile de dire au système comment reconnaître des objets,

__que ses performances augmentent si on lui donne la possibilité de modifier sa propre structure en temps réel et en fonction des circonstances.

__que certaines compétences "intelligentes" semblent émerger d'une certaine complexité.


La question de savoir si la Vision Par Ordinateur est Paradoxale demeuret-t-elle pertinente?

Certes, on ne sait pas nous-mêmes comment nous faisons pour reconnaître des objets, mais la question de "savoir" a-t-elle un sens dans le cas d'un système qui "ne" ferait qu'être hautement auto-adaptatif ?

Alors que devient donc le paradoxe ?

Et s'il était réellement vain de savoir "comment", explicitement, le cerveau fait ?
Imaginons seulement que le cerveau humain hérite naturellement, dans le cadre de l'évolution, de structures neuronales génétiquement programmées. Sur ces structures de base se constituent les milliards de milliards de connexions qui font sa spécificité.

Le cerveau n'est peut-être « seulement » qu'un formidable système Auto-Adaptatif dans lequel rien n'indique, nulle part, comment il faut faire, mais d'où émerge quelque chose que nous appelons "intelligence".

La seule chose que l'on trouverait dans nos neurones - dans nos cellules - est le moyen de transmettre génétiquement depuis des millions d'années la propre structure de notre système neuronale, et surtout, comment la faire interagir avec notre monde dès sa propre conception et ce, jusqu'à sa mort.

Si la 1-ère thèse de l'intelligence artificielle postule que, dans certains cas, on peut mettre un peu d'intelligence dans les machines, nous sommes insensiblement entrés dans le domaine de la 2ième thèse où l'on s'interroge sur une question plus philosophique :

"Les modèles développés en intelligence artificielle peuvent-ils nous éclairer sur le fonctionnement de notre propre fonctionnement?"

Je ne sais pas si la réponse est positive, mais après avoir terminé la trilogie Polynesia, je pense qu'elle pourrait être négative.

Serait-il vain de croire qu'il puisse y avoir quelque chose de "signifiant" dans notre propre intelligence ?

Serait-ce pour cette raison que nous rencontrons de vrais problèmes quand on tente de définir l'intelligence ?

L'intelligence ne serait-elle que la caractéristique d'un système hautement adaptatif dont le niveau de complexité nous échappe ?