Session du 11 juillet 2024 à 20h00
Data Science & IA
Classification d'image
Session dans laquelle Morpheus va nous présenter de la classification binaire d'image.
Dans un premier temps, nous utiliserons du Machine Learning, et nous verrons ensuite du Deep Learning.
00:00:00 :Bonjour à toutes et à tous, merci d'être venu une nouvelle fois pour la suite de cesvidéos sur l'apprentissage automatique. Pour ceux qui ne me connaissent pas, je m'appelle
00:00:15 :Marius, alias Morpheus, je suis étudiant à Aix-Marseille-Université, je passe en master2 d'intelligence artificielle et je fais pas mal de conférences, de petites vidéosde présentation sur différentes notions de l'apprentissage automatique. Ce soir, le but
00:00:35 :c'est de découvrir un petit peu comment fonctionnent les classifications au niveau des images. Pourceux qui ne savent pas trop de quoi on parle, j'ai ma chaîne Youtube où on a enregistréles présentes présentations. Vous pouvez retrouver ces vidéos-là sur Youtube directement
00:00:54 :et les revisionner si besoin. Tout d'abord, on va faire une introduction sur la classificationdes images. On va parler un petit peu de computer vision, comment une machine arrive à voir
00:01:09 :en fait qu'est-ce que c'est cette notion-là. On va ensuite parler des points clés d'uneimage, donc qu'est-ce qui définit une image. Ensuite, nous verrons la classification avec
00:01:20 :du call-to-learning. Pour ceux qui ne savent pas, c'est du machine learning mais sansla partie deep learning, donc sans réseau de neurones. On va regarder un petit peu les
00:01:29 :limites de ces méthodes-là, qui ont été vraiment dépassées à partir des années2000 lorsqu'il y a eu du big data, etc. et avec l'émergence du deep learning. Ensuite,
00:01:40 :on va parler un petit peu de ce qu'on fait aujourd'hui en 2024, de tout ça. Alors déjà,qu'est-ce que c'est que la computer vision ? C'est une branche de l'IA dont le principal
00:01:53 :but est de permettre à une machine d'analyser ou de traiter une ou plusieurs images ou vidéosprises par un système d'acquisition. Un jour, des chercheurs se sont posé la question,
00:02:04 :dans la fin des années 80, tiens, un humain, comment il fait pour, là, si je prends unephoto de Honolulu à Hawaï, qu'est-ce qui me permet de reconnaître cette image-là ? Qu'est-ce
00:02:18 :que je vois concrètement ? Si en tant qu'humain, de manière native, on peut se dire, là j'aila mer qui est assez claire, j'ai des bâtiments sur la partie de gauche, j'ai du coup au fondune montagne assez loin, j'ai les plages et tout, mais rien ne va nous permettre de vraiment
00:02:40 :dire que tiens, là, ce serait vraiment Honolulu. C'est-à-dire que soit cette photo, vous êtesun fan d'Hawaï 5.0 et vous l'avez déjà vue 550.000 fois, donc vous vous en souvenez,
00:02:51 :donc ça t'appelle à la mémoire qui se fait, soit, du coup, vous ne l'avez jamais vue etlà vous vous dites, là c'est forcément une île un peu paradisiaque parce que de votremémoire, vous vous rappelez que ce genre d'océan, ça ne se trouve pas au bord de l'Atlantique,
00:03:12 :on n'est pas sûr de choses ici. En fait, une machine dont on s'intéresse, on s'est posé laquestion de se dire, est-ce qu'elle voit la même chose ? C'est-à-dire qu'elle voit,
00:03:24 :je m'entends bien, c'est un tableau de pixels, d'accord, donc des pixels entre 0 et 255 sur 3channels RGB. À partir de ça, elle va juste se dire, tiens, nous on voit par exemple la surface
00:03:38 :bleue, les bâtiments, est-ce que la machine, si on lui dit, ça c'est des bâtiments, ça c'est del'eau, c'est la mer, etc., c'est le ciel au-dessus, est-ce qu'elle va pouvoir reconnaître elle-même
00:03:51 :au non-lulu ? Bon, ça c'est quelque chose qu'on s'est pas mal posé, donc en 1960, c'était làqu'on commençait les premières tentatives d'imitation d'un système visuel humain, donc ons'est pas mal demandé comment fonctionnent les différents nerfs qu'on a dans les yeux,comment est têtée l'image par notre cerveau, comment est perçue les couleurs, toutes ces choses-là.
00:04:15 :Dans les années 70, on a une première pensée sur l'extraction des caractéristiques. Là,on se dit, bon, une image contient des points clés, donc si je prends la mer, ça veut dire quec'est au bord de l'eau, si je prends des montagnes, c'est que c'est pas au bord de l'eau. Bon, voilà,
00:04:31 :on aimerait ça, ces caractéristiques-là. Par exemple, si je vous demande de faire unereconnaissance, savoir que si je passe une image qui se situe en mer ou pas, vous cherchez desvagues, vous cherchez des bateaux, vous cherchez la couleur de l'eau, voilà, plein de choses quipourront vous faire rappeler l'appartenance à la mer. Dans les années 90, on a eu, comment ça
00:04:53 :s'appelle, une première aventure sur la reconstruction des objets en 3D. Là, on s'est posé la question dela dimensionnalité, quelque chose qu'on ne savait pas trop faire dans les années 70. On a eu l'apparition
00:05:06 :de l'infographie qui sont des mires techniques. Alors l'infographie, c'est la création d'uneimage en numérique assistée par un ordinateur, tout simplement. Donc là, on a commencé à se dire,
00:05:16 :ben voilà, on a les filtres RGB, BGR, etc. On a commencé à se creuser la tête un peu plus endétail. Dans les années 90, on a un des chercheurs assez connus qui est Yann Lequin, qui est un
00:05:29 :précurseur des réseaux convolutionnels. Et là, il y a eu un Bing Bang, c'est-à-dire qu'on acommencé à se dire, bon ben voilà, avec un réseau de neurones, on a pu faire de la classification,on a pu reconnaître, détecter des choses, on appelle ça des anomalies ou des features,directement sur une image. Mais c'est quelque chose qui ne fonctionnait pas trop parce que,
00:05:53 :comme vous vous rappelez dans la vidéo sur l'intro deep learning, le deep marche seulement si on abeaucoup de données. Mais quand je dis beaucoup, c'est des millions. Quand on a 200 images,
00:06:04 :bon ben le problème c'est qu'on n'en a pas assez, on n'a pas assez sur les images de petitesrésolutions, on n'a pas assez de features, etc. Donc ça peut vite poser problème. Nous, ce qu'on
00:06:16 :fait, c'est qu'en shallow learning, il y a eu un algorithme, le Scale Invariant Feature Transformd'Algorithm Shift que la librairie OpenCV a mis en ligne, qui apparaît et ça nous a permis depouvoir commencer à se dire, tiens, est-ce qu'au niveau des points clés, je peux faire quelquechose au niveau de ma classification ? Donc pour vous montrer un petit peu dans la computer vision
00:06:40 :ce qu'on a un petit peu, ce qu'on sait faire aujourd'hui, une petite vidéo de systèmes dereconnaissance visuelle que les Tesla ont intégré dans leur véhicule, d'accord ? Donc là, par exemple,
00:06:53 :vous avez la vidéo en temps réel lorsqu'une voiture arrive vers la route, etc. Ce que lamachine voit, en fait, avec les gros guillemets. Donc on a bien la route qui apparaît, des petits
00:07:09 :carrés bleus qui montrent un peu des obstacles, on voit les voitures qui sont plantées sous forme,dans des cubes. Et donc la machine, ensuite, elle a des règles de circulation en disant,
00:07:22 :là, s'il y a un obstacle, est-ce que je continue, etc. Bon, ça, c'est une recherche qui est assezrécente. Les systèmes de Tesla, en fait, ont commencé à mettre leur première IA en 2015 avec
00:07:40 :la Tesla Model Roadster. Et en fait, c'est ces premières choses-là qui sont rentrées dedans. Maisnous, on ne va pas parler de ça parce que c'est vrai que c'est quelque chose qui fait partie dudeep learning. Nous, on rappelle, nous, on n'est en plus pas le learning, donc c'est le machine
00:07:57 :learning sans deep learning. Donc on va voir un petit peu qu'est-ce qu'on faisait avant, qu'est-cequ'on peut faire toujours. On va détecter ça, en fait, en parlant d'une première notion qui s'appelle
00:08:08 :des key points. Alors, qu'est-ce que c'est des key points ? En français, on traduit par des pointsclés, les points clés d'une image. Si je vous donne une image, par exemple, d'un avion Air France,
00:08:18 :d'accord, comment, déjà, je sais que c'est un avion ? Alors là, si je vous pose la question de manièrelimite, il faut la poser à un enfant, quoi, parce que c'est tellement évident. Bon, déjà, on voit le
00:08:29 :mot Air France, donc ça nous rappelle la compagnie française d'aviation. On reconnaît que c'est unavion. On voit qu'il y a les nuages et qu'on est au-dessus de l'air. Bon, un humain, il ne peut pas
00:08:37 :voler, sauf Superman. La machine, en fait, ce qu'elle voit, c'est ceci. Là, j'ai des points clésqui ont été extraits à partir de l'image au centre avec un algorithme. Et ces points clés, en fait,
00:08:53 :quand je les récupère, c'est ça qui va me définir que là, j'ai bien un avion au-dessus des nuages.Vous voyez, là, on a vraiment les points clés qui définissent bien l'avion. On n'en a pas dans le ciel
00:09:04 :et on a bien les points clés qui sont dans les nuages. On a un autre algo qui peut être un peuplus précis. Là, on va avoir beaucoup plus de points clés, notamment. Là, on ne prenait pas trop en
00:09:15 :compte les différents hublots, etc. Là, on va prendre tous les hublots. On va prendre beaucoupplus de features, beaucoup plus de caractéristiques. Mais par contre, au niveau de l'objet au premier
00:09:25 :plan, par contre, en arrière-plan, on va moins s'y intéresser. Et enfin, on a un autre algo. Pareil,on a d'autres algos qui peuvent nous prendre directement, lui donner en paramètre une image,ça va récupérer les points clés que d'un seul objet. Bon, mais là, en fait, vous avez un petit
00:09:41 :peu les trois algos qui sont assez connus, donc SIFT, BRISC et ORB, qui, en fait, vont pouvoirrépondre à nos besoins pour pouvoir faire notre connaissance ou notre classification. Parce que,
00:09:55 :nous, rappelons-nous, ce qu'on aimerait faire, c'est une classification. Alors là, je vais vousdire, ok, mais Marius, c'est quoi une classification ? Eh bien, on va regarder ça avec cette figure.
00:10:04 :La classification, en fait, tout simplement, vous avez des données en entrée, vous voulez apprendreun modèle, un mathématique, afin de définir des prédictions. C'est-à-dire, si je vous passe une
00:10:17 :image, et moi, je veux prédire si l'image contient ou pas un avion, je vais faire apprendre à lamachine des données où il y a des avions, donc des images avec, et des images sans. Parce que la
00:10:30 :machine, il faut qu'elle puisse dire, bon, là, il y en a un, là, il n'y en a pas. De manière générale,alors, pour un apprentissage assez bien, assez stable, il faut qu'il y ait autant de donnéesavec l'objet en question, avec la classe, on appelle ça, et sans, en fait. Donc, si je prends
00:10:49 :500 images avec, un modèle, en fait, va contenir les différentes écrans sur mathématiques qui vontpermettre de dire à la machine, bon, là, il y a ou pas tel ou tel objet. Je vous conseille d'aller voir
00:11:04 :la vidéo intro Machine Learning, d'ailleurs, qui est en ligne, qui est disponible pour pouvoir avoirun peu plus de détails sur qu'est-ce que c'est. Donc, nous, ce qu'on fait avec les images, alors, les
00:11:19 :classes, ça peut être n'importe quoi, ça peut être des données, je sais pas, médicales, ça peut être du son,ça peut être des films, ça peut être n'importe quoi, des données statistiques, etc. Nous, ce qui nous
00:11:31 :intéresse dans ce soir, en fait, c'est la classification des images. Si je vous donne deux images enentrée, donc là, une image en haut avec une image d'Assassin's Creed, donc une image qui ne contient pas lamère, et en dessous, une image qui la contient, je veux, en fait, créer un classifieur qui répond à la
00:11:52 :question, est-ce que l'image contient-elle la mère ou pas ? D'accord ? Et la réponse, donc laprédiction sera oui égale à 1, non égale à 0. D'accord ? Donc, j'espère que c'est clair pour tous, j'essaie de
00:12:04 :faire quelque chose d'assez simple. Pour ce faire, en fait, la première idée qu'on aimerait se dire,c'est, ok, en entrée, je donne les matrices, alors une matrice, c'est un tableau de pixels, d'accord, de mes images,je dis, bon, ben là, imaginons que j'ai une image de 28 pixels par 28 pixels, donc je peux la rentrer dans un
00:12:25 :tableau NumPy de 28 par 28, je dis que ça, c'est égal à 0, par exemple, ça, ce n'est pas une image, je lanceça à mon classifieur, il se débrouille pour apprendre, et c'est tout bon. Bon, mais le problème, c'est que la
00:12:37 :machine, il faut l'aider un petit peu, parce que juste de faire ça, de lui balancer tous les pixels, la machine neva pas réussir à faire son apprentissage. Par contre, on peut se servir de ce qu'on a vu précédemment, notamment au
00:12:49 :niveau des points-clés, c'est-à-dire que là, sur l'image d'Assassin's Creed, si je prends les points-clés, par exemple,c'est une pyramide, de l'objet que porte le personnage, ou en dessous, je prends le coucher de soleil avec lesdifférents petits moutons qu'on peut voir, la couleur de l'eau, etc., ça, ça va pouvoir permettre à la machine de faire
00:13:10 :cette classification. Et en fait, pour ce faire, c'est une méthode qui existe, qui vient tout droit de notre domaineen IA, qui est le traitement automatique des langues, qui s'appelle le Bag of Words. Alors cette méthode, en fait,
00:13:26 :qu'on va voir ce soir, elle a été dérivée, on appelle ça un Bag of Visual Words. Donc, qu'est-ce qu'elle consiste ?Dans un premier temps, vous avez un dataset, un jeu de données, qui contient des images, d'accord, de tailles plus oumoins homogènes, d'accord ? Vous allez prendre une partie de ce dataset-là, vous allez le découper en deux.
00:13:48 :La première partie contiendra des images qui vont permettre d'entraîner la machine, donc d'entraîner notre IA,et l'autre partie va être de pouvoir tester ce qu'on va apprendre, d'accord ? Là, si vous voyez le dauphin,
00:14:01 :je ne vais pas faire apprendre la machine sur le dauphin, ça, ce sont juste des images de test pour pouvoir évaluerles performances de notre algorithme. Donc la première étape va être d'extraire les différents points-clés
00:14:15 :avec les algorithmes, comme on l'a vu, donc SIFT ou RBO-BRISK, par exemple, de toutes nos images d'entraînement,d'accord ? Donc là, vous avez un exemple de points-clés qui ont été extraits à partir de, là, d'une image d'un,
00:14:30 :je pourrais dire d'une église, peut-être, d'un clocher. Ensuite, ces points-clés-là, en fait, on va les mettresur un tableau. Alors là, c'est en deux dimensions, mais il faut savoir que là, du coup, on est en N dimensions, d'accord ?
00:14:43 :Et en fait, ce qu'on va faire, c'est qu'on va regarder s'il y a une similarité en termes de données, c'est-à-dire que là,les points rouges, ce seront plus des images qui vont avoir un objet en commun, d'accord ? Donc si ce sont des images,
00:14:57 :je ne sais pas, de ville, ils ont forcément un clocher, d'accord ? En noir, autre chose, etc. Et en fait, mon but,ça va être d'utiliser un algorithme de clustering. Donc, qu'est-ce que c'est qu'un algorithme de clustering ?
00:15:09 :C'est un algorithme qui, en fait, pense qu'il va avoir trois ensembles de couleurs comme ça, qui va définir, en fait,les ensembles en question, et on va pouvoir récupérer, en fait, le centre de ces ensembles-là. Et en fait, c'est ça
00:15:23 :qui vont être, on va dire, des visual words, d'accord ? C'est ça qu'on va balancer dans notre paquet. Donc, en fait,un bag of features, au lieu d'avoir un paquet de mots, c'est un paquet, un dictionnaire, d'accord, qui va contenirdes points clés qui vont nous permettre de faire la classification, d'accord ? Donc là, si je reprends
00:15:43 :sur le bag of features, on voit que là, c'est une image d'œil, etc. Bon, nous, ce ne sont pas tout à fait des imagesà proprement parler, d'accord ? Ce sont vraiment des vecteurs, d'accord ? Des tableaux. Et quand j'ai terminé de faire cela,
00:15:57 :je vais regarder un petit peu les fréquences de tout ça. S'imaginons, là, pour connaître, si je veux savoir si tel objetse situe dans une ville, d'accord ? Bon, je vais regarder et je vais comparer un petit peu les fréquences. C'est-à-dire que
00:16:09 :la fréquence, là, si je prends un exemple, on voit le petit œil qui est ici. Si je prends une image qui a beaucoup deressemblances, qui a des pixels qui se ressemblent beaucoup avec cette image-là, bon, c'est que du coup, on a un certain...
00:16:31 :comparer avec cet œil-là ait la même classe, d'accord ? Et c'est ça qui va faire notre classification. Et lorsqu'on va entraîner,du coup, notre modèle, d'accord ? Donc là, j'ai pris SVM, ça peut être les cas plus proches voisins, comme on a pu voir
00:16:45 :dans la vidéo précédente. Et là, je vais faire ma classification sur des fréquences, d'accord ? Donc vous voyez qu'en fait,je ne mets pas des images en entrée, d'accord ? Je ne mets même plus que ça. Je vais extraire d'abord des caractéristiques.
00:16:58 :Je vais faire un dictionnaire de caractéristiques, un codebook, d'accord ? Et je vais ensuite récupérer les fréquences de ceskeypoints, d'accord ? De ces descripteurs. Et je vais ensuite les mettre dans un classifiant. Bon, cette méthode-là, du coup,
00:17:14 :elle a eu pas mal de succès. Elle fonctionne. On verra par la suite qu'après l'appréhension, j'ai fait une petiteimplémentation de cette méthode-là et on va voir un peu qu'est-ce qu'il en est. C'est facile à coder. Ce n'est pas très difficile.
00:17:29 :Il faut juste se creuser la tête sur les différentes dimensions, etc. Mais par contre, comme toute bonne méthode,elle a des limites. Donc la limite, c'est qu'on a besoin de chercher des méthodes d'extraction de caractéristiques.
00:17:41 :Nous, on parle de l'algorithme SIFT, d'accord ? On a besoin de quelque chose d'une base, en fait, puisqu'on ne peut pasbalancer l'image comme ça et dire, voilà, classifiez-moi ces images-là. On a besoin d'être beaucoup plus classé.
00:17:55 :On est limité au niveau du nombre, parfois. Donc comme je l'ai dit, parfois on va faire une classification sur des imagesqui contiennent ou pas la mer. Si on n'a que 400 images, parfois le deep learning, ça ne va pas suffire, d'accord ?
00:18:09 :Donc on va devoir passer en shallow learning. Et du coup, on va devoir être limité parfois. La machine, si elle doit créerune tâche assez complexe, elle va avoir besoin de beaucoup plus d'images. Parfois, on n'en a pas. Donc en entreprise, par exemple,
00:18:23 :c'est souvent ce qui se passe lorsqu'on veut faire de ces modèles-là. Bon, comment on fait, justement, pour faire marchernotre IA, en ayant la contrainte des données ? On va voir que, du coup, les caractéristiques qui sont extraites,
00:18:42 :comment on sait que les caractéristiques importantes que nous voyons sont aussi les mêmes que la machine ?C'est-à-dire que là, ce que je prends, c'est que, vous comprenez bien que je ne vais pas prendre toutes les caractéristiquesqui sont ici, mais je vais prendre vraiment le centre de mes types de caractéristiques, d'accord ? Donc, est-ce qu'il y en a assez ?
00:19:10 :dans l'abstraction ? Parfois, on n'a pas assez de descripteurs. Là, dans l'image que j'ai mis, la première image sur l'avion,parfois, on n'a pas assez de points-clés. Des fois, on en a trop. Donc, trop, ce n'est pas bien, comme pas assez.
00:19:27 :On va regarder le choix du classifiant. Là, par exemple, j'ai pris SDVM, c'est le Support Vector Machine.Il y a des algos de boosting et d'algos qui font plein de choses, en fait, pour faire de la classification, mais qui fonctionnent de manière différente.
00:19:39 :Et chacun de ces algos, si je peux les comparer à une voiture, du coup, ils ont des hyperparamètres.Si je prends, par exemple, une voiture électrique, une voiture à distance, l'une va partir au galop plus rapidement que l'autre, etc.
00:19:56 :Il faut paramétrer tout ça. On ne peut pas faire les choses à l'aveugle, sinon, ça ne marchera pas.Et en fait, on va se rendre compte que tout ça, vous voyez, là, ça fait pas mal de contraintes qu'il faut vraiment prendre en compte.
00:20:09 :Et bien, en fait, il y a une magie qui est arrivée avec Yann Lequin, c'est ces fameux réseaux convolutionnels.Ça, c'est quelque chose que j'ai parlé dans la précédente vidéo sur l'intro de Deep Learning.
00:20:20 :On ne va pas avoir cette étape d'extraction de features.C'est-à-dire que nous, ce qu'on va avoir, c'est une image dans l'entrée, un réseau de neurones qui va effectuer un ajout de filtres sur une image.
00:20:36 :Et ensuite, lorsqu'on va lui mettre dans un réseau fully connected layers, elle va nous faire la classification.Donc là, si je prends le cas d'un zèbre, on va avoir un pourcentage entre 0 et 100, dans une ressemblance à une certaine classe.
00:20:55 :Donc, vous voyez qu'en fait, l'homme n'a plus besoin de tirer à la machine de l'âge pour extraire telle et telle caractéristique.Parce qu'au final, c'est pas forcément la bonne.
00:21:04 :Nous, on se dit, si je reprends la photo de Nolulu, si il y a telle et telle chose, c'est forcément Nolulu.Mais la machine, elle ne raisonne pas comme nous.
00:21:12 :Peut-être qu'elle, ce sera une certaine couleur RGB sur l'océan qui lui fait à tout prix repenser à l'océan Pacifique.Et donc, l'océan Pacifique, proche d'un bâtiment de telle hauteur, c'est forcément Nolulu.
00:21:26 :Donc ça, en fait, on laisse la machine faire.Et c'est là, un petit peu, la beauté de la chose.C'est que nous, ici, donc, dans la couche là, on va mettre des filtres qui vont pouvoir faire ressortir des caractéristiques.
00:21:39 :Alors, changer des filtres, c'est faire changer les couleurs, d'accord ?Ajouter de l'obscurité, ajouter, je ne sais pas, des couleurs un peu plus chaudes, faire varier l'intensité lumineuse, etc.
00:21:51 :Et ensuite, on va pouvoir faire une sorte de moyenne d'une image.C'est-à-dire qu'en entrée, lorsque je vais avoir une image de 256x256, si je prends pour exemple 4 pixels qui sont à côté,si les 4 pixels, ils ont, je ne sais pas, ils ont presque la même valeur,je vais faire en sorte que sur ces 4 pixels là, je vais prendre la valeur la plus grande.
00:22:13 :Du coup, ce qui va se passer, c'est que mon image, je vais la diminuer, je vais la réduire.Et en fait, je vais garder que les pixels qui sont importants.
00:22:21 :C'est ça qui va faire une couche de convolution, d'accord ?Une couche de pooling, pardon, une couche de convolution aussi.Et ensuite, du coup, je vais vectoriser mon image, c'est-à-dire qu'au lieu d'avoir une image de 28x28,je vais avoir un vecteur de 1x256, je crois.
00:22:38 :Et ensuite, ça, je vais le balancer dans mon résultat qui va permettre de faire la classification, d'accord ?Voilà, donc maintenant, ce que je vous propose de faire, c'est faire une petite pause,peut-être pour parler un petit peu de ce qu'on vient de dire aujourd'hui, d'accord ?
00:22:54 :Et après, là, on fait une petite pause au niveau des questions,et ensuite, on va voir un petit peu un exemple de code que j'ai réalisé sur le bag of features.
00:23:02 :Est-ce que vous avez des questions ?Je viens d'arriver, donc non. Bonjour.Bonjour.Par contre, je ne peux pas voir le...Je vais essayer de voir le salon...
00:23:18 :Alors, on doit dire qu'il dit que pour l'instant, c'était clair.D'accord, ok.Super. Alors, si j'ai été clair, c'est cool.Il y a Johner qui écrit.
00:23:30 :Ok.Ah, ça y est, je viens de voir le... Je vois le channel, ça y est.Clair et génial.Ok, c'est cool.Ça fait plaisir. Je suis content d'avoir pu un petit peu rentrer...
00:23:42 :J'avoue, je viens d'arriver, donc je ne sais pas trop ce qui a été dit.Bah, je te propose... La vidéo a été enregistrée,et je vais la mettre ensuite sur ma page YouTube,donc je te propose que tu t'intéresses de voir et regarder.
00:23:56 :Ça marche, super.Bon, s'il n'y a pas de questions,je vous propose qu'on aille voir un petit peu au niveau du code,du coup, qu'est-ce que ça donne.
00:24:04 :Parce que je vois que tout le monde était un petit peu...Ok, c'est beau, mais est-ce que ça marche au niveau Python ?Il y a David qui est en train d'écrire, je crois.
00:24:10 :Ouais, je vois aussi.Peut-être attendre...Je vais attendre peut-être 5 minutes, toi.Tu ne comptes pas sur Vess ?Non, sur Pacharm.Est-ce que c'est mieux de ton point de vue ?
00:24:23 :Ce n'est pas que c'est l'un est mieux que l'autre,c'est juste que moi j'ai appris beaucoup plus sur Pacharm,et sur la suite JetBrains,donc j'étais beaucoup plus avenant vers ce logiciel-làen fait, que VessCode.
00:24:37 :D'accord.Bon, si personne n'a des questions,alors je vous propose qu'on puisse continuerde regarder ça.Alors ce code-là, je vais le mettre en lignesur mon GitHub,je vous passerai le lien plus tardquand j'aurai terminé d'ajoutertoutes ces choses-là.
00:25:00 :Donc en fait, là, j'ai une démonstrationsur les algorithmes SIFT, ORB et Brisk.Donc là, ce sont les imagesque j'ai montrées tout à l'heure.
00:25:08 :Donc là, vous avez les petites démos,vous pouvez les lancer,vous avez les algorithmes,vous mettez une image en entrée à un pas,vous avez les keypoints, les points clés qui apparaissent.
00:25:18 :Au niveau de la méthode,au niveau de l'implémentation,donc démo bag of folds,est-ce que c'est fait comme ceci.Donc dans un premier temps,vous mettez en place votre dataset,alors voilà pour les ressources,donc moi ce que je vais faire, c'est une classificationcomme je disais pour reconnaître s'il y a la mer ou pas
00:25:41 :sur une image.Donc j'ai des imagesoù il y a l'océan,et j'ai des images où il n'y a pas l'océan.Pour vous montrer un petit peu,je vais zoomer un petit peu sur le texte.
00:25:55 :Donc là, ce sont des imagesavecl'océan, d'accord.Je précise, elles sont de tailles différentes.Et ensuite, j'ai des imagesqui contiennentdes objetsqui ne sont pasdes océans.
00:26:17 :Alors il y a des images pièges,évidemment, il faut un peu piéger.Là, c'est un fleuve, donc c'est pas un océan.C'est assez zoomé, Joner ?
00:26:27 :Ou tu veux que je zoome un petit peu plus ?Ok, super.Donc là, on va essayerde piéger la machine en disantça c'est pas un océan.
00:26:39 :On va faire attention.Donc là, c'est vraiment des images diverses et variéesque j'ai dans mon dataset, d'accord.En fait, on va faire apprendre la machine sur tout ça.
00:26:49 :Donc là, on va vraiment extraire chacune des caractéristiques.Donc, ce que je vais faire déjà,ce que je crois faire, c'est d'analyserun petit peu en termes de dimensionsqu'est-ce qu'on a.
00:27:01 :Parce que là, moi si je faiscomme je dis, il faut que toutes les donnéesen l'entrée, elles aient la même tailled'image, d'accord.Mais la question, c'est de dire qu'est-ce que je prendscomme height et comme width, d'accord.
00:27:13 :Là, j'ai affiché un petitgraphique en matplotliboù vous avezoù vous avez en faitchacune des images en fonction de sadimension, d'accord. Vous avez la moyenne
00:27:25 :qui est ici, d'accord.Donc la moyenne qui estde 399 par638. Vous avez leQ1, Q3 en fait qui sont lesécarts inter-quartilesoù vous allez avoir, ça va êtrela moyenne moins 25% et la moyenne plus 25%donc 75%du jeu de données, quelle est sa dimension.
00:27:45 :Vous avez lesmoyennes minimales, les moyennes maximales, d'accord.Nous, en fait,on va faire deux choses.Dans un premier temps,donc ma méthode,je vais prendredes imagesqui ont la taillemoyenne de mon dataset.
00:28:05 :D'accord, jusque là,on est ok. Et ce queje vais faire, c'est que je vais normaliserdonc en fait je vais tronquertoutes mes images parces dimensions là. Donc l'image plus petite
00:28:17 :aura la dimensionwidth-height, donc 639, etc.Et les images très grandesseront aussi tronquées.D'accord.Pour l'instant, ça je vous en parlerai.Je vous en parlerai tout à l'heure.
00:28:31 :C'est un objet Python que j'ai créé,d'accord, qui va s'occupertout simplement de fairela classification,l'extractiond'unensemble,d'un tableaude vecteurs de fréquence.
00:28:53 :D'accord, comme on en a parlé tout à l'heure.Donc je vous laisserai voir un peu l'implémentation,comment ça se faitau fur et à mesure, donc les différentes étapes.
00:29:01 :La création du codebook, qui est un dictionnaire.Les visual routes,qui sont en fait le centre desfameux clusters que nous avons vus.Et la création des vecteurs de fréquence.
00:29:11 :D'accord. Ensuite je vaislancer un entraînement.Alors, par rapport à ça, je vous ai ditil faut bien faire attention au niveaudu découpage de nos données, c'est-à-dire queje vais prendre 70%du dataset que je vaisentraîner ma machine dessuset 30%où en fait ces images-là je vais mettre de côté
00:29:31 :pour pouvoir testerma machine, pour pouvoir en faitévaluer tout ça.Et ensuite ce que je vais faire, c'estque je vais appeler plusieurs classifiers.
00:29:43 :Je ne détaillerai pas ce que c'estle but de cette vidéo,mais vous verrez dans le code,où je vais en fait lancer plusieurs classifiers en même temps.
00:29:51 :En même temps, un par un.Et je vais ensuite récupérer et direje te veux apprendre sur ça, est-ce que tu arrivesà apprendre, quelles sont tes performances, etc.
00:29:59 :Donc si on fait un petit run,on va avoir une petite démonstrationsurl'apprentissagedes algorithmes de machine learning,de learning.Donc moi j'ai un dataset de 414images. Alors quand je vous ai dit de respecter
00:30:17 :le 50-50 sur avecet sans classe, bon parfois on n'a pastrop le choix. Moi j'ai un petitécart de quelques images.Bon après ça c'est vraiment en pratique,comme je dis, il faut essayer de se rapprocherde la théorie, mais parfois on n'y arrive pas.
00:30:31 :Ensuite ce que je vais faire, c'est quelà je vais faire apprendresur 289 images.Donc c'est mon x-train où je vais faireapprendre la machineen fait à30,simplement. Et après
00:30:47 :vous faites l'abstraction de 30%pour pouvoir fairemes tests. D'accord ?Et ensuite ce qu'il va se passer c'est qu'en fait mamachine... Super !
00:30:57 :Ma machine, ce qu'elle va faire...Attendez, j'ai un petit problème de dimension.Non !On va justefaire ça.Ça c'est le coup de pouvoir lancerle truc en live. C'est toujours un petit problème.
00:31:11 :Bon là on va tronquer à 500-500.Bon ça c'est censé marcher.J'ai fait le test là.C'est ça.Et donc en fait on va faire apprendre nos différentsalgorithmes. Alors vous pourrez tester
00:31:23 :du coup en live chez vousquand j'aurai réparé mes petits bugs.Et on va avoir en fait les différentsscores. Notamment le scorequi va être la différence entre ce que je vais prédire.
00:31:33 :D'accord ? Donc on appelle ça lesY-Predict. Et en faitje vais faire ce test là sur lesX-Test. D'accord ?Et les X-Test en fait, j'ai aussileurs Y-Test. Mais la machine
00:31:45 :ne sait pas que j'ai des Y-Test.D'accord ? Parce que je vais tester avec les X-Test.Donc elle va me donner desprédictions et je vais comparer les prédictions avecce que je connais. Voilà.
00:31:55 :Donc là on fait une classification avecla Régulation Logistique qui est un classifieur.Avec les Decision Tree.Donc au fur et à mesure en fait je vaisparler de ces différentsclassifiers au niveau des vidéos.
00:32:07 :Les Random Forest.Donc en fait là ce qu'il va fairedans cette étape là, il valancer des classifiers. D'accord ?Et il va essayer de trouverl'Accuracy Score. On appelle ça
00:32:20 :sa performance.Doncentre 0 et 1.De comment il va pouvoir en fait faire cetteclassification là. Là on peut voirque... Alors il va chercher les
00:32:32 :meilleurs hyperparamètres. Là vous avez les paramètresde chaque algorithme. Donc c'est pas nousqui le faisons. C'est lui qui le fait. Mais il va lancer
00:32:38 :plusieurs fois en fait l'entraînement. Il va pas en fairequ'un seul. Et ensuitelà si je prends pour la régulation logistiqueon va avoir des paramètres comme C, Penalty,Solver, etc.
00:32:48 :Pour les EVM on va juste avoirle Kernel. Et quand il a trouvéles meilleurs paramètreson va ensuite refaire l'entraînement.Et en fait on va regarder ceci.
00:32:58 :Ceci qu'est-ce que c'est ? C'est untableau.Dans l'entrée j'ai deux classes. D'accord ?0, je n'ai pas la mer.1, j'ai la mer.Et en fait je vais correcter le scorequi est ici. Donc c'est l'info score.
00:33:12 :Elle est de 66%. Donc qu'est-ce que ça veut dire ?Ça veut dire que la machinesait reconnaître à 66%la classe0. Doncles images où il n'y a pas la mer.
00:33:24 :Et elle sait reconnaître à67%les images où il y a la mer.Et là vous avez une accuracie moyenne.D'accord ? Donc ce qu'elle sait faire entre les deux.
00:33:34 :Qui est de 0,66.Alors comment on interprète ça ?66%c'est pas fou. Parce que le seuil de hasardc'est 50%.On a une chance sur 2 de se tromper. D'accord ?
00:33:46 :Là elle monte un peu à 100%.Mais on est quand même assez loin.Donc ce qu'on va faire c'est qu'on varegarder un autre classifiant. Les
00:33:54 :decision trees. Bon bah là c'est pareil.Ça reste à 0,68. Alors le butc'est vraiment de monter à 100%. Ça veut dire que la machine
00:34:00 :ne se trompe plus et qu'elle fasse uneclassification qui est parfaite. D'accord ?On va regarder un petit peu le read.0,68 c'est quand même pas mal.
00:34:08 :Les mêmes 0,70.Donc ça fait 70%.Elle a 70% de performancequ'elle ne peut pas se tromper.Elle sait faire la bonne classification.Et en fait ce qui va se passer c'est quelà vous voyez on ne dépasse pas 70%.
00:34:22 :On est là, on se dit bah merde.Qu'est-ce que je vais pouvoir utiliser comme méthodeafin de pouvoir...Alors si je reprends lele Japloama ici.
00:34:32 :Qu'est-ce que je vais pouvoir faireen fait pour améliorercette méthode de Bag of Visual Boards ?Et en fait c'est une technique qui a étéassez simple.
00:34:42 :On appelle ça faire de la Data Augmentation.Là par exemple d'expérienceon sait qu'on a 414 images.C'est pas bon. D'accord ?Là on a juste 200images où il y a la mer, 200 imagesoù il n'y a pas la mer. Alors il faudrait
00:34:56 :monter un petit peu tout ça parce que là ça suffitvraiment pas. Donc ce qu'on va fairec'est qu'on va augmenter les données sans les augmenter.
00:35:02 :Je m'explique.Vous vous dites ok bah Marius on va faire de la Data Augmentationmais comment on peut augmenter siune entreprise ne peut pas fournir plusd'images que ça ? Si je prends l'image
00:35:12 :de la mouette, du dauphin qui est ici.Par exemple des oiseaux, d'accord ?Et que je fais une rotation.Bah en fait finalement c'est la même image.
00:35:20 :Sauf que je l'ai juste tournée.Mais on est d'accord que c'est toujours un dauphin.Ok ?Donc si je la tourne de 45 degrés,de 90 degrés et de 180 degréson est d'accord que c'est toujours la même image.
00:35:32 :Mais la machine voitsi je prends le dauphinà 0° et à 180°la machine voit deux images différentes.Là en fait j'ai juste remplacéj'ai retournétoute ma matrice de pixels.
00:35:46 :C'est ce qu'on va faire.Et on va augmenter les données comme ça.Ce qui va se passer c'est qu'on va faire de la Data Augmentationdonc je reprends le codequi est ici.
00:35:56 :Voilà.Doncpar exemple pour faire la Data Augmentationattention il faut qu'on ait les mêmes dimensions.C'est pour ça que j'ai mis un Wither Height qui était fixé.
00:36:06 :D'accord ?Et on va augmenternos données. D'accord ?Donc là dans Data Augmentationce que je fais c'est qu'en fait je prends mon imageet je vais lui rajouterune rotation à 90 degrésdans la rotation horaire.
00:36:22 :Dans la rotationdans l'autre sens à 180 degrés.Et ce que je vais faire c'est queje vais relancer mon entraînement.Donc là vous voyez j'aiune méthode qui fait ma classificationmais je vais parfoisdevoir ajouter d'autres petites méthodespour pouvoir encore améliorer ça.
00:36:40 :Et là je passe de414 images à 1242 images.Vous voyez je vais triplermon entrée.Alors on va voir un petit peu ce que ça va donner.
00:36:50 :Alors il faut savoir que l'IAc'est pas une science exacte.C'est le monde des stats.Donc il faut tester, tester, tester.Moi j'ai passé des journées àdéjà me dire ok le backoffloadil est à 60%, comment le passer à 70% ?
00:37:04 :Qu'est-ce que je peux faire ?Qu'est-ce que je peux rajouter ? Est-ce que je mets que des images ?Est-ce qu'il y a plein de techniquesau niveau de la vision par ordinateur ?
00:37:12 :Là je vous en ai montré une.C'est la rotation au niveau des images.D'accord ? Je peux ajouter aussi le fait quepar exemple sur une imageje vais récupérer je sais pas75% de l'imageje vais garder leurs pixels et tout le contourje le mets en noir. Je mets tout
00:37:28 :en pixels de couleur noir.D'accord ? Bah ça me fait quand même une nouvelle image.Pourtant c'est la même image de mon dataset.Mais je peux augmenter mes données comme ça.
00:37:36 :On va prendre attention.Il faut faire gaffe à un truc.C'est que si on augmente trop nos imagesla machine va faire ce qu'on appelle du overfitting.
00:37:44 :Ça veut dire qu'en faitelle va surapprendre. Et ça on ne veut pas.Ça veut dire que s'il fait du surapprentissagesur les donnéessur lesquelles elle va s'entraîneren fait elle va faire de l'apprentissagequi est par cœur. Et comme vous le savez
00:37:58 :ça marche à l'école et ça marcheaussi pour une IAl'apprentissage par cœur en fait c'est pasapprendre. D'accord ? Parce qu'on va tropapprendre. Et la machine va tellement se
00:38:08 :focaliser sur les données qu'elle aque lorsque je vais la mettre sur des donnéesréelles. D'accord ? Donc je vais la mettreen déploiement. Bah elle va se cracher.
00:38:16 :Et les gens disent mais merde pourquoielle fait 100% sur98% surles entraînements. Et ça marche pas.Parce que on faitdu surapprentissage. Et là
00:38:28 :il faut faire vraiment attention à faire ça. Donc il faut trouverun juste milieu. Vous voyez ?Entre surapprendreet ne pas sous-apprendre.Vraiment apprendre ce qu'il faut.
00:38:38 :D'accord ? Donc là on aaussi comme tout à l'heureon a l'entraînement sur noson a la recherche des meilleurshyperparamètres de nos différentsalgorithmes de classification.
00:38:50 :Donc là vous avez AdaBoost, SVM.Bon. Ça je prends une petiteprésentation dans les salons d'apprentissage automatiquequi est sur le docstring. D'accord ?J'ai un peu commencé mais j'avais pas trop le temps.
00:39:00 :Donc je vais essayer de faireça. Ou peut-être des vidéos. Enfin je vais voir un petit peupour vous expliquer chacun des algos. Parce que
00:39:06 :quand vous faitesquand vous êtes enentrepriseet que vous faites de l'IA. D'accord ?On te passetes données. Moi je veux que ma machine
00:39:18 :sache faire ça. Tu te débrouilles.Voilà. Ça c'est leça c'est le coupc'est ce qui se passe dans 90% des cas.Alors comment tu détermines la limitedu surapprentissage ? Ça c'est une très bonne question.
00:39:30 :Alors là justement je n'ai pasd'exemple, pas de données. Donc je vais te faireun petit paint. D'accord ? C'est pas trèspas très joli mais tu vas comprendre pourquoi.
00:39:38 :Là en fait ce qui va se passerc'est queen Yje vaisregarder du coup le score.Donc les performances de mamachine. D'accord ? Et ça
00:39:52 :ça va être combien de foisje vais entraîner. D'accord ?Donc j'appelle ça training parce que j'ai la flemmed'écrire en français. D'accord ?Ma machine. D'accord ?
00:40:02 :Donc ça c'est le score.Ou alors on peutremplacer le score par la loss.En général la loss c'est la fonction de perte.Donc en fait c'estsi tu veux minimiser la pertec'est que du coup tu veux augmenter ton score.
00:40:16 :D'accord ? Ce qui n'est pas la logique.Donc on va mettreperte.Et en fait ce que tu vas faire c'est que tu vas comparer tes donnéesdonc tonévaluation en entraînement et en test.
00:40:28 :D'accord ? Et parfoisen fait tacomment ça s'appelle ?Ta courbe, ce qu'elle va faire c'est qu'elle va descendre.Donc ça ça va être ta courbe en entraînement.
00:40:38 :Et après elle va faire ça.Alors si tu te dis merde c'est...Y'a un problème. Mais en fait c'est ça le surapprentissage.C'est à dire qu'à partir de ce moment làdès que t'arrives là, tu vas minimiserta perte jusqu'à un certainentraînement. D'accord ? Donc un certain
00:40:52 :rapport à plein de paramètres.Et en fait ta perteelle va re-augmenter du coupelle va faire diminuer ton scoreet là tu vas être en overfitting.
00:41:02 :Donc en fait le but c'est vraiment de trouver ce seuil làoù tu vas pouvoiravoir uneconversion vers la meilleure des solutions.D'accord ?
00:41:12 :Doncregardons un petit peu notre classification.Et bam !0.75%0.88%Oh c'est fort !0.96%Là c'est très très fort !Et donc là c'était le petitle petit plus.
00:41:32 :Gradient boosting c'est un bon classifieur.On part à 0.97%Alors là du coupil faut faire attention. On se dit okje suis droit du pétrole. Je suis presque
00:41:42 :à 100%. En faisant justedonc vous voyez là ce que j'ai fait c'est j'ai justeajouté plus de données, des images en faisant des rotations.
00:41:48 :Mais ce qu'il va falloir fairec'est de tester. Donc làvous avez une première évaluation qui estassez bonne. Donc là les zones métriqueson apprendra un petit peu qu'est-ce que c'estexactement.
00:42:00 :Là ce qu'il faut faire quand vous avez un scorecomme ça c'est de tester sur des donnéesqui n'ont jamais été vues par la machineet de voir un petit peuce qu'il se passe. Là ce soir je ne vous la ferai pas
00:42:10 :parce que je n'ai pas eu le temps de préparer ces données làmais je vous ferai un petit feedback.Donc là ce que je vais faire c'est quecet algorithme là, je vais récupérerce qu'on appelle un modèle.
00:42:20 :Donc rappelez-vous sur lapartie au niveau de l'apprentissagele modèle c'est ce qui contienten fait les règles d'apprentissagecomment la machineva faire ses classificationsen langage IA en fait c'estles équationsles mêmes équations mathématiquesde mon IAd'accorden fait ça je vais pouvoir le récupérer
00:42:44 :et faire des prédictions sur des donnéesqui n'ont jamais été vues.Donc là le butde la suite ce serade faire ça et on verra un petit peuqu'est-ce que çava donner. Est-ce que c'est du
00:42:58 :bon apprentissage ? Alors on a toujoursun écart, même si c'eston essaye de diminuer au plus en faitl'écart entrel'erreur, là c'est une erreur qui a ététraitée donc avec une erreur réelled'accord, on n'aura jamais un97%à la fois en entraînement et à la fois
00:43:16 :en réel, on va toujours perdre un petit peu d'accord, c'estnormal, on ne peut pas lui donner toutesles images de l'univers sur un certain trucmême si on pouvait ça ne suffirait pas parce qu'on est en staton n'est pas dans un monde parfaitmais on peut se rapprocher vers une bonne solution
00:43:28 :ok ?Voilà donc du coup le codecomme je le disais sera disponibleicije vais mettre le lien dans lale lien de mon github du coupdans le channeldonc là j'attendais vraiment de terminer la présentationpour voir le... Ouais donc c'est le projet
00:43:46 :salsa d'accord, vous aurez uneje suis en train de terminer le textepour expliquer en détailsi vous voulez lire tranquillement chez vouseuhles avenants et les aboutissantsen fait de notrede ce qu'on a dit ce soir d'accordun peu plus de précision au niveau mathématiqueetc
00:44:06 :je vous encourage àà récupérer le projet, pas parce que c'estle mien parce que je suis content, mais à le récupérerpour pouvoir tester les scripts de démod'accord, pour voir de votre côtéqu'est-ce quecomment ça marche exactementun truc que j'ai pas parlé ici c'est la démo au niveau
Aucune occurrence trouvée pour « ».
00:00:00
Introduction et Présentation du Mentor
00:00:35
Objectif de la Session sur la Classification d'Images
00:01:03
Introduction à la Computer Vision
00:03:03
Évolution de la Computer Vision au Fil des Décennies
00:06:16
Techniques d'Extraction des Caractéristiques
00:09:19
Présentation de la Méthode Bag of Features
00:14:14
Comparaison avec le Deep Learning
00:21:55
Pause et Questions
00:24:00
Démonstration de l'Implémentation en Python
00:35:00
Augmentation des Données
00:43:02
Conclusion et Ressources Supplémentaires