class: center, middle, inverse, title-slide .title[ # Images satellitaires en Haïti : une perspective de Science des données pour le bioalimentaire ] .author[ ### de Marcellis-Warin, N., Antenor, S., Warin, Th. ] .date[ ### March 30, 2023 ] --- class: center, middle, inverse # Contexte de la recherche --- ## Contexte de la recherche Les questions de : - sécurité alimentaire - souveraineté alimentaire - économie de l'agriculture - remembrement agricole Nouveaux moyens : - Utilisation croissante de la télédétection satellitaire ou par drone dans l'agriculture --- class: inverse, center, middle # Table des matières --- 1. Introduction 2. Revue de la littérature 3. Données 4. Analyse 5. Résultats 6. Recherche future et conclusion --- class: inverse, middle, center # 1. Introduction --- ## Introduction Le sous-secteur agricole en Haïti : - Contribue à plus de 20% du PIB (BM, 2023) - 29% de l'emploi (BM, 2023) - 1.053.107 de petites exploitations (plus de 80% des 27.750 Km^2) (MARNDR, 2009) Deux grands défis : - Exposition aux phénomènes climatiques extrêmes - Carence cruciale de cartographie et d’enregistrement des biens fonciers --- ## Question de recherche Compte tenu de la prépondérance de l’agriculture dans l’économie nationale, on se demande si la télédétection est à même de contribuer à solutionner les multiples problèmes du secteur bioalimentaire en Haïti? - Le système agricole haïtien étant majoritairement constitué de modestes exploitants familiaux, les images satellitaires ont-elles la capacité de le doter d’outils adéquats de prévention de catastrophes anthropiques et naturelles? - En quoi la télédétection peut-elle contribuer à mieux résoudre l’épineux problème cadastral haïtien ? - Comment exploiter d’un point de vue institutionnel les données géospatiales générées par la télédétection pour une réponse optimale à la question bioalimentaire en Haïti ? --- class: inverse, middle, center # 2. Revue de la littérature --- ## Revue de la littérature Riche et récente littérature (60 articles : 2017 – 2023) Satellite : la couverture des terres agricoles sur de vastes zones et pendant plusieurs années UAV : cartographier en peu de temps et à petite échelle - Expériences de télédétection agricole répertoriées : Etats-Unis, France, Allemagne, Australie, Espagne, Népal, Inde, Asie du Sud-Est et du Nord-Est, Taiwan, Sénégal, Chine Satellitaire et UAV - Domaines d’application : cartographie plantation et surveillance phénologie, évaluation santé des plantes, gestion mauvaises herbes et ravageurs, prédiction précoce rendement des cultures, surveillance des niveaux de nutrition des plantes, détection et contrôle des agents pathogènes, application d’engrais et pulvérisation des pesticides --- class: inverse, middle, center # 3. Données --- .panelset[ .panel[.panel-name[Données Raster - code] Nous prenons des données de République dominicaine: ```r # long lat aoi <- matrix(data = c(22.85, 45.93, # Upper left corner 22.95, 45.93, # Upper right corner 22.95, 45.85, # Bottom right corner 22.85, 45.85, # Bottom left corner 22.85, 45.93), # Upper left corner - closure ncol = 2, byrow = TRUE) set_aoi(aoi) view_aoi() ``` ] .panel[.panel-name[Données Raster - résultats] Nous prenons des données de République dominicaine:
] ] --- .panelset[ .panel[.panel-name[Collecte des images] - Nous collectons les données sur Sentinel - le fichier de données est de la taille 1663, 34. - Nous gardons seulement les données Level-2A et cloudcov inférieur à 1, c'est à dire des données très peu polluées - le fichier final est donc 28, 34 (observations and variables). ] .panel[.panel-name[Carte] ``` ## Downloading previews... ## [Preview 1/1] Downloading preview 'S2A_MSIL2A_20220722T092041_N0400_R093_T34TFR_20220722T134859' to './data_previews/sentinel-2/S2A_MSIL2A_20220722T092041_N0400_R093_T34TFR_20220722T134859_preview.jpg'... ## ## Georeferncing previews... ## [Preview 1/1] Converting './data_previews/sentinel-2/S2A_MSIL2A_20220722T092041_N0400_R093_T34TFR_20220722T134859_preview.jpg' into './data_previews/sentinel-2/S2A_MSIL2A_20220722T092041_N0400_R093_T34TFR_20220722T134859_preview.tif'... ## Columns added to records: 'preview_file_jpg', 'preview_file' ## Composing preview map... ```
] .panel[.panel-name[Carte RGB] ``` ## [1] TRUE ``` ``` ## [1] TRUE ```
] ] --- .panelset[ .panel[.panel-name[Préparation des données] - Les bandes de 20 m ont été rééchantillonnées à 10 m. Le rééchantillonnage est nécessaire car sinon on ne peut pas construire un objet raster "brique" à utiliser pour les prédictions. - Centrage et normalisation des données - Les réseaux de neurones nécessitent une normalisation. - Ce processus implique de soustraire la moyenne et de diviser par l'écart type pour chaque variable/caractéristique/bande. ] .panel[.panel-name[Polygones vers points]
] .panel[.panel-name[De points à prédicteurs] ![](presentation_bioalimentaire_files/figure-html/unnamed-chunk-15-1.png)<!-- --> ] ] --- class: inverse, middle, center # 4. Modèles --- ## Choix de modèles Pour la reconnaissance des images, nous allons prendre les paramètres du meilleur des trois modèles: - forêt aléatoire - SVM - réseaux neuronaux --- ## Diviser en train et tester - L'ensemble de données de formation sera utilisé pour le réglage du modèle par validation croisée et recherche de grille. - Ensuite, nous utiliserons les modèles finaux réglés sur l'ensemble de données de test pour créer des matrices de confusion. ``` ## ## agriculture construction forest pasture water ## 1141 691 946 590 296 ``` ``` ## ## agriculture construction forest pasture water ## 489 296 405 252 126 ``` --- ## Base pour tous les modèles - L'ensemble de données est utilisé pour effectuer la validation croisée (CV) et la recherche de grille pour le réglage du modèle. Une fois que les paramètres optimaux/meilleurs ont été trouvés, un modèle final est adapté à l'ensemble des données d'apprentissage à l'aide de ces résultats. - Les indices CV doivent correspondre lors de la comparaison de plusieurs modèles, afin d'obtenir une comparaison équitable. Par conséquent, `folds` passera à l'argument `trainControl` pour chaque type de modèle. - Dans l'ensemble, cela est important pour pouvoir comparer les différents types de modèles. --- .panelset[ .panel[.panel-name[Forêt aléatoire] Le réglage ici a été effectué via l'argument `mtry`, qui peut varier de 2 jusqu'au nombre total de prédicteurs (bandes) utilisés (ici, 11). Ainsi, l'optimisation a été effectuée via la validation croisée et la recherche de grille . - Le modèle final/optimal, stocké dans `model_rf,` correspond à `mtry` = 8 avec la plus grande précision = NA. ] .panel[.panel-name[Résultats] ``` ## user system elapsed ## 3.708 0.246 20.322 ``` <img src="presentation_bioalimentaire_files/figure-html/unnamed-chunk-16-1.png" width="50%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Interprétation] - **La précision** semble vraiment élevée, bien meilleure que le modèle "sans taux d'information" qui prédit toujours la classe dominante (ici, le premier niveau du facteur `classe` - agriculture); - La **sensibilité** (rappel) fait référence au **taux de vrais positifs** (le modèle détecte correctement la classe) ; - La **spécificité** est le **vrai taux négatif** (le modèle rejette correctement la classe) ] .panel[.panel-name[Matrice de confusion 1] ``` ## Confusion Matrix and Statistics ## ## Reference ## Prediction agriculture construction forest pasture water ## agriculture 483 7 0 7 0 ## construction 2 289 0 0 0 ## forest 2 0 405 4 1 ## pasture 2 0 0 241 0 ## water 0 0 0 0 125 ## ## Overall Statistics ## ## Accuracy : 0.9841 ## 95% CI : (0.9766, 0.9897) ## No Information Rate : 0.3119 ## P-Value [Acc > NIR] : < 2.2e-16 ## ## Kappa : 0.9792 ## ## Mcnemar's Test P-Value : NA ## ## Statistics by Class: ## ## Class: agriculture Class: construction Class: forest ## Sensitivity 0.9877 0.9764 1.0000 ## Specificity 0.9870 0.9984 0.9940 ## Pos Pred Value 0.9718 0.9931 0.9830 ## Neg Pred Value 0.9944 0.9945 1.0000 ## Prevalence 0.3119 0.1888 0.2583 ## Detection Rate 0.3080 0.1843 0.2583 ## Detection Prevalence 0.3170 0.1856 0.2628 ## Balanced Accuracy 0.9874 0.9874 0.9970 ## Class: pasture Class: water ## Sensitivity 0.9563 0.99206 ## Specificity 0.9985 1.00000 ## Pos Pred Value 0.9918 1.00000 ## Neg Pred Value 0.9917 0.99931 ## Prevalence 0.1607 0.08036 ## Detection Rate 0.1537 0.07972 ## Detection Prevalence 0.1550 0.07972 ## Balanced Accuracy 0.9774 0.99603 ``` ] .panel[.panel-name[Matrice confusion 2] - Vous pouvez également obtenir une matrice de confusion pour le modèle final en utilisant l'ensemble des données de train. Ceci est différent de l'approche ci-dessus. Cependant, vous souhaiterez généralement voir une matrice de confusion basée sur l'ensemble de données de test. Dans les deux cas, on peut voir que le modèle est le plus confus quant à la distinction entre les classes d'utilisation des terres de pâturage et d'agriculture. En revanche, le modèle "semble super certain" lors de la classification de l'eau. ] .panel[.panel-name[Résultats] ``` ## ## Call: ## randomForest(x = x, y = y, mtry = param$mtry, importance = TRUE, allowParallel = TRUE) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 8 ## ## OOB estimate of error rate: 1.56% ## Confusion matrix: ## agriculture construction forest pasture water class.error ## agriculture 1127 2 4 8 0 0.01226994 ## construction 14 677 0 0 0 0.02026049 ## forest 9 0 932 5 0 0.01479915 ## pasture 5 0 10 575 0 0.02542373 ## water 0 0 0 0 296 0.00000000 ``` ] .panel[.panel-name[Prédicteurs 1]
] .panel[.panel-name[Prédicteurs 2]
] .panel[.panel-name[Prédicteurs 3 ] ![](presentation_bioalimentaire_files/figure-html/unnamed-chunk-20-1.png)<!-- --> ] ] --- .panelset[ .panel[.panel-name[SVM] - Machine à vecteur de support régularisée L2 (double) avec noyau linéaire. ] .panel[.panel-name[Matrice de confusion 1] ``` ## user system elapsed ## 0.680 0.103 16.345 ``` <img src="presentation_bioalimentaire_files/figure-html/unnamed-chunk-21-1.png" width="50%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Matrice de confusion 2] ``` ## Confusion Matrix and Statistics ## ## Reference ## Prediction agriculture construction forest pasture water ## agriculture 472 8 0 18 0 ## construction 6 286 0 0 0 ## forest 2 1 404 1 2 ## pasture 9 1 1 233 0 ## water 0 0 0 0 124 ## ## Overall Statistics ## ## Accuracy : 0.9688 ## 95% CI : (0.9589, 0.9768) ## No Information Rate : 0.3119 ## P-Value [Acc > NIR] : < 2.2e-16 ## ## Kappa : 0.9593 ## ## Mcnemar's Test P-Value : NA ## ## Statistics by Class: ## ## Class: agriculture Class: construction Class: forest ## Sensitivity 0.9652 0.9662 0.9975 ## Specificity 0.9759 0.9953 0.9948 ## Pos Pred Value 0.9478 0.9795 0.9854 ## Neg Pred Value 0.9841 0.9922 0.9991 ## Prevalence 0.3119 0.1888 0.2583 ## Detection Rate 0.3010 0.1824 0.2577 ## Detection Prevalence 0.3176 0.1862 0.2615 ## Balanced Accuracy 0.9706 0.9807 0.9962 ## Class: pasture Class: water ## Sensitivity 0.9246 0.98413 ## Specificity 0.9916 1.00000 ## Pos Pred Value 0.9549 1.00000 ## Neg Pred Value 0.9856 0.99861 ## Prevalence 0.1607 0.08036 ## Detection Rate 0.1486 0.07908 ## Detection Prevalence 0.1556 0.07908 ## Balanced Accuracy 0.9581 0.99206 ``` ] ] --- .panelset[ .panel[.panel-name[Réseaux neuronaux] ``` ## # weights: 245 ## initial value 11096.609811 ## iter 10 value 1263.270830 ## iter 20 value 320.267974 ## iter 30 value 110.425716 ## iter 40 value 59.210373 ## iter 50 value 38.276167 ## iter 60 value 34.281204 ## iter 70 value 32.265556 ## iter 80 value 30.941623 ## iter 90 value 30.363548 ## iter 100 value 29.870011 ## iter 110 value 29.383020 ## iter 120 value 29.086305 ## iter 130 value 28.809274 ## iter 140 value 28.597146 ## iter 150 value 28.482670 ## iter 160 value 28.398691 ## iter 170 value 28.324374 ## iter 180 value 28.240997 ## iter 190 value 28.159566 ## iter 200 value 28.099439 ## iter 210 value 28.045517 ## iter 220 value 27.990300 ## iter 230 value 27.920579 ## iter 240 value 27.843964 ## iter 250 value 27.783127 ## iter 260 value 27.753913 ## iter 270 value 27.715663 ## iter 280 value 27.685069 ## iter 290 value 27.658917 ## iter 300 value 27.639776 ## iter 310 value 27.623300 ## iter 320 value 27.609914 ## iter 330 value 27.593739 ## iter 340 value 27.566230 ## iter 350 value 27.544702 ## iter 360 value 27.500714 ## iter 370 value 27.406819 ## iter 380 value 27.382549 ## iter 390 value 27.371658 ## iter 400 value 27.356837 ## iter 410 value 27.325557 ## iter 420 value 27.294497 ## iter 430 value 27.277397 ## iter 440 value 27.265587 ## iter 450 value 27.256363 ## iter 460 value 27.245143 ## iter 470 value 27.235062 ## iter 480 value 27.227831 ## iter 490 value 27.222070 ## iter 500 value 27.207633 ## iter 510 value 27.179092 ## iter 520 value 27.161930 ## iter 530 value 27.155770 ## iter 540 value 27.154581 ## iter 550 value 27.154346 ## iter 560 value 27.154301 ## iter 570 value 27.154292 ## iter 570 value 27.154292 ## iter 570 value 27.154292 ## final value 27.154292 ## converged ``` ] .panel[.panel-name[Matrice de confusion 1] ``` ## user system elapsed ## 4.554 0.214 21.668 ``` <img src="presentation_bioalimentaire_files/figure-html/unnamed-chunk-23-1.png" width="50%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Matrice de confusion 2] ``` ## Confusion Matrix and Statistics ## ## Reference ## Prediction agriculture construction forest pasture water ## agriculture 486 2 1 0 0 ## construction 1 294 0 0 0 ## forest 0 0 404 1 0 ## pasture 2 0 0 251 0 ## water 0 0 0 0 126 ## ## Overall Statistics ## ## Accuracy : 0.9955 ## 95% CI : (0.9908, 0.9982) ## No Information Rate : 0.3119 ## P-Value [Acc > NIR] : < 2.2e-16 ## ## Kappa : 0.9942 ## ## Mcnemar's Test P-Value : NA ## ## Statistics by Class: ## ## Class: agriculture Class: construction Class: forest ## Sensitivity 0.9939 0.9932 0.9975 ## Specificity 0.9972 0.9992 0.9991 ## Pos Pred Value 0.9939 0.9966 0.9975 ## Neg Pred Value 0.9972 0.9984 0.9991 ## Prevalence 0.3119 0.1888 0.2583 ## Detection Rate 0.3099 0.1875 0.2577 ## Detection Prevalence 0.3119 0.1881 0.2583 ## Balanced Accuracy 0.9955 0.9962 0.9983 ## Class: pasture Class: water ## Sensitivity 0.9960 1.00000 ## Specificity 0.9985 1.00000 ## Pos Pred Value 0.9921 1.00000 ## Neg Pred Value 0.9992 1.00000 ## Prevalence 0.1607 0.08036 ## Detection Rate 0.1601 0.08036 ## Detection Prevalence 0.1614 0.08036 ## Balanced Accuracy 0.9973 1.00000 ``` ] .panel[.panel-name[Prédicteurs] <img src="presentation_bioalimentaire_files/figure-html/nnet-importance-1.png" width="50%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Diagramme] ![](presentation_bioalimentaire_files/figure-html/unnamed-chunk-25-1.png)<!-- --> ] ] --- .panelset[ .panel[.panel-name[Model comparison] - Nous comparons les trois types de modèles en utilisant le cadre défini par le package `caret` via la fonction `resamples()` tant que les indices de train des observations correspondent (ce que nous nous sommes assurés qu'ils font en définissant des graines spécifiques). - Ici, nous comparons les résultats obtenus via la validation croisée sur le jeu de données du train lorsque nous avons ajusté les modèles. - En général, le modèle avec la précision médiane la plus élevée est le "gagnant", ainsi qu'une plage plus petite entre la précision min et max. ] .panel[.panel-name[Visuel 1] ![](presentation_bioalimentaire_files/figure-html/unnamed-chunk-26-1.png)<!-- --> ] .panel[.panel-name[Visuel 2] ``` ## [1] "Accuracy" "Kappa" "Mean_Balanced_Accuracy" ## [4] "Mean_Detection_Rate" "Mean_F1" "Mean_Neg_Pred_Value" ## [7] "Mean_Pos_Pred_Value" "Mean_Precision" "Mean_Recall" ## [10] "Mean_Sensitivity" "Mean_Specificity" ``` ] .panel[.panel-name[t-test] ``` ## ## Call: ## summary.diff.resamples(object = .) ## ## p-value adjustment: bonferroni ## Upper diagonal: estimates of the difference ## Lower diagonal: p-value for H0: difference = 0 ## ## Accuracy ## rf svm nnet ## rf -0.03136 -0.04825 ## svm 3.478e-07 -0.01689 ## nnet 1.403e-07 2.355e-06 ``` ] .panel[.panel-name[Interprétation] - Les tests `\(t\)` appariés avec corrections multi-tests de Bonferroni sur les p-values montrent qu'il existe des différences significatives entre le modèle de réseau de neurones et les deux autres, alors qu'il n'y a pas de différences significatives entre les modèles de forêt aléatoire et SVM. - Dans notre cas, nous pouvons choisir le modèle de réseau de neurones comme le "meilleur" type de modèle. Cependant, les différences sont vraiment faibles entre les précisions. Le réseau de neurones a une précision légèrement meilleure que le modèle de forêt aléatoire, seulement par 4.83%. ] ] --- ## Temps système ``` ## user system elapsed ## 24.650 0.315 24.964 ``` ---
``` ## class id hex ## 1: agriculture 1 #ff7f00 ## 2: construction 2 #e41a1c ## 3: forest 3 #4daf4a ## 4: pasture 4 #984ea3 ## 5: water 5 #377eb8 ``` --- class: inverse, middle, center # 5. Résultats --- ## Résultats Pas de résultat concluant dans le cas d’Haïti Cependant, des cas de succès sont répertoriés dans la littérature : - (Dahhani et al., 2022) Construction de carte fiables et précises (imagerie satellite radar à synthèse d'ouverture (SAR), À Kaffrine, au Sénégal,) - (Chang et al., 2020) Modélisation de la croissance du riz dans les comtés de Yunlin et de Changhua, Taiwan. - (Chaudhary et al., 2019) : images Google Earth et des images à basse hauteur prises par UAV (Cartographie des dommages géomorphologiques, au Népal, - D’excellents résultats dans le cas de la Roumanie --- class: inverse, middle, center # 6. Recherche future et conclusions --- # Recherche future et conclusions L’imagerie des drones est prochainement envisagée dans d’Haiti --- class: inverse, middle, center # Merci! 6. Recherche future et conclusion