[PYTHON] Résumé de Kaggle: Planète, comprendre l'Amazonie depuis l'espace

1.Tout d'abord

Nous mettrons à jour les informations de Kaggle qui a participé dans le passé. Ici, nous présenterons les données de Planet: Understanding the Amazon from Space et en discuterons en bonne place dans le forum. Je vais le ramasser. Une introduction à l'approche du gagnant sera introduite dans un autre article.

2. Arrière plan

Screen Shot 2017-07-17 at 21.44.54.png

De grandes quantités de forêt sont perdues quotidiennement dans le bassin amazonien. Cela a causé la destruction de l'écosystème mondial, la perte de colonies, des changements climatiques et de nombreuses autres conséquences catastrophiques. En numérisant la destruction de la nature et l'invasion humaine dans les forêts, le gouvernement et les acteurs locaux seront en mesure de réagir rapidement et de manière coûteuse à ces problèmes. Dans ce concours, en utilisant des photographies satellites avec des résolutions de 3 à 5 US, il sera possible de juger de la destruction des forêts à petite échelle et des jugements humains / accidentels. Par conséquent, dans ce concours, nous étiquetons la surface du sol à partir de photographies satellites.

Les points caractéristiques de cette époque sont les suivants.

3. Indice d'évaluation

L'indice d'évaluation cette fois-ci est le score F2. Généralement, le F score est utilisé pour la notation, mais le score F2 est un indice avec un poids de rappel plus important que Precision. est. Screen Shot 2017-07-17 at 21.54.54.png

4. Présentation des données

Ces données proviennent d'Amazon (Brésil, Pérou, Uruguay, Colombie, Venezuela, Gaiana, Bolivie, C'est une photographie satellite de (Equateur). Chaque photo a une ou plusieurs étiquettes pour trois groupes (1. conditions météorologiques, 2. surface générale, 3. surface rare).

chips.jpg

Ci-dessous, nous présenterons chaque étiquette.

4.1. Etiquette trouble

Les nuages sont le principal obstacle à la photographie par satellite. Il existe trois types d'étiquettes nuageuses ici.

4.1.1. Scènes nuageuses

cloudy_1.jpg

4.1.2. Scènes partiellement nuageuses

pc1.jpg

4.1.3. Scènes brumeuses (légèrement nuageux)

haze1.jpg

4.2. Étiquettes géographiques générales

Voici sept étiquettes courantes.

4.2.1. Forêt tropicale humide

C'est la plus grande étiquette dans les données. primary.jpg

4.2.2. Eau (rivière, lac)

Étiquettes montrant les rivières, les réservoirs et les lacs en croissant, qui sont les caractéristiques les plus importantes du bassin amazonien.

river.jpg

4.2.3. Résidence

Une étiquette indiquant le lieu de résidence ou de bâtiment. Comprend des zones densément peuplées aux villages ruraux. L'étiquetage devient plus difficile dans les petites zones résidentielles qui vivent seules.

habitation1.jpg

4.2.4. Terres agricoles

L'étiquetage des terres cultivées pour les cultures commerciales est une technique importante en Amazonie.

agg1.jpg

4.2.5. Route

road.jpg

4.2.6. Terres cultivées

La culture mobile est un élément des terres agricoles et est souvent gérée par des individus ou des familles dans les zones rurales. cultivation.jpg

4.2.7. Sol nu

Bare Ground s'applique à toutes les zones naturelles sans arbres et non aux influences humaines. Ces zones se trouvent naturellement en Amazonie et comprennent des zones relativement petites telles que le marais Pantanal et la zone aride de Senard.

bare.jpg

4.3. Étiquette géographique inhabituelle

4.3.1. Yakihata

Il est inclus dans une partie des terres cultivées mobiles. Il montre une couleur brun foncé ou noire.

slashburn1.jpg

4.3.2. Abattage

Une étiquette qui indique les zones où des arbres coûteux ont été abattus, comme le teck et l'acajou. Apparaît comme une route boueuse sinueuse adjacente à une tache brune nue.

logging1.jpg

4.3.3. Hanasaki

Un phénomène naturel souvent observé en Amazonie.

bloom.jpg

4.3.4. Exploitation minière traditionnelle

Il existe de grandes mines traditionnelles en Amazonie.

mine1.jpg

4.3.5. Exploitation minière «technique»

C'est le cas de l'exploitation minière à petite échelle. On le trouve souvent dans les zones où l'or est déposé, comme les collines andines. Cette exploitation minière technique implique souvent une activité illégale et provoque l'érosion du sol environnant.

artmine1.jpg

4.3.6. Purge

Un phénomène naturel trouvé dans la région andine, également connu sous le nom de Windslow. Des vents froids locaux et soudainement secs soufflent des montagnes andines (vents forts et rapides de plus de 100 MPH), abattant des arbres dans de grandes forêts tropicales humides.

blowdown.jpg

5. Analyser les données pour le moment (EDA)

Je vais vous présenter deux cahiers. 5.1. Est-ce que l'ADE d'Anoka 5.2. Est l'AED de Philipp Schmidt

5.1. Créer un humangram d'étiquette

Cliquez ici pour le cahier original L'analyse d'images à l'aide de photographies satellites a été vue dans de nombreux concours depuis un certain temps. Apparemment, c'est une tendance récente. Dans ce concours, c'est un problème de classification qui crée des multi-étiquettes pour toutes les images un peu inhabituelles. Par conséquent, ici, nous analyserons brièvement l'apparence de l'étiquette globale.

https://gist.github.com/TomHortons/d766738d4ce4bd564a96bbdd5529bfaa

Les numéros et les étiquettes des photos satellites sont fournis dans des fichiers séparés. Chargez-les et créez un histogramme.

スクリーンショット 2017-07-18 16.10.04 1.png

Comme mentionné dans la première introduction de données, l'étiquette de forêt tropicale humide (primaire) et l'étiquette de condition météorologique (nuageux, clair) sont les plus courantes. Puisque l'indice d'évaluation est cette fois le score F2, nous mettons l'accent sur Rappel. Le défi est de savoir comment estimer les étiquettes géographiques rares tout en supprimant les étiquettes géographiques communes.

https://gist.github.com/TomHortons/68023b27e469bdb25e0249477ba9f123

Ensuite, vérifiez la fréquence des combinaisons d'étiquettes. Par exemple, dans la principale forêt tropicale humide, il devrait y avoir des étiquettes telles que mine, champ brûlé et purge. De cette manière, la "cooccurrence" peut être une information en soi.

スクリーンショット 2017-07-18 16.21.48.png

Vous pouvez voir qu'il existe une tendance à des combinaisons telles que «terres agricoles et terres cultivées, routes», «routes et zones résidentielles, exploitation minière traditionnelle».

5.2. Visualisation de la répartition de la végétation pour le regroupement d'images

Ceci est le cahier original. Chaque élément est découpé et téléchargé vers l'essentiel, donc s'il ne fonctionne pas, veuillez copier le code de ce bloc-notes.

5.2.1. Vérification des étiquettes et des images

from glob import glob
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from subprocess import check_output
import matplotlib.pyplot as plt
from scipy.stats import bernoulli
import seaborn as sns
print(check_output(["ls", "../input"]).decode("utf8"))
%matplotlib inline


df = pd.read_csv('../input/train_v2.csv')
image_paths = sorted(glob('../input/train-jpg/*.jpg'))[0:1000]
image_names = list(map(lambda row: row.split("/")[-1][:-4], image_paths))
image_names[0:10]

plt.figure(figsize=(12,8))
for i in range(6):
    plt.subplot(2,3,i+1)
    plt.imshow(plt.imread(image_paths[i]))
    plt.title(str(df[df.image_name == image_names[i]].tags.values))
スクリーンショット 2017-07-18 18.26.11.png

Apparemment, la taille des images est la même. Vous pouvez voir que chaque image a plusieurs balises.

5.2.2. Essayez de créer un classificateur simple

https://gist.github.com/TomHortons/d7e9dc9382f6fcd4763163e1a7db9f99

Le code ci-dessus est un exemple de code d'une personne classée par régression logistique de scikit learn. Dans le prétraitement des données, ce qui suit est un style d'écriture un peu compliqué. df correspond aux données d'image lues dans l'exemple précédent.

df['split_tags'] = df['tags'].map(lambda row: row.split(" "))
lb = MultiLabelBinarizer()
y = lb.fit_transform(df['split_tags'])
y = y[:n_samples]
X = np.squeeze(np.array([cv2.resize(plt.imread('../input/train-jpg/{}.jpg'.format(name)), (rescaled_dim, rescaled_dim), cv2.INTER_LINEAR).reshape(1, -1) for name in df.head(n_samples)['image_name'].values]))
X = MinMaxScaler().fit_transform(X)

Après avoir décomposé les balises de données d'entraînement avec df ['tags']. Map (lambda row: row.split ("")), vectorisez-les avec MultiLabel Binarizer. Redimensionnez l'image avec cv2.resize, ajustez la taille du vecteur avec np.squeeze et enfin standardisez les données avec MinMaxScaler.

Le résultat de l'exécution est le suivant.

Average F2 test score 0.6798866894323994
F2 test scores per tag:
[('primary', 0.96369809349699664),
 ('clear', 0.87778940027894004),
 ('cloudy', 0.60324825986078878),
 ('agriculture', 0.38493549729504789),
 ('road', 0.26332094175960347),
 ('partly_cloudy', 0.22288261515601782),
 ('water', 0.1915041782729805),
 ('habitation', 0.17467248908296948),
 ('cultivation', 0.054811205846528627),
 ('bare_ground', 0.032894736842105261),
 ('haze', 0.0090090090090090089),
 ('slash_burn', 0.0),
 ('conventional_mine', 0.0),
 ('selective_logging', 0.0),
 ('blow_down', 0.0),
 ('blooming', 0.0),
 ('artisinal_mine', 0.0)]

Les informations géographiques rares sont presque anéanties. Bien que le score F2 soit de 0,67, les données d'entraînement sont divisées en entraînement et en test, donc l'utilisation des données de test réelles devrait entraîner un score beaucoup plus bas.

5.2.3. Données d'image de clustering

Les données d'image sont regroupées telles quelles. https://gist.github.com/TomHortons/7786a01020de08ee4d14cfaee0ebe142 Découvrez les clusters hiérarchiques, les t-SNE et les valeurs aberrantes.

En tant que procédure,

  1. Remodeler l'image en np.array
  2. Calculez la distance entre les images par une distance par paires
  3. Regroupement hiérarchique avec carte des clusters marins

Voici le résultat du clustering.

ダウンロード (1).png

Une autre chose est le regroupement avec t-SNE. Déposez les données de distance de l'image créée précédemment en 3D avec t-SNE et tracez-les.

https://gist.github.com/TomHortons/da0094c11bf77108c41529cf515f78df

Une fois exécuté, cela ressemble à ceci.

[t-SNE] Computing pairwise distances...
[t-SNE] Computing 91 nearest neighbors...
[t-SNE] Computed conditional probabilities for sample 600 / 600
[t-SNE] Mean sigma: 2.026685
[t-SNE] Iteration 25: error = 0.9391028, gradient norm = 0.0111124
[t-SNE] Iteration 50: error = 0.8462010, gradient norm = 0.0094869
[t-SNE] Iteration 75: error = 0.6071504, gradient norm = 0.0019813
[t-SNE] Iteration 100: error = 0.5155882, gradient norm = 0.0052735
[t-SNE] KL divergence after 100 iterations with early exaggeration: 0.515588
[t-SNE] Iteration 125: error = 0.4028054, gradient norm = 0.0006756
[t-SNE] Iteration 125: gradient norm 0.000676. Finished.
[t-SNE] Error after 125 iterations: 0.515588
スクリーンショット 2017-07-19 13.12.26.png

Nous rechercherons des valeurs aberrantes à partir des informations de distance créées. https://gist.github.com/TomHortons/3aec684789d64cc0631ad5834fa67222

maximally_dissimilar_image_idx = np.nanargmax(np.nanmean(sq_dists, axis=1))

Calculez simplement la distance moyenne à partir des sq_dists créés précédemment et prenez la valeur maximale (minimale). Le côté gauche de la figure ci-dessous est la distance maximale, et le côté droit est la distance minimale. ダウンロード (1).png

La distance minimale signifie ici la plus petite distance par paire de toutes les images, c'est-à-dire l'image la plus moyenne. Au contraire, la distance maximale est une image rare. Cependant, puisque la distance est simplement calculée par paire de l'image, elle est différente de «inhabituelle» dans le sens où il y a des structures inhabituelles et des routes aux formes étranges.

Enfin, le résultat du mappage avec t-SNE est tracé dans l'image. https://gist.github.com/TomHortons/8afcf86ee53e073ad21b7d3d0eb4a9fa

ダウンロード (1).png

5.2.4. NDVI (Normalized Difference Vegetation Index)

Nous utilisons souvent des photographies satellites et des photographies aériennes prises avec des drones pour quantifier l'activité des plantes. NDVI est utilisé comme indicateur général et est calculé à partir du rapport R et GB en RVB. スクリーンショット 2017-07-19 14.46.06.png

Le NDVI est calculé à partir de ces données.

https://gist.github.com/TomHortons/8d3de37dee1dc7962abe1380f0ff0395

Le calcul du NDVI lui-même est très simple et le calcul est effectué en une seule ligne.

ndvis = [(img[:,:,3] - img[:,:,0])/((img[:,:,3] + img[:,:,0])) for img in imgs]

Après cela, je pense que vous pouvez avoir une idée de l'atmosphère en organisant les images NDVI, les images tiff standardisées et les images jpg telles qu'elles sont.

ダウンロード (2).png

Dans NDVI, seule la partie verte est activée.

De plus, si vous calculez le NDVI pour toutes les images et vérifiez la valeur moyenne dans l'histogramme, vous pouvez en quelque sorte saisir la distribution d'activité de l'usine.

import seaborn as sns
mndvis = np.nan_to_num([ndvi.mean() for ndvi in ndvis])
plt.figure(figsize=(12,8))
sns.distplot(mndvis)
plt.title('distribution of mean NDVIs')

ダウンロード (3).png

Enfin, classons par NDVI.

sorted_idcs = np.argsort(mndvis)
print(len(sorted_idcs))
plt.figure(figsize=(12,8))
plt.subplot(221)
plt.imshow(imgs[sorted_idcs[0]])
plt.subplot(222)
plt.imshow(imgs[sorted_idcs[50]])
plt.subplot(223)
plt.imshow(imgs[sorted_idcs[-30]])
plt.subplot(224)
plt.imshow(imgs[sorted_idcs[-11]])

ダウンロード (4).png

L'image blanchâtre en haut à gauche est une image trouble avec un NDVI moyen négatif. L'image standardisée d'aspect rougeâtre en bas à droite est l'image de la forêt avec le NDVI moyen le plus élevé.

Recommended Posts

Résumé de Kaggle: Planète, comprendre l'Amazonie depuis l'espace
Résumé de Kaggle: Outbrain # 2
Résumé de Kaggle: Outbrain # 1
Résumé lié à Kaggle
Processus de compétition Kaggle du point de vue de la transition des scores
Compréhension mathématique de l'analyse en composantes principales depuis le début