Auteurs : Heuzef, Yvan Rolland, Viktoriia Saveleva, Florent Constant
Date : 06/2024
La comprĂ©hension des champignons est cruciale pour la prĂ©servation de la biodiversitĂ©, la santĂ© humaine et lâagriculture durable.
Les champignons ne sont pas des plantes, bien que leur apparente immobilitĂ© puisse le faire penser. Une distinction simple est que les champignons ne font pas de photosynthĂšse, contrairement Ă une majoritĂ© de plantes. En fait, dans lâarbre de la vie, les champignons sont plus proches des animaux que des plantes bien que leur mode de nutrition, paroi cellulaire, reproduction, les distingues Ă©galement nettement des animaux.
Lâarbre de la vie, qui reprĂ©sente la parentĂ© entre les organismes vivants, peut ĂȘtre dĂ©coupĂ© en six rĂšgnes. Les champignons reprĂ©sentent rien qu'Ă eux le rĂšgne fongique, qui rassemblerait hypothĂ©tiquement jusqu'Ă 5 millions dâespĂšces de champignons. Parmi toutes ces espĂšces, environ seulement 120 000 ont Ă©tĂ© nommĂ©es et âacceptĂ©esâ par la communautĂ© scientifique en 2017.
La reconnaissance de champignons reprĂ©sente un dĂ©fi dans le domaine de la vision par ordinateur. En effet, les critĂšres biologiques et le peu dâespĂšce rĂ©fĂ©rencĂ©s limite Ă une reconnaissance peu fiable et sur un Ă©chantillon insignifiant si lâon souhaite Ă©tudier lâensemble du rĂšgne fongique.
La classification classique des vivants est schématisée ainsi :
Classification classique des rĂšgnes |
---|
Animal |
Plante |
Champignon (Fungi) |
Protiste |
Bactérie |
Archée |
Et les principaux rangs taxonomiques ainsi (ici, un exemple de classification du trĂšs connu âChampignon de Paris") :
On y voit que les champignons sont classés (du plus général au plus spécifique) en divisions, ordres, familles, genres et espÚces.
L'Ă©tat de lâart nous apprend que la reconnaissance des champignons au sens large ne sera possible que sur un Ă©chantillon trĂšs faible du rĂšgne fongique, mais ce nâest pas tout, en effet, la vision par ordinateur effectue un balayage des images matricielle pour comparer les similitudes pour chaque pixel avec des images dĂ©jĂ labellisĂ©, ainsi, nous dĂ©pendons de la qualitĂ© des sources de donnĂ©s, qui ne reprĂ©sentent quâun Ă©chantillon des ~120 000 espĂšces scientifiquement nommĂ©es sur un total pouvant aller jusqu'Ă 5 millions dâespĂšces thĂ©orique.
Il existe Ă©galement la distinction entre macro-champignons et micro-champignons, qui se base sur une combinaison de caractĂ©ristiques morphologiques, cellulaires, reproductives, Ă©cologiques et Ă©conomiques. Lâidentification prĂ©cise des champignons exige des connaissances approfondies en mycologie. Par ailleurs les diffĂ©rentes sources alertent quand Ă la difficultĂ© de lâidentification dâune espĂšce se basant uniquement sur lâaspect visuel.
Ă ce jours, il existe approximativement 35000 genres et de champignon sur terre et certain peuvent compter jusqu'Ă des milliers espĂšces nommĂ©s, tandis que dâautre peuvent nâen compter quâune seul.
Une analyse visuelle des diffĂ©rents rangs taxonomiques sur des Ă©chantillons de photos extraite de Mushroom Observer nous laisse penser que câest au niveau de lâespĂšce que nous pouvons observer les plus de traits caractĂ©ristiques en vue de rĂ©aliser une identification visuelle :
Des champignons appartenant Ă lâordre des PEZIZALES :
Des champignons appartenant Ă la famille des RUSSULACEAE :
Des champignons du genre CANTHARELLUS :
Des champignons appartenant Ă lâespĂšce HYPHOLOMA LATERITIUM :
Câest Ă©galement communĂ©ment le niveau dâidentification recherchĂ© car câest au niveau de lâespĂšce que sont dĂ©finies les principales propriĂ©tĂ©s dâun champignon, telles que la comestibilitĂ©.
Nous constatons Ă©galement que les champignons peuvent avoir des formes si variĂ©es que deux champignons de la mĂȘme espĂšce peuvent avoir un aspect trĂšs diffĂ©rent (notamment en fonction de lâage), alors que deux champignons dâespĂšces diffĂ©rentes peuvent afficher une trĂšs forte ressemblance.
Pour illustration, deux champignons de lâespĂšce Coprinus comatus mais visuellement trĂšs diffĂ©rents :
De mĂȘme deux champignons de genres diffĂ©rents visuellement difficiles Ă distinguer, ici Clytocibe nĂ©buleux et Entolome livide :
Ce premier niveau de connaissance de la problĂ©matique dâidentification visuelle dâun champignon nous permet de distinguer trois difficultĂ©s majeures du domaine :
Lâimmense quantitĂ© dâespĂšces existantes, la proximitĂ© visuelle importante existant entre certaines espĂšces et la diffĂ©rence morphologique pouvant exister au sein dâune mĂȘme espĂšce.
La quantité et la qualité des données disponibles seront déterminantes pour obtenir un modÚle performant.
Selon nos propres capacitĂ©s et le temps disponible pour la rĂ©alisation du projet, nous pourrons fixer diffĂ©rents niveaux dâobjectifs Ă atteindre pour notre projet, lâessentiel restant lâaspect pĂ©dagogique et lâacquisition de compĂ©tences.
Lâobjectif primaire est dâentraĂźner un modĂšle pour la reconnaissance des champignons. Pour atteindre cet objectif, il faudra suivre les Ă©tapes suivantes :
Analyser la taxonomie et définir le niveau sur lequel nous concentrer
Analyser les données disponibles
Trier et filtrer les données
Data augmentation (crĂ©er de nouveaux Ă©chantillons dâentraĂźnement en appliquant diverses transformations aux images existantes)
Prétraitement des données
Poursuivre avec des techniques de deep learning
Nous pourrons donc travailler Ă entraĂźner un modĂšle capable dâidentifier un nombre plus ou moins grand dâespĂšces avec le plus de prĂ©cision possible. Le niveau de difficultĂ© pourra donc ĂȘtre modulĂ© selon le nombre dâespĂšces introduites mais aussi la ressemblance visuelle entre les diffĂ©rentes espĂšces introduites.
Nous pourrons Ă©galement envisager diffĂ©rentes approches, par exemple entraĂźner et utiliser un modĂšle pour faire du âboxingâ, gĂ©nĂ©rer des donnĂ©es artificielles par des transformations des images de notre jeu de donnĂ©es, essayer de quantifier le volume dâimages nĂ©cessaire pour lâobtention dâun certain niveau de performances ...
Les ensembles de donnĂ©es contenant des champignons sont largement utilisĂ©s pour lâentraĂźnement des algorithmes de machine learning et de deep learning. Divers ensembles de donnĂ©es sont disponibles en accĂšs libre pour diffĂ©rentes finalitĂ©s.
UC Irvine Mushroom Database (https://archive.ics.uci.edu/dataset/73/mushroom) comprend 8 124 enregistrements de donnĂ©es et 22 attributs. Chaque espĂšce de champignon est identifiĂ©e comme une classe de champignons comestibles ou toxiques. Ces donnĂ©es sont rĂ©parties en 4 208 champignons comestibles et 3 916 champignons toxiques. De nombreuses approches diffĂ©rentes sont prĂ©sentĂ©es dans la littĂ©rature pour travailler avec ce type de caractĂ©risation des champignons basĂ©e sur les caractĂ©ristiques physiques (pas dâimages). Cependant, dans ce travail, nous nous concentrons principalement sur la reconnaissance dâimages, notre attention se portant sur les ensembles de donnĂ©es dâimages.
Mushroom Observer est un site web oĂč les gens peuvent tĂ©lĂ©charger des observations de champignons. Ces observations incluent diffĂ©rentes informations sur lâespĂšce observĂ©e, comme le nom, lâemplacement, et la certitude concernant lâespĂšce sur les images soumises. Le site est basĂ© sur des photos prises par un grand nombre dâindividus qui ne sont pas nĂ©cessairement des experts dans ce domaine. La certitude des Ă©tiquettes de classe, donnĂ©e par la communautĂ© est sur une Ă©chelle continue de 1 Ă 3 (oĂč 3 reprĂ©sente le plus haut niveau de certitude).
Lâanalyse des images de Mushroom Observer montre deux problĂšmes principaux liĂ©s Ă :
Exemples de photos inexploitables
Ainsi, la base de donnĂ©es ne peut pas ĂȘtre utilisĂ©e telle quelle Ă partir du site web et doit ĂȘtre filtrĂ©e.
En analysant la littĂ©rature utilisant lâensemble de donnĂ©es Mushroom Observer, nous avons trouvĂ© une base de donnĂ©es MO106 disponible en accĂšs libre oĂč les auteurs ont sĂ©lectionnĂ© 106 classes de champignons de Mushroom Observer en utilisant les critĂšres suivants : espĂšces ayant au moins 400 images, images avec certitude â„ 2. De plus, pour filtrer automatiquement les images afin dâobtenir une image correcte de champignon (sans objets supplĂ©mentaires ou sans champignons), les auteurs ont formĂ© un modĂšle CNN spĂ©cifique.
Cela a abouti à un ensemble de données MO106 contenant 29 100 images réparties en 106 classes. La plus grande classe compte 581 éléments, la plus petite 105, avec une moyenne de 275. Les images, disponibles gratuitement pour le téléchargement, ont des tailles variant entre 97 à 130 (plus petite surface) et 640 à 640 (plus grande surface).
Pour une observation nous obtenons :
Dataset de champignons basés sur des images.
Cet ensemble de donnĂ©es contient 9 dossiers dâimages des genres de champignons les plus communs du nord de lâEurope (Agaricus, Amanita, Boletus, Cortinarius, Entoloma, Hygrocybe, Lactarius, Russula et Suillus). Chaque dossier contient entre 300 et 1 500 images sĂ©lectionnĂ©es de genres de champignons. Les Ă©tiquettes correspondent aux noms des dossiers. Des codes de classification utilisant cet ensemble de donnĂ©es sont Ă©galement disponibles.
Lâavantage de cette base de donnĂ©es par rapport Ă Mushroom Observer est que la classification a Ă©tĂ© vĂ©rifiĂ©e par la sociĂ©tĂ© de mycologie dâEurope du Nord, qui a fourni les sources des champignons les plus communs de cette rĂ©gion et a vĂ©rifiĂ© les donnĂ©es et les Ă©tiquettes.
Pour une observation nous obtenons :
Le site mycodb.fr nous permet dâacquĂ©rir des caractĂ©ristique prĂ©cises dâun champignon identifiĂ© via un nom binominal, pour une observation nous obtenons :
WikipĂ©dia reste une source dâinformation trĂšs complĂ©mentaire et souvent exhaustive pour en apprendre plus sur un genre ou une espĂšce de champignon.
AprĂšs identification de ces diffĂ©rentes sources de donnĂ©es nous concluons que Mushroom Observer sera celle qui sera la plus exploitable pour obtenir des donnĂ©es de qualitĂ©. Le site dispose dâune API permettant un accĂšs Ă la quasi totalitĂ© des donnĂ©es, permettant dâobtenir une visualisation prĂ©cise du nombre dâespĂšces rĂ©pertoriĂ©es ainsi que du nombre dâobservations et dâimages associĂ©es Ă chaque espĂšce.
Par ailleurs le jeu de donnĂ©es MO106 dĂ©jĂ extraites de Mushroom observer pourrait ĂȘtre une source inintĂ©ressante car dĂ©jĂ prĂȘte Ă lâemploi bien que la qualitĂ© des images sĂ©lectionnĂ©e Ă©chappe Ă notre contrĂŽle. Cela pourra par exemple donner lieu Ă un comparatif de prĂ©cision des rĂ©sultats en fonction de la qualitĂ© des images en entrĂ©e.
Le principal avantage de Mushroom observer est quâil met Ă disposition une API permettant dâaccĂ©der a des donnĂ©es structurĂ©es issues de sa base. Ces donnĂ©es nous permettrons de faire une analyse qualitative et quantitative des images disponibles. Les donnĂ©es ont Ă©tĂ© tĂ©lĂ©chargĂ©es au format CSV et sont prĂ©sentes sur le dĂ©pĂŽt du projet.
Cette table contient lâarborescence des nommages disponibles sur le site, rĂ©partis en niveaux (rangs) de la maniĂšre suivante :
Nous observons par exemple que le site répertorie à ce jour 56161 espÚces.
Cette table permet de quantifier le nombre dâobservations rĂ©alisĂ©es pour chaque espĂšce mais aussi de qualifier la fiabilitĂ© de ces observations : le site offrant un systĂšme participatif, lâidentification des champignons est soumise au vote des utilisateurs du site. La note de confiance concernant lâidentification dâune observation varie de -3 Ă 3. AprĂšs Ă©valuation du nombre dâobservation disponible nous choisirons de ne conserver que celles dont le score de confiance est >= 2.
Le graphique montre que le jeu de donnée comprends environs 150k observations rattachées à une espÚce avec un niveau de confiance >= 2.
Cette table liste les images rattachĂ©es Ă chaque observation. Sans surprise les quantitĂ©s dâimages rattachĂ©es Ă chaque rang sont proportionnelles a la quantitĂ© dâobservations. Nous constatons que pour notre sĂ©lection de critĂšres environs 500k images sont disponibles.
Nous savons que nous devons disposer dâune quantitĂ© minimale dâimages pour chacune des espĂšces sur lesquelles nous souhaitons entraĂźner notre modĂšle. Bien que cette quantitĂ© soit encore Ă dĂ©finir prĂ©cisĂ©ment, nous estimons que 150-250 images serait une base de dĂ©part viable. Nous constatons aussi que la moitiĂ© environs des images est exploitable, le reste n'Ă©tant pas directement des photographie des spĂ©cimens de champignons.
Un second filtrage est effectuĂ© pour ne sĂ©lectionner que les espĂšces qui disposent dâau moins 500 photos sur le site. Nous pouvons donc compter disposer de donnĂ©es suffisantes pour 129 espĂšces.
Nous avons identifiĂ© le besoin de filtrer manuellement les images avant prĂ©-traitement pour exclure celle qui ne sont pas exploitables (schĂ©mas, clichĂ©s microscopiques, etc ...). Nous avons donc rĂ©alisĂ© un outil proposant une interface permettant de rĂ©aliser le tri de maniĂšre relativement efficace. Nous pourrons constituer un jeu de donnĂ©es dâimages triĂ©e plus ou moins important selon les besoins et le temps disponible au fil de lâavancĂ©e du projet.
Lâoutil est disponible sur le dĂ©pĂŽt du projet.
Une fois la sĂ©lection effectuĂ©e, nous pouvons alors exĂ©cuter le script de webscraping nous permettant de tĂ©lĂ©charger les photos sĂ©lectionnĂ©s (cf: Annexes). Pour certains champignons, nous avons plus dâune photo. Nous nous concentrons uniquement sur la premiĂšre (le script sĂ©lectionne uniquement la premiĂšre image de la sĂ©rie).
A la date de rédaction de ce rapport nous avons réuni 2282 images appartenant à 14 espÚces différentes.
Le stockage des données, (dans espace de stockage privé), est structurée ainsi :
data
âââ LAYER0
â âââ MO
â âââ MO
â â âââ dataset.csv
â âââ MO_106
â âââ MO_106
â âââ class_stats.csv
â âââ dispersion.csv
â âââ image_stats.csv
âââ LAYER1
â âââ MO
â âââ MO
âââ LAYER2
âââ MO
âââ MO
Cette configuration nous permettra ultĂ©rieurement de fournir la base dâimage MO ou MO_106 Ă nos diffĂ©rent modĂšles facilement.
Pour le prétraitement des données, nous avons sélectionné des outils spécifiques de preprocessing. Ensuite, nous appliquons un second traitement avec le modÚle YOLOv5 (You Only Look Once version 5), qui permet une détection rapide et précise des champignons en les identifiant par encadrement (cf: Annexes).
Cela nous permet dâobtenir des images prĂ©cise indispensables pour les Ă©tapes suivantes dâentraĂźnement de modĂšle. Cet outil n'Ă©tant pas parfait, nous compensons les Ă©checs de celui-ci avec un outil dâencadrement manuel dĂ©veloppĂ© pour lâoccasion (cf: Annexes).
Afin de préparer nos images pour les entraßnements à venir, nous appliquons les méthodes conventionnelles et récurrentes pour le CNN.
La réduction des images à une taille de 224 x 224 pixels est couramment utilisée dans les architectures de réseaux de neurones convolutionnels (CNN) pour plusieurs raisons pratiques et techniques tel que la standardisation, la gestion de la mémoire et des ressources computationnelles, la comparaison avec les modÚles pré-entraßnés et la capture des caractéristiques importantes.
Nous rĂ©alisons une Ă©tape de rĂ©-Ă©chantillonnage afin dâaugmenter le volume de donnĂ©es dâentraĂźnement, pour les futurs modĂšles que nous testerons. Cela nous permettra dâamĂ©liorer la prĂ©cision des modĂšles.
Nous avons réalisé un script exploitant ImageDataGenerator de la librairie tensorflow.keras.preprocessing.image (cf: Annexes).
Nous effectuons ainsi lâaugmentation des donnĂ©es avec les techniques suivantes :
Rotations
Retournement horizontal
Retournement vertical
Cisaillements
Cela permet de crĂ©er de nouveaux Ă©chantillons dâentraĂźnement Ă partir des images existantes, augmentant ainsi la robustesse et la capacitĂ© de gĂ©nĂ©ralisation de notre modĂšle.
Exemple dâimages enrichies gĂ©nĂ©rĂ©e depuis une unique image source, Ă lâaide de la classe ImageDataGenerator de Keras.
Ce rapport nous permet dâavoir un aperçu de la complexitĂ© de la reconnaissance de champignons, mettant en lumiĂšre les dĂ©fis et les opportunitĂ©s qui se prĂ©sentent dans ce domaine. Ă travers une exploration dĂ©taillĂ©e de la taxonomie, des sources de donnĂ©es disponibles et des Ă©tapes de prĂ©traitement des donnĂ©es, nous avons identifiĂ© les diffĂ©rentes options Ă explorer pour atteindre notre objectif de dĂ©veloppement dâun modĂšle de reconnaissance de champignons fiable.
Lâanalyse a rĂ©vĂ©lĂ© plusieurs dĂ©fis majeurs, notamment la grande diversitĂ© des espĂšces de champignons, la variabilitĂ© morphologique au sein dâune mĂȘme espĂšce, et la qualitĂ© variable des donnĂ©es disponibles, nĂ©cessitant ainsi des stratĂ©gies de filtration et de prĂ©traitement rigoureuses. Cependant, nous avons Ă©galement identifiĂ© des sources de donnĂ©es prometteuses, qui offrent des ensembles de donnĂ©es volumineux pour lâentraĂźnement de modĂšles de reconnaissance.
Enfin, nous avons Ă©tabli un plan dâaction clair, comprenant lâanalyse approfondie des donnĂ©es disponibles, le prĂ©traitement des images, et lâenrichissement du jeu de donnĂ©es par des techniques dâaugmentation. Ces Ă©tapes prĂ©liminaires posent les fondations nĂ©cessaires pour le dĂ©veloppement ultĂ©rieur de modĂšles de deep learning, qui seront essentiels pour la reconnaissance prĂ©cise des champignons.
Auteurs : Heuzef, Yvan Rolland, Viktoriia Saveleva, Florent Constant
Date : 10/2024
Dans le cadre du projet de reconnaissance de champignons, nous abordons un problĂšme de deep learning qui sâapparente principalement Ă une tĂąche de classification.
Lâobjectif est de classifier diffĂ©rentes espĂšces de champignons en fonction de leurs caractĂ©ristiques visuelles, ce qui sâinscrit dans le domaine de la reconnaissance dâimage.
Pour Ă©valuer la performance des modĂšles dĂ©veloppĂ©s, nous utilisons principalement la mĂ©trique de lâaccuracy (prĂ©cision), car elle permet de mesurer le pourcentage de classifications correctes effectuĂ©es. Cette mĂ©trique est particuliĂšrement adaptĂ©e pour ce projet, car elle fournit une Ă©valuation claire et directe de lâefficacitĂ© du modĂšle Ă distinguer les diffĂ©rentes espĂšces de champignons.
Dans ce rapport, nous dĂ©crivons nos dĂ©marches, rĂ©flexions et erreurs. Nous analysons Ă©galement lâeffet de la dĂ©tĂ©ction et de lâaugmentation des donnĂ©es sur les rĂ©sultats de nos entrainements.
Un premier model naĂŻf LeNet est utilisĂ© pour lâexpĂ©rimentation, puis finalement des algorithmes de transfert learning sont adoptĂ©s pour leur efficacitĂ©s.
La comparaison des résultats est effectuée en introduisant la partie MLflow dans les algorithmes, ce qui nous permet de suivre la traçabilité et de faciliter l'échange et la comparaison des résultats.
Pour rappel, le stockage des données se fait comme suit :
data
âââ LAYER0
â âââ MO
â âââ MO
â â âââ dataset.csv
â âââ MO_106
â âââ MO_106
â âââ class_stats.csv
â âââ dispersion.csv
â âââ image_stats.csv
âââ LAYER1
â âââ MO
â âââ MO
â âââ dataset.csv
âââ LAYER2
âââ MO
âââ MO
âââ dataset.csv
âââ names.csv
La rĂ©partion de ces donnĂ©es intervient dans le but prĂ©cis de sâassurer de la qualitĂ© des donnĂ©s avant lâapprentissage pour optimiser les rĂ©sultats.
LAYER0 : Obtenu par une sĂ©lection manuelle et un webscraping, ce qui nous a permis de constituer un dataset comportant 23 classes. Lâobjectif Ă©tait dâavoir au moins une centaine de photos par classe. Dans le dossier MO, les photos extraites du site Mushroom Observer. Dans le dossier MO_106, les photos extraites par Webscraping du site : https://www.mycodb.fr/ (utilisĂ©es uniquement pour des tests).
LAYER1 : Lancement de la detection effectuĂ©e par YoloV5 (boxing), nous perdons environ 60% des images qui nâont malheureusement pas Ă©tĂ© detectĂ©e par YoloV5. Lâobjectif est dâobtenir une base de donnĂ©e contenant des images de champignons les plus prĂ©cises. La base de donnĂ©e Ă©tant l'Ă©lĂ©ment le plus important pour lâapprentissage, il nous apparaissant pertinent de procĂ©der par une dĂ©tection et un boxing, focus sur le champignon pour limiter le bruit.
Le traitement effectue Ă©galement des modifications sur lâimage nĂ©cessaire au Deep Learning : redimensionnement en 224 X 224 px selon les coordonnĂ©es du rectangle de dĂ©tection.
LAYER2 : Créé suite à une augmentation des données.
Cela entraßnerait une précision excellente (>0.99) dÚs la premiÚre époque sans optimisation, ce que nous souhaitons éviter.
La sĂ©paration initiale garantie que les donnĂ©es dâentraĂźnement et de validation sont distinctes, permettant une Ă©valuation plus prĂ©cise et une gĂ©nĂ©ralisation correcte du modĂšle.
En rĂ©sumĂ©, LAYER2 reprĂ©sente les donnĂ©es dâentraĂźnement augmentĂ©es, tandis que les ensembles de validation et de test restent intacts et non modifiĂ©s pour une Ă©valuation juste et prĂ©cise du modĂšle. La figure ci-dessous montre schĂ©matiquement la structure des couches.
Nos premiers essais montre des performances absolument incroyables, cependant, ceci sâexplique par une erreur dans notre approche.
En effet, si nous procĂ©dons dâabord par lâaugmentation des donnĂ©es puis la division, les ensembles de validation contiendrons des images trop proches de lâentrainement, car simplement modifiĂ©es par lâaugmentation des donnĂ©es.
Ă ce stade, il est nĂ©cessaire dâeffectuer lâinverse, en effectuant lâaugmentation des donnĂ©s exclusivement sur le jeu dâentrainement divisĂ© en amont, sans toucher au jeu de validation et de test.
Notre nouvelle arboresence se présente donc ainsi :
data
âââ LAYER0
â  âââ dataset.csv
â  âââ MO
â  âââ 1174
â  âââ 15162
â  âââ 1540
â  âââ (...)
â  âââ 939
âââ LAYER1
â  âââ MO
â  âââ 1174
â  âââ 15162
â  âââ 1540
â  âââ (...)
â  âââ 939
âââ LAYER2
âââ MO
â  âââ test
â  â  âââ 1174
â  â  âââ 15162
â  â  âââ 1540
â  â  âââ (...)
 â  | âââ 939
â  âââ train
â  â  âââ 1174
â  â  âââ 15162
â  â  âââ 1540
â  â  âââ (...)
 â  | âââ 939
â  âââ validation
â  âââ 1174
â  âââ 15162
â  âââ 1540
â  âââ (...)
 â  âââ 939
âââ names.csv
Nous prenons à ce stade la décision de ne plus effectuer la detection des champignons via le model YoloV5 pour 2 raisons :
La quantitĂ©e dâimage brutes perdues de 60% est trop importante.
Nous ne constatons pas dâamĂ©lioration des performances suite Ă cette detection.
Les donnĂ©es de notre base de donnĂ©s âMOâ seront divisĂ©es un jeu dâentrainement, de validation et de test (directement opĂ©rĂ© par le code modĂšle).
Finalement, nos modÚles entrainés seront évalués sur le jeu de test afin de les optimisers pour obtenir la meilleur précision possible.
Les champignons prĂ©sentent une diversitĂ© visuelle significative, avec des variations subtiles de forme, de couleur, et de texture. Les algorithmes de Deep Learning, notamment les rĂ©seaux de neurones convolutifs (CNN), sont particuliĂšrement efficaces pour extraire et apprendre des caractĂ©ristiques pertinentes Ă partir dâimages, ce qui en fait lâapproche idĂ©ale pour identifier correctement les diffĂ©rentes espĂšces de champignons.
Une premiĂšre expĂ©rimentation est effectuĂ©e avec un modĂšle naĂŻf LeNet, ce dernier permet dâobtenir des rĂ©sultats interessants, bien que moindre face aux mĂ©thodes de Transfert learning, qui offres des performances nettement supĂ©rieurs.
En effet, câest une stratĂ©gie clĂ© dans notre approche. En utilisant des modĂšles prĂ©-entraĂźnĂ©s sur de vastes ensembles de donnĂ©es comme ImageNet, nous avons pu adapter ces modĂšles Ă notre problĂšme spĂ©cifique de reconnaissance des champignons, ce qui a considĂ©rablement amĂ©liorĂ© les performances des modĂšles.
Pour cette tùche, nous avons testé plusieurs architectures : VGG16, EfficientNetB1, ResNet50.
Finalement, nous décidons de concevoir un modÚle avec une architecture sur mesure: JarviSpore. Ce dernier est partagé sur HuggingFace: https://huggingface.co/YvanRLD
VGG16 est une architecture de rĂ©seau de neurones convolutifs (CNN) dĂ©veloppĂ©e par l'Ă©quipe Visual Geometry Group de lâUniversitĂ© dâOxford. Ce modĂšle se distingue par sa structure simple et uniforme, composĂ©e de 16 couches profondes dont 13 couches convolutives et 3 couches entiĂšrement connectĂ©es. GrĂące Ă sa conception, VGG16 a dĂ©montrĂ© une grande efficacitĂ© dans la classification dâimages, comme en tĂ©moigne ses performances remarquables lors de la compĂ©tition ImageNet 2014. Dans le cadre du transfer learning, VGG16 est frĂ©quemment utilisĂ© avec des poids prĂ©entraĂźnĂ©s sur des ensembles de donnĂ©es Ă©tendus tels quâImageNet. Cette stratĂ©gie permet dâadapter les caractĂ©ristiques apprises par le modĂšle Ă des tĂąches spĂ©cifiques avec des ensembles de donnĂ©es plus petits, offrant ainsi une prĂ©cision accrue mĂȘme avec des donnĂ©es limitĂ©es.
Le â16â dans VGG16 fait rĂ©fĂ©rence aux 16 couches qui ont des poids. Dans VGG16, il y a treize couches convolutives, cinq couches de max pooling, et trois couches denses, ce qui fait un total de 21 couches, mais seulement seize couches avec des poids, câest-Ă -dire des couches avec des paramĂštres apprenables.
VGG16 prend en entrĂ©e un tenseur de taille 224 x 224 px avec 3 canaux RGB. La particularitĂ© de VGG16 est quâau lieu dâavoir un grand nombre dâhyperparamĂštres, le modĂšle se concentre sur des couches de convolution avec des filtres de 3x3 avec un stride de 1, en utilisant systĂ©matiquement un padding constant et des couches de max pooling avec des filtres de 2x2 et un stride de 2.
Les couches de convolution et de max pooling sont disposĂ©es de maniĂšre cohĂ©rente tout au long de lâarchitecture. La couche Conv-1 possĂšde 64 filtres, Conv-2 en a 128, Conv-3 en a 256, et Conv-4 et Conv-5 ont 512 filtres chacun.
Trois couches entiÚrement connectées (FC) suivent une pile de couches convolutives : les deux premiÚres ont chacune 4096 canaux, et la troisiÚme effectue une classification ILSVRC à 1000 classes, contenant ainsi 1000 canaux (un pour chaque classe). La couche finale est la couche softmax.
Les entrainement réalisés
De nombreux entrainements en transfert learning ont Ă©tĂ© rĂ©alisĂ©s en utilisant les poids imagenet disponibles directement via keras. Ces entrainements ont permis dâexpĂ©rimenter deux architectures distinctes ainsi que lâinfluence de certains hyperparametres :
La premiĂšre sĂ©rie dâessai a Ă©tĂ© rĂ©alisĂ©e avec une architecture comportant une seule couche dense pour la classification. Les expĂ©rimentations menĂ©es consistaient Ă faire varier le batch size et le taux dâaugmentation des donnĂ©es. Les rĂ©sultats semblent indiquer globalement que le batch size influence de maniĂšre importante la precision du modĂšle. Dans les essais menĂ©s plus la taille du batch size Ă©tait importante, plus la prĂ©cision Ă©tait grande. Les limite de mĂ©moire de la machine de test nâont pas permis dâexpĂ©rimenter un batch size au delĂ de 128. Par ailleur on note que lâaugmentation de donnĂ©es nâa quasiement aucune influence sur le rĂ©sultats. Cette architecture a permis dâobtenir des scores compris entre 66% et 76% de prĂ©cision.
La seconde serie dâessais a Ă©tĂ© rĂ©alisĂ©e sur une architecture comportant trois couches denses, comme le modĂšle vgg16 original mais entrecoupĂ©es de couches dropout. Les expĂ©rimentations menĂ©es, en plus de faire varier le batch size et le taux dâaugmentation des donnĂ©es, consistaient Ă faire varier le nombre de cannaux et et le taux de dropout des diffĂ©rentes couches.
Les combinaisons suivantes ont été testées :
Batch size 32 et 64
Nombre de cannaux dans les 2 premiĂšres couches de classification: 64,128,256,512,1024,2048
Taux de dropout entre chaque couches: 0%, 10%, 20%
Cette architecture a permis dâobtenir des scores compris entre 70% et 77% de prĂ©cision.
Ces entrainements ont rĂ©vĂ©lĂ© une trĂšs forte tendance du modĂšle Ă faire du sur-apprentissage sur notre jeu de donnĂ©es, avec une prĂ©cision sur les donnĂ©es de test rapidement Ă 100% quelque soit lâarchitecture et les paramĂštres employĂ©s:
LâentraĂźnement du model EfficientNetB1 a Ă©tĂ© rĂ©alisĂ© sur un environnement sans GPU, ce qui pose certaines contraintes en termes de performance (en particulier sur la mĂ©moire vive). Afin dâentraĂźner un modĂšle efficace malgrĂ© ces limitations, tout en optimisant lâusage des ressources disponibles. Une astuce fournit par Google est utilisĂ© pour permettre un entrainement sur CPU, en configurant la fonction expĂ©rimental AutoShardPolicy.
Les labels des images ont été récupérés à partir de .class_names
, fournissant ainsi une liste ordonnée des classes.
Une fonction Python personnalisée get_champi_name()
a été utilisée pour organiser les noms des labels en fonction des besoins spécifiques du projet pour la prédiction.
Les images dâentrĂ©e ont Ă©tĂ© redimensionnĂ©es en 224x224 pixels, conformĂ©ment aux attentes du modĂšle prĂ©-entraĂźnĂ©. Ce format est communĂ©ment utilisĂ© pour des modĂšles basĂ©s sur ImageNet.
Le modĂšle utilisĂ© est prĂ©-entraĂźnĂ© sur le dataset ImageNet, qui contient plus de 14 millions dâimages et 1000 classes. Ce modĂšle, comprenant environ 9 millions de paramĂštres, permet dâobtenir une base solide pour la classification des images.
Le batch_size
est fixĂ© Ă 32, un compromis entre la vitesse dâentraĂźnement et lâutilisation de la mĂ©moire vive. La structure du modĂšle a Ă©tĂ© adaptĂ©e pour intĂ©grer la couche finale de classification avec activation softmax, en fonction du nombre de classes cibles.
Sur 23 classes, le modĂšle a atteint une prĂ©cision moyenne de 98 % lors de lâentraĂźnement, indiquant une forte capacitĂ© Ă gĂ©nĂ©raliser sur les donnĂ©es dâentraĂźnement.
Les rĂ©sultats sur les donnĂ©es de validation varient entre 80 % et 90 %, en fonction des ajustements apportĂ©s aux hyperparamĂštres. Cela montre que le modĂšle a une bonne capacitĂ© de gĂ©nĂ©ralisation, mais pourrait ĂȘtre affinĂ© pour Ă©viter le surapprentissage.
Certaines classes de champignion sont visiblement trÚs problÚmatique avec ce modÚle et ne parviennent quasiment jamais à effectuer des prédictions juste.
Il est notĂ© que certaines espĂšces de champignons, comme par exemple le Stropharia ambigua (classe 14) est souvent prĂ©dite comme une autre espece, la seule nuance qui permette de diffĂ©rencier Ă©tant la couleur jaunĂątre propre a cette espĂšce, nous pouvons en dĂ©duire que ce modĂšle nâest pas trĂšs performant sur la prise en compte des nuances de couleurs.
Les Stropharia ambigua sont prédites sans prendre en compte leur couleur jaunùtre.
De nouveaux essais sont effectuĂ©es sur 16 classes uniquement pour volontairement exclure les classes problĂ©matiques, avec une augmentation des donnĂ©s et un nombre dâepoch plus gĂ©nĂ©reux.
Ajout de callbacks : ReduceLROnPlateau pour améliorer la décente de gradient et EarlyStopping pour eviter le sur-entrainement.
Deux couches Dropout avec un taux de 0.5 ont est ajoutés au réseau pour le rendre plus robuste.
Les prĂ©cĂ©dents rĂ©sultats montrent que les predictions sont clairement moins fiables sur les derniĂšres classes. Ceci est causĂ© car les donnĂ©es ne sont pas mĂ©langĂ©s alĂ©atoirement sur les diffĂ©rents jeux de donnĂ©. Ainsi, un Shuffle est activĂ© pour forcer lâentrainement des donnĂ©es dans un ordre alĂ©atoire.
Lâentrainement sâarrĂȘte aprĂšs seulement 4 epochs grĂące au EarlyStopping, le sur-entrainement sur ce modĂšle interevient trĂšs rapidement de par sa nature, mais offre de bonnes perfomances.
LâentraĂźnement du modĂšle EfficientNetB1 sur un environnement sans GPU a permis dâobtenir des rĂ©sultats satisfaisants malgrĂ© les limitations matĂ©rielles. En optimisant lâutilisation des ressources, notamment grĂące Ă lâastuce de la configuration AutoShardPolicy
, le modĂšle a pu tirer parti dâun environnement CPU tout en maintenant de bonnes performances.
Lâutilisation dâun modĂšle prĂ©-entraĂźnĂ© sur ImageNet fourni une base solide pour la classification. De plus, la gestion personnalisĂ©e des labels a permis une adaptation efficace aux besoins spĂ©cifiques du projet. Nous constatons cependant que ce modĂšle nâest malheureusement pas trĂšs performant lorsquâil sâagit de nuancer les couleurs des diffĂ©rentes Ă©spĂšces.
Les performances du modĂšle ont montrĂ© une prĂ©cision dâentraĂźnement remarquable Ă 96% et une prĂ©cision de validation de 86%.
Sur le jeu de test, les scores sont cependant plus interessants :
Accuracy | Precision | Recall | F1-score |
---|---|---|---|
0.9286764705882 | 0.9336224871829 | 0.9286764705882 | 0.9290201971718 |
Bien que ces résultats soient encourageants, ils révÚlent également des marges de progression, notamment pour affiner les scores de précision sur le jeu d'évaluation.
Ces conclusions ouvrent la voie Ă des pistes dâamĂ©lioration, telles que lâoptimisation des hyperparamĂštres et une meilleure gestion des donnĂ©es pour minimiser le risque de sur-apprentissage, EfficientNetB1 Ă©tant particuliĂšrement senssible au sur-entrainement.
Bien que lâentrainement sur CPU est satisfaisant, effectuer ces expĂ©rimentations avec un GPU devrais offrir un gain de vitesse.
AprĂšs avoir explorĂ© EfficientNetB1, nous avons dĂ©cidĂ© de tester ResNet50. Cette architecture se distingue par ses blocs rĂ©siduels qui facilitent lâentraĂźnement de rĂ©seaux trĂšs profonds en ajoutant des connexions directes entre les couches. Pour la reconnaissance des champignons, ResNet50 peut ĂȘtre particuliĂšrement intĂ©ressant en raison de sa capacitĂ© Ă extraire des caractĂ©ristiques complexes tout en maintenant une efficacitĂ© computationnelle, ce qui est crucial pour des tĂąches de classification fines comme celle-ci.
Le modĂšle est basĂ© sur ResNet50, prĂ©-entraĂźnĂ© sur le jeu de donnĂ©es ImageNet. Nous avons enlevĂ© la partie supĂ©rieure du modĂšle (le âtopâ) pour adapter le rĂ©seau prĂ©-entraĂźnĂ© Ă notre tĂąche spĂ©cifique de reconnaissance des champignons. La partie supĂ©rieure dâun modĂšle prĂ©-entraĂźnĂ© est gĂ©nĂ©ralement conçue pour des classes spĂ©cifiques du jeu de donnĂ©es dâorigine, comme ImageNet. En retirant cette partie, nous pouvons ajouter des couches adaptĂ©es Ă notre propre ensemble de classes, ce qui permet au modĂšle de sâajuster aux spĂ©cificitĂ©s de notre tĂąche de classification multiclasse. Nous avons ajoutĂ© une couche de GlobalAveragePooling2D suivie dâune couche Dense de 1024 neurones (taille couramment utilisĂ©e dans de nombreux rĂ©seaux de neurones pour les couches cachĂ©es) avec activation ReLU. La derniĂšre couche de sortie est une couche Dense avec autant de neurones que de classes dans les donnĂ©es, utilisant une activation softmax pour la classification multiclasse.
Les couches du modĂšle prĂ©-entraĂźnĂ© ResNet50 ont Ă©tĂ© gelĂ©es (non-entraĂźnables) pour conserver les poids appris prĂ©cĂ©demment et Ă©viter de modifier ces paramĂštres durant lâentraĂźnement. Le modĂšle a Ă©tĂ© compilĂ© avec lâoptimiseur Adam et une faible valeur dâapprentissage (learning rate = 1e-4). La perte utilisĂ©e est categorical crossentropy, avec une mĂ©trique dâĂ©valuation sur la prĂ©cision.
RĂ©sultats obtenus :
PrĂ©cision dâentraĂźnement : Le modĂšle montre une prĂ©cision qui commence Ă 71 % et atteint presque 100 % (99,96 %) Ă la fin de lâentraĂźnement. Cela montre que le modĂšle apprend trĂšs bien les donnĂ©es dâentraĂźnement, mais cela suggĂšre aussi un risque de surapprentissage (overfitting).
PrĂ©cision de validation : La prĂ©cision de validation commence relativement Ă©levĂ©e Ă 81 %, mais fluctue au fil des Ă©poques, se stabilisant autour de 84 %. Le modĂšle gĂ©nĂ©ralise relativement bien, mais ne montre pas dâamĂ©lioration significative aprĂšs quelques itĂ©rations, suggĂ©rant un plateau dans lâapprentissage.
Perte de validation : La perte de validation diminue lĂ©gĂšrement au dĂ©but, mais Ă partir de la cinquiĂšme Ă©poque, elle commence Ă augmenter. Cela reflĂšte encore une fois un surapprentissage, car la perte dâentraĂźnement continue de baisser tandis que la perte de validation augmente. Cela signifie que le modĂšle se spĂ©cialise trop sur les donnĂ©es dâentraĂźnement et ne parvient pas Ă bien gĂ©nĂ©raliser sur de nouvelles donnĂ©es.
Ajout de Dropout (0.5) Le Dropout a Ă©tĂ© ajoutĂ© aprĂšs la couche de GlobalAveragePooling2D et aprĂšs la couche Dense, avec un taux de 0,5. Cela permet de rĂ©duire le surapprentissage (overfitting) en dĂ©sactivant alĂ©atoirement 50 % des neurones pendant lâentraĂźnement. Cela rend le modĂšle moins dĂ©pendant de certains neurones spĂ©cifiques et amĂ©liore sa capacitĂ© de gĂ©nĂ©ralisation.
Régularisation L2 (0.001) Une régularisation L2 a été appliquée sur la couche Dense. Cette technique pénalise les poids excessivement élevés, contribuant à réduire le surapprentissage en encourageant des poids plus petits. Cela aide à créer un modÚle plus stable et capable de mieux généraliser aux nouvelles données.
RĂ©sultats : La prĂ©cision dâentraĂźnement atteint 77 %, tandis que la prĂ©cision de validation passe de 70 % Ă 80 % avec une perte de validation en baisse constante, montrant que la rĂ©gularisation par Dropout et L2 aide Ă mieux gĂ©nĂ©raliser et Ă rĂ©duire le surapprentissage.
Unfreezed layers
Les 10 derniĂšres couches du modĂšle de base ResNet50 ont Ă©tĂ© âdĂ©figĂ©esâ pour ĂȘtre entraĂźnables, ce qui permet Ă ces couches dâaffiner leurs poids pendant lâentraĂźnement. Lâapprentissage est effectuĂ© avec un taux dâapprentissage plus bas (1e-5) pour Ă©viter une mise Ă jour trop rapide des poids, et ce sur 10 Ă©poques.
RĂ©sultats : Le surapprentissage est probable, car lâexactitude en entraĂźnement est trĂšs Ă©levĂ©e, mais lâexactitude en validation stagne et la perte en validation ne diminue pas significativement.
Régularisation et Dropout : Deux couches de Dropout à 50% et la régularisation L2 sont ajoutées pour limiter le surapprentissage, en réduisant la dépendance du modÚle à certaines connexions spécifiques.
Optimisation de lâentraĂźnement Early Stopping : Le modĂšle arrĂȘte lâentraĂźnement si la perte en validation ne sâamĂ©liore plus aprĂšs 3 Ă©poques, tout en restaurant les meilleurs poids, Ă©vitant un surapprentissage inutile.
RĂ©duction du taux dâapprentissage (ReduceLROnPlateau) : Ce callback diminue progressivement le taux dâapprentissage si la validation stagne, permettant des ajustements plus fins dans les derniĂšres Ă©tapes dâentraĂźnement.
Augmentation des epochs : Le nombre d'Ă©poques est passĂ© Ă 50, en combinaison avec les mĂ©canismes de contrĂŽle du surapprentissage, pour permettre au modĂšle dâexplorer un espace plus large de solutions tout en conservant une bonne gĂ©nĂ©ralisation.
RĂ©sultats : Lâexactitude dâentraĂźnement dĂ©passe 94%, mais lâexactitude de validation progresse lentement et se stabilise, indiquant un possible surapprentissage. La perte dâentraĂźnement diminue, tandis que la perte de validation augmente aprĂšs quelques Ă©poques, renforçant lâhypothĂšse de surapprentissage. Le taux dâapprentissage, initialement Ă 1e-5, a Ă©tĂ© rĂ©duit Ă 2e-6 aprĂšs la 7e Ă©poque, montrant que le modĂšle a atteint un plateau tĂŽt.
Augmentation du taux de dropout Ă 0,7 pour rĂ©duire la dĂ©pendance excessive aux neurones spĂ©cifiques et prĂ©venir le surapprentissage. 5 couches de ResNet50 sont dĂ©sormais dĂ©gelĂ©es pour affiner davantage lâapprentissage. Le callback EarlyStopping a une patience augmentĂ©e Ă 5 pour permettre au modĂšle de continuer lâentraĂźnement plus longtemps avant dâarrĂȘter si la validation ne sâamĂ©liore pas, et le ReduceLROnPlateau rĂ©duit le taux dâapprentissage plus progressivement, avec un plancher fixĂ© Ă 1e-6. Augmentation de la rĂ©gularisation L2 dans la couche de sortie Ă 0.01 pour mieux contrĂŽler le surapprentissage.
RĂ©sultats Lâexactitude dâentraĂźnement atteint 95%, mais la prĂ©cision de validation stagne autour de 80%, suggĂ©rant un surapprentissage. La perte de validation diminue au dĂ©but mais augmente ensuite, ce qui confirme Ă©galement un surapprentissage. Le taux dâapprentissage rĂ©duit considĂ©rablement aprĂšs la 12e Ă©poque, montrant que le modĂšle a atteint un plateau prĂ©coce dans lâentraĂźnement.
MalgrĂ© une haute prĂ©cision dâentraĂźnement (95%), le modĂšle montre encore du surapprentissage, avec une prĂ©cision de validation stagnante autour de 80% et une perte de validation croissante.
Causes possibles :
Prochaines Ă©tapes :
ResNet18 est comme ResNet50 un réseau de neurones convolutifs utilisant des connexions résiduelles, mais avec une profondeur de 18 couches seulement.
Les essais menĂ©s avec ResNet18 ont Ă©tĂ© immĂ©diatement concluants avec un score de prĂ©cision dâenvirons 97% sur notre dataset (23 classe avec en moyenne 166 images par classe).
DiffĂ©rents essais on permis dâestimer le nombre dâimages necessaires pour obtenir un niveau de prĂ©cision satsfaisant. Ainsi on constate quâavec un dataset comprenant seulement 80 images par classe on atteint une prĂ©cision de 97%. Avec seulement 30 images par classe on reste au dessus de 90% de prĂ©cision, et mĂȘme avec seulement 10 images par classe on reste au dessus de 80% de prĂ©cision.
Suite aux rĂ©sultats mitigĂ©s sur le transfert Learning, nous avons pris lâinitiative de crĂ©er un modĂšle de zĂ©ro avec comme support les cours DataScientest et des livres.
Nous avons investi dans un PC avec carte graphique RTX 3090 disposant de 24 Go de VRAM. Notre PC dispose de 192 Go de RAM. Processeur i9 14900k.
Nous avons ensuite pris le parti de tester dans un environnement WSL2. Cela nous permettait dâutiliser les derniĂšres versions de TensorFlow, Cuda, Cudnn et Keras.
AprĂšs lâinstallation, nous avons construit le modĂšle dans VSCode, mais lors des entraĂźnements, des problĂšmes de mĂ©moire nous ont compliquĂ©s la tĂąche.
Nous avons dĂ©ployĂ© un environnement sous Windows en utilisant dâanciennes versions de TensorFlow, Cuda âŠ
Pour assurer la compatibilitĂ© des bibliothĂšques utilisĂ©es et de leurs versions, car la compatibilitĂ© TensorFlow sous Windows sâarrĂȘte Ă la version 2.10 :
numpy : 1.26.4
tensorflow : 2.10.0
matplotlib : 3.9.2
scikit-learn : 1.5.2
PIL : 10.4.0
cv2 : 4.10.0
pandas : 2.2.3
Ce modĂšle effectue lâentraĂźnement, l'Ă©valuation et lâinterprĂ©tation dâun modĂšle de rĂ©seau de neurones convolutif (CNN) pour une tĂąche de classification dâimages. Voici les diffĂ©rentes Ă©tapes et le processus utilisĂ©s :
Importation des BibliothĂšques
Nous commençons par importer les bibliothĂšques nĂ©cessaires pour la manipulation des donnĂ©es, lâentraĂźnement du modĂšle, l'Ă©valuation et la visualisation des rĂ©sultats. Les bibliothĂšques incluent TensorFlow pour la construction du modĂšle, NumPy pour les calculs numĂ©riques, Pandas pour la gestion des donnĂ©es et OpenCV pour le traitement des images.
Extraction des Versions des BibliothĂšques
Nous vĂ©rifions les versions des bibliothĂšques utilisĂ©es afin dâassurer la compatibilitĂ© des versions.
Chargement des Datasets (structurées et non structurées)
Nous dĂ©finissons les chemins pour les datasets dâentraĂźnement, de validation et de test. Nous utilisons la fonction image_dataset_from_directory pour charger les images en les redimensionnant Ă la taille (224, 224) avec un batch size de 32 images. Les ensembles de donnĂ©es sont ensuite configurĂ©s pour ĂȘtre mis en cache en mĂ©moire vive, prĂ©chargĂ©s et optimisĂ©s.
Chargement des Classes
Nous chargeons les noms des classes Ă partir dâun fichier CSV (API MushroomObserver) pour obtenir la liste des classes disponibles. Cela permet au modĂšle dâassocier les indices des classes avec les noms rĂ©els lors de lâaffichage des rĂ©sultats.
Construction du ModĂšle Convolutionnel
Nous construisons un CNN personnalisĂ© avec plusieurs couches de convolution suivies de la normalisation par lots (Batch Normalization), du sous-Ă©chantillonnage (MaxPooling) et dâune couche de sortie utilisant softmax pour la classification des 23 classes. Les couches de convolution permettent dâextraire les caractĂ©ristiques des images, tandis que les couches denses Ă la fin effectuent la classification.
Compilation du ModĂšle
Le modĂšle est compilĂ© avec lâoptimiseur Adam et la fonction de perte sparse_categorical_crossentropy, adaptĂ©e Ă la classification multi-classes avec des Ă©tiquettes sous forme dâentiers.
Ajout de lâEarly Stopping et du Model Checkpoint
Nous configurons des callbacks pour arrĂȘter lâentraĂźnement si la prĂ©cision de validation nâaugmente plus aprĂšs 5 Ă©poques (early stopping) et pour sauvegarder le meilleur modĂšle lors de lâentraĂźnement (ModelCheckpoint).
Gestion du Déséquilibre des Classes
Nous vĂ©rifions le dĂ©sĂ©quilibre des classes dans lâensemble dâentraĂźnement. Si certaines classes sont moins reprĂ©sentĂ©es, nous utilisons des pondĂ©rations de classe (class_weight) pour accorder plus dâimportance aux classes sous-reprĂ©sentĂ©es afin dâamĂ©liorer la gĂ©nĂ©ralisation du modĂšle.
EntraĂźnement du ModĂšle
Le modÚle est entraßné sur 20 époques, en utilisant les pondérations de classe pour mieux gérer les déséquilibres. Les callbacks configurés permettent de surveiller la performance et de sauvegarder le meilleur modÚle.
Génération de la Matrice de Confusion
AprĂšs lâentraĂźnement, nous gĂ©nĂ©rons une matrice de confusion sur lâensemble de validation pour Ă©valuer la capacitĂ© du modĂšle Ă classifier correctement les images. La matrice de confusion est affichĂ©e avec les noms des classes pour faciliter lâinterprĂ©tation des rĂ©sultats.
Visualisation des Courbes dâEntraĂźnement
Nous affichons les courbes de prĂ©cision et de perte pour les ensembles dâentraĂźnement et de validation, ce qui nous permet de visualiser l'Ă©volution des performances du modĂšle pendant lâentraĂźnement.
Sauvegarde du ModÚle et Métadonnées
Nous sauvegardons le modĂšle entraĂźnĂ© au format .keras ainsi que les mĂ©tadonnĂ©es (date dâentraĂźnement, prĂ©cision sur lâensemble de test, nombre d'Ă©poques). Cela permet de documenter le modĂšle pour un suivi ultĂ©rieur.
Test et Ăvaluation du ModĂšle sur lâEnsemble de Test
Nous testons le modÚle sur le jeu de données de test pour obtenir la précision finale et évaluer sa performance générale.
Affichage Grad-CAM
Nous implĂ©mentons Grad-CAM pour visualiser les activations des couches de convolution du modĂšle. Cette technique permet dâafficher les rĂ©gions de lâimage qui ont le plus contribuĂ© Ă la dĂ©cision du modĂšle. Les rĂ©sultats sont affichĂ©s pour cinq images alĂ©atoires du jeu de test.
RĂ©sultats Attendues
Ces Ă©tapes permettent de construire un modĂšle performant pour la classification dâimages, tout en prenant en compte les dĂ©sĂ©quilibres de classe et en offrant des outils dâinterprĂ©tation des rĂ©sultats.
Lien vers le modĂšle sur Hugging Face : https://huggingface.co/YvanRLD/JarviSpore
Pour mieux comprendre les rĂ©sultats et les dĂ©cisions prises par les algorithmes, nous avons utilisĂ© Grad-CAM (Gradient-weighted Class Activation Mapping), une technique puissante dâinterprĂ©tation des modĂšles de deep learning, en particulier pour la classification dâimages. Cette mĂ©thode permet de visualiser les rĂ©gions dâune image qui influencent le plus les dĂ©cisions dâun modĂšle. En gĂ©nĂ©rant des cartes thermiques (heatmaps) superposĂ©es sur les images dâentrĂ©e, Grad-CAM met en Ă©vidence les caractĂ©ristiques jugĂ©es essentielles par le modĂšle pour ses prĂ©dictions.
Pour crĂ©er ces cartes thermiques, on commence par calculer les gradients associĂ©s Ă la classe prĂ©dite, en les reliant aux cartes de caractĂ©ristiques issues de la derniĂšre couche de convolution. Ces gradients sont ensuite moyennĂ©s pour obtenir une vue dâensemble, qui sert Ă ajuster les cartes de caractĂ©ristiques, mettant ainsi en lumiĂšre les zones les plus importantes pour la classification.
Avec Grad-CAM, nous pouvons mieux comprendre les performances de nos modĂšles en analysant visuellement leurs points dâattention. Cette approche nous aide Ă identifier les forces et les faiblesses des modĂšles, Ă dĂ©celer d'Ă©ventuels biais et Ă approfondir notre comprĂ©hension des dĂ©cisions prises par les algorithmes.
Le graphique ci-dessous illustre des exemples de cartes thermiques obtenues via EfficientNetB1 et ResNet50 pour quatre classes différentes de champignons.
Les âzones chaudesâ (zones rouges et jaunes des cartes thermiques) indiquent les rĂ©gions sur lesquelles le modĂšle se concentre. En gĂ©nĂ©ral, ces zones chaudes correspondent Ă certaines parties du champignon, mais la zone de concentration varie selon la classe de champignon (par exemple, la tige par rapport Ă la tĂȘte du champignon, le bord de la tĂȘte, etc.). Il est intĂ©ressant de noter que, pour lâimage contenant deux champignons, ResNet50 performe mieux en identifiant les deux, tandis quâEfficientNet se concentre principalement sur un seul champignon. Cependant, pour la photo avec la prĂ©sence de la main, ResNet50 Ă©tait complĂštement perdu et ne se concentrait pas du tout sur le champignon, tandis quâEfficientNet lâidentifiait mieux.
En somme, ces rĂ©sultats soulignent lâimportance dâune analyse approfondie pour mieux comprendre les performances de chaque modĂšle dans des situations variĂ©es.
Les diffĂ©rents essais rĂ©alisĂ©s ont mis en Ă©vidence dâimportantes diffĂ©rences de rĂ©sultats obtenus avec divers modĂšles sur un mĂȘme jeu de donnĂ©es. Alors que certains modĂšles, comme VGG16, affichent des limites significatives pour ce cas dâutilisation, dâautres, tels que ResNet18, ont dĂ©montrĂ© dâexcellentes performances.
En poursuivant notre analyse, nous avons Ă©galement comparĂ© ResNet18 et ResNet50. Cette comparaison montre quâun modĂšle plus profond nâest pas toujours synonyme de meilleures performances ; au contraire, sur un petit jeu de donnĂ©es, un modĂšle plus complexe peut sâavĂ©rer moins performant.
Dans le cadre de notre projet, nous avons intĂ©grĂ© lâapproche MLflow pour amĂ©liorer le suivi et la gestion de nos expĂ©riences en apprentissage automatique.
Ce dernier est utilisé pour tracer chaque étape du processus expérimental, notamment les paramÚtres, les métriques, et les artefacts des modÚles.
Nous avons configuré un serveur de tracking, défini un projet spécifique pour organiser nos expérimentions.
Cette intégration permet de centraliser et comparer les métriques et de faciliter le déploiement ultérieur des modÚles retenus.
Ainsi, nous pouvons suivre de maniĂšre systĂ©matique et efficace les progrĂšs rĂ©alisĂ©s dans notre projet. Les captures suivantes rĂ©sument donc les rĂ©sultats de lâensemble du projet :
Les différentes évaluation des modÚles effectués sur des données de tests montrent que de façon global, les modÚles ont tous tendance à effectuer de la sur-interprétation et gÚrent particuliÚrement mal les couleurs des champignons.
En effet les mĂ©thodes Grad-Cam permettent de visualiser cette tendance Ă prendre en compte des zones prĂ©cises, sans se concentrer sur les zones trĂšs colorĂ©s. La couleur est pourtant lâun des points les plus importants, les modĂšles montrent tous de grandes faiblesse pour diffĂ©rencier deux champignons physiquement identique avec la couleur comme seul Ă©lĂ©ment de diffĂ©renciation ou encore de simplement localiser un champigon, mĂȘme de couleur vive, si le fond de la photo contient des Ă©lĂ©ments avec une forte luminositĂ© proche du blanc.
Nous pouvons noter que si les modĂšles avec une architeture les plus basiques (Lenet) offre des resultats trĂšs moyen, ceux en transfert learning offrent cependant des resultats performants mĂȘme si rapidement sujet Ă un sur-apprentissage malgrĂšs nos essais avec diffĂ©rentes technique dâoptimisation.
Nous concluons sur le fait que la conception dâun modĂšle sur-mesure, avec une architecture complexe, bien que trĂšs fastidieux, permet dâobtenir des mĂ©triques et rapports de classification plus performant Ă tout les niveaux.
En effet, dĂ©cision est prise dâimplĂ©menter un modĂšle nommĂ© JarviSpore, solution modulable au fur et Ă mesure de lâavancĂ©e de nos connaissances. Celui-ci est arrivĂ© Ă maturitĂ© et prĂ©sente des performances supĂ©rieures.
Lâutilisation de modĂšles plus rĂ©cents accessible sur HuggingFace nous permettrais trĂšs surement dâobtenir encore de meilleurs performance de prĂ©cision.
Nous expĂ©rimentons lâutilisation dâun modĂšle communautaire de classification prĂ©-entrainĂ© sur 100 espĂšces de champignons russe.
Ce modĂšle, partagĂ© par Dmytro Iakubovskyi, est entrainĂ© sur 233480 images et se base sur lâarchitecture ViT (85.9M de paramĂštres).
đ€ Mid-ViT par dima806 - HuggingFace
Les MLP (rĂ©seaux de neurones multicouches), bien quâutilisĂ©s dans de nombreux contextes, sont souvent sujets Ă lâoverfitting en raison de leur grande flexibilitĂ©, et comportent de nombreux paramĂštres difficiles Ă interprĂ©ter, ce qui limite leur utilitĂ© dans certaines applications.
Récemment, les réseaux Kolmogorov-Arnold (KAN) ont été proposés comme une alternative prometteuse (article : https://arxiv.org/abs/2404.19756, GitHub : https://github.com/KindXiaoming/pykan).
Contrairement aux MLP, qui utilisent des fonctions non linĂ©aires fixes comme ReLU ou Tanh, les KAN exploitent des B-splines, des polynĂŽmes par morceaux, pour modĂ©liser les donnĂ©es de maniĂšre plus souple et ajustĂ©e. Cela permet dâamĂ©liorer lâinterprĂ©tabilitĂ© des modĂšles et de rĂ©duire le nombre de paramĂštres, rendant les KAN plus efficaces et potentiellement moins sensibles Ă lâoverfitting.
Cependant, bien que les KAN présentent de nombreux avantages théoriques, ils restent instables, avec des résultats sensibles aux hyperparamÚtres choisis, ce qui nécessite des ajustements soigneux pour chaque tùche.
Pour les prochains tests, il sera crucial dâexplorer davantage cette nouvelle architecture, de tester son potentiel de gĂ©nĂ©ralisation sur des donnĂ©es variĂ©es, et d'Ă©valuer dans quelle mesure elle peut remplacer les MLP dans des architectures complexes.