Satellitenbilderkennung, wenn eine Adresse über einen Pool | verfügt von Taras Skavinskyy | Juni 2023

0
27


Der geschäftliche Wert von Satellitenbilderkennungsmodellen, mit denen festgestellt werden kann, ob ein Gebäude über einen Pool verfügt, kann in mehrfacher Hinsicht erheblich sein:

  1. Immobilien: Ermöglicht gezieltes Advertising und fundierte Investitionsentscheidungen.
  2. Versicherung: Hilft bei der Bewertung von Immobilienrisiken und der genauen Preisgestaltung von Policen.
  3. Stadtplanung: Hilft bei der Analyse städtischer Entwicklungsmuster und der Planung der Infrastruktur.
  4. Poolwartung und -dienstleistungen: Identifiziert potenzielle Kunden für gezieltes Advertising.
  5. Haushaltsdienstleistungen und Einzelhandel: Richtet poolbezogene Produkte und Dienstleistungen an Poolbesitzer.
  6. Marktforschung: Bietet Einblicke in Verbraucherpräferenzen und Markttrends.

Insgesamt kann die Fähigkeit, Schwimmbäder in Satellitenbildern zu erkennen, zahlreiche Geschäftsmöglichkeiten bieten und eine datengesteuerte Entscheidungsfindung in verschiedenen Branchen ermöglichen, insbesondere im Zusammenhang mit Immobilien, Versicherungen, Stadtplanung sowie Produkten und Dienstleistungen im Zusammenhang mit Schwimmbädern.

Beispielbild zur Vorhersage des Swimming pools an einer Adresse

Um ein KI-Satellitenbilderkennungsmodell zu erstellen, das mit einer Genauigkeit von 85 % vorhersagt, ob ein Gebäude über einen Pool verfügt, haben wir Daten aus offenen Straßenkartendatenbanken verwendet, um die Standorte von Swimming pools zu ermitteln. Anschließend haben wir diese Daten mit Bildern von Google Maps kombiniert.

Es folgt ein ähnlicher Ansatz wie das für die Erstellung verwendete Convolutional Neural Community (CNN). Autorestaurant Und Gebäudenutzung Modelle für die Schlusssteinprojekt der University of Chicagohaben wir eine ähnliche CNN-Architektur für dieses Poolerkennungsmodell erstellt.

Nachfolgend finden Sie den Code zum Vorbereiten des Lesens und Vorbereitens der Daten zum Trainieren des Modells.

import requests
import pandas as pd
import requests
import pandas as pd
import os
import numpy as np
import skimage
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import knowledge, io, filters, shade, publicity
from numpy import array
import pickle
import keras
##from keras.datasets import mnist
from keras.fashions import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as Okay
##import tensorflow as tf
from pandas_ml import ConfusionMatrix

pkl_file = open('knowledge/Pool_combined_sample_geocoded_images.pkl', 'rb')
buildings= pickle.load(pkl_file)
pkl_file.shut()

Picture Prep

all_image_gray=[]
for picture in all_images:
all_image_gray.append(shade.rgb2gray(picture))
all_images_gray_array=array(all_image_gray)

Tag-Vorbereitung

file_names_array=array(file_names) 
pd.value_counts(pd.Sequence(file_names_array))

Probenvorbereitung

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(all_images_gray_array, file_names_array, test_size=0.3)

img_rows, img_cols = 250, 250
if Okay.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.form[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.form[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.form[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.form[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
##x_train /= 255
##x_test /= 255
print('x_train form:', x_train.form)
print(x_train.form[0], 'practice samples')
print(x_test.form[0], 'take a look at samples')

from sklearn.preprocessing import LabelBinarizer
encoder = LabelBinarizer()
y_train= encoder.fit_transform(y_train)
y_train=np.hstack((y_train, 1 - y_train))
y_test= encoder.fit_transform(y_test)
y_test=np.hstack((y_test, 1 - y_test))
print(y_train)

Anreicherung der Daten

x_train_rot=[]
y_train_rot=[]
for i in vary(len(x_train)):
x_train_rot.append(x_train[i])
y_train_rot.append(y_train[i])

x_train_rot.append(x_train[i][::-1,:,:])
y_train_rot.append(y_train[i])

x_train_rot.append(x_train[i][:,::-1,:])
y_train_rot.append(y_train[i])

x_train_rot.append(x_train[i].transpose([1,0,2]))
y_train_rot.append(y_train[i])
x_train_rot = np.array(x_train_rot,dtype='float32')
y_train_rot = np.array(y_train_rot,dtype='float32')
len(x_train_rot)

Die spezifische Struktur unseres Modells bestand aus mehreren Faltungsschichten zur Merkmalsextraktion, gefolgt von Pooling-Schichten zur Reduzierung der räumlichen Dimensionen. Wir haben vollständig verbundene Schichten zur Klassifizierung integriert und Techniken wie Dropout und Batch-Normalisierung verwendet, um die Modellleistung zu verbessern und eine Überanpassung zu verhindern. Modellarchitektur

batch_size =20batch_size = 50
num_classes = 6
epochs = 20
mannequin = Sequential()
mannequin.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='similar', input_shape=input_shape))
mannequin.add(MaxPooling2D((2, 2)))
mannequin.add(Dropout(0.3)
mannequin.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='similar'))
mannequin.add(MaxPooling2D((2, 2)))
mannequin.add(Dropout(0.3))
mannequin.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='similar'))
mannequin.add(MaxPooling2D((2, 2)))
mannequin.add(Dropout(0.3))
mannequin.add(Flatten())
mannequin.add(Dense(28, activation='relu', kernel_initializer='he_uniform'))
##mannequin.add(Dense(17, activation='sigmoid'))

mannequin.add(Dense(num_classes, activation='sigmoid'))
# compile mannequin
##decide = SGD(lr=0.01, momentum=0.9)
##mannequin.compile(optimizer=decide, loss='binary_crossentropy', metrics=[fbeta])
##categorical_crossentropy
mannequin.compile(loss=keras.losses.binary_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
mannequin.abstract()
historical past = mannequin.match(x_train_rot, y_train_rot,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
model_eval()

Modellstruktur

Nachdem wir das Modell anhand eines großen Datensatzes beschrifteter Satellitenbilder trainiert hatten, erreichten wir eine Genauigkeit von 85 % bei der Vorhersage, ob ein Gebäude über einen Pool verfügt. Diese Genauigkeitsrate zeigt die Wirksamkeit unseres Modells bei der Erkennung von Swimming pools in Satellitenbildern.

Durch die Kombination offener Straßenkartendaten mit Satellitenbildern und der Nutzung der CNN-Architektur ist es uns gelungen, ein robustes KI-Modell für die Poolerkennung zu entwickeln. Die Genauigkeit des Modells und die Integration von Standortdaten können erhebliche Auswirkungen auf verschiedene Branchen haben, wie bereits weiter oben in diesem Artikel erläutert.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here