-
Notifications
You must be signed in to change notification settings - Fork 0
/
banca.Rmd
372 lines (231 loc) · 8.83 KB
/
banca.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
---
title: APLICAÇÃO DE MÉTODOS DE APRENDIZADO DE MÁQUINA PARA CLASSIFICAÇÃO DE USO E COBERTURA DA TERRA EM IMAGENS DE SENSORIAMENTO REMOTO
author: "Alexandre de Tomy Silva"
date: "Outubro/2019"
output:
beamer_presentation:
theme: "Singapore"
colortheme: "lily"
ioslides_presentation: default
slidy_presentation: default
---
<style type="text/css">
.title-slide hgroup h1 {
font-size: 28px;
letter-spacing: 0;
}
</style>
```{r setup, include=FALSE}
library(knitr)
library(kableExtra)
library(sf)
knitr::opts_chunk$set(echo = FALSE,
cache = TRUE,
message=FALSE,
cache.path = "./.cache/")
# kableExtra::kable_styling(latex_options = "scale_down")
```
# Introdução
## Introdução | *Sensoriamento Remoto*
- Imagens geradas por satélites
- Observação da terra: monitoramento dos recursos
- Coleta, distribuição e análise
## Intrudução | *Aprendizado de Máquina*
- Aprendizado de máquina
- Reconhecimento de padrões de uso e cobertura da terra
- Resultados como base para outras aplicações
## Introdução | *Dados e ferramentas*
- Disponibilidade
- Ambientes SIG integrados
- Computação em núvem: processamento, armazenamento e distribuição
- Reprodutibilidade
## Objetivo
- Desenvolvimento e estudo de modelos preditivos de classificação de imagens de sensoriamento remoto
- Dados: **MapBiomas** e **Sentinel-2/MSI**
- Área de interesse: Região do município de **Bauru**
- Ferramentas: Linguagem **R** e **Google Earth Engine**
- Classes: padrões de **uso e cobertura terrestre **
- Algoritmos: **Máquina de Vetores Suporte** (linear com regularização e com função de base radial como núcleo) e **Florestas Aleatórias**
# Fundamentação Teórica
## Sensoriamento Remoto
> Sensoriamento remoto é uma técnica de obtenção de imagens dos objetos da superfície terrestre sem que haja um contato físico de qualquer espécie entre o sensor e o objeto.
- Presença de um **alvo** (superfície terrestre) que interage com a **energia** (radiação) provinda de uma **fonte** (luz solar), gerando uma resposta que é captada por um **sensor** (acoplado em um satélite).
## Aprendizado de máquina
- Aprendizado de Máquina é uma área da inteligência artificial que se refere ao desenvol-vimento de métodos que otimizam sua performance iterativamente aprendendo com dados
## Aprendizado de máquina | *Sensoriamento Remoto*
- Problema de **classificação** pixel a pixel, aplicando métodos **supervisionados** e **não paramétricos**
- Classificadores paramétricos como máxima verissimilhança são muito utilizados
- Porém, os não paramétricos possuem melhores resultados
## Aprendizado de máquina | *Support Vector Machines*
- Achar o **limite de decisão** que separa as classes (binário)
- Projeção do espaço de características para uma dimensão maior
- Funções de núcleo (polinomial, lineares, etc)
## Aprendizado de máquina | *Decision Trees*
- "Cortes" recursivos e repetidos
- Cada corte gera um "tronco"
- "Folhas" são as classes
## Aprendizado de máquina | *Random Forests*
- Conjunto de Árvores de Decisões
- Classe será definida pelo "voto" da maioria das árvores da floresta
- Previne problema de **alto viés**
- Cada árvore é treinada com um único subconjunto de teste e variáveis
- Uma árvore será menos precisa, porém, menos correlacionada com as outras
# Metodologia
## Dados | *MapBiomas*
>O projeto MapBiomas é uma iniciativa multi-institucional para gerar mapas anuais de cobertura e uso do solo a partir de processos de classificação automática aplicada a imagens de satélite.
## Dados | Sentinel-2/MSI
- Programa Sentinel
- Resolução espacial média (10-30m)
- Sensor multiespectral
- Dados abertos desde 2013
## Ambientes | *R*
- Linguagem de paradigmas funcional e orientado a objeto
- Muito utlizada para análises estatísticas
- Ambiente integrado com bibliotecas de dados geoespaciais
- Forte documentaçãoo
## Ambientes | *Google Earth Engine*
- Ambiente de computação em núvem
- Diversas coleções de dados de satélite
- Processamento extremamente rápido
- Utilizado pelo MapBiomas
## Etapas
![]("./monografia/rascunhos/figs/etapas.png")
# Desenvolvimento
## Aquisicao dos Dados | Satélite Sentinel-2
```{r}
sentinel_bandas <- read.csv("./dados/satelite/sentinel/bandas.csv")
sentinel_bandas %>% kable() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
#
# xtable::xtable(sentinel_bandas)
# sentinel_bandas %>%
# xtable(label = "sentinel-bandas",
# caption = "Características das bandas do sensor multiespectral MSI do Satélite Sentinel-2") %>%
# print(file = "./saida/tex/table_sentinel-bandas.tex") %>%
```
## Aquisicao dos dados | Satélite Sentinel-2
```{r, fig.align='center'}
sentinel <- raster::brick("./dados/satelite/sentinel/sentinel.tif")
# pdf("./saida/tex/plot_sentinel-rgb.pdf")
# raster::plotRGB(sentinel,r=3,g=2,b=1, stretch = "lin")
# dev.off()
raster::plotRGB(sentinel,r=3,g=2,b=1, stretch = "lin")
sp_shp <- st_read("./dados/ibge/35MUE250GC_SIR.shp", quiet = TRUE)
# bauru_shp <- sp_shp %>%
# filter(NM_MUNICIP == "BAURU")
# plot(bauru_shp, lwd=2, add=TRUE)
```
## Aquisição dos dados | Seleção das amostras
```{r}
samples <- sf::st_read("./saida/shapefile/pontos_amostra_sp.shp", quiet = TRUE)
# pdf("./saida/tex/plot_pontos-amostra.pdf")
plot(sp_shp$geometry)
plot(samples, add=TRUE)
# dev.off()
```
## Aquisição dos dados | Seleção das amostras
```{r}
kable(table(samples$CERRADO)) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
```
## Extracao de características | Indice de vegetacao
```{r}
ndvi <- readRDS("./saida/plots/plot_ndvi.rds")
# pdf("./saida/tex/plot_ndvi.pdf")
# raster::plot(ndvi, axes = FALSE, box = FALSE)
# dev.off()
raster::plot(ndvi, axes = FALSE, box = FALSE)
# RStoolbox::ggR(ndvi)
# plot(ndvi)
```
## Extracao de características | Seleção das bandas
```{r}
bandas <- readRDS("./saida/plots/plot_bandas.rds")
plot(bandas)
```
## Reamostragem
```{r}
amostras_treino <- readRDS("./saida/modelos/amostras_treino.rds")
amostras_teste <- readRDS("./saida/modelos/amostras_teste.rds")
kable(table(amostras_treino$Classe), caption = "Amostras para treino") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
```
## Reamostragem
```{r}
kable(table(amostras_teste$Classe), caption = "Amostras para teste") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
```
## Treinamento | SVM Linear
```{r}
plot_svm_linear <- readRDS("./saida/modelos/plot_svm_linear.rds")
# pdf("./saida/tex/plot_svm-linear.pdf")
# dev.off()
plot_svm_linear
```
## Treinamento | SVM Radial
```{r}
plot_svm_radial <- readRDS("./saida/modelos/plot_svm_radial.rds")
# pdf("./saida/tex/plot_svm-radial.pdf")
# dev.off()
plot_svm_radial
```
## Treinamento | Random Forests
```{r}
plot_rf <- readRDS("./saida/modelos/plot_rf.rds")
# pdf("./saida/tex/plot_rf.pdf")
# dev.off()
plot_rf
```
## Predição | SVM Linear
```{r}
map_svm_linear <- readRDS("./saida/mapas/map_svm_linear.rds")
# pdf("./saida/tex/map_svm-linear.pdf")
# dev.off()
map_svm_linear
```
## Predição | SVM Radial
```{r}
map_svm_radial <- readRDS("./saida/mapas/map_svm_radial.rds")
# pdf("./saida/tex/map_svm-radial.pdf")
# dev.off()
map_svm_radial
```
## Predição | SVM Radial
```{r}
map_rf <- readRDS("./saida/mapas/map_rf.rds")
# pdf("./saida/tex/map_rf.pdf")
# dev.off()
map_rf
```
## Mapa de referência | Mapbiomas
```{r}
map_mapbiomas <- readRDS("./saida/mapas/map_mapbiomas.rds")
# pdf("./saida/tex/map_mapbiomas.pdf")
# dev.off()
map_mapbiomas
```
## Avaliação de precisão
- Matriz de erro para cada modelo com 100 pontos de amostras de cada classe extraídos do *raster* do MapBiomas
```{r}
matriz_confusao <- readRDS("./saida/tabelas/confusao.rds")
kable(matriz_confusao) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
```
## Considerações
- Classes que sofreram confusão (ex: formacao_florestal e floresta_plantada)
- Variáveis preditoras insuficientes
- Classes predominantes na classsificação com MVS radial
# Conclusão
## Conclusão
- Sistemas de Sensoriamento Remoto que permitem imageamento da superfície terrestre
- Um modelo preditivo bem ajustado depende de uma série de considerações a serem avaliadas
- Aplicações: Monitoramento de recursos; análises temporais; planejamento urbano; cruzamento de dados; entre outras aplicações
- Trabalhos futuros: comparação com outra base de dados; seleção de amostras de outras regiões; etapas adicionais de pré processamento e extração de características; utilização de outros algoritmos como Redes Neurais Artificiais
##
\begin{center}
Dúvidas?
\end{center}
##
\begin{center}
Obrigado!
\end{center}