You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

61 KiB

🍄 Projet de groupe 2024 sur la reconnaissance de champignons 🍄

Auteurs : Heuzef, Yvan Rolland, Viktoriia Saveleva, Florent Constant


Rendu N°1 : Rapport d’EDA

Date : 06/2024

1. Introduction

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") :

taxon.png

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 :

Visuel par ordre :

Des champignons appartenant à l’ordre des PEZIZALES :

visu_diff_01.png

Visuel par famille :

Des champignons appartenant Ă  la famille des RUSSULACEAE :

visu_diff_02.png

Visuel par genre :

Des champignons du genre CANTHARELLUS :

visu_diff_03.png

Visuel par espĂšce :

Des champignons appartenant à l’espùce HYPHOLOMA LATERITIUM :

visu_diff_04.png

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.

VariĂ©tĂ©s de formes dans une mĂȘme espĂšce

Pour illustration, deux champignons de l’espĂšce Coprinus comatus mais visuellement trĂšs diffĂ©rents :

visu_diff_05.png

Confusions possibles

De mĂȘme deux champignons de genres diffĂ©rents visuellement difficiles Ă  distinguer, ici Clytocibe nĂ©buleux et Entolome livide :

visu_diff_06.png

visu_diff_07.png

2. Objectif

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 :

  1. 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.

  2. La quantité et la qualité des données disponibles seront déterminantes pour obtenir un modÚle performant.

  3. 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 :

  1. Analyser la taxonomie et définir le niveau sur lequel nous concentrer

  2. Analyser les données disponibles

  3. Trier et filtrer les données

  4. Data augmentation (crĂ©er de nouveaux Ă©chantillons d’entraĂźnement en appliquant diverses transformations aux images existantes)

  5. Prétraitement des données

  6. 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 ...

3. Sources de données identifiées

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

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 Ă  :

  1. la qualitĂ© des images. Il y a beaucoup d’images qui ne sont pas exploitables : schĂ©mas, clichĂ©s microscopiques, etc ...

mo_useless_pictures.png

Exemples de photos inexploitables

  1. le niveau de fiabilitĂ© de l’attribution de classe. Le systĂšme de vote pour la classification des champignons ajoute de l’incertitude dans l’attribution de classe.

mo_confidence.png

Ainsi, la base de donnĂ©es ne peut pas ĂȘtre utilisĂ©e telle quelle Ă  partir du site web et doit ĂȘtre filtrĂ©e.

MO106 Database

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 :

  •   Photos
  •   Genre et espĂšces

Mushrooms classification - Common genus’s images

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 :

  •   Photos
  •   Genre et espĂšces

MycoDB

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 :

  •   Photos
  •   Division - Classe - Ordre - Famille
  •   Synonymes
  •   Chapeau
  •   Lames
  •   Stipe
  •   Saveur
  •   Odeur
  •   Couleur de la sporĂ©e
  •   Ecologie
  •   ComestibilitĂ©
  •   RĂ©fĂ©rences bibliographiques

Wikipedia

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.

Conclusion

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.

4. Exploration approfondie des données disponibles sur Mushroom observer

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.

Principales tables

table names

Cette table contient l’arborescence des nommages disponibles sur le site, rĂ©partis en niveaux (rangs) de la maniĂšre suivante :

  1. forme
  2. variété
  3. sous-espĂšce
  4. espĂšce
  5. stirpes
  6. sous-section
  7. section
  8. sous-genre
  9. genre
  10. famille
  11. ordre
  12. classe
  13. phylum
  14. regne
  15. domaine
  16. groupe

Nous observons par exemple que le site répertorie à ce jour 56161 espÚces.

table observations

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.

MO Rangs

table images_observation

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.

mo_img_rang.png

Agrégation par espÚces

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.

mo_img_129_species.png

SĂ©lection finale des images

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.

mo_manual_select_tool.png

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.

Organisation des données

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.

5. Pré-traitement des données

Choix des outils de preprocessing

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.

Redimensionnement des images

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.

Enrichir le jeu de données

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.

images_augmentees.png Exemple d’images enrichies gĂ©nĂ©rĂ©e depuis une unique image source, Ă  l’aide de la classe ImageDataGenerator de Keras.

6. Conclusion

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.

7. Annexe

  1. Scripts de webscraping, d’analyse du site Mushroom Observer et de sĂ©lection des donnĂ©s
  2. Script de sélection automatique avec YOLOv5
  3. Outil d’encadrement manuel MPBS
  4. Script d’oversampling

🍄 Projet de groupe 2024 sur la reconnaissance de champignons 🍄

Auteurs : Heuzef, Yvan Rolland, Viktoriia Saveleva, Florent Constant


Rendu N°2 : Modelisation

Date : 10/2024

1. Introduction

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.

2. Pré-traitement des données

PremiĂšre approche

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.

Boxing Error

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.

Layers_structure_rapport2_v1.png

DeuxiĂšme approche

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 :

  1. La quantitĂ©e d’image brutes perdues de 60% est trop importante.

  2. 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.

Layers_structure_rapport2_v2.png

3. Algorithmes de Deep Learning sélectionnés et Optimisation

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

3.1. VGG16

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.

VGG16_layover.jpg

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:

newplot.png

3.2. EfficientNetB1

3.2.1 Environnement de travail

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.

3.2.2 Préparation à la prédiction

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.

3.2.3 Entrainement du modĂšle

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.

3.2.4 Évaluation des rĂ©sultats

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.

efficientnetb1_matrice_01

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.

champi_diff

Les Stropharia ambigua sont prédites sans prendre en compte leur couleur jaunùtre.

3.2.5 Optimisation

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.

dataset

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.

metrics

matrix_02

predictions

3.2.6 Conclusion

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.

3.3 ResNet50

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.

3.3.1. ModĂšle de base

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.

resnet50_model1.png

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.

3.3.2. ModÚles ajustés

  1. 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.

  2. 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.

  3. 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.

  4. 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.

resnet50_model_last.png

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.

Conclusion

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 :

  • Le modĂšle prĂ©-entraĂźnĂ© sur ImageNet peut ne pas capturer suffisamment les caractĂ©ristiques spĂ©cifiques des champignons.
  • Les donnĂ©es d’entraĂźnement pourraient ĂȘtre insuffisantes pour une gĂ©nĂ©ralisation efficace.
  • Le taux d’apprentissage pourrait ne pas ĂȘtre optimal pour ce problĂšme spĂ©cifique.

Prochaines Ă©tapes :

  • Augmenter la taille et la diversitĂ© des donnĂ©es d’entraĂźnement sur les champignons.
  • Ajuster ou simplifier l’architecture du modĂšle.
  • Ajouter des techniques de rĂ©gularisation supplĂ©mentaires.
  • ExpĂ©rimenter avec des modĂšles spĂ©cifiquement entraĂźnĂ©s sur des donnĂ©es de champignons ou utiliser des techniques de transfert learning adaptĂ©es.

3.4. ResNet18

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).

resnet18_01

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.

resnet18_02

3.5 JarviSpore

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 :

  1. 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.

  2. Extraction des Versions des BibliothĂšques
    Nous vĂ©rifions les versions des bibliothĂšques utilisĂ©es afin d’assurer la compatibilitĂ© des versions.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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).

  8. 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.

  9. 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.

  10. 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.

  11. 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.

  12. 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.

  13. 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.

  14. 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

  • PrĂ©cision du ModĂšle : La mĂ©trique mesurĂ©e est la prĂ©cision, elle permet de mesurer le pourcentage de classifications correctes effectuĂ©es.
  • InterprĂ©tabilitĂ© avec Grad-CAM : Les heatmaps gĂ©nĂ©rĂ©es par Grad-CAM doivent indiquer les parties pertinentes de l’image, ce qui aide Ă  comprendre le fonctionnement du modĂšle.
  • GĂ©nĂ©ralisation : Avec l’utilisation des callbacks et des pondĂ©rations de classe, le modĂšle doit Ă©viter le sur-apprentissage et bien gĂ©nĂ©raliser sur les donnĂ©es de validation et de test.

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

jarvispore_001 jarvispore_002 jarvispore_002

4. Interprétation des résultats avec Grad-CAM

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.

gradcam.png

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.

5. Conclusion

5.1 Comparaison des resultats

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 :

mlflow mlflow2

5.2 Interpretabilité

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.

jarvispore_004

5.3 Technique

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.

6. Pour aller plus loin

ModĂšles Open-Source

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

RĂ©seaux Kolmogorov-Arnold

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.