Spaces:
Paused
Paused
correction data
Browse files
converted_txt/DST_Rapport_final_Reco_plant.txt
DELETED
@@ -1,2565 +0,0 @@
|
|
1 |
-
Projet Datascientest
|
2 |
-
Reconnaissance de plantes
|
3 |
-
|
4 |
-
Rapport final
|
5 |
-
|
6 |
-
Ela CIMEN
|
7 |
-
Yao N Guessan Roland KONAN
|
8 |
-
Yacine MADI SAID
|
9 |
-
Nicolas RINCÉ
|
10 |
-
|
11 |
-
09/06/2025
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
Table des matières
|
29 |
-
|
30 |
-
Partie 1 : Cadrage du projet ...................................................................................................5
|
31 |
-
|
32 |
-
Contexte ........................................................................................................................................ 5
|
33 |
-
|
34 |
-
Objectifs ........................................................................................................................................ 5
|
35 |
-
|
36 |
-
Description des macro-objectifs .................................................................................................... 5
|
37 |
-
Localiser et classifier l’espèce d’une plante dans une image ......................................................................5
|
38 |
-
Localiser et classifier la maladie éventuelle touchant la plante dans cette même image ............................5
|
39 |
-
Bâtir une application renvoyant les informations de ces classifications à l’utilisateur sur la base d’une
|
40 |
-
photographie prise sur son smartphone. ..................................................................................................6
|
41 |
-
|
42 |
-
Jalons du projet ............................................................................................................................. 6
|
43 |
-
|
44 |
-
Schéma de fonctionnement de l’application ................................................................................. 6
|
45 |
-
|
46 |
-
Niveaux d’expertise ...................................................................................................................... 7
|
47 |
-
Niveaux d’expertise interne ......................................................................................................................7
|
48 |
-
Recours à expertise externe .....................................................................................................................7
|
49 |
-
|
50 |
-
Partie 2 : Exploration et DataViz ............................................................................................7
|
51 |
-
|
52 |
-
Jeux de données ............................................................................................................................ 7
|
53 |
-
Soumis et exploités ..................................................................................................................................7
|
54 |
-
Soumis et non exploités ...........................................................................................................................8
|
55 |
-
Constats ...................................................................................................................................................8
|
56 |
-
|
57 |
-
Pertinence ..............................................................................................................................9
|
58 |
-
|
59 |
-
Variables ....................................................................................................................................... 9
|
60 |
-
|
61 |
-
Description .................................................................................................................................. 10
|
62 |
-
|
63 |
-
Limitation des données ............................................................................................................... 10
|
64 |
-
|
65 |
-
Partie 3 : Pré-Processing et feature engineering..................................................................11
|
66 |
-
|
67 |
-
Création du dataframe des caractéristiques................................................................................ 11
|
68 |
-
|
69 |
-
Nettoyage des données et étapes de traitement ........................................................................ 11
|
70 |
-
|
71 |
-
Transformations des données ..................................................................................................... 12
|
72 |
-
Traitement des images ........................................................................................................................... 12
|
73 |
-
|
74 |
-
Visualisations et Statistiques....................................................................................................... 14
|
75 |
-
Corrélation entre variables du dataframe .............................................................................................. 14
|
76 |
-
Relations avec les variables cibles ......................................................................................................... 14
|
77 |
-
|
78 |
-
Distribution des données ............................................................................................................ 14
|
79 |
-
Distribution des espèces dans le dataframe “high quality” ...................................................................... 14
|
80 |
-
Distribution des espèces dans le dataframe “low quality” ....................................................................... 15
|
81 |
-
Mesure d’amélioration de la qualité des images ..................................................................................... 15
|
82 |
-
|
83 |
-
Analyses statistiques ................................................................................................................... 17
|
84 |
-
|
85 |
-
Conclusions pré-modélisation ..................................................................................................... 18
|
86 |
-
|
87 |
-
Partie 4 : Modélisation ........................................................................................................18
|
88 |
-
|
89 |
-
Classification du problème .......................................................................................................... 18
|
90 |
-
|
91 |
-
Type de problème de machine learning ...................................................................................... 18
|
92 |
-
|
93 |
-
Tâches de machine learning ........................................................................................................ 18
|
94 |
-
|
95 |
-
Métriques de performance utilisées pour comparer les modèles ............................................... 18
|
96 |
-
Métrique principale ................................................................................................................................ 18
|
97 |
-
Métriques secondaires ........................................................................................................................... 18
|
98 |
-
|
99 |
-
Choix du modèle et optimisation ................................................................................................ 19
|
100 |
-
Algorithmes testés ................................................................................................................................. 19
|
101 |
-
Résultats par modèle ............................................................................................................................. 19
|
102 |
-
KERAS ........................................................................................................................................... 19
|
103 |
-
1-
|
104 |
-
FastAI............................................................................................................................................ 23
|
105 |
-
2-
|
106 |
-
Torch ............................................................................................................................................ 24
|
107 |
-
3-
|
108 |
-
AlexNet ......................................................................................................................................... 26
|
109 |
-
4-
|
110 |
-
|
111 |
-
Optimisation ............................................................................................................................... 29
|
112 |
-
Phase 1 .................................................................................................................................................. 29
|
113 |
-
Phase 2 .................................................................................................................................................. 35
|
114 |
-
|
115 |
-
Stratégies de traitement des images Cassava ............................................................................. 41
|
116 |
-
1. Augmentation massive des classes minoritaires .................................................................................. 41
|
117 |
-
2. Filtrage basé sur un score multi-critères ............................................................................................. 42
|
118 |
-
3. Relabellisation automatique basée sur le score ................................................................................... 42
|
119 |
-
4. Fine-tuning des modèles sur les nouveaux datasets ............................................................................ 43
|
120 |
-
5. Résultats obtenus ............................................................................................................................... 43
|
121 |
-
6. Analyse des résultats .......................................................................................................................... 44
|
122 |
-
7. Conclusion de l’étude d’amélioration sur Cassava ............................................................................... 45
|
123 |
-
Étude de l’ensemblage des modèles ....................................................................................................... 46
|
124 |
-
Conclusion sur le choix des ensembles de modèles ................................................................................. 49
|
125 |
-
|
126 |
-
Partie 5 : Conclusions tirées .................................................................................................49
|
127 |
-
|
128 |
-
Difficultés rencontrées pendant le projet.................................................................................... 49
|
129 |
-
Principal verrou scientifique rencontré ................................................................................................... 49
|
130 |
-
|
131 |
-
Difficultés détaillées par catégorie .............................................................................................. 49
|
132 |
-
Prévisionnel ........................................................................................................................................... 49
|
133 |
-
Jeux de données..................................................................................................................................... 50
|
134 |
-
Compétences techniques/théoriques ..................................................................................................... 50
|
135 |
-
Pertinence ............................................................................................................................................. 50
|
136 |
-
IT ........................................................................................................................................................... 50
|
137 |
-
Autres .................................................................................................................................................... 51
|
138 |
-
|
139 |
-
Bilan .....................................................................................................................................51
|
140 |
-
|
141 |
-
Contribution principale dans l'atteinte des objectifs ................................................................... 51
|
142 |
-
|
143 |
-
Modifications depuis la dernière itération .................................................................................. 51
|
144 |
-
|
145 |
-
Résultats obtenus et comparaison au benchmark....................................................................... 51
|
146 |
-
|
147 |
-
Performances atteintes ............................................................................................................... 51
|
148 |
-
Comparaison aux benchmarks de la littérature ....................................................................................... 51
|
149 |
-
|
150 |
-
Atteinte des objectifs du projet................................................................................................... 52
|
151 |
-
Objectif 1 : Classification des espèces (✅ Atteint) .................................................................................. 52
|
152 |
-
Objectif 2 : Détection des maladies (⚠ Partiellement atteint)................................................................. 52
|
153 |
-
Objectif 3 : Application Streamlit (✅ En cours) ....................................................................................... 52
|
154 |
-
|
155 |
-
Processus métier d'inscription .................................................................................................... 52
|
156 |
-
Agriculture de précision ......................................................................................................................... 52
|
157 |
-
Services aux professionnels .................................................................................................................... 52
|
158 |
-
Applications grand public ....................................................................................................................... 52
|
159 |
-
|
160 |
-
Suite du projet .....................................................................................................................52
|
161 |
-
|
162 |
-
Pistes d'amélioration des performances ..................................................................................... 52
|
163 |
-
Amélioration des données ...................................................................................................................... 52
|
164 |
-
|
165 |
-
Optimisations architecturales ..................................................................................................... 53
|
166 |
-
Techniques avancées.............................................................................................................................. 53
|
167 |
-
|
168 |
-
Déploiement et optimisation ...................................................................................................... 53
|
169 |
-
|
170 |
-
Contribution à l'accroissement de la connaissance scientifique .................................................. 53
|
171 |
-
Avancées méthodologiques .................................................................................................................... 53
|
172 |
-
|
173 |
-
Connaissances domaine-spécifiques ........................................................................................... 53
|
174 |
-
|
175 |
-
Impact scientifique et sociétal .................................................................................................... 54
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
Partie 1 : Cadrage du projet
|
182 |
-
|
183 |
-
Contexte
|
184 |
-
|
185 |
-
La cible du projet est d’offrir à un individu, ne bénéficiant pas de l’expertise pour reconnaître
|
186 |
-
une plante et sa maladie éventuelle, la capacité de l’identifier via l’appareil photo de son
|
187 |
-
smartphone
|
188 |
-
|
189 |
-
● Du point de vue technique, il s’agit d’utiliser des algorithmes de machine learning,
|
190 |
-
pour analyser les images et classifier les espèces de plantes, détecter les maladies et
|
191 |
-
réaliser des analyses statistiques afin de déterminer, le cas échéant, les corrélations
|
192 |
-
entre espèces de plantes et maladies associées.
|
193 |
-
|
194 |
-
● Du point de vue économique, l’application construite pourra aider un certain nombre
|
195 |
-
(agriculteurs, distributeurs de plantes, paysagiste, …) à détecter
|
196 |
-
d’acteurs
|
197 |
-
précocement les maladies et éviter des pertes de récoltes ou de chiffre d’affaires, et
|
198 |
-
minimiser les coûts associés aux traitements tardifs.
|
199 |
-
|
200 |
-
● Du point de vue scientifique, l’utilisation de cette application pourrait offrir un
|
201 |
-
support durable au recensement des espèces, renforcer l’échange de connaissances
|
202 |
-
entre chercheurs, en particulier sur le maintien de la bio-diversité, sensibiliser écoliers,
|
203 |
-
étudiants et grand public à la connaissance des espèces et leur conservation, être
|
204 |
-
élargi à la recherche des causes des maladies à l’aide de données additionnelles
|
205 |
-
(géographie, climat, …)
|
206 |
-
|
207 |
-
Objectifs
|
208 |
-
|
209 |
-
Description des macro-objectifs
|
210 |
-
|
211 |
-
Localiser et classifier l’espèce d’une plante dans une image
|
212 |
-
|
213 |
-
La photographie initiale prise par l’utilisateur sera analysée au regard de critères
|
214 |
-
d’acceptabilité comparables aux conditions d’entraînement de l’algorithme de classification
|
215 |
-
(niveau de flou, luminosité, contraste, etc). Elle sera ensuite retraitée (format JPEG, RGB,
|
216 |
-
redimensionnement et éventuellement retraitement du niveau de flou afin de faciliter le
|
217 |
-
diagnostic). Ce premier algorithme de classification, entraîné sur la base totale des images
|
218 |
-
décrite en page 14 et de méta-données pouvant y être rattachées aura été testé sur une base
|
219 |
-
constituée de 20% des images concernées avec un objectif d’accuracy de 95%. La base totale
|
220 |
-
des images aura été probablement corrigée afin de minimiser les déséquilibres entre classes.
|
221 |
-
|
222 |
-
Localiser et classifier la maladie éventuelle touchant la plante dans cette même image
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
La photographie retraitée, ou la photographie d’origine subissant de nouveaux filtres, sera
|
237 |
-
soumise à un second algorithme de classification, entraîné sur la base totale des images
|
238 |
-
décrite en page 14 et de méta-données pouvant y être rattachées (telles que le niveau de bleu
|
239 |
-
dans l’image qui est un premier prédicteur du caractère malade ou non de la plante) et testé
|
240 |
-
sur une base constituée de 20% des images concernées avec un objectif d’accuracy de 95%
|
241 |
-
des feuilles malades.
|
242 |
-
|
243 |
-
Bâtir une application renvoyant les informations de ces classifications à l’utilisateur sur la base
|
244 |
-
d’une photographie prise sur son smartphone.
|
245 |
-
|
246 |
-
L’application sera développée sur Streamlit conformément au schéma de l’application
|
247 |
-
présentée en Page 6 en veillant à des règles d’ergonomie de « base » (éviter les images de
|
248 |
-
fond, contraste des couleurs pour faciliter la lecture, usage des couleurs limité à une gamme
|
249 |
-
réduite, boutons de navigation explicites, etc.)
|
250 |
-
Jalons du projet
|
251 |
-
|
252 |
-
Schéma de fonctionnement de l’application
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
Niveaux d’expertise
|
265 |
-
|
266 |
-
Niveaux d’expertise interne
|
267 |
-
|
268 |
-
Nom
|
269 |
-
|
270 |
-
Algorithmie
|
271 |
-
|
272 |
-
Dév. Appli
|
273 |
-
mobile
|
274 |
-
|
275 |
-
Statistiques
|
276 |
-
|
277 |
-
Gestion
|
278 |
-
projet
|
279 |
-
|
280 |
-
Botanique
|
281 |
-
|
282 |
-
Ela CIMEN
|
283 |
-
|
284 |
-
Roland KONAN
|
285 |
-
|
286 |
-
Yacine MADI SAID
|
287 |
-
|
288 |
-
Nicolas RINCÉ
|
289 |
-
|
290 |
-
2/5
|
291 |
-
|
292 |
-
4/5
|
293 |
-
|
294 |
-
3/5
|
295 |
-
|
296 |
-
2/5
|
297 |
-
|
298 |
-
0/5
|
299 |
-
|
300 |
-
2/5
|
301 |
-
|
302 |
-
5/5
|
303 |
-
|
304 |
-
0/5
|
305 |
-
|
306 |
-
3/5
|
307 |
-
|
308 |
-
3/5
|
309 |
-
|
310 |
-
2/5
|
311 |
-
|
312 |
-
4/5
|
313 |
-
|
314 |
-
4/5
|
315 |
-
|
316 |
-
4/5
|
317 |
-
|
318 |
-
4/5
|
319 |
-
|
320 |
-
4/5
|
321 |
-
|
322 |
-
3/5
|
323 |
-
|
324 |
-
2/5
|
325 |
-
|
326 |
-
1/5
|
327 |
-
|
328 |
-
1/5
|
329 |
-
|
330 |
-
Recours à expertise externe
|
331 |
-
|
332 |
-
Nous n’avons pas eu recours à des experts externes à proprement parler (en-dehors de
|
333 |
-
Damien évidemment !) mais avons réalisé de nombreuses recherches afin de nous guider,
|
334 |
-
notamment sur les sujets suivants :
|
335 |
-
|
336 |
-
● Taille des images standard utilisée dans les algorithmes de reconnaissance d’image ;
|
337 |
-
● Détermination du niveau de flou d’une image et seuil d’acceptabilité pour la
|
338 |
-
|
339 |
-
reconnaissance d’images (150 de Laplacienne) ;
|
340 |
-
|
341 |
-
● Retraitement des niveaux de flous ;
|
342 |
-
● Déséquilibre acceptable entre classes sur le fichier d’entraînement (1 à 10) ;
|
343 |
-
|
344 |
-
Nombre minimal d’images à soumettre à l’algorithme par classe (1.000).
|
345 |
-
|
346 |
-
Partie 2 : Exploration et DataViz
|
347 |
-
|
348 |
-
Jeux de données
|
349 |
-
Soumis et exploités
|
350 |
-
|
351 |
-
https://www.kaggle.com/vbookshelf/v2-plant-seedlings-dataset
|
352 |
-
|
353 |
-
● Arborescence de 12 dossiers pour 12 espèces de jeune pousse les plus répandue au
|
354 |
-
|
355 |
-
Danemark
|
356 |
-
Il n’y a qu’un seul dataset (non séparé en test/train) contenant 5539 images
|
357 |
-
|
358 |
-
●
|
359 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
360 |
-
|
361 |
-
https://www.kaggle.com/vipoooool/new-plant-diseases-dataset
|
362 |
-
|
363 |
-
● Fichier d’images de feuilles d’arbres fruitiers, de légumineuses et de céréales,
|
364 |
-
|
365 |
-
malades ou saines
|
366 |
-
|
367 |
-
● Dataset d’entraînement de 70.295 images
|
368 |
-
● Dataset de test de 17.572 images
|
369 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
370 |
-
|
371 |
-
https://www.kaggle.com/saroz014/plant-disease
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
● Fichier d’images de feuilles d’arbres fruitiers, de légumineuses et de céréales,
|
382 |
-
|
383 |
-
malades ou saines
|
384 |
-
|
385 |
-
● Dataset d’entraînement de 43.456 images
|
386 |
-
● Dataset de test de 10.849 images
|
387 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
388 |
-
|
389 |
-
https://www.kaggle.com/abdallahalidev/plantvillage-dataset
|
390 |
-
|
391 |
-
● Fichier d’images de feuilles d’arbres fruitiers, de légumineuses et de céréales,
|
392 |
-
|
393 |
-
malades ou saines
|
394 |
-
|
395 |
-
● 3 Datasets de 54305 images chacun avec les mêmes images en couleur, niveau de
|
396 |
-
|
397 |
-
gris et prétraité.
|
398 |
-
|
399 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
400 |
-
|
401 |
-
Soumis et non exploités
|
402 |
-
|
403 |
-
https://storage.googleapis.com/openimages/web/download.html et
|
404 |
-
https://cocodataset.org/#home
|
405 |
-
|
406 |
-
● Non exploité car bases de données non spécifiquement axées sur les plantes, de
|
407 |
-
volumétrie limitée sur cette dernière catégorie, sans discrimination entre plantes
|
408 |
-
saines et plantes malades, dont le seul intérêt était la présence de masques qui ne
|
409 |
-
serviront pas dans les algorithmes choisis.
|
410 |
-
|
411 |
-
Constats
|
412 |
-
|
413 |
-
● Les 3 dernières bases de données soumises et exploitées se sont révélées redondantes
|
414 |
-
et provenant d’un même set d’images initial. Nous n’avons donc conservé que la base
|
415 |
-
d’origine
|
416 |
-
test
|
417 |
-
d’entraînement
|
418 |
-
données
|
419 |
-
les
|
420 |
-
(https://www.kaggle.com/vipoooool/new-plant-diseases-dataset)
|
421 |
-
|
422 |
-
fusionnant
|
423 |
-
|
424 |
-
de
|
425 |
-
|
426 |
-
en
|
427 |
-
|
428 |
-
et
|
429 |
-
|
430 |
-
● La première base nous est apparue trop limitée en nombre d’images (moins de 500
|
431 |
-
images par espèces), peu exploitable en raison de la part de l’image réservée au
|
432 |
-
végétal (il s’agit de jeunes pousses) et trop spécifique (12 espèces provenant du
|
433 |
-
Danemark). Nous l’avons donc abandonnée.
|
434 |
-
|
435 |
-
● Compte tenu de la limitation du dataset à des arbres fruitiers et de céréales et de
|
436 |
-
légumineuses, nous avons recherché d’autres datasets permettant d’étendre la
|
437 |
-
reconnaissance à d’autres plantes (canne à sucre, maïs et vigne) comme exposé dans
|
438 |
-
le tableau ci-dessous. Comme pour le reste des datasets, ces images sont libres de
|
439 |
-
droits.
|
440 |
-
|
441 |
-
https://www.kaggle.com/datasets/nirmalsankalana/sugarcane-leaf-disease-dataset
|
442 |
-
|
443 |
-
● Dataset d’images de feuilles de canne à sucre saine et malades
|
444 |
-
● 2569 images, séparées en 5 répertoires (1 par maladie et 1 pour celles en bonne
|
445 |
-
|
446 |
-
santé)
|
447 |
-
|
448 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
449 |
-
|
450 |
-
https://www.kaggle.com/datasets/nirmalsankalana/grape400-dataset
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
● Datasets d’images de feuilles de vigne saines et malades
|
462 |
-
● 1600 images séparées en 4 répertoires (1 par maladie et 1 pour celles en bonne
|
463 |
-
|
464 |
-
santé)
|
465 |
-
|
466 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
467 |
-
|
468 |
-
https://www.kaggle.com/datasets/shuvokumarbasak4004/rose-leaf-disease-dataset
|
469 |
-
|
470 |
-
● Datasets d’images de feuilles de rose saines et malades
|
471 |
-
● 14,910 images séparées en 3 répertoires (test, train, validation)
|
472 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
473 |
-
|
474 |
-
https://www.kaggle.com/datasets/nirmalsankalana/cassava-leaf-disease-classification
|
475 |
-
|
476 |
-
● Datasets d’images de feuilles de cassave saines et malades
|
477 |
-
● 21 397 images séparées en 5 répertoires (1 par maladie et 1 pour celles en bonne
|
478 |
-
|
479 |
-
santé)
|
480 |
-
|
481 |
-
● Volumétries restreintes aux images d’espèces végétales : 100%
|
482 |
-
|
483 |
-
Pertinence
|
484 |
-
Variables
|
485 |
-
|
486 |
-
● La reconnaissance des plantes, puis du caractère sain ou malade, va s’appuyer sur les
|
487 |
-
images sélectionnées. Le sujet de la pertinence des variables ne s’applique donc pas
|
488 |
-
de la même manière que sur un problème de classification basé sur un fichier de
|
489 |
-
données textuelles ou numériques. Les principales variables dans ce cadre seront les
|
490 |
-
pixels de chaque image.
|
491 |
-
|
492 |
-
● Néanmoins, la sélection des images s’est appuyée dans une première phase
|
493 |
-
sur un fichier .csv répertoriant les principales caractéristiques des images (cf. section
|
494 |
-
suivante sur le pre-processing) : niveau de flou, luminosité, contraste, taille des
|
495 |
-
images, type de l’image (.jpeg, .png, …) .
|
496 |
-
|
497 |
-
● C’est dans ce même fichier que nous avons logé les deux variables cibles : le nom de la
|
498 |
-
|
499 |
-
plante, d’une part, le caractère sain ou malade d’autre part.
|
500 |
-
|
501 |
-
● Un troisième fichier de données devra être constitué pour abriter les données
|
502 |
-
|
503 |
-
descriptives à afficher sur l’application streamlit.
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
Description
|
513 |
-
|
514 |
-
Le dataframe global contient 126 668 images pour 19 espèces.
|
515 |
-
|
516 |
-
Limitation des données
|
517 |
-
|
518 |
-
● Limitations liées au périmètre des données : la première limitation concerne le
|
519 |
-
|
520 |
-
périmètre des plantes et végétaux présents dans la base. Dès lors, l’application ne
|
521 |
-
pourra pas être utilisée pour reconnaître « toutes » les espèces de plantes. La
|
522 |
-
généralisation de l’application ne pourrait venir que de l’élargissement du périmètre
|
523 |
-
des plantes concernées.
|
524 |
-
|
525 |
-
● Limitations liées à l’hétérogénéité des données : la seconde limitation concerne
|
526 |
-
|
527 |
-
l’hétérogénéité des données étudiées, qui a mené à l’exclusion des images de jeunes
|
528 |
-
pousses trop éloignées de la majorité de la base d’images que nous avons pu
|
529 |
-
constituer, et insuffisamment nombreuses pour les intégrer dans le jeu
|
530 |
-
d’entraînement. De même, cela limitera la portée de l’application.
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
● Limitations liées au déséquilibre des classes : la troisième limitation concerne le
|
539 |
-
|
540 |
-
déséquilibre entre plantes avec une surreprésentation de certaines espèces dont en
|
541 |
-
particulier les tomates.
|
542 |
-
|
543 |
-
● Limitations liées à la qualité des données : la quatrième limitation touche la qualité
|
544 |
-
des données parmi les images retenues, et notamment leur degré de flou qui est
|
545 |
-
primordial dans la reconnaissance des images
|
546 |
-
|
547 |
-
● Limitations liées à la taille du dataset : la cinquième limitation concerne la taille de
|
548 |
-
|
549 |
-
l’ensemble des images ainsi constituées qui doit être limitée afin de tenir compte des
|
550 |
-
temps de traitement de l’algorithme.
|
551 |
-
|
552 |
-
Partie 3 : Pré-Processing et feature engineering
|
553 |
-
|
554 |
-
Création du dataframe des caractéristiques
|
555 |
-
|
556 |
-
Afin de faciliter la sélection des images nous avons créé un dataframe contenant les
|
557 |
-
caractéristiques de l’ensemble des images issues des dataset qui présente la structure
|
558 |
-
suivante :
|
559 |
-
|
560 |
-
● FileName : nom du fichier,
|
561 |
-
● FilePath : chemin vers le dataset initial,
|
562 |
-
● Extension : extension de l’image
|
563 |
-
● Species :espèce,
|
564 |
-
● Disease : maladie,
|
565 |
-
● FileSize : taille de l’image,
|
566 |
-
● Width : largeur de l’image,
|
567 |
-
● Height : hauteur de l’image,
|
568 |
-
● Contrast : moyenne du contraste
|
569 |
-
● Luminosity: moyenne de la luminosité
|
570 |
-
● RedMean: moyenne de vert
|
571 |
-
● GreenMean : moyenne de vert
|
572 |
-
● BlueMean : moyenne de bleu
|
573 |
-
● Blur : moyenne de flou
|
574 |
-
|
575 |
-
Nettoyage des données et étapes de traitement
|
576 |
-
|
577 |
-
Définition des critères de sélection :
|
578 |
-
|
579 |
-
● Flou > 500
|
580 |
-
● Contraste > 2
|
581 |
-
● Luminosité < 200
|
582 |
-
● Nombre maximum d’image =12500
|
583 |
-
● nombre minimum d’image =1250
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
A partir du dataframe initial, on parcourt l’ensemble des images grâce au FilePath pour
|
595 |
-
appliquer nos critères de qualité et créer un dataframe (df_high_quality)
|
596 |
-
réunissant uniquement les images qui passent le test.
|
597 |
-
|
598 |
-
Ceux ne passant pas les critères de qualité vont être intégré à un dataframe différent
|
599 |
-
(df_low_quality) pour être traité.
|
600 |
-
|
601 |
-
Transformations des données
|
602 |
-
|
603 |
-
Traitement des images
|
604 |
-
Plusieurs traitements sont appliqués aux images dans le but d’améliorer leur qualité. Les
|
605 |
-
traitements incluent des ajustements sur la luminosité, le contraste, la netteté (flou et
|
606 |
-
netteté), ainsi que des redimensionnements.
|
607 |
-
|
608 |
-
Les étapes sont détaillées ci-dessous :
|
609 |
-
|
610 |
-
1. Ajustement de la luminosité
|
611 |
-
|
612 |
-
La fonction `adjust_brightness(image)` permet de modifier la luminosité d'une image en
|
613 |
-
utilisant la méthode `ImageEnhance.Brightness` de la bibliothèque `PIL`. Le facteur de
|
614 |
-
luminosité, défini par `brightness_factor`, est appliqué à l'image. Après ajustement, la
|
615 |
-
luminosité moyenne de l'image (calculée sur une conversion en niveaux de gris) est
|
616 |
-
renvoyée pour référence.
|
617 |
-
|
618 |
-
2. Augmentation du contraste
|
619 |
-
|
620 |
-
La fonction `process_contrast(image)` augmente le contraste de l'image à l'aide de
|
621 |
-
`ImageEnhance.Contrast`. Le facteur de contraste, défini par `contrast_factor`, est appliqué
|
622 |
-
pour rendre les différences entre les pixels plus marquées. Après traitement, la fonction
|
623 |
-
calcule et renvoie la variance de l'image en niveaux de gris (une mesure du contraste).
|
624 |
-
|
625 |
-
3. Calcul du flou (Netteté)
|
626 |
-
|
627 |
-
La fonction `calculate_blurriness(image)` utilise la méthode du Laplacien pour calculer le flou
|
628 |
-
d’une image. Le flou est mesuré par la variance de la matrice du Laplacien sur l'image en
|
629 |
-
niveaux de gris. Une faible variance indique un flou plus élevé, tandis qu'une haute variance
|
630 |
-
indique une image plus nette.
|
631 |
-
|
632 |
-
4. Augmentation de la netteté
|
633 |
-
|
634 |
-
La fonction `increase_sharpness(image)` est utilisée pour améliorer la netteté de l'image.
|
635 |
-
Cela se fait par l'application de la méthode `ImageEnhance.Sharpness`. Un facteur de
|
636 |
-
netteté, `sharpness_factor`, est défini pour contrôler l’intensité de l'amélioration. Après
|
637 |
-
avoir ajusté la netteté, la fonction calcule et renvoie également le niveau de flou après
|
638 |
-
traitement pour évaluer l’effet de la netteté appliquée.
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
5. Redimensionnement de l’image
|
649 |
-
|
650 |
-
La fonction `resize_image(image, width, height)` redimensionne les images à une taille
|
651 |
-
spécifiée (ici, 256x256 pixels). Cette opération est réalisée avec la méthode `resize()` de PIL
|
652 |
-
en utilisant l'algorithme `LANCZOS`, qui permet de préserver la qualité de l'image lors du
|
653 |
-
redimensionnement.
|
654 |
-
|
655 |
-
6. Configuration des paramètres globaux
|
656 |
-
|
657 |
-
Les facteurs de traitement sont définis avant le traitement :
|
658 |
-
|
659 |
-
●
|
660 |
-
|
661 |
-
●
|
662 |
-
●
|
663 |
-
|
664 |
-
`brightness_factor` : Ajuste la luminosité (ici fixé à 0.8 pour une légère réduction de
|
665 |
-
la luminosité).
|
666 |
-
`contrast_factor` : Augmente le contraste (ici fixé à 1.5 pour un contraste plus élevé).
|
667 |
-
`sharpness_factor` : Améliore la netteté (ici fixé à 4.0 pour une forte amélioration de
|
668 |
-
la netteté).
|
669 |
-
|
670 |
-
● Taille de redimensionnement : Les images sont redimensionnées à 256x256 pixels
|
671 |
-
|
672 |
-
pour une normalisation de la taille.
|
673 |
-
|
674 |
-
7. Exécution et enregistrement des résultats
|
675 |
-
|
676 |
-
Une fois les images traitées, le DataFrame Low_quality_processed contenant les
|
677 |
-
informations des images traitées est enregistré dans un fichier CSV. Ce fichier peut être
|
678 |
-
utilisé pour des analyses ultérieures ou pour vérifier les modifications apportées à chaque
|
679 |
-
image.
|
680 |
-
|
681 |
-
8. Combinaison dans un dataframe global
|
682 |
-
|
683 |
-
Les dataframes High_quality et Low_quality_processed sont combinés dans un nouveau
|
684 |
-
dataframe df_recombined_quality.
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
Visualisations et Statistiques
|
692 |
-
|
693 |
-
Corrélation entre variables du dataframe
|
694 |
-
|
695 |
-
On constate que les variables de luminosité et de niveau de rouge, vert et bleu sont très bien
|
696 |
-
corrélées. En revanche, à l’exception du couple (“Blur”,”Filesize”), les autres variables sont
|
697 |
-
peu corrélées entre elles.
|
698 |
-
|
699 |
-
Relations avec les variables cibles
|
700 |
-
|
701 |
-
Nous n’avons pas identifié de relations entre la variable ‘species’ et le reste des variables. En
|
702 |
-
revanche, en première approche, nous avons noté une corrélation entre le niveau de
|
703 |
-
“jaune” des images et la variable saine ou malade sur une partie du jeu de données (cf.
|
704 |
-
Analyse statistiques).
|
705 |
-
|
706 |
-
Distribution des données
|
707 |
-
|
708 |
-
Distribution des espèces dans le dataframe “high quality”
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
Dans le dataframe des images de bonnes qualités, il y a 79 599 images, dont les trois
|
719 |
-
premières espèces représentent + 45% du total.
|
720 |
-
|
721 |
-
Distribution des espèces dans le dataframe “low quality”
|
722 |
-
|
723 |
-
Il y a 47 069 images, on peut remarquer que l’ensemble des images des espèces cassave, riz,
|
724 |
-
et sucre de canne ne sont présentes que sur le dataframe de mauvaise qualité.
|
725 |
-
|
726 |
-
Mesure d’amélioration de la qualité des images
|
727 |
-
|
728 |
-
Distribution du flou avant/après retraitements
|
729 |
-
|
730 |
-
D'après la visualisation, la densité des valeurs de flou a augmenté après traitement, ce qui
|
731 |
-
suggère une amélioration de la qualité des images. En effet, on peut observer que le pic de
|
732 |
-
l'histogramme a migré de 500 avant le traitement à 2000 après le traitement, ce qui indique
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
que les images sont devenues plus nettes et moins floues après avoir subi les ajustements
|
743 |
-
sur la netteté.
|
744 |
-
|
745 |
-
Analyse du contraste et de la luminosité avant et après retraitement
|
746 |
-
|
747 |
-
Les boîtes à moustaches montrent que le retraitement a amélioré la qualité des images en
|
748 |
-
réduisant les valeurs aberrantes. Pour le contraste, la médiane est restée stable, mais les
|
749 |
-
valeurs très faibles de contraste ont été corrigées, et la gamme des valeurs s'est élargie. De
|
750 |
-
même, pour la luminosité, la médiane est inchangée, mais les images trop lumineuses ont
|
751 |
-
été ajustées, créant une distribution plus homogène. En résumé, les traitements ont réduit
|
752 |
-
les extrêmes tout en maintenant une stabilité de la médiane.
|
753 |
-
|
754 |
-
Analyse du redimensionnement
|
755 |
-
|
756 |
-
Avant retraitement, les images avaient des dimensions très variées, ce qui compliquait leur
|
757 |
-
analyse et leur traitement uniforme. Cette hétérogénéité des tailles pouvait entraîner des
|
758 |
-
biais lors de l'application de modèles d'apprentissage automatique ou d'autres analyses
|
759 |
-
d'images, car les réseaux de neurones et les algorithmes de traitement d'images nécessitent
|
760 |
-
des entrées de taille uniforme. Après retraitement, toutes les images ont été
|
761 |
-
redimensionnées à une taille standard de 256x256 pixels, un format couramment utilisé
|
762 |
-
dans la datascience. Cette normalisation permet non seulement de faciliter l'analyse et
|
763 |
-
l'entraînement des modèles, mais elle garantit également que toutes les images sont
|
764 |
-
traitées de manière cohérente, améliorant ainsi la performance des modèles d'analyse et de
|
765 |
-
classification.
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
Analyses statistiques
|
772 |
-
|
773 |
-
Le niveau de bleu semble être le plus discriminant entre feuilles saines et feuilles malades,
|
774 |
-
probablement lié à la présence de tâches de couleur jaune (R+V) sur la plupart de ces
|
775 |
-
dernières.
|
776 |
-
|
777 |
-
Si on réalise un test de student pour tester l’hypothèse que les niveaux de bleu sont
|
778 |
-
significativement différents entre des feuilles saines et des feuilles malades, on trouve une
|
779 |
-
statistique t de 128 et une valeur p très proche de 0, ce qui prouve que ce niveau de bleu est
|
780 |
-
discriminant.
|
781 |
-
|
782 |
-
Ceci est confirmé par une première approche de classification via un premier modèle
|
783 |
-
Random Forest mené en prenant pour Target le statut (Sain/Malade) et en Data, la moyenne
|
784 |
-
de bleu, rouge, vert, le contraste et la luminosité donne un taux de bonne prédiction de
|
785 |
-
88%.
|
786 |
-
|
787 |
-
Le graphique ci-contre montre l’importance des variables dans la contribution à la
|
788 |
-
classification et confirme en contributeur principal le niveau de bleu.
|
789 |
-
|
790 |
-
Le taux de bonne prédiction de la classe malade est de 93,5% mais le modèle ne fonctionne
|
791 |
-
pas correctement pour le classement des images saines (taux de prédiction de 74%)
|
792 |
-
|
793 |
-
▪
|
794 |
-
|
795 |
-
Un premier modèle Random Forest ent
|
796 |
-
|
797 |
-
pour le classement des images saines (taux de prédiction de
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
Conclusions pré-modélisation
|
807 |
-
|
808 |
-
Nous disposons au terme de cette étape d’un fichier homogène en termes de qualité
|
809 |
-
d’images, d’une quantité a priori suffisante pour appliquer un algorithme de reconnaissance,
|
810 |
-
au déséquilibre entre classes moins marqué que sur les données d’origine, et qui affiche déjà
|
811 |
-
quelques variables discriminantes sur l’une des deux variables cibles.
|
812 |
-
|
813 |
-
Partie 4 : Modélisation
|
814 |
-
|
815 |
-
Classification du problème
|
816 |
-
|
817 |
-
Type de problème de machine learning
|
818 |
-
|
819 |
-
La cible du projet est d’offrir à un individu, ne bénéficiant pas de l’expertise pour reconnaître
|
820 |
-
une plante et sa maladie éventuelle, la capacité de l’identifier via l’appareil photo de son
|
821 |
-
smartphone. Il s’agit donc d’un problème de classification des espèces ainsi que des maladies
|
822 |
-
associées sur la base des images qui seront soumises par l’utilisateur.
|
823 |
-
|
824 |
-
Tâches de machine learning
|
825 |
-
|
826 |
-
La tâche associée est la reconnaissance d’images, spécifiquement de feuilles associées à 18
|
827 |
-
espèces végétales (fruits, légumineuses, céréales), dont les contours puis les détails sont
|
828 |
-
progressivement analysées à travers les couches du réseau de neurones modélisé.
|
829 |
-
|
830 |
-
Métriques de performance utilisées pour comparer les modèles
|
831 |
-
|
832 |
-
A ce stade nous avons choisi 2 métriques.
|
833 |
-
|
834 |
-
Métrique principale
|
835 |
-
|
836 |
-
Accuracy : Compte tenu de la limitation du déséquilibre entre classes obtenu après la phase
|
837 |
-
de pre-processing, nous avons choisi de retenir l’Accuracy comme métrique principale, définie
|
838 |
-
comme le rapport entre le nombre de bonnes prédictions et le nombre total de prédictions.
|
839 |
-
|
840 |
-
Métriques secondaires
|
841 |
-
|
842 |
-
Loss : Nous avons également jaugé la rapidité de la convergence du modèle en suivant la
|
843 |
-
notion de loss à chaque époque de l’apprentissage.
|
844 |
-
|
845 |
-
Selon les modèles et afin de nous assurer, malgré le faible déséquilibre de classes, que les
|
846 |
-
classes les moins représentées soient correctement traitées, nous avons observé dans certains
|
847 |
-
cas quelle était la k-ème Accuracy la plus faible parmi les classes proposées au modèle.
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
Choix du modèle et optimisation
|
867 |
-
|
868 |
-
Algorithmes testés
|
869 |
-
Nous avons retenu 6 algorithmes :
|
870 |
-
|
871 |
-
● 3 algorithmes Keras avec les modèles ResNet50V2, EfficientNetB0 et
|
872 |
-
|
873 |
-
EfficientNetV2M;
|
874 |
-
|
875 |
-
● 1 algorithme FastAI avec le modèle efficientnet_b0
|
876 |
-
● 2 algorithmes Torch, l’un avec transfer learning (MobileNetV2, adapté pour une
|
877 |
-
application mobile comme c’est l’objectif ici) et l’autre sans transfer learning
|
878 |
-
|
879 |
-
● 1 algorithme AlexNet
|
880 |
-
|
881 |
-
Résultats par modèle
|
882 |
-
|
883 |
-
1- KERAS
|
884 |
-
|
885 |
-
Keras est une bibliothèque open-source de haut niveau pour la création et l'entraînement de
|
886 |
-
modèles d'apprentissage profond (deep learning). Elle a été développée par François Chollet
|
887 |
-
en 2015 et est maintenant intégrée directement dans TensorFlow, où elle sert d'interface
|
888 |
-
principale pour construire et entraîner des réseaux de neurones. Pour notre étude nous
|
889 |
-
avons décidé de comparer 3 modèles de réseau de neurones : ResNet50V2,EfficientNetB0 et
|
890 |
-
EfficientNetV2M en transfert learning et en fine tuning.
|
891 |
-
|
892 |
-
Description des modèles
|
893 |
-
|
894 |
-
ResNet50V2 :
|
895 |
-
|
896 |
-
● Architecture : ResNet50V2 (Residual Networks) utilise des blocs résiduels, ce qui
|
897 |
-
permet de mieux entraîner des réseaux profonds en atténuant le problème de
|
898 |
-
dégradation de la performance.
|
899 |
-
|
900 |
-
● Profundité : 50 couches.
|
901 |
-
|
902 |
-
● Performance : Bon compromis entre précision et temps de calcul, particulièrement
|
903 |
-
|
904 |
-
efficace pour des tâches classiques de classification d'images (ImageNet).
|
905 |
-
|
906 |
-
● Avantages : C'est un modèle classique très utilisé avec des performances solides sur
|
907 |
-
|
908 |
-
de nombreuses applications.
|
909 |
-
|
910 |
-
●
|
911 |
-
|
912 |
-
Inconvénients : Moins efficace en termes de computation par rapport aux
|
913 |
-
architectures récentes comme EfficientNet.
|
914 |
-
|
915 |
-
EfficientNetB0 :
|
916 |
-
|
917 |
-
● Architecture : EfficientNet utilise une méthode d'optimisation appelée "compound
|
918 |
-
scaling", qui ajuste simultanément la profondeur, la largeur et la résolution de
|
919 |
-
l'image, offrant ainsi une meilleure efficacité énergétique et une précision
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
supérieure.
|
935 |
-
|
936 |
-
● Profundité : Moins profond que ResNet50V2, mais beaucoup plus efficace pour les
|
937 |
-
|
938 |
-
mêmes performances.
|
939 |
-
|
940 |
-
● Performance : Généralement plus rapide et plus efficace que ResNet50V2 pour la
|
941 |
-
|
942 |
-
même précision.
|
943 |
-
|
944 |
-
● Avantages : Très efficace en termes de taille du modèle et d'utilisation des
|
945 |
-
|
946 |
-
ressources, il donne de bons résultats même avec des réseaux moins profonds.
|
947 |
-
|
948 |
-
●
|
949 |
-
|
950 |
-
Inconvénients : Moins éprouvé que ResNet50V2 dans certaines configurations.
|
951 |
-
|
952 |
-
EfficientNetV2M :
|
953 |
-
|
954 |
-
● Architecture : Une amélioration de l'EfficientNet original, qui intègre des techniques
|
955 |
-
|
956 |
-
de fusion des convolutions et un meilleur équilibrage des ressources.
|
957 |
-
|
958 |
-
● Profundité : Plus profond que EfficientNetB0, ce qui le rend potentiellement plus
|
959 |
-
|
960 |
-
puissant, mais aussi plus lourd en termes de calcul.
|
961 |
-
|
962 |
-
● Performance : Très performant sur des tâches complexes et des jeux de données
|
963 |
-
|
964 |
-
volumineux, surpassant souvent EfficientNetB0 et ResNet50V2.
|
965 |
-
|
966 |
-
● Avantages : Très performant tout en restant optimisé pour des ressources limitées.
|
967 |
-
|
968 |
-
●
|
969 |
-
|
970 |
-
Inconvénients : Modèle plus complexe et potentiellement plus long à entraîner
|
971 |
-
comparé à EfficientNetB0.
|
972 |
-
|
973 |
-
Résultats
|
974 |
-
|
975 |
-
L'entraînement a été effectué 55 classes qui résultent du croisement espèce et maladie. Pour
|
976 |
-
chaque modèle nous avons effectué un entraînement en transfert learning sur 10 époques
|
977 |
-
avec les couches du modèle freezées. Nous avons dans une seconde étape nous avons
|
978 |
-
effectué du fine tuning des modèles entraînés sur 30 époques avec les 30 dernières couches
|
979 |
-
non freezées.
|
980 |
-
|
981 |
-
Etape Transfer learning
|
982 |
-
|
983 |
-
Etape Fine tuning
|
984 |
-
|
985 |
-
Modèle
|
986 |
-
|
987 |
-
ResNet50V2
|
988 |
-
|
989 |
-
EfficientNetB0
|
990 |
-
|
991 |
-
EfficientNetV2M
|
992 |
-
|
993 |
-
ResNet50V2
|
994 |
-
|
995 |
-
EfficientNetB0
|
996 |
-
|
997 |
-
EfficientNetV2M
|
998 |
-
|
999 |
-
Accuracy
|
1000 |
-
|
1001 |
-
0.92
|
1002 |
-
|
1003 |
-
0.92
|
1004 |
-
|
1005 |
-
0.91
|
1006 |
-
|
1007 |
-
0.95
|
1008 |
-
|
1009 |
-
0.95
|
1010 |
-
|
1011 |
-
0.95
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
Les 3 modèles plafonnent à 0.95 après le fine tuning. En effet, les résultats de la classification
|
1030 |
-
des images de l’espèce cassava sont très mauvais sur les trois modèles. Il faudra dans une
|
1031 |
-
seconde étape étudier en détail ces images.
|
1032 |
-
|
1033 |
-
Exemple de classification report avec un zoom sur l'espèce cassava.
|
1034 |
-
|
1035 |
-
Graphe comparatif de l’évolutions de la précision et de la perte des trois modèles
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
Comparaison du f1-score par classe et par modèles
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
2- FastAI
|
1054 |
-
|
1055 |
-
Fastai est une librairie open-source de haut niveau pour le deep learning.
|
1056 |
-
Construite sur PyTorch, elle a pour objectif de simplifier les entraînements de modèles,
|
1057 |
-
accélérer les déploiements de modèles tout en conservant la performance et les
|
1058 |
-
fonctionnalités avancées de Pytorch.
|
1059 |
-
|
1060 |
-
Le modèle sélectionné pour l'entraînement est efficientnet_b0. Proposé par Google, il est le
|
1061 |
-
plus petit des modèles de la famille EfficientNet, ce qui le rend pertinent pour son utilisation
|
1062 |
-
sur du matériel avec des ressources limitées (smartphone, tablette).
|
1063 |
-
|
1064 |
-
En analysant les résultats de performance à chaque itération, on constate que :
|
1065 |
-
|
1066 |
-
1) La perte de validation suit une tendance à la baisse, passant de 0.3093 à 0.1281.
|
1067 |
-
Rejoignant la perte d'entraînement, ce qui suppose une bonne généralisation du
|
1068 |
-
modèle
|
1069 |
-
|
1070 |
-
2) La précision croît jusqu'à atteindre 95% sur 5 epoch seulement, avec un taux d’erreur
|
1071 |
-
|
1072 |
-
à 4%, ce qui implique une très bonne performance du modèle.
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
3- Torch
|
1080 |
-
|
1081 |
-
Description des modèles
|
1082 |
-
|
1083 |
-
2 modèles ont été testés sous Torch :
|
1084 |
-
|
1085 |
-
● 1 modèle simple avec Transfer Learning, basé sur
|
1086 |
-
|
1087 |
-
le modèle pré-entraîné
|
1088 |
-
MobileNetV2, dont les couches intermédiaires sont neutralisées et seule la dernière
|
1089 |
-
couche est ajustée aux classes à prédire, puis ré-entrainée. Le choix s’est porté sur ce
|
1090 |
-
modèle car il est réputé être idéal pour des applications embarquées sur mobile,
|
1091 |
-
impliquant des contraintes de calcul (puissance limitée du matériel) ou nécessitant un
|
1092 |
-
fonctionnement en temps réel.
|
1093 |
-
|
1094 |
-
● 1 modèle simple sans Transfer Learning, comprenant une première couche de
|
1095 |
-
convolution analysant le couleurs RGB (3 canaux) avec 32 filtres détectant les motifs
|
1096 |
-
simples et les contours, un deuxième bloc convolutif avec 64 filtres permettant de
|
1097 |
-
capter des motifs plus complexes (formes des feuilles, textures), une couche dense
|
1098 |
-
interprétant les motifs détectés et enfin la dernière couche de sortie donnant les
|
1099 |
-
probabilités par classe de plantes. La représentation du modèle est portée en Annexes.
|
1100 |
-
|
1101 |
-
● Les 2 modèles ont été testés successivement sur 18 classes (espèces) et 58 classes
|
1102 |
-
|
1103 |
-
(croisements espèces x maladies)
|
1104 |
-
|
1105 |
-
Résultats
|
1106 |
-
|
1107 |
-
● S’agissant de la précision globale des modèles :
|
1108 |
-
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
Modèle
|
1120 |
-
|
1121 |
-
Accuracy
|
1122 |
-
|
1123 |
-
18 classes
|
1124 |
-
|
1125 |
-
58 classes
|
1126 |
-
|
1127 |
-
transfer
|
1128 |
-
|
1129 |
-
sans
|
1130 |
-
transfer
|
1131 |
-
|
1132 |
-
transfer
|
1133 |
-
|
1134 |
-
sans
|
1135 |
-
transfer
|
1136 |
-
|
1137 |
-
99,38%
|
1138 |
-
|
1139 |
-
99,59%
|
1140 |
-
|
1141 |
-
94,79%
|
1142 |
-
|
1143 |
-
98,38%
|
1144 |
-
|
1145 |
-
3ème Accuracy la plus faible
|
1146 |
-
|
1147 |
-
98,15%
|
1148 |
-
|
1149 |
-
98,85%
|
1150 |
-
|
1151 |
-
40,44%
|
1152 |
-
|
1153 |
-
80,94%
|
1154 |
-
|
1155 |
-
Le modèle “simple” sans transfer learning apparaît plus précis avec des taux d’accuracy
|
1156 |
-
supérieur, a fortiori lorsque le nombre de classes augmentent.
|
1157 |
-
La reconnaissance des espèces est bonne et aucune d’entre elles ne montre une
|
1158 |
-
accuracy inférieure à 97%.
|
1159 |
-
|
1160 |
-
En revanche la reconnaissance des croisements espèces x maladies est plus
|
1161 |
-
problématique avec des précisions faibles sur les maladies touchant la vigne (avec des
|
1162 |
-
redondances de maladies ou des variantes de maladies qui semblent très proches qui
|
1163 |
-
seront traitées dans l’étape suivante) s’agissant du modèle sans transferlearning et de
|
1164 |
-
la cassava sur le modèle avec transferlearning.
|
1165 |
-
|
1166 |
-
● Les matrices de confusion pour les modèles à 18 classes sont présentées ci-dessous,
|
1167 |
-
|
1168 |
-
en commençant par celle du modèle MobileNetV2.
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
● La convergence des modèles lors de l’apprentissage est plus rapide pour le modèle
|
1178 |
-
pré-entraîné mais ce dernier est dépassé dès la 4ème époque, la loss convergeant vers
|
1179 |
-
2,65% pour le modèle sans transfer learning 18 classes (resp. 6,27% avec 58 classes)
|
1180 |
-
et vers 6,55% pour le premier modèle 18 classes (resp. 24,75% avec 58 classes).
|
1181 |
-
|
1182 |
-
4- AlexNet
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
|
1188 |
-
|
1189 |
-
AlexNet est intéressant pour la classification d'images car il a introduit une architecture de
|
1190 |
-
réseau de neurones convolutifs profonds, utilisant des couches convolutives et des unités de
|
1191 |
-
rectification linéaire (ReLU), qui a significativement amélioré la précision de la reconnaissance
|
1192 |
-
d'images sur des jeux de données complexes comme ImageNet.
|
1193 |
-
|
1194 |
-
Le modèle a été initialisé en suivant l’architecture suivante :
|
1195 |
-
|
1196 |
-
● Couches convolutives et pooling : L'architecture commence par deux couches
|
1197 |
-
convolutives suivies de couches de max-pooling pour extraire et réduire les
|
1198 |
-
caractéristiques spatiales des images. Les tailles des filtres et des strides varient pour
|
1199 |
-
capturer différents niveaux de détails.
|
1200 |
-
|
1201 |
-
● Couches convolutives supplémentaires : Trois couches convolutives supplémentaires
|
1202 |
-
sont ajoutées, suivies d'une couche de max-pooling, pour approfondir l'extraction des
|
1203 |
-
caractéristiques et capturer des motifs plus complexes dans les images.
|
1204 |
-
|
1205 |
-
● Couches entièrement connectées et régularisation : Après l'aplatissement des
|
1206 |
-
caractéristiques, deux couches entièrement connectées avec des unités de dropout
|
1207 |
-
sont utilisées pour la classification. La sortie finale est une couche dense avec une
|
1208 |
-
activation softmax pour la classification multi-classes.
|
1209 |
-
|
1210 |
-
La précision est de 80,40 % sur les données d'entraînement et de 85,40 % sur les données de
|
1211 |
-
test.
|
1212 |
-
|
1213 |
-
La perte (loss) semble globalement correcte car elle diminue au fil des époques, indiquant une
|
1214 |
-
amélioration du modèle, bien que des fluctuations soient observées sur les données
|
1215 |
-
d’entraînement.
|
1216 |
-
|
1217 |
-
L'analyse des métriques de classification indique que le modèle ne performe pas bien, avec
|
1218 |
-
des scores F1 très faibles pour toutes les classes, une précision globale de seulement 0,03, et
|
1219 |
-
des valeurs moyennes macro et pondérées également très basses, ce qui suggère une
|
1220 |
-
mauvaise capacité de généralisation et de classification des différentes catégories,
|
1221 |
-
probablement due à un déséquilibre des classes dans les données.
|
1222 |
-
|
1223 |
-
|
1224 |
-
|
1225 |
-
|
1226 |
-
|
1227 |
-
|
1228 |
-
|
1229 |
-
|
1230 |
-
Optimisation
|
1231 |
-
|
1232 |
-
Nos modèles ont été optimisés en suivant 2 phases.
|
1233 |
-
|
1234 |
-
Phase 1
|
1235 |
-
|
1236 |
-
La première phase a reposé sur :
|
1237 |
-
|
1238 |
-
● des corrections d’erreur : mesures de précision sur des images test et non les images
|
1239 |
-
|
1240 |
-
d’entraînement ;
|
1241 |
-
|
1242 |
-
● des “élagages” rapides de modèles jugés non pertinents ;
|
1243 |
-
●
|
1244 |
-
|
1245 |
-
l’utilisation de techniques de fine-tuning : choix des “optimizers”, gel/dégel de
|
1246 |
-
couches des modèles pour l’apprentissage, technique d’augmentation de data,
|
1247 |
-
ajustement des learning rates et introduction de scheduler, modification des fonctions
|
1248 |
-
de “loss”, techniques de callback, application de poids aux classes pour corriger les
|
1249 |
-
déséquilibres ;
|
1250 |
-
|
1251 |
-
● des ajustements techniques pour un apprentissage plus rapide : réorganisation du
|
1252 |
-
|
1253 |
-
code ;
|
1254 |
-
|
1255 |
-
● des choix réalisés pour le traitement de classes dont la prédiction est plus complexe
|
1256 |
-
: il s’agit principalement de la classe “Cassava” avec la suppression pure et simple de
|
1257 |
-
ces classes ou bien focus sur la précision augmentée des modèles au fur et à mesure
|
1258 |
-
du fine-tuning.
|
1259 |
-
|
1260 |
-
Abandon de modèles non pertinents
|
1261 |
-
|
1262 |
-
2 modèles testés ont été immédiatement abandonnés :
|
1263 |
-
|
1264 |
-
● Le modèle entraîné sous Pytorch sans transfer learning, en raison de son taux de
|
1265 |
-
précision sur les images tests de 83%, très inférieur aux modèles pré-entraînés testés
|
1266 |
-
dans le chapitre précédent.
|
1267 |
-
|
1268 |
-
● Le modèle AlexNet, qui affiche à la fois un temps d’entraînement trop important et un
|
1269 |
-
|
1270 |
-
taux de précision de 88%, également très en-deça des autres modèles testés.
|
1271 |
-
|
1272 |
-
Ajustements techniques pour rapidité d’apprentissage
|
1273 |
-
|
1274 |
-
Les modèles testés sous FastAI dans l’étape précédente (EfficientNetB0 et VGG12) ont été
|
1275 |
-
migrés vers TensorFlow pour les raisons suivantes :
|
1276 |
-
|
1277 |
-
● TensorFlow est plus simple à intégrer sur Firebase ;
|
1278 |
-
●
|
1279 |
-
●
|
1280 |
-
|
1281 |
-
Il est optimisé pour la performance et la taille des modèles ;
|
1282 |
-
Il intègre un large écosystème avec support pour la quantification (réduction de la
|
1283 |
-
taille des modèles) ;
|
1284 |
-
Il est compatible avec les modèles pré-entraînés comme les réseaux convolutifs (CNN)
|
1285 |
-
pour les images.
|
1286 |
-
|
1287 |
-
●
|
1288 |
-
|
1289 |
-
|
1290 |
-
|
1291 |
-
|
1292 |
-
|
1293 |
-
|
1294 |
-
|
1295 |
-
|
1296 |
-
|
1297 |
-
|
1298 |
-
|
1299 |
-
Choix réalisés pour le traitement de la Cassave
|
1300 |
-
|
1301 |
-
Le traitement de la Cassave dans les opération de “fine-tuning” du modèle ont pris deux
|
1302 |
-
formes:
|
1303 |
-
|
1304 |
-
● La suppression pure et simple de la cassave dans le cadre de l’apprentissage: c’est le
|
1305 |
-
|
1306 |
-
cas dans ce qui suit sur les entraînements de VGG12 et EfficientNetB0 sous
|
1307 |
-
TensorFlow ;
|
1308 |
-
|
1309 |
-
● Le maintien de cette espèce dans la base d’apprentissage mais, avec une recherche
|
1310 |
-
spécifique d’amélioration de la prédiction: c’est ce qui a été fait sur MobileNetV2
|
1311 |
-
sous Pytorch, et VGG16, Vit16, EfficientNetV2M et ResNet50V2 sous Keras.
|
1312 |
-
|
1313 |
-
Résultats du fine-tuning
|
1314 |
-
|
1315 |
-
MobileNetV2 sous Pytorch
|
1316 |
-
|
1317 |
-
Le modèle a été calibré et testé comme suit :
|
1318 |
-
|
1319 |
-
● # époques : 10
|
1320 |
-
|
1321 |
-
○ # époques sur le classifier : 5
|
1322 |
-
○ époques de fine tuning sur les autres couches : 5
|
1323 |
-
|
1324 |
-
● Learning rate : 0.001 pour le classifier et 0.0001 pour le fine tuning
|
1325 |
-
● Optimizer : Adam
|
1326 |
-
|
1327 |
-
L’accuracy globale est de 97,22% mais un F1-score de 65,21% seulement sur la Cassave
|
1328 |
-
Healthy
|
1329 |
-
|
1330 |
-
Le fine-tuning pour mieux prédire cette classe a consisté à:
|
1331 |
-
|
1332 |
-
● Augmentation sur les classes spécifiées : Random Horizontal Flip, Rotation aléatoire
|
1333 |
-
|
1334 |
-
jusqu’à 30%
|
1335 |
-
|
1336 |
-
● Augmentation du nombre d’époques à : 20
|
1337 |
-
● Entrainement de la dernière couche seulement
|
1338 |
-
● Learning rate : 0.0001
|
1339 |
-
● Optimizer : Adam
|
1340 |
-
|
1341 |
-
L’accuracy globale s’est avérée dégradée à 86,85% avec un F1-score de 18,80% sur la Cassave
|
1342 |
-
Healthy, ce qui a mené à l’abandon du modèle.
|
1343 |
-
|
1344 |
-
EfficientNetB0 et VGG12 sous TensorFlow
|
1345 |
-
|
1346 |
-
Le fine-tuning a consisté à:
|
1347 |
-
|
1348 |
-
● Organisation du code pour améliorer le temps d’apprentissage
|
1349 |
-
● Augmentation de la data sur le modèle
|
1350 |
-
● Ajouts des poids sur les classes pour lutter contre le déséquilibre
|
1351 |
-
● Gel/Dégel du modèle de base
|
1352 |
-
● Shuffle passé à False dans le dataset de test
|
1353 |
-
|
1354 |
-
|
1355 |
-
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
-
|
1360 |
-
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
Les métriques précision, recall et F1-score gagnent environ 1pt pour atteindre 95% et 98%
|
1365 |
-
pour respectivement EfficientNetB0 et VGG12. Ce dernier est donc plus performant, ce qui
|
1366 |
-
élimine le premier modèle.
|
1367 |
-
Bien que dans l’apprentissage de ces deux modèles, les classes “Cassava” aient été exclues,
|
1368 |
-
on note des classes de tomates moins bien prédites telles que celles atteintes des maladies
|
1369 |
-
“Mosaic Virus” et “Spider Mites” (Précision : 73%, Recall : 98%, F1-Score : 84%). On note
|
1370 |
-
d’ailleurs qu’à l’oeil nu la résolution de certaines images ne permet pas de détecter ces
|
1371 |
-
maladies.
|
1372 |
-
|
1373 |
-
Mosaic Virus
|
1374 |
-
|
1375 |
-
Spider Mites
|
1376 |
-
|
1377 |
-
VGG16 sous Keras
|
1378 |
-
|
1379 |
-
L’entraînement de ce modèle a donné globalement des résultats décevants.
|
1380 |
-
|
1381 |
-
Pour ce modèle, les mesures de fine-tuning ont consisté à:
|
1382 |
-
|
1383 |
-
● Réduction de la taille des images pour améliorer la vitesse d’entraînement (128x128)
|
1384 |
-
● Entraînement sur 10 époques avec freeze des paramètres
|
1385 |
-
● Puis entraînement sur 10 epoches avec unfreeze des 5 dernières couches et ajout de
|
1386 |
-
|
1387 |
-
poids pour gérer le déséquilibre des classes
|
1388 |
-
|
1389 |
-
● Learning rate (optimizer Adam) plus petit lors du dégel (0.00001 vs 0.0001 lors du
|
1390 |
-
|
1391 |
-
freeze) pour améliorer l’apprentissage
|
1392 |
-
|
1393 |
-
● Callbacks :
|
1394 |
-
|
1395 |
-
○ EarlyStopping pour arrêter l'entraînement si la perte de validation ne
|
1396 |
-
|
1397 |
-
s'améliore pas après 5 epochs
|
1398 |
-
|
1399 |
-
○ ReduceLROnPlateau pour réduire le taux d'apprentissage de 20% après 3
|
1400 |
-
|
1401 |
-
époques sans amélioration de la perte de validation
|
1402 |
-
|
1403 |
-
○ StopTrainingAtAccuracy pour arrêter l'entraînement dès que la précision
|
1404 |
-
|
1405 |
-
atteint 90%
|
1406 |
-
|
1407 |
-
On constate une baisse de l’Accuracy de 75,02% à 70,02% au terme du fine-tuning. La
|
1408 |
-
classification s’améliore sur l’ensemble des classes sauf sur la Tomate, la Cassave et la Canne
|
1409 |
-
à sucre. La faible Accuracy et la longueur de l’entraînement nous font conclure à l’abandon
|
1410 |
-
du modèle.
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
-
|
1415 |
-
|
1416 |
-
|
1417 |
-
|
1418 |
-
|
1419 |
-
|
1420 |
-
|
1421 |
-
|
1422 |
-
|
1423 |
-
ResNet50V2, EfficientNetV2M et Vit16 sous Keras
|
1424 |
-
|
1425 |
-
Pour ces 3 modèles, nous avons suivi le même plan d’entraînement suivant.
|
1426 |
-
|
1427 |
-
Phase
|
1428 |
-
d'Entraînement
|
1429 |
-
|
1430 |
-
Optimiseur
|
1431 |
-
|
1432 |
-
Scheduler de
|
1433 |
-
Learning Rate
|
1434 |
-
|
1435 |
-
Perte
|
1436 |
-
|
1437 |
-
Callbacks
|
1438 |
-
|
1439 |
-
Premier
|
1440 |
-
Entraînement
|
1441 |
-
|
1442 |
-
Adam
|
1443 |
-
|
1444 |
-
CosineDecayRestarts en
|
1445 |
-
Fine tuning
|
1446 |
-
|
1447 |
-
SparseFocalLoss
|
1448 |
-
(sans poids)
|
1449 |
-
|
1450 |
-
Deuxième
|
1451 |
-
Entraînement
|
1452 |
-
(Amélioration 1)
|
1453 |
-
|
1454 |
-
AdamW
|
1455 |
-
|
1456 |
-
CosineDecayRestarts
|
1457 |
-
|
1458 |
-
SparseFocalLoss
|
1459 |
-
(avec poids des
|
1460 |
-
classes)
|
1461 |
-
|
1462 |
-
earlystop,
|
1463 |
-
time_callback,
|
1464 |
-
printLR,
|
1465 |
-
model_checkpoint_
|
1466 |
-
callback
|
1467 |
-
|
1468 |
-
earlystop,
|
1469 |
-
time_callback,
|
1470 |
-
printLR,
|
1471 |
-
model_checkpoint_
|
1472 |
-
callback
|
1473 |
-
|
1474 |
-
Détails
|
1475 |
-
supplémentaires
|
1476 |
-
|
1477 |
-
20 epochs max en
|
1478 |
-
transfert learning, 5
|
1479 |
-
epochs max en
|
1480 |
-
finetuning avec
|
1481 |
-
toutes les couches
|
1482 |
-
dégélées
|
1483 |
-
20 epochs max de
|
1484 |
-
finetuning
|
1485 |
-
|
1486 |
-
|
1487 |
-
|
1488 |
-
|
1489 |
-
|
1490 |
-
|
1491 |
-
|
1492 |
-
Troisième
|
1493 |
-
Entraînement
|
1494 |
-
(Amélioration 2)
|
1495 |
-
|
1496 |
-
AdamW
|
1497 |
-
|
1498 |
-
CosineDecayRestarts
|
1499 |
-
|
1500 |
-
SparseFocalLoss
|
1501 |
-
(avec poids des
|
1502 |
-
classes)
|
1503 |
-
|
1504 |
-
earlystop,
|
1505 |
-
time_callback,
|
1506 |
-
printLR,
|
1507 |
-
model_checkpoint_
|
1508 |
-
callback
|
1509 |
-
|
1510 |
-
20 epochs max de
|
1511 |
-
finetuning
|
1512 |
-
Augmentation
|
1513 |
-
manuelle des images
|
1514 |
-
des classes
|
1515 |
-
minoritaires sur
|
1516 |
-
Cassava +
|
1517 |
-
augmentation ciblée
|
1518 |
-
sur ces classes
|
1519 |
-
|
1520 |
-
La troisième étape s’est avérée la plus significative en matière de gain de performance, avec
|
1521 |
-
un traitement spécifique apportée à la classe “Cassava” en augmentant manuellement les
|
1522 |
-
images des classes minoritaires et en appliquant une augmentation algorithmique ciblée.
|
1523 |
-
|
1524 |
-
Les résultats du fine-tuning par modèle sont résumés dans le tableau ci-dessous, les
|
1525 |
-
deux modèles EfficientNetV2M et ViT16 se distinguant sur les classes déséquilibrées
|
1526 |
-
comme la Cassave.
|
1527 |
-
|
1528 |
-
Modèle
|
1529 |
-
|
1530 |
-
Accuracy
|
1531 |
-
|
1532 |
-
Macro F1-
|
1533 |
-
score
|
1534 |
-
|
1535 |
-
Weighted
|
1536 |
-
F1
|
1537 |
-
|
1538 |
-
Observations clés
|
1539 |
-
|
1540 |
-
ResNet50V2
|
1541 |
-
|
1542 |
-
0.96
|
1543 |
-
|
1544 |
-
0.96
|
1545 |
-
|
1546 |
-
0.96
|
1547 |
-
|
1548 |
-
Bons résultats globaux, mais performance moyenne sur
|
1549 |
-
les classes Cassava
|
1550 |
-
|
1551 |
-
EfficientNetV2M
|
1552 |
-
|
1553 |
-
0.99
|
1554 |
-
|
1555 |
-
0.98
|
1556 |
-
|
1557 |
-
0.99
|
1558 |
-
|
1559 |
-
Meilleure performance globale, bonne gestion des
|
1560 |
-
classes déséquilibrées comme Cassava
|
1561 |
-
|
1562 |
-
ViT16
|
1563 |
-
|
1564 |
-
0.98
|
1565 |
-
|
1566 |
-
0.97
|
1567 |
-
|
1568 |
-
0.98
|
1569 |
-
|
1570 |
-
Meilleure performance globale, bonne gestion des
|
1571 |
-
classes déséquilibrées comme Cassava
|
1572 |
-
|
1573 |
-
Compte tenu du faible % de prédiction, la Cassave a fait l’objet d’un focus particulier.
|
1574 |
-
On constate que le finetuning réalisé a eu un effet spectaculaire sur la
|
1575 |
-
reconnaissance de ces classes (hausse du F1-score de 15pts environ chez
|
1576 |
-
EfficientNetV2M et ViT16) notamment sur la Cassave saine.
|
1577 |
-
|
1578 |
-
|
1579 |
-
|
1580 |
-
|
1581 |
-
|
1582 |
-
|
1583 |
-
|
1584 |
-
|
1585 |
-
S’agissant des autres classes, on relève les principaux enseignements suivants:
|
1586 |
-
|
1587 |
-
● Raisins, cerises, agrumes, pommes, pêches, etc. (classes équilibrées) : les trois
|
1588 |
-
|
1589 |
-
modèles ont des scores F1 proches de 1.00 sur toutes ces classes : aucune distinction
|
1590 |
-
significative.
|
1591 |
-
|
1592 |
-
● Sugarcane (classes mineures) : Bonne performance des trois modèles.
|
1593 |
-
|
1594 |
-
EfficientNetV2M excellent suivi de ViT16
|
1595 |
-
|
1596 |
-
● Tomato (13 sous-classes, très représenté mais varié) : Bonne performance des trois
|
1597 |
-
|
1598 |
-
modèles. EfficientNetV2M excellent suivi de ViT16
|
1599 |
-
|
1600 |
-
En conclusion, suivant les critères liant métriques de précision, de temps d’apprentissage et
|
1601 |
-
de taille du modèle, EfficientNetV2M semble devoir être privilégié.
|
1602 |
-
|
1603 |
-
Critère
|
1604 |
-
|
1605 |
-
Gagnant
|
1606 |
-
|
1607 |
-
Commentaire
|
1608 |
-
|
1609 |
-
Précision globale
|
1610 |
-
|
1611 |
-
EfficientNetV2M
|
1612 |
-
|
1613 |
-
Excellent suivi de Vit16
|
1614 |
-
|
1615 |
-
Robustesse sur classes rares
|
1616 |
-
|
1617 |
-
EfficientNetV2M
|
1618 |
-
|
1619 |
-
Meilleur équilibre F1
|
1620 |
-
|
1621 |
-
Performances Cassava
|
1622 |
-
|
1623 |
-
EfficientNetV2M
|
1624 |
-
|
1625 |
-
Résiste mieux au déséquilibre
|
1626 |
-
|
1627 |
-
Simplicité et rapidité
|
1628 |
-
entraînement
|
1629 |
-
|
1630 |
-
ResNet50V2
|
1631 |
-
|
1632 |
-
Moins lourd, mais moins performant
|
1633 |
-
|
1634 |
-
Durée d’inférence
|
1635 |
-
|
1636 |
-
ResNet50V2
|
1637 |
-
|
1638 |
-
4 fois plus rapide que EfficientNetV2M et 6 fois plus
|
1639 |
-
rapide que ViT16
|
1640 |
-
|
1641 |
-
Taille disque du modèle
|
1642 |
-
|
1643 |
-
ViT16
|
1644 |
-
|
1645 |
-
Le plus léger suivi de ResNet50V2 , EfficientNetV2M
|
1646 |
-
est deux fois plus lourd
|
1647 |
-
|
1648 |
-
|
1649 |
-
|
1650 |
-
|
1651 |
-
|
1652 |
-
|
1653 |
-
Vision Transformer pure
|
1654 |
-
|
1655 |
-
ViT16
|
1656 |
-
|
1657 |
-
Très Bon
|
1658 |
-
|
1659 |
-
Conclusion au terme de la Phase 1
|
1660 |
-
|
1661 |
-
Nous tirons de cette première phase deux enseignements:
|
1662 |
-
|
1663 |
-
● La qualité de la précision semble souffrir de la classe Cassave : quel que soit le modèle
|
1664 |
-
employé, et malgré les efforts de fine-tuning, il semble qu’une difficulté de
|
1665 |
-
reconnaissance subsiste pour cette classe. Cette difficulté est selon intrinsèquement
|
1666 |
-
lié à la qualité des images et aux problèmes apparents de labellisation. Nous nous
|
1667 |
-
interrogeons donc sur l’abandon de cette classe dans le modèle final.
|
1668 |
-
|
1669 |
-
● Les modèles affichent des tailles variables, certains sans doute incompatibles avec
|
1670 |
-
un usage mobile. En conséquence, nous décidons de retenir à ce stade deux modèles,
|
1671 |
-
l’un léger, embarqué sur mobile (VGG12), et l’autre plus puissant hébergé dans un
|
1672 |
-
cloud (EfficientNetV2M).
|
1673 |
-
|
1674 |
-
Phase 2
|
1675 |
-
|
1676 |
-
La deuxième phase a été consacrée à l’interprétation des modèles en utilisant des outils
|
1677 |
-
comme GradCam ou SHAP ainsi qu’à l’apprentissage, par lequel nous commençons cette
|
1678 |
-
phase, d’un modèle alternatif aux CNN et Transformer Standard : Swintransformer.
|
1679 |
-
|
1680 |
-
Swintransformer
|
1681 |
-
|
1682 |
-
Le modèle utilisé est un Swin Transformer pré-entraîné, adapté aux 55 classes du jeu de
|
1683 |
-
données incluant la Cassave:
|
1684 |
-
|
1685 |
-
● L’entraînement a été réalisé avec un mécanisme d’early stopping qui interrompt
|
1686 |
-
l’apprentissage si la performance sur le jeu de validation ne s’améliore plus pendant
|
1687 |
-
trois époques consécutives.
|
1688 |
-
|
1689 |
-
● L’optimiseur utilisé est AdamW, qui semble reconnu pour sa robustesse et son
|
1690 |
-
|
1691 |
-
efficacité pour ce modèle avec un learning rate de 0,0001.
|
1692 |
-
|
1693 |
-
● Des poids de classe sont calculés en fonction de la fréquence de chaque catégorie dans
|
1694 |
-
le jeu d’entraînement. Le poids de la classe « Cassava_mosaic_disease » est
|
1695 |
-
volontairement réduit afin de limiter son influence lors de l’apprentissage. Il y a en
|
1696 |
-
effet 5 fois plus d’images de Cassaves atteintes de cette maladie que dans les autres
|
1697 |
-
classes de Cassaves.
|
1698 |
-
|
1699 |
-
● À chaque époque, la fonction de coût utilisée est la CrossEntropyLoss pondérée par
|
1700 |
-
|
1701 |
-
ces poids de classe.
|
1702 |
-
|
1703 |
-
● Nous retenons le modèle ayant obtenu la meilleure performance sur le jeu de
|
1704 |
-
|
1705 |
-
validation (les images du jeu de test).
|
1706 |
-
|
1707 |
-
Dans les faits, nous avons eu besoin de 6 époques pour atteindre l’optimum avec un taux
|
1708 |
-
d’accuracy de 97,72%, un macro F1-score de 96,63% et un weighted F1-score de 97,73%.
|
1709 |
-
|
1710 |
-
|
1711 |
-
|
1712 |
-
|
1713 |
-
|
1714 |
-
|
1715 |
-
|
1716 |
-
|
1717 |
-
|
1718 |
-
|
1719 |
-
|
1720 |
-
La classe Cassave reste néanmoins encore très moyennement prédite, rejoignant ainsi la
|
1721 |
-
conclusion générale que les images qui servent à l’apprentissage pour ces classes sont sans
|
1722 |
-
doute à l’origine de ce problème de classification (qualité, labellisation) : à titre d’exemple la
|
1723 |
-
classe “Cassava_healthy” affiche un F1-score de 66%.
|
1724 |
-
|
1725 |
-
Interprétation comparée MobileNetV2 et Swintranformer
|
1726 |
-
|
1727 |
-
Afin d’interpréter les modèles, nous avons utilisé GradCam pour visualiser les régions de
|
1728 |
-
l’image ayant le plus influencé la prédiction du modèle sur la base du dernier bloc du modèle.
|
1729 |
-
|
1730 |
-
Pour une image de vigne atteinte de “Black Measles”
|
1731 |
-
|
1732 |
-
Pour une image de Cassave saine (environnement végétal)
|
1733 |
-
|
1734 |
-
Pour une deuxième image de Cassave (environnement terre)
|
1735 |
-
|
1736 |
-
Sur un modèle CNN classique comme MobileNetV2, on voit clairement apparaître la plante
|
1737 |
-
sur laquelle se concentre l’algorithme, quel que soit l’environnement pour la Cassave, ou
|
1738 |
-
même une tâche révélatrice de la maladie (Black Measles) pour la feuille de vigne.
|
1739 |
-
|
1740 |
-
|
1741 |
-
|
1742 |
-
|
1743 |
-
|
1744 |
-
|
1745 |
-
|
1746 |
-
|
1747 |
-
|
1748 |
-
|
1749 |
-
|
1750 |
-
|
1751 |
-
|
1752 |
-
|
1753 |
-
|
1754 |
-
|
1755 |
-
|
1756 |
-
|
1757 |
-
|
1758 |
-
|
1759 |
-
|
1760 |
-
|
1761 |
-
|
1762 |
-
|
1763 |
-
|
1764 |
-
|
1765 |
-
|
1766 |
-
|
1767 |
-
|
1768 |
-
|
1769 |
-
|
1770 |
-
|
1771 |
-
|
1772 |
-
|
1773 |
-
|
1774 |
-
En revanche pour SwinTransformer, GradCam affiche des zones de chaleurs sous formes de
|
1775 |
-
traits verticaux plus difficile à interpréter.
|
1776 |
-
|
1777 |
-
Interprétation EfficientNetV2M
|
1778 |
-
|
1779 |
-
Le modèle EfficientNetV2M nous avait donné une accuracy globale à 0.95 après le fine
|
1780 |
-
tuning.Cependant, les résultats de la classification des images de l’espèce cassava sont très
|
1781 |
-
mauvais :
|
1782 |
-
|
1783 |
-
Nous avons donc tâché de comprendre pourquoi le modèle classifie mal en regardant plus
|
1784 |
-
en détail les images de Cassave.
|
1785 |
-
|
1786 |
-
Nous avons choisi d’utiliser la méthode de saillance native à TensorFlow, car elle est
|
1787 |
-
pleinement compatible avec notre environnement et ne présente pas de problèmes
|
1788 |
-
d’incompatibilité, ce qui facilite son intégration.
|
1789 |
-
|
1790 |
-
1- Analyse d’un premier batch avec la carte de Saillance
|
1791 |
-
|
1792 |
-
● Les cartes sont bien générées :
|
1793 |
-
|
1794 |
-
Les zones d’attention (en rouge/orange) sont visibles sur les images et indiquent les
|
1795 |
-
régions jugées importantes par le modèle.
|
1796 |
-
|
1797 |
-
● Alignement avec les feuilles :
|
1798 |
-
|
1799 |
-
Les zones chaudes se trouvent souvent sur des parties pertinentes des feuilles
|
1800 |
-
(nervures, taches, contours), ce qui est encourageant.
|
1801 |
-
|
1802 |
-
|
1803 |
-
|
1804 |
-
|
1805 |
-
|
1806 |
-
|
1807 |
-
|
1808 |
-
|
1809 |
-
|
1810 |
-
|
1811 |
-
|
1812 |
-
|
1813 |
-
● Présence de bruit parasite :
|
1814 |
-
|
1815 |
-
Dans certaines images, des zones d’attention sont visibles en dehors des feuilles,
|
1816 |
-
notamment sur l’arrière-plan ou sur d’autres objets. Cela suggère que le modèle peut
|
1817 |
-
être distrait par des éléments non pertinents.
|
1818 |
-
|
1819 |
-
● Variabilité d’attention :
|
1820 |
-
|
1821 |
-
Le modèle ne focalise pas systématiquement sur les mêmes zones d’une image à
|
1822 |
-
l’autre, ce qui reflète à la fois une adaptation aux différences d’images et un possible
|
1823 |
-
manque de stabilité dans la reconnaissance.
|
1824 |
-
|
1825 |
-
● Zones de saillance parfois trop petites :
|
1826 |
-
|
1827 |
-
Les régions influentes sont parfois très restreintes, ce qui peut refléter une faible
|
1828 |
-
confiance du modèle ou une difficulté à localiser les bonnes zones.
|
1829 |
-
|
1830 |
-
● Présence de plusieurs feuilles :
|
1831 |
-
|
1832 |
-
Lorsqu’il y a plusieurs feuilles dans l’image, le modèle semble confus et a du mal à
|
1833 |
-
identifier la feuille centrale ou la plus pertinente pour la classification.
|
1834 |
-
|
1835 |
-
● Analyse ciblée des classes mal prédites :
|
1836 |
-
|
1837 |
-
Une attention particulière sera portée sur les classes de cassave pour lesquelles le
|
1838 |
-
modèle obtient les moins bons résultats. Cela permettra d’identifier les causes des
|
1839 |
-
erreurs et d’améliorer la robustesse du modèle.
|
1840 |
-
|
1841 |
-
2- Analyse d’un second batch sur les espèces de Cassave mal classifiées avec la carte de
|
1842 |
-
Saillance
|
1843 |
-
|
1844 |
-
|
1845 |
-
|
1846 |
-
|
1847 |
-
|
1848 |
-
|
1849 |
-
|
1850 |
-
|
1851 |
-
|
1852 |
-
|
1853 |
-
|
1854 |
-
Confirmation de l'analyse :
|
1855 |
-
L’observation globale sur les classes mal prédites confirme que le modèle ne distingue pas
|
1856 |
-
toujours correctement la feuille à analyser. Dans plusieurs cas, l’attention est
|
1857 |
-
partiellement portée sur l’arrière-plan ou sur d’autres feuilles, ce qui renforce l’idée d’une
|
1858 |
-
difficulté du modèle à isoler la feuille pertinente dans des scènes complexes.
|
1859 |
-
3- Limites de l'interprétation avec SHAP et GradCam
|
1860 |
-
|
1861 |
-
-
|
1862 |
-
|
1863 |
-
-
|
1864 |
-
|
1865 |
-
L’utilisation de SHAP DeepExplainer a été écartée pour cette architecture, car cette
|
1866 |
-
méthode n’est pas encore compatible avec toutes les couches de TensorFlow 2,
|
1867 |
-
notamment celles présentes dans EfficientNet, comme DepthwiseConv2d et BiasAdd
|
1868 |
-
L’application de Grad-CAM a rencontré des problèmes lors de l’appel du modèle avec
|
1869 |
-
TensorFlow, qui refuse de traiter correctement les entrées. Nous suspectons une
|
1870 |
-
incompatibilité avec TensorFlow 2.19 ou un problème lié à la construction du
|
1871 |
-
modèle, rendant son utilisation impossible dans cette configuration.
|
1872 |
-
|
1873 |
-
Ces difficultés techniques rencontrées avec SHAP et Grad-CAM sont aussi intrinsèquement
|
1874 |
-
liées à la complexité et à la profondeur de notre modèle EfficientNetV2M, qui comporte des
|
1875 |
-
couches spécifiques (DepthwiseConv2d, BiasAdd) rendant son interprétation plus difficile
|
1876 |
-
avec certains outils standards.
|
1877 |
-
|
1878 |
-
Interprétation VGG16
|
1879 |
-
|
1880 |
-
Pour comprendre les décisions de notre modèle VGG16, nous allons utiliser 3 outils
|
1881 |
-
d’interprétation :
|
1882 |
-
|
1883 |
-
-
|
1884 |
-
|
1885 |
-
-
|
1886 |
-
|
1887 |
-
-
|
1888 |
-
|
1889 |
-
Saliency, qui permet de mettre en évidence les pixels les plus importants d’une
|
1890 |
-
image pour une prédiction donnée.
|
1891 |
-
|
1892 |
-
SHAP (SHapley Additive exPlanations), pour visualiser les caractéristiques qui
|
1893 |
-
permettent la prédictions d’une classe sur une image.
|
1894 |
-
|
1895 |
-
LIME (Local Interpretable Model-agnostic Explanations), qui donne les
|
1896 |
-
caractéristiques d’une image qui vont le plus influencer la décision du model.
|
1897 |
-
|
1898 |
-
Image source
|
1899 |
-
|
1900 |
-
Saliency
|
1901 |
-
|
1902 |
-
LIME
|
1903 |
-
|
1904 |
-
SHAP
|
1905 |
-
|
1906 |
-
|
1907 |
-
|
1908 |
-
|
1909 |
-
|
1910 |
-
|
1911 |
-
|
1912 |
-
|
1913 |
-
|
1914 |
-
|
1915 |
-
D’après nos outils d’interprétation, on remarque que les saillances désignent bien les parties
|
1916 |
-
des images importantes pour chacune des classes. Elle reconnaît les contours des plantes et
|
1917 |
-
les différences de couleurs issues des maladies.
|
1918 |
-
|
1919 |
-
|
1920 |
-
|
1921 |
-
|
1922 |
-
|
1923 |
-
|
1924 |
-
|
1925 |
-
|
1926 |
-
|
1927 |
-
|
1928 |
-
|
1929 |
-
|
1930 |
-
|
1931 |
-
|
1932 |
-
|
1933 |
-
|
1934 |
-
|
1935 |
-
|
1936 |
-
|
1937 |
-
|
1938 |
-
|
1939 |
-
|
1940 |
-
Sur la classe “Corn_Healthy”, on peut avoir un doute sur l’angle gauche de l’image qui est
|
1941 |
-
coloré : Est-ce que ce qui est mis en valeur est le fond noir ou le contour de la plante ? Cette
|
1942 |
-
surbrillance n’étant pas mise en valeur sur le coin bas à gauche, je pense qu’il s’agit bien du
|
1943 |
-
contour de la plante, permettant sa reconnaissance.
|
1944 |
-
|
1945 |
-
La colonne SHAP contient la classe pour laquelle l’image contient le plus de caractéristiques.
|
1946 |
-
Il confirme que notre modèle est capable de capturer les motifs et les éléments visuels
|
1947 |
-
pertinents pour effectuer des prédictions précises, étant donné qu’il s’agit à chaque fois de
|
1948 |
-
la bonne classe d’image sauf pour la classe 49 (Mosaic Virus). En analysant les graphiques sur
|
1949 |
-
cette classe, on confirme que le modèle a du mal à tirer ses caractéristiques spécifiques avec
|
1950 |
-
la classe 46.
|
1951 |
-
|
1952 |
-
Stratégies de traitement des images Cassava
|
1953 |
-
|
1954 |
-
Au vu des performances modestes obtenues par nos modèles sur le sous-ensemble Cassava,
|
1955 |
-
nous avons décidé de mettre en œuvre plusieurs stratégies d'amélioration. Ces approches
|
1956 |
-
visent à renforcer la qualité des données et à améliorer la capacité des modèles à
|
1957 |
-
discriminer les classes Cassava, souvent déséquilibrées et visuellement similaires.
|
1958 |
-
|
1959 |
-
1. Augmentation massive des classes minoritaires
|
1960 |
-
|
1961 |
-
Une première approche a consisté à rééquilibrer le dataset Cassava par une augmentation
|
1962 |
-
ciblée.
|
1963 |
-
|
1964 |
-
|
1965 |
-
|
1966 |
-
|
1967 |
-
|
1968 |
-
|
1969 |
-
|
1970 |
-
|
1971 |
-
|
1972 |
-
Principe
|
1973 |
-
|
1974 |
-
• Les classes minoritaires (Healthy, Bacterial blight, Brown streak disease, Green mottle)
|
1975 |
-
ont été massivement augmentées.
|
1976 |
-
|
1977 |
-
• L’objectif était d’atteindre un volume comparable à la classe majoritaire (Cassava Mosaic
|
1978 |
-
Disease).
|
1979 |
-
|
1980 |
-
• Les techniques utilisées incluent : rotations, flips, changements de luminosité,
|
1981 |
-
contrastes, translations, etc.
|
1982 |
-
|
1983 |
-
Objectifs
|
1984 |
-
|
1985 |
-
• Apporter de la diversité visuelle aux classes sous-représentées.
|
1986 |
-
|
1987 |
-
• Réduire le biais induit par la classe majoritaire.
|
1988 |
-
|
1989 |
-
• Améliorer la généralisation du modèle sur les classes rares.
|
1990 |
-
|
1991 |
-
2. Filtrage basé sur un score multi-critères
|
1992 |
-
|
1993 |
-
Une seconde approche a consisté à filtrer les images Cassava jugées peu fiables à l’aide d’un
|
1994 |
-
score multi-critères.
|
1995 |
-
|
1996 |
-
Définition du score
|
1997 |
-
|
1998 |
-
Le score est défini comme une combinaison pondérée de trois composantes :
|
1999 |
-
|
2000 |
-
• Précision locale du soft voting : probabilité que le soft voting des modèles prédit
|
2001 |
-
correctement cette image sur le dataset d'entraînement.
|
2002 |
-
|
2003 |
-
• Confiance du soft voting : probabilité moyenne attribuée à la classe majoritaire par le
|
2004 |
-
soft voting.
|
2005 |
-
|
2006 |
-
• Accord inter-modèles : mesuré par la divergence de Kullback-Leibler (KL) entre les
|
2007 |
-
distributions de sortie des différents modèles (plus la divergence est faible, plus les modèles
|
2008 |
-
sont en accord).
|
2009 |
-
|
2010 |
-
Formule du score :
|
2011 |
-
|
2012 |
-
Score = 0.5 × Précision Soft Voting + 0.3 × Confiance Soft Voting + 0.2 × (1 - Divergence KL)
|
2013 |
-
|
2014 |
-
Seuil de filtrage
|
2015 |
-
Les images sont considérées comme peu fiables lorsque leur score se situe dans le premier
|
2016 |
-
décile (les 10 % les plus faibles). Ces images ont été exclues du dataset d’entraînement.
|
2017 |
-
|
2018 |
-
3. Relabellisation automatique basée sur le score
|
2019 |
-
|
2020 |
-
Enfin une troisième stratégie a consisté à ré-étiqueter automatiquement les images Cassava
|
2021 |
-
jugées peu fiables, plutôt que de les supprimer.
|
2022 |
-
|
2023 |
-
|
2024 |
-
|
2025 |
-
|
2026 |
-
Processus de re-labellisation
|
2027 |
-
• Les images du premier décile de score ont été re-labellisées automatiquement.
|
2028 |
-
• Le nouveau label correspond à la classe prédite par le soft voting, considérée comme
|
2029 |
-
plus fiable que le label d’origine.
|
2030 |
-
• Les autres images ont conservé leur annotation initiale.
|
2031 |
-
Objectifs
|
2032 |
-
• Corriger les labels potentiellement erronés.
|
2033 |
-
• Maintenir la taille du dataset en remplaçant les étiquettes douteuses.
|
2034 |
-
• Exploiter la confiance collective des modèles pour guider la correction.
|
2035 |
-
4. Fine-tuning des modèles sur les nouveaux datasets
|
2036 |
-
Les datasets générés (filtré, relabellisé, augmenté) ont été utilisés pour affiner les modèles
|
2037 |
-
préalablement entraînés EfficientNetV2M, ResNet50V2 et Swintransformer. Le modèle
|
2038 |
-
Convnext étant relativement plus long à entraîner, nous avons décidé de l’exclure de cette
|
2039 |
-
étude d’amélioration.
|
2040 |
-
|
2041 |
-
Méthodologie
|
2042 |
-
• Une augmentation online (flip horizontal, variation de contraste, saturation, etc.) a été
|
2043 |
-
appliquée durant le fine-tuning.
|
2044 |
-
• Le scheduler CosineDecayRestarts a permis d’ajuster dynamiquement le taux
|
2045 |
-
d’apprentissage.
|
2046 |
-
• L’optimiseur utilisé est AdamW avec un weight decay de 1e-5.
|
2047 |
-
• La fonction de perte choisie est une SparseFocalLoss (γ = 2.0), pondérée par des poids de
|
2048 |
-
classes.
|
2049 |
-
|
2050 |
-
Objectifs
|
2051 |
-
|
2052 |
-
• Exploiter les datasets nettoyés et enrichis.
|
2053 |
-
• Adapter les modèles à une distribution de données plus fiable.
|
2054 |
-
• Mesurer directement l’impact des stratégies sur les performances, notamment sur les
|
2055 |
-
classes Cassava.
|
2056 |
-
5. Résultats obtenus
|
2057 |
-
Les résultats suivants comparent les performances des modèles avant et après application
|
2058 |
-
des trois stratégies (filtrage, relabellisation, augmentation) sur l’ensemble des classes
|
2059 |
-
(global) et spécifiquement sur les classes Cassava.
|
2060 |
-
|
2061 |
-
Deux tableaux sont présentés :
|
2062 |
-
• Le premier montre l’évolution des performances globales.
|
2063 |
-
• Le second est centré sur les performances spécifiques aux classes Cassava.
|
2064 |
-
|
2065 |
-
Tableau 1 : Performances globales (Accuracy et F1-score)
|
2066 |
-
|
2067 |
-
|
2068 |
-
|
2069 |
-
|
2070 |
-
|
2071 |
-
|
2072 |
-
Tableau 2 : Performances sur le sous-ensemble Cassava
|
2073 |
-
|
2074 |
-
6. Analyse des résultats
|
2075 |
-
|
2076 |
-
|
2077 |
-
|
2078 |
-
|
2079 |
-
|
2080 |
-
Stratégie 1 : Augmentation
|
2081 |
-
|
2082 |
-
• Performances globales : légère dégradation sur l’ensemble des modèles.
|
2083 |
-
• Cassava : amélioration significative du F1-score pour SwinTransformer (+8.4%) et ResNet
|
2084 |
-
(+4.3%), malgré une légère baisse d’accuracy.
|
2085 |
-
|
2086 |
-
Conclusion
|
2087 |
-
|
2088 |
-
Une stratégie efficace pour renforcer la reconnaissance des classes minoritaires avec un
|
2089 |
-
compromis acceptable sur les performances globales.
|
2090 |
-
|
2091 |
-
Stratégie 2 : Filtrage
|
2092 |
-
|
2093 |
-
• Performances globales : scores stables sur SwinTransformer et EfficientNetV2M, mais
|
2094 |
-
déclin marqué sur ResNet.
|
2095 |
-
• Cassava : amélioration du F1-score sur SwinTransformer (+5.8%), mais chute sévère sur
|
2096 |
-
ResNet (-15%).
|
2097 |
-
|
2098 |
-
Conclusion
|
2099 |
-
Une stratégie à impact variable selon les modèles ; bénéfique pour Swin, mais sensible sur
|
2100 |
-
ResNet.
|
2101 |
-
|
2102 |
-
Stratégie 3 : Relabeling
|
2103 |
-
|
2104 |
-
• Performances globales : systématiquement inférieures au baseline.
|
2105 |
-
|
2106 |
-
• Cassava : baisse significative sur tous les modèles, notamment ResNet (-
|
2107 |
-
21.8%).
|
2108 |
-
|
2109 |
-
Conclusion
|
2110 |
-
|
2111 |
-
Une stratégie risquée sans vérification des relabels. Elle peut introduire davantage
|
2112 |
-
de bruit que de correction.
|
2113 |
-
|
2114 |
-
7. Conclusion de l’étude d’amélioration sur Cassava
|
2115 |
-
Les différentes stratégies mises en place visaient à améliorer la classification des images du
|
2116 |
-
dataset Cassava, en ciblant notamment les classes déséquilibrées ou mal étiquetées.
|
2117 |
-
Cependant, les résultats montrent que ces méthodes ont globalement entraîné une
|
2118 |
-
dégradation des performances générales, quel que soit le modèle utilisé. La perte en
|
2119 |
-
accuracy et en F1-score est visible, particulièrement sur EfficientNetV2M, qui perd jusqu’à
|
2120 |
-
2.3 % d’accuracy globale. Bien que certaines stratégies, comme l’augmentation massive,
|
2121 |
-
aient permis des gains localisés (notamment sur le F1-score des classes Cassava), ces
|
2122 |
-
améliorations ne compensent pas les pertes sur l’ensemble des classes. Nous décidons dans
|
2123 |
-
la suite de garder nos modèles baseline.
|
2124 |
-
|
2125 |
-
|
2126 |
-
|
2127 |
-
|
2128 |
-
|
2129 |
-
|
2130 |
-
|
2131 |
-
|
2132 |
-
|
2133 |
-
|
2134 |
-
Étude de l’ensemblage des modèles
|
2135 |
-
|
2136 |
-
Dans cette partie, nous étudions l’impact potentiel de l’ensemblage de modèles sur
|
2137 |
-
l’amélioration des performances de classification.
|
2138 |
-
Avant d’examiner les méthodes d’ensemblage, il est important de rappeler les performances
|
2139 |
-
des modèles pris individuellement dans leur configuration de base (sans stratégie
|
2140 |
-
d’amélioration) :
|
2141 |
-
|
2142 |
-
- EfficientNetV2M est le modèle ayant obtenu les meilleurs résultats globaux et sur
|
2143 |
-
|
2144 |
-
Cassava.
|
2145 |
-
|
2146 |
-
- Swin Transformer a montré de bonnes performances, notamment une meilleure
|
2147 |
-
|
2148 |
-
robustesse sur les classes minoritaires.
|
2149 |
-
|
2150 |
-
- ConvNext était le troisième meilleur modèle.
|
2151 |
-
- ResNet50V2, bien qu’un peu moins performant, a été retenu pour sa
|
2152 |
-
|
2153 |
-
complémentarité potentielle avec les autres modèles.
|
2154 |
-
|
2155 |
-
Ces performances individuelles servent de point de comparaison pour évaluer les gains
|
2156 |
-
apportés par l’ensemblage.
|
2157 |
-
|
2158 |
-
Complémentarité des modèles : corrélation des erreurs et divergence de Jensen-Shannon
|
2159 |
-
|
2160 |
-
L’ensemblage de modèles n’est pertinent que si les modèles présentent une certaine
|
2161 |
-
diversité d’erreurs. Pour cela, nous avons étudié :
|
2162 |
-
|
2163 |
-
-
|
2164 |
-
|
2165 |
-
-
|
2166 |
-
|
2167 |
-
-
|
2168 |
-
|
2169 |
-
La corrélation des erreurs de classification entre les modèles. Des erreurs faiblement
|
2170 |
-
corrélées indiquent une complémentarité exploitable.
|
2171 |
-
La divergence de Jensen-Shannon entre les distributions de probabilité prédites. Une
|
2172 |
-
divergence modérée à forte entre modèles indique une diversité de décisions,
|
2173 |
-
facteur clé pour améliorer les résultats via l’agrégation.
|
2174 |
-
La matrice de corrélation des erreurs ci-dessous illustre le degré de similarité dans les
|
2175 |
-
erreurs de prédiction commises par les différents modèles.
|
2176 |
-
|
2177 |
-
On observe que :
|
2178 |
-
|
2179 |
-
Les modèles ResNet50V2 et Swin Transformer ont une corrélation d’erreurs faible (0.31), ce
|
2180 |
-
qui indique une forte complémentarité.
|
2181 |
-
|
2182 |
-
|
2183 |
-
|
2184 |
-
|
2185 |
-
|
2186 |
-
|
2187 |
-
|
2188 |
-
|
2189 |
-
|
2190 |
-
|
2191 |
-
EfficientNetV2M et ConvNeXt présentent également une diversité modérée dans leurs
|
2192 |
-
erreurs vis-à-vis de ResNet50V2.
|
2193 |
-
|
2194 |
-
Le score le plus élevé entre deux modèles différents est celui entre Swin et ConvNeXt (0.51),
|
2195 |
-
ce qui reste suffisamment bas pour justifier un ensemblage.
|
2196 |
-
|
2197 |
-
Ces résultats confirment l’intérêt d’un ensemblage basé sur ces modèles, car la diversité des
|
2198 |
-
erreurs est un facteur favorable à l'amélioration globale des performances.
|
2199 |
-
|
2200 |
-
Pour compléter l’analyse, nous avons mesuré la divergence de Jensen-Shannon (JSD) entre
|
2201 |
-
les distributions de probabilités prédites par les différents modèles.
|
2202 |
-
|
2203 |
-
On constate que :
|
2204 |
-
Les modèles ResNet50V2 et Swin Transformer présentent la plus forte divergence (0.081),
|
2205 |
-
confirmant leur grande diversité de prédiction.
|
2206 |
-
EfficientNetV2M et Swin présentent également une divergence modérée (0.033), suggérant
|
2207 |
-
une complémentarité exploitable.
|
2208 |
-
À l’inverse, EfficientNetV2M et ConvNeXt sont plus proches (0.038), ce qui indique une
|
2209 |
-
certaine redondance dans leurs décisions.
|
2210 |
-
Ces résultats renforcent l’hypothèse selon laquelle un ensemblage de modèles hétérogènes
|
2211 |
-
(ResNet + Swin + EfficientNet) peut améliorer la robustesse des prédictions globales grâce à
|
2212 |
-
une diversité suffisante dans les sorties.
|
2213 |
-
|
2214 |
-
|
2215 |
-
|
2216 |
-
|
2217 |
-
|
2218 |
-
|
2219 |
-
Comparaison des performances des méthodes d’ensemblage
|
2220 |
-
|
2221 |
-
Nous avons exploré deux approches principales pour combiner les modèles :
|
2222 |
-
Soft Voting (vote pondéré par les probabilités) : chaque modèle contribue à la prédiction
|
2223 |
-
finale via sa distribution de probabilité. Nous avons initialement utilisé une pondération
|
2224 |
-
équivalente pour chaque modèle.
|
2225 |
-
Une étude systématique des coefficients de pondération n’a pas mis en évidence de
|
2226 |
-
combinaison significativement meilleure que l’équipondération.
|
2227 |
-
Cette méthode s’est avérée simple, stable, et a permis d’obtenir des résultats compétitifs.
|
2228 |
-
Stacking : cette approche consistait à utiliser un méta-modèle entraîné à partir des sorties
|
2229 |
-
des modèles de base.
|
2230 |
-
|
2231 |
-
Les performances obtenues avec le stacking n’ont pas surpassé celles du soft voting.En
|
2232 |
-
raison de la complexité de mise en œuvre et de l’absence de gain notable, nous avons
|
2233 |
-
décidé d’abandonner cette méthode au profit de l’agrégation simple.
|
2234 |
-
|
2235 |
-
Performances des ensembles
|
2236 |
-
|
2237 |
-
|
2238 |
-
|
2239 |
-
|
2240 |
-
|
2241 |
-
|
2242 |
-
Conclusion sur le choix des ensembles de modèles
|
2243 |
-
|
2244 |
-
Globalement, l’ensemble EfficientNetV2M + ResNet50V2 + SwinTransformer atteint les
|
2245 |
-
meilleures performances (accuracy = 0.9865, F1-score = 0.9856), surpassant tous les
|
2246 |
-
modèles individuels. Cela justifie pleinement l’intérêt du soft voting entre modèles
|
2247 |
-
complémentaires.
|
2248 |
-
|
2249 |
-
Pour les classes Cassava uniquement, l’ensemble EfficientNetV2M + ResNet50V2 se
|
2250 |
-
démarque légèrement, avec un F1-score de 0.8674. Il est suivi de très près par l’ensemble
|
2251 |
-
intégrant SwinTransformer (0.8658), puis par EfficientNetV2M seul (0.8655).
|
2252 |
-
Ces résultats montrent que :
|
2253 |
-
Ajouter SwinTransformer à l’ensemble améliore les performances globales sans dégrader la
|
2254 |
-
spécialisation sur Cassava.
|
2255 |
-
|
2256 |
-
EfficientNetV2M reste central dans tous les meilleurs ensembles : c’est le modèle le plus
|
2257 |
-
constant et performant, en global comme sur Cassava.
|
2258 |
-
ResNet50V2, bien que moins performant seul, apporte une complémentarité utile en
|
2259 |
-
ensemble, notamment sur les classes Cassava.
|
2260 |
-
Le stacking n’a pas permis d’amélioration notable par rapport au soft voting, tout en
|
2261 |
-
nécessitant une mise en œuvre plus complexe. Il a donc été écarté dans les configurations
|
2262 |
-
finales.
|
2263 |
-
|
2264 |
-
En tenant compte des contraintes pratiques de mise en œuvre de notre application
|
2265 |
-
(réduction des temps d'entraînement, coûts d'hébergement, vitesse d’inférence) nous
|
2266 |
-
avons décidé de sélectionner l’ensemble EfficientNetV2M + ResNet50V2.
|
2267 |
-
|
2268 |
-
Partie 5 : Conclusions tirées
|
2269 |
-
Difficultés rencontrées pendant le projet
|
2270 |
-
|
2271 |
-
Principal verrou scientifique rencontré
|
2272 |
-
Le principal verrou scientifique de ce projet s'est révélé être la qualité et la labellisation
|
2273 |
-
hétérogène des données d'images, particulièrement pour la classe Cassave, qui a
|
2274 |
-
systématiquement montré des performances de classification inférieures malgré les efforts
|
2275 |
-
de fine-tuning. Cette difficulté reflète un défi majeur en reconnaissance d'images agricoles :
|
2276 |
-
distinguer les symptômes subtils de maladies sur des images prises dans des conditions
|
2277 |
-
naturelles variables, avec des arrière-plans complexes et des variations d'éclairage.
|
2278 |
-
Difficultés détaillées par catégorie
|
2279 |
-
|
2280 |
-
Prévisionnel
|
2281 |
-
|
2282 |
-
• Temps de préprocessing sous-estimé : Le nettoyage et l'homogénéisation des
|
2283 |
-
|
2284 |
-
multiples datasets (fusion de bases redondantes, correction des déséquilibres entre
|
2285 |
-
classes) ont nécessité significativement plus de temps que prévu
|
2286 |
-
|
2287 |
-
• Complexité du fine-tuning : Les itérations successives d'optimisation des modèles,
|
2288 |
-
|
2289 |
-
particulièrement pour traiter les classes minoritaires comme la Cassave, ont multiplié
|
2290 |
-
les cycles de développement par 3
|
2291 |
-
|
2292 |
-
|
2293 |
-
|
2294 |
-
|
2295 |
-
|
2296 |
-
|
2297 |
-
|
2298 |
-
• Phase d'interprétation des modèles : L'utilisation d'outils comme GradCam et SHAP
|
2299 |
-
s'est révélée plus complexe techniquement qu'anticipé, avec des incompatibilités
|
2300 |
-
entre certaines architectures (EfficientNetV2M) et les outils d'explicabilité
|
2301 |
-
|
2302 |
-
Jeux de données
|
2303 |
-
|
2304 |
-
• Redondance non détectée initialement : Découverte tardive que 3 des 4 datasets
|
2305 |
-
|
2306 |
-
principaux provenaient de la même source originale, réduisant la diversité réelle des
|
2307 |
-
données
|
2308 |
-
|
2309 |
-
• Déséquilibre sévère : Surreprésentation massive des tomates (13 sous-classes)
|
2310 |
-
|
2311 |
-
créant un biais dans l'apprentissage
|
2312 |
-
|
2313 |
-
• Qualité hétérogène : Images de cassave systématiquement de qualité inférieure (flou
|
2314 |
-
|
2315 |
-
>500, contraste <2) nécessitant un pipeline de traitement spécifique
|
2316 |
-
|
2317 |
-
• Limitations de périmètre : Dataset limité à 19 espèces et 53 croisement espèces x
|
2318 |
-
|
2319 |
-
maladies alors que la flore mondiale compte 400 000 espèces, limitant l'applicabilité
|
2320 |
-
générale
|
2321 |
-
|
2322 |
-
Compétences techniques/théoriques
|
2323 |
-
|
2324 |
-
• Courbe d'apprentissage des architectures avancées : Maîtrise de modèles
|
2325 |
-
|
2326 |
-
•
|
2327 |
-
|
2328 |
-
complexes comme SwinTransformer et EfficientNetV2M plus longue qu'anticipé
|
2329 |
-
Interprétabilité des modèles : Compétences en explicabilité IA (SHAP, LIME,
|
2330 |
-
GradCam) acquises en cours de projet pour répondre aux exigences d'interprétation,
|
2331 |
-
parfois en avance de phase par rapport aux sprints du programme.
|
2332 |
-
|
2333 |
-
• Optimisation pour le déploiement mobile : Apprentissage des techniques de
|
2334 |
-
compression et quantification de modèles pour l'usage sur smartphone
|
2335 |
-
|
2336 |
-
Pertinence
|
2337 |
-
|
2338 |
-
● Choix architecturaux : Nécessité de réviser l'approche initiale face aux performances
|
2339 |
-
insuffisantes sur certaines classes, menant à l'exploration de modèles alternatifs
|
2340 |
-
(SwinTransformer) ou l’utilisation de certaines images pré-retraitement (Cassave)
|
2341 |
-
|
2342 |
-
● Métriques d'évaluation : Remise en question de l'accuracy comme métrique
|
2343 |
-
|
2344 |
-
principale face au déséquilibre des classes et utilisation du F1-score
|
2345 |
-
|
2346 |
-
● Stratégie de données : Questionnement sur l'inclusion/exclusion de la classe Cassave
|
2347 |
-
|
2348 |
-
dans le modèle final
|
2349 |
-
|
2350 |
-
IT
|
2351 |
-
|
2352 |
-
● Puissance computationnelle : Temps d'entraînement prohibitifs pour certains
|
2353 |
-
|
2354 |
-
modèles (EfficientNetV2M, VGG16) nécessitant l'optimisation du code et la réduction
|
2355 |
-
de la taille des images
|
2356 |
-
|
2357 |
-
● Mémoire : Contraintes mémoire lors de l'entraînement de modèles profonds avec
|
2358 |
-
|
2359 |
-
des images haute résolution
|
2360 |
-
|
2361 |
-
● Déploiement : Défis de compression des modèles pour un usage mobile tout en
|
2362 |
-
|
2363 |
-
préservant les performances
|
2364 |
-
|
2365 |
-
|
2366 |
-
|
2367 |
-
Autres
|
2368 |
-
|
2369 |
-
●
|
2370 |
-
|
2371 |
-
Incompatibilités techniques : Problèmes de compatibilité entre TensorFlow 2.19 et
|
2372 |
-
certains outils d'interprétation (SHAP DeepExplainer, GradCam)
|
2373 |
-
|
2374 |
-
● Migration entre frameworks : Passage de FastAI vers TensorFlow pour faciliter
|
2375 |
-
l'intégration Firebase, nécessitant la ré-implémentation de certains modèles
|
2376 |
-
|
2377 |
-
Bilan
|
2378 |
-
Contribution principale dans l'atteinte des objectifs
|
2379 |
-
Notre contribution principale réside dans le développement d'une pipeline complète de
|
2380 |
-
traitement et de classification d'images de plantes intégrant :
|
2381 |
-
|
2382 |
-
1. Système de tri et amélioration automatique de la qualité : Développement
|
2383 |
-
d'algorithmes de détection et correction du flou, luminosité et contraste
|
2384 |
-
|
2385 |
-
2. Architecture hybride optimisée : Comparaison systématique de 6 architectures
|
2386 |
-
|
2387 |
-
différentes avec fine-tuning spécialisé
|
2388 |
-
|
2389 |
-
3. Solution de déploiement adaptative : Proposition de deux modèles
|
2390 |
-
|
2391 |
-
complémentaires (VGG12 léger pour mobile, EfficientNetV2M puissant pour cloud)
|
2392 |
-
|
2393 |
-
Modifications depuis la dernière itération
|
2394 |
-
|
2395 |
-
Nous n’avons procédé à aucune modification. L’intégration du modèle SwinTransformer,
|
2396 |
-
atteignant 97,72% d'accuracy, a offert une alternative aux CNN traditionnels pour la
|
2397 |
-
reconnaissance de motifs complexes dans les images de plantes mais nous ne l’avons pas
|
2398 |
-
retenu compte tenu de la complexité d’interprétation avec l’outil testé (GradCam).
|
2399 |
-
|
2400 |
-
Nous avons en revanche maintenu le choix des deux modèles EfficientNetV2M et VGG12
|
2401 |
-
compte tenu de l’amélioration apportée par le fine-tuning de la classe Cassave grâce à la
|
2402 |
-
mise en place d'une augmentation de données ciblée et de pondération des classes
|
2403 |
-
permettant une amélioration de 15 points du F1-score.
|
2404 |
-
|
2405 |
-
Résultats obtenus et comparaison au benchmark
|
2406 |
-
Performances atteintes
|
2407 |
-
|
2408 |
-
● EfficientNetV2M : 95% d'accuracy globale après fine-tuning
|
2409 |
-
● SwinTransformer : 97,72% d'accuracy avec 96,63% de macro F1-score
|
2410 |
-
● VGG12 : 98% d'accuracy (après exclusion de la classe Cassave)
|
2411 |
-
|
2412 |
-
Comparaison aux benchmarks de la littérature
|
2413 |
-
Bien que le nombre de classes testées soit relativement modeste, nos résultats se
|
2414 |
-
positionnent favorablement par rapport aux références que nous avons pu collecter :
|
2415 |
-
|
2416 |
-
● PlantCLEF challenge : Evolution de 25% (2011) à 92% (2017) sur 10 000 espèces
|
2417 |
-
● Études récentes : 96-98% d'accuracy sur datasets Plant Village
|
2418 |
-
● Notre approche : 98% sur 19 espèces avec traitement de données hétérogènes et 53
|
2419 |
-
|
2420 |
-
classes en les croisant avec les maladies.
|
2421 |
-
|
2422 |
-
|
2423 |
-
|
2424 |
-
|
2425 |
-
|
2426 |
-
Atteinte des objectifs du projet
|
2427 |
-
|
2428 |
-
Objectif 1 : Classification des espèces (✅ Atteint)
|
2429 |
-
Accuracy de 98% pour la reconnaissance d'espèces avec VGG12 et SwinTransformer,
|
2430 |
-
dépassant l'objectif initial de 95%.
|
2431 |
-
|
2432 |
-
Objectif 2 : Détection des maladies (⚠ Partiellement atteint)
|
2433 |
-
95% d'accuracy globale mais performances hétérogènes selon les espèces :
|
2434 |
-
|
2435 |
-
● Excellentes : Tomates, raisins, agrumes (F1-score > 0.98)
|
2436 |
-
● Moyennes : Cassave (F1-score : 66% pour classe saine)
|
2437 |
-
● Limitation : Certaines maladies visuellement similaires (Mosaic Virus, Spider Mites)
|
2438 |
-
|
2439 |
-
Objectif 3 : Application Streamlit (✅ En cours)
|
2440 |
-
Développement d'une interface utilisateur fonctionnelle intégrant les modèles entraînés.
|
2441 |
-
|
2442 |
-
Processus métier d'inscription
|
2443 |
-
Notre modèle peut s'inscrire dans plusieurs processus métier :
|
2444 |
-
|
2445 |
-
Agriculture de précision
|
2446 |
-
|
2447 |
-
● Diagnostic précoce : Détection automatisée des maladies pour intervention rapide
|
2448 |
-
● Réduction des intrants : Ciblage précis des traitements phytosanitaires
|
2449 |
-
● Optimisation des rendements : Prévention des pertes de récolte estimées à 20-40%
|
2450 |
-
|
2451 |
-
selon la FAO
|
2452 |
-
|
2453 |
-
Services aux professionnels
|
2454 |
-
|
2455 |
-
● Conseil agricole : Outil d'aide au diagnostic pour conseillers et techniciens agricoles
|
2456 |
-
● Formation : Support pédagogique pour l'apprentissage de la reconnaissance des
|
2457 |
-
|
2458 |
-
maladies
|
2459 |
-
|
2460 |
-
● Certification : Contrôle qualité automatisé pour les filières agricoles
|
2461 |
-
|
2462 |
-
Applications grand public
|
2463 |
-
|
2464 |
-
● Jardinage amateur : Identification et conseil pour jardiniers particuliers
|
2465 |
-
● Éducation environnementale : Sensibilisation à la biodiversité végétale
|
2466 |
-
● Surveillance phytosanitaire participative : Collecte de données citoyennes pour le
|
2467 |
-
|
2468 |
-
monitoring des maladies émergentes
|
2469 |
-
|
2470 |
-
Suite du projet
|
2471 |
-
Pistes d'amélioration des performances
|
2472 |
-
|
2473 |
-
Amélioration des données
|
2474 |
-
|
2475 |
-
● Extension du dataset : Intégration de bases de données supplémentaires pour
|
2476 |
-
|
2477 |
-
couvrir plus d'espèces (objectif : passer de 19 à 100+ espèces)
|
2478 |
-
|
2479 |
-
|
2480 |
-
● Augmentation ciblée : Techniques d'augmentation spécialisées par type de maladie
|
2481 |
-
|
2482 |
-
(GANs, style transfer)
|
2483 |
-
|
2484 |
-
● Données multi-modales : Intégration d'informations contextuelles (géolocalisation,
|
2485 |
-
|
2486 |
-
saison, …)
|
2487 |
-
|
2488 |
-
Optimisations architecturales
|
2489 |
-
|
2490 |
-
● Modèles hybrides : Combinaison CNN-RNN avec réseaux Liquid Time-Constant pour
|
2491 |
-
|
2492 |
-
traitement temporel
|
2493 |
-
|
2494 |
-
● Attention mechanisms : Intégration de mécanismes d'attention pour focaliser sur les
|
2495 |
-
|
2496 |
-
zones pathologiques
|
2497 |
-
|
2498 |
-
● Architecture adaptative : Modèles capables d'ajuster leur complexité selon la
|
2499 |
-
|
2500 |
-
puissance de calcul disponible
|
2501 |
-
|
2502 |
-
Techniques avancées
|
2503 |
-
|
2504 |
-
● Apprentissage fédéré : Entraînement distribué préservant la confidentialité des
|
2505 |
-
|
2506 |
-
données agricoles
|
2507 |
-
|
2508 |
-
● Few-shot learning : Reconnaissance de nouvelles maladies avec peu d'exemples
|
2509 |
-
● Domain adaptation : Transfert de connaissances entre différentes conditions
|
2510 |
-
|
2511 |
-
climatiques et géographiques
|
2512 |
-
|
2513 |
-
Déploiement et optimisation
|
2514 |
-
|
2515 |
-
● Quantification avancée : Techniques de compression préservant mieux les
|
2516 |
-
|
2517 |
-
performances
|
2518 |
-
|
2519 |
-
● Edge computing : Optimisation pour calcul embarqué sur capteurs IoT agricoles
|
2520 |
-
● Traitement en temps réel : Pipeline optimisé pour diagnostic instantané
|
2521 |
-
|
2522 |
-
Contribution à l'accroissement de la connaissance scientifique
|
2523 |
-
|
2524 |
-
Avancées méthodologiques
|
2525 |
-
|
2526 |
-
● Pipeline de qualité d'images : Contribution à l'amélioration automatique d'images
|
2527 |
-
|
2528 |
-
agricoles en conditions naturelles
|
2529 |
-
|
2530 |
-
● Comparaison architecturale : Étude comparative systématique de 6 architectures sur
|
2531 |
-
|
2532 |
-
données agricoles hétérogènes
|
2533 |
-
|
2534 |
-
● Traitement des déséquilibres : Stratégies spécialisées pour classes minoritaires en
|
2535 |
-
|
2536 |
-
contexte agricole
|
2537 |
-
|
2538 |
-
Connaissances domaine-spécifiques
|
2539 |
-
|
2540 |
-
● Variables discriminantes : Identification du niveau de bleu comme prédicteur
|
2541 |
-
|
2542 |
-
principal du caractère sain/malade (statistique t=128)
|
2543 |
-
|
2544 |
-
● Seuils de qualité : Définition de critères quantitatifs pour la sélection d'images
|
2545 |
-
|
2546 |
-
agricoles (flou >500, contraste >2)
|
2547 |
-
|
2548 |
-
● Analyse des échecs : Documentation des limites des approches CNN sur certaines
|
2549 |
-
|
2550 |
-
pathologies visuellement similaires
|
2551 |
-
|
2552 |
-
|
2553 |
-
Impact scientifique et sociétal
|
2554 |
-
|
2555 |
-
● Démocratisation du diagnostic : Contribution à l'accessibilité de l'expertise
|
2556 |
-
|
2557 |
-
phytosanitaire
|
2558 |
-
|
2559 |
-
● Recherche participative : Cadre pour l'intégration de données citoyennes dans la
|
2560 |
-
|
2561 |
-
surveillance phytosanitaire
|
2562 |
-
|
2563 |
-
Durabilité agricole : Support à la réduction de l'usage de pesticides par un diagnostic précis
|
2564 |
-
|
2565 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|