A Mead-tó aszályának megfigyelése az új Amazon SageMaker térinformatikai képességekkel

A Mead-tó aszályának megfigyelése az új Amazon SageMaker térinformatikai képességekkel

A Föld változó éghajlata a globális felmelegedés miatt fokozott aszályveszélyt jelent. 1880 óta a globális hőmérséklet 1.01 °C-kal emelkedett. 1993 óta a tengerszint 102.5 millimétert emelkedett. 2002 óta az Antarktiszon a szárazföldi jégtakarók tömege évi 151.0 milliárd tonnát veszít. 2022-ben a Föld atmoszférája több mint 400 ppm szén-dioxidot tartalmaz, ami 50%-kal több, mint 1750-ben. Bár ezek a számok úgy tűnhetnek, mintha kimaradtak volna mindennapi életünkből, a Föld soha nem látott mértékben melegszik fel az elmúlt időszakban. elmúlt 10,000 1 év [XNUMX].

Ebben a bejegyzésben az Amazon SageMaker új térinformatikai képességeit használjuk a Mead-tó éghajlatváltozás okozta szárazság nyomon követésére. A Mead-tó az Egyesült Államok legnagyobb víztározója. 25 millió embert lát el vízzel Nevada, Arizona és Kalifornia államokban [2]. A kutatások azt mutatják, hogy a Mead-tó vízszintje 1937 óta a legalacsonyabb szinten van [3]. A SageMaker térinformatikai képességeit használjuk a Mead-tó vízszint-változásainak műholdfelvételek segítségével történő mérésére.

Adat hozzáférés

A SageMaker új térinformatikai képességei egyszerű hozzáférést biztosítanak a térinformatikai adatokhoz, például a Sentinel-2-hez és a Landsat 8-hoz. A beépített térinformatikai adatkészlet-hozzáférés több hétig tartó erőfeszítést takarít meg, ami egyébként elveszne a különböző adatszolgáltatóktól és -szállítóktól származó adatok gyűjtése során.

Először egy Amazon SageMaker Studio notebookot fogunk használni SageMaker térinformatikai képpel a következő lépések szerint: Ismerkedés az Amazon SageMaker térinformatikai képességeivel. Az elemzéshez egy SageMaker Studio notebookot használunk SageMaker térinformatikai képpel.

A bejegyzésben használt jegyzetfüzet megtalálható a amazon-sagemaker-példák GitHub repó. A SageMaker térinformatikai alkalmazás rendkívül egyszerűvé teszi az adatlekérdezést. A következő kódot fogjuk használni a műholdas adatok helyének és időkeretének meghatározásához.

A következő kódrészletben először definiálunk egy AreaOfInterest (AOI) egy határolókerettel a Mead-tó környékén. Használjuk a TimeRangeFilter 2021 januárja és 2022 júliusa közötti adatok kiválasztásához. Az általunk vizsgált területet azonban eltakarhatják a felhők. A többnyire felhőmentes képek készítéséhez a képek egy részhalmazát úgy választjuk ki, hogy a felhőfedettség felső határát 1%-ra állítjuk.

import boto3
import sagemaker
import sagemaker_geospatial_map session = boto3.Session()
execution_role = sagemaker.get_execution_role()
sg_client = session.client(service_name="sagemaker-geospatial") search_rdc_args = { "Arn": "arn:aws:sagemaker-geospatial:us-west-2:378778860802:raster-data-collection/public/nmqj48dcu3g7ayw8", # sentinel-2 L2A COG "RasterDataCollectionQuery": { "AreaOfInterest": { "AreaOfInterestGeometry": { "PolygonGeometry": { "Coordinates": [ [ [-114.529, 36.142], [-114.373, 36.142], [-114.373, 36.411], [-114.529, 36.411], [-114.529, 36.142], ] ] } } # data location }, "TimeRangeFilter": { "StartTime": "2021-01-01T00:00:00Z", "EndTime": "2022-07-10T23:59:59Z", }, # timeframe "PropertyFilters": { "Properties": [{"Property": {"EoCloudCover": {"LowerBound": 0, "UpperBound": 1}}}], "LogicalOperator": "AND", }, "BandFilter": ["visual"], },
} tci_urls = []
data_manifests = []
while search_rdc_args.get("NextToken", True): search_result = sg_client.search_raster_data_collection(**search_rdc_args) if search_result.get("NextToken"): data_manifests.append(search_result) for item in search_result["Items"]: tci_url = item["Assets"]["visual"]["Href"] print(tci_url) tci_urls.append(tci_url) search_rdc_args["NextToken"] = search_result.get("NextToken")

Modellkövetkeztetés

Az adatok azonosítása után a következő lépés a víztestek kinyerése a műholdfelvételekből. Jellemzően egy földtakaró-szegmentációs modellt kell a semmiből kiképezni, hogy azonosítsuk a földfelszínen található fizikai anyagok különböző kategóriáit, például víztesteket, növényzetet, havat stb. A modell elölről történő betanítása időigényes és költséges. Ez magában foglalja az adatcímkézést, a modellképzést és a telepítést. A SageMaker térinformatikai képességei egy előre betanított földtakaró-szegmentációs modellt biztosítanak. Ez a földtakaró-szegmentációs modell egy egyszerű API-hívással futtatható.

Ahelyett, hogy az adatokat egy helyi gépre töltené le következtetések levonására, a SageMaker mindent megtesz helyetted. Egyszerűen megadjuk az adatkonfigurációt és a modellkonfigurációt egy Föld-megfigyelési feladatban (EOJ). A SageMaker automatikusan letölti és előfeldolgozza a műholdképadatokat az EOJ számára, így készen áll a következtetésekre. Ezután a SageMaker automatikusan lefuttatja az EOJ modellkövetkeztetését. A munkaterheléstől függően (a modellkövetkeztetésen keresztül lefutott képek száma) az EOJ néhány perctől néhány óráig is eltarthat. A munka állapotát a segítségével követheti nyomon get_earth_observation_job funkciót.

# Perform land cover segmentation on images returned from the sentinel dataset.
eoj_input_config = { "RasterDataCollectionQuery": { "RasterDataCollectionArn": "arn:aws:sagemaker-geospatial:us-west-2:378778860802:raster-data-collection/public/nmqj48dcu3g7ayw8", "AreaOfInterest": { "AreaOfInterestGeometry": { "PolygonGeometry": { "Coordinates": [ [ [-114.529, 36.142], [-114.373, 36.142], [-114.373, 36.411], [-114.529, 36.411], [-114.529, 36.142], ] ] } } }, "TimeRangeFilter": { "StartTime": "2021-01-01T00:00:00Z", "EndTime": "2022-07-10T23:59:59Z", }, "PropertyFilters": { "Properties": [{"Property": {"EoCloudCover": {"LowerBound": 0, "UpperBound": 1}}}], "LogicalOperator": "AND", }, }
}
eoj_config = {"LandCoverSegmentationConfig": {}} response = sg_client.start_earth_observation_job( Name="lake-mead-landcover", InputConfig=eoj_input_config, JobConfig=eoj_config, ExecutionRoleArn=execution_role,
) # Monitor the EOJ status.
eoj_arn = response["Arn"]
job_details = sg_client.get_earth_observation_job(Arn=eoj_arn)
{k: v for k, v in job_details.items() if k in ["Arn", "Status", "DurationInSeconds"]}

Vizualizálja az eredményeket

Most, hogy lefuttattuk a modellkövetkeztetést, nézzük meg vizuálisan az eredményeket. A modellkövetkeztetési eredményeket a bemeneti műholdképekre borítjuk. Az eredmények megjelenítéséhez a SageMakerrel előre integrált Foursquare Studio eszközöket használunk. Először létrehozunk egy térképpéldányt a SageMaker térinformatikai képességeivel a bemeneti képek és a modell előrejelzések megjelenítéséhez:

# Creates an instance of the map to add EOJ input/ouput layer.
map = sagemaker_geospatial_map.create_map({"is_raster": True})
map.set_sagemaker_geospatial_client(sg_client) # Render the map.
map.render()

Amikor az interaktív térkép elkészült, a bemeneti képeket és a modell kimeneteket térképrétegként renderelhetjük anélkül, hogy le kellene töltenünk az adatokat. Ezenkívül minden rétegnek címkét adhatunk, és kiválaszthatjuk az adatokat egy adott dátumhoz TimeRangeFilter:

# Visualize AOI
config = {"label": "Lake Mead AOI"}
aoi_layer = map.visualize_eoj_aoi(Arn=eoj_arn, config=config) # Visualize input.
time_range_filter = { "start_date": "2022-07-01T00:00:00Z", "end_date": "2022-07-10T23:59:59Z",
}
config = {"label": "Input"}
input_layer = map.visualize_eoj_input( Arn=eoj_arn, config=config, time_range_filter=time_range_filter
) # Visualize output, EOJ needs to be in completed status.
time_range_filter = { "start_date": "2022-07-01T00:00:00Z", "end_date": "2022-07-10T23:59:59Z",
}
config = {"preset": "singleBand", "band_name": "mask"}
output_layer = map.visualize_eoj_output( Arn=eoj_arn, config=config, time_range_filter=time_range_filter
)

A kimeneti réteg átlátszatlanságának változtatásával ellenőrizhetjük, hogy a vízként jelölt terület (a következő térképen élénksárga) pontosan megfelel-e a Mead-tó víztestének.

Monitoring Lake Mead drought using the new Amazon SageMaker geospatial capabilities PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Hozzászólás elemzése

Ezután használjuk a export_earth_observation_job funkcióval exportálhatja az EOJ eredményeit egy Amazon Simple Storage Service (Amazon S3) tárolóba. Ezután egy későbbi elemzést futtatunk az Amazon S3 adatain a vízfelület kiszámításához. Az exportálási funkció kényelmessé teszi az eredmények csapatok közötti megosztását. A SageMaker az adatkészlet-kezelést is leegyszerűsíti. Egyszerűen megoszthatjuk az EOJ eredményeit az ARN feladat használatával, ahelyett, hogy több ezer fájlt feltérképeznénk az S3 tárolóban. Minden EOJ eszköz lesz az adatkatalógusban, mivel az eredmények csoportosíthatók az ARN feladat alapján.

sagemaker_session = sagemaker.Session()
s3_bucket_name = sagemaker_session.default_bucket() # Replace with your own bucket if needed
s3_bucket = session.resource("s3").Bucket(s3_bucket_name)
prefix = "eoj_lakemead" # Replace with the S3 prefix desired
export_bucket_and_key = f"s3://{s3_bucket_name}/{prefix}/" eoj_output_config = {"S3Data": {"S3Uri": export_bucket_and_key}}
export_response = sg_client.export_earth_observation_job( Arn=eoj_arn, ExecutionRoleArn=execution_role, OutputConfig=eoj_output_config, ExportSourceImages=False,
)

Ezután a Mead-tó vízszintjének változásait elemezzük. Letöltjük a talajtakaró maszkokat a helyi példányunkra, hogy nyílt forráskódú könyvtárak segítségével kiszámítsuk a vízfelületet. A SageMaker a modell kimeneteit Cloud Optimized GeoTiff (COG) formátumban menti. Ebben a példában ezeket a maszkokat NumPy tömbként töltjük be a Tifffile csomag használatával. A SageMaker Geospatial 1.0 A kernel más, széles körben használt könyvtárakat is tartalmaz, mint például a GDAL és a Rasterio.

A talajtakaró maszk minden képpontjának értéke 0 és 11 között van. Minden érték egy adott talajborítási osztálynak felel meg. A víz osztályindexe 6. Ezt az osztályindexet használhatjuk a vízmaszk kinyerésére. Először is megszámoljuk a vízként megjelölt képpontok számát. Ezután megszorozzuk ezt a számot az egyes pixelek által lefedett területtel, hogy megkapjuk a víz felszínét. A sávoktól függően a Sentinel-2 L2A kép térbeli felbontása 10m, 20mVagy 60m. Minden sáv mintavételezése 60 méteres térbeli felbontásra történik a talajborítási szegmentációs modell következtetéséhez. Ennek eredményeként a talajtakaró maszk minden pixele 3600-as területet jelent m2Vagy 0.0036 km2.

import os
from glob import glob
import cv2
import numpy as np
import tifffile
import matplotlib.pyplot as plt
from urllib.parse import urlparse
from botocore import UNSIGNED
from botocore.config import Config # Download land cover masks
mask_dir = "./masks/lake_mead"
os.makedirs(mask_dir, exist_ok=True)
image_paths = []
for s3_object in s3_bucket.objects.filter(Prefix=prefix).all(): path, filename = os.path.split(s3_object.key) if "output" in path: mask_name = mask_dir + "/" + filename s3_bucket.download_file(s3_object.key, mask_name) print("Downloaded mask: " + mask_name) # Download source images for visualization
for tci_url in tci_urls: url_parts = urlparse(tci_url) img_id = url_parts.path.split("/")[-2] tci_download_path = image_dir + "/" + img_id + "_TCI.tif" cogs_bucket = session.resource( "s3", config=Config(signature_version=UNSIGNED, region_name="us-west-2") ).Bucket(url_parts.hostname.split(".")[0]) cogs_bucket.download_file(url_parts.path[1:], tci_download_path) print("Downloaded image: " + img_id) print("Downloads complete.") image_files = glob("images/lake_mead/*.tif")
mask_files = glob("masks/lake_mead/*.tif")
image_files.sort(key=lambda x: x.split("SQA_")[1])
mask_files.sort(key=lambda x: x.split("SQA_")[1])
overlay_dir = "./masks/lake_mead_overlay"
os.makedirs(overlay_dir, exist_ok=True)
lake_areas = []
mask_dates = [] for image_file, mask_file in zip(image_files, mask_files): image_id = image_file.split("/")[-1].split("_TCI")[0] mask_id = mask_file.split("/")[-1].split(".tif")[0] mask_date = mask_id.split("_")[2] mask_dates.append(mask_date) assert image_id == mask_id image = tifffile.imread(image_file) image_ds = cv2.resize(image, (1830, 1830), interpolation=cv2.INTER_LINEAR) mask = tifffile.imread(mask_file) water_mask = np.isin(mask, [6]).astype(np.uint8) # water has a class index 6 lake_mask = water_mask[1000:, :1100] lake_area = lake_mask.sum() * 60 * 60 / (1000 * 1000) # calculate the surface area lake_areas.append(lake_area) contour, _ = cv2.findContours(water_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) combined = cv2.drawContours(image_ds, contour, -1, (255, 0, 0), 4) lake_crop = combined[1000:, :1100] cv2.putText(lake_crop, f"{mask_date}", (10,50), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 3, cv2.LINE_AA) cv2.putText(lake_crop, f"{lake_area} [sq km]", (10,100), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 3, cv2.LINE_AA) overlay_file = overlay_dir + '/' + mask_date + '.png' cv2.imwrite(overlay_file, cv2.cvtColor(lake_crop, cv2.COLOR_RGB2BGR)) # Plot water surface area vs. time.
plt.figure(figsize=(20,10))
plt.title('Lake Mead surface area for the 2021.02 - 2022.07 period.', fontsize=20)
plt.xticks(rotation=45)
plt.ylabel('Water surface area [sq km]', fontsize=14)
plt.plot(mask_dates, lake_areas, marker='o')
plt.grid('on')
plt.ylim(240, 320)
for i, v in enumerate(lake_areas): plt.text(i, v+2, "%d" %v, ha='center')
plt.show()

A következő ábrán ábrázoljuk a vízfelület területét időben. A vízfelület területe egyértelműen csökkent 2021 februárja és 2022 júliusa között. Kevesebb mint 2 év alatt a Mead-tó felszíne több mint 300-ról csökkent. km2 250 alá km2, 18%-os relatív változás.Monitoring Lake Mead drought using the new Amazon SageMaker geospatial capabilities PlatoBlockchain Data Intelligence. Vertical Search. Ai.

import imageio.v2 as imageio
from IPython.display import HTML frames = []
filenames = glob('./masks/lake_mead_overlay/*.png')
filenames.sort()
for filename in filenames: frames.append(imageio.imread(filename))
imageio.mimsave('lake_mead.gif', frames, duration=1)
HTML('<img src="./lake_mead.gif">')

Kivonhatjuk a tó határait is, és a műholdképek fölé helyezhetjük, hogy jobban láthatóvá váljanak a tó partvonalának változásai. Ahogy a következő animáció is mutatja, az északi és délkeleti partvonal az elmúlt 2 évben zsugorodott. Egyes hónapokban a terület éves szinten több mint 20%-kal csökkent.

Lake Mead felszíni animáció

Következtetés

Tanúi lehettünk az éghajlatváltozás hatásának a Mead-tó zsugorodó partvonalára. A SageMaker mostantól támogatja a térinformatikai gépi tanulást (ML), ami megkönnyíti az adattudósok és az ML mérnökök számára a térinformatikai adatok felhasználásával készült modellek építését, betanítását és üzembe helyezését. Ebben a bejegyzésben bemutattuk, hogyan szerezhet be adatokat, hogyan végezhet elemzést és vizualizálhatja a változásokat a SageMaker térinformatikai AI/ML szolgáltatásokkal. A bejegyzés kódját megtalálja a amazon-sagemaker-példák GitHub repó. Lásd a Amazon SageMaker térinformatikai képességek és tudjon meg többet!

Referenciák

[1] https://climate.nasa.gov/

[2] https://www.nps.gov/lake/learn/nature/overview-of-lake-mead.htm

[3] https://earthobservatory.nasa.gov/images/150111/lake-mead-keeps-dropping


A szerzőkről

 Xiong Zhou az AWS vezető alkalmazott tudósa. Ő vezeti az Amazon SageMaker térinformatikai képességekkel foglalkozó tudományos csapatát. Jelenlegi kutatási területe a számítógépes látás és a hatékony modellképzés. Szabadidejében szívesen fut, kosárlabdázik és a családjával tölti az idejét.

Anirudh Viswanathan a SageMaker térinformatikai ML csapatának műszaki – külső szolgáltatásokért felelős termékmenedzsere. A Carnegie Mellon Egyetemen szerzett robotika mesterfokozatot, a Wharton School of Business MBA fokozatát, és több mint 40 szabadalom feltalálójának nevezték. Szereti a hosszútávfutást, a művészeti galériák és a Broadway bemutatók látogatását.

Trenton Lipscomb vezető mérnök és tagja annak a csapatnak, amely térinformatikai képességekkel bővítette a SageMaker-t. Részt vett a human in the loop megoldásokban, a SageMaker Ground Truth, az Augmented AI és az Amazon Mechanical Turk szolgáltatásokon.

Xingjian Shi Senior Applied Scientist és tagja annak a csapatnak, amely térinformatikai képességekkel bővítette a SageMaker-t. Emellett a Földtudomány és a multimodális AutoML mélytanulásán is dolgozik.

Li Erran Li a humin-in-the-loop szolgáltatások, az AWS AI, Amazon alkalmazott tudományos menedzsere. Kutatási területe a 3D mély tanulás, valamint a látás és nyelvi reprezentáció tanulása. Korábban az Alexa AI vezető tudósa, a Scale AI gépi tanulási vezetője és a Pony.ai vezető tudósa volt. Ezt megelőzően az Uber ATG észlelési csapatánál és az Uber gépi tanulási platform csapatánál dolgozott az autonóm vezetés gépi tanulásán, a gépi tanulási rendszereken és az AI stratégiai kezdeményezésein. Pályafutását a Bell Labs-nál kezdte, és a Columbia Egyetem adjunktusa volt. Társaként tartott oktatóanyagokat az ICML'17-en és az ICCV'19-en, és több workshopot szervezett a NeurIPS-ben, ICML-ben, CVPR-ben, ICCV-ben az autonóm vezetés gépi tanulásáról, a 3D-látásról és a robotikáról, a gépi tanulási rendszerekről és az ellenséges gépi tanulásról. A Cornell Egyetemen szerzett PhD fokozatot számítástechnikából. ACM-ösztöndíjas és IEEE-ösztöndíjas.

Időbélyeg:

Még több AWS gépi tanulás