Zephyrnet-logotyp

Detektering och högfrekvent övervakning av metanemissionspunktkällor med Amazon SageMakers geospatiala funktioner | Amazon webbtjänster

Datum:

Metan (CH4) är en viktig antropogen växthusgas som är en biprodukt från olje- och gasutvinning, kolbrytning, storskalig djuruppfödning och avfallshantering, bland andra källor. Potentialen för global uppvärmning CH4 är 86 gånger så stor som CO2 och Intergovernmental Panel on Climate Change (IPCC) uppskattar det metan står för 30 procent av den observerade globala uppvärmningen hittills. Att snabbt minska läckaget av CH4 till atmosfären är en kritisk komponent i kampen mot klimatförändringar. 2021 införde FN The Global Metan Pledge vid klimatförändringskonferensen (COP26), med ett mål att vidta "snabba åtgärder på metan för att hålla en 1.5C framtid inom räckhåll." The Pledge har 150 signatärer inklusive USA och EU.

Tidig upptäckt och fortlöpande övervakning av metankällor är en nyckelkomponent i meningsfulla åtgärder mot metan och blir därför ett problem för både beslutsfattare och organisationer. Implementera prisvärda, effektiva lösningar för metandetektion i stor skala – såsom metandetektorer på plats eller flygplansmonterade spektrometrar – är utmanande, eftersom de ofta är opraktiska eller oöverkomligt dyra. Fjärranalys med hjälp av satelliter kan å andra sidan tillhandahålla den globala, högfrekventa och kostnadseffektiva detekteringsfunktionalitet som intressenter önskar.

I det här blogginlägget visar vi hur du kan använda Sentinel 2-satellitbilder värd på AWS Registry of Open Data i kombination med Amazon SageMaker geospatiala funktioner att upptäcka punktkällor för CH4-utsläpp och övervaka dem över tid. Rita på färska fynd från jordobservationslitteraturen du kommer att lära dig hur du kan implementera en anpassad metandetekteringsalgoritm och använda den för att upptäcka och övervaka metanläckage från en mängd olika platser över hela världen. Detta inlägg innehåller medföljande kod på GitHub som ger ytterligare tekniska detaljer och hjälper dig att komma igång med din egen metanövervakningslösning.

Traditionellt var det svårt, tidskrävande och resurskrävande att genomföra komplexa geospatiala analyser. Amazon SageMaker geospatiala funktioner göra det enklare för datavetare och maskininlärningsingenjörer att bygga, träna och distribuera modeller med hjälp av geospatial data. Med SageMakers geospatiala funktioner kan du effektivt transformera eller berika storskaliga geospatiala datauppsättningar, accelerera modellbyggandet med förtränade maskininlärningsmodeller (ML) och utforska modellförutsägelser och geospatial data på en interaktiv karta med hjälp av 3D-accelererad grafik och inbyggd visualiseringsverktyg.

Fjärranalys av metanpunktkällor med hjälp av multispektrala satellitbilder

Satellitbaserade metanavkänningsmetoder förlitar sig vanligtvis på CH4:s unika transmittansegenskaper. I det synliga spektrumet har CH4 transmittansvärden lika med eller nära 1, vilket betyder att det inte går att upptäcka med blotta ögat. Men över vissa våglängder absorberar metan ljus (transmittans <1), en egenskap som kan utnyttjas för detektionsändamål. För detta väljs vanligtvis det korta våglängds infraröda (SWIR) spektrumet (1500–2500 nm spektralområde), vilket är där CH4 är mest detekterbar. Hyper- och multispektrala satellituppdrag (det vill säga de med optiska instrument som fångar bilddata inom flera våglängdsområden (band) över det elektromagnetiska spektrumet) täcker dessa SWIR-områden och representerar därför potentiella detektionsinstrument. Figur 1 visar transmittansegenskaperna för metan i SWIR-spektrumet och SWIR-täckningen för olika multispektrala satellit-kandidatinstrument (anpassade från detta studie).

Figur 1 – Transmittansegenskaper för metan i SWIR-spektrumet och täckning av Sentinel-2 multispektrala uppdrag

Figur 1 – Transmittansegenskaper för metan i SWIR-spektrumet och täckning av Sentinel-2 multispektrala uppdrag

Många multispektrala satellituppdrag begränsas antingen av en låg återbesöksfrekvens (t.ex. PRISMA Hyperspektral vid cirka 16 dagar) eller med låg rumslig upplösning (t.ex. Sentinel 5 vid 7.5 km x 7.5 km). Kostnaden för att få tillgång till data är en ytterligare utmaning: vissa dedikerade konstellationer fungerar som kommersiella uppdrag, vilket potentiellt gör CH4-utsläppsinsikter mindre lättillgängliga för forskare, beslutsfattare och andra berörda parter på grund av ekonomiska begränsningar. ESA:s Sentinel-2 multispektralt uppdrag, som denna lösning är baserad på, uppnår en lämplig balans mellan återbesöksfrekvens (cirka 5 dagar), rumslig upplösning (cirka 20 m) och öppen tillgång (värd på AWS register över öppna data).

Sentinel-2 har två band som täcker SWIR-spektrumet (vid en 20 m upplösning): band-11 (1610 nm central våglängd) och band-12 (2190 nm central våglängd). Båda banden är lämpliga för metandetektion, medan band-12 har betydligt högre känslighet för CH4-absorption (se figur 1). Intuitivt finns det två möjliga tillvägagångssätt för att använda denna SWIR-reflektansdata för metandetektering. Först kan du fokusera på bara ett enda SWIR-band (helst det som är mest känsligt för CH4-absorption) och beräkna pixel-för-pixel-skillnaden i reflektans över två olika satellitpass. Alternativt använder du data från ett enda satellitpass för detektering genom att använda de två intilliggande spektrala SWIR-banden som har liknande yt- och aerosolreflektansegenskaper men har olika metanabsorptionsegenskaper.

Detekteringsmetoden vi implementerar i det här blogginlägget kombinerar båda tillvägagångssätten. Vi drar på färska fynd från jordobservationslitteraturen och beräkna den fraktionella förändringen i top-of-the-atmosphere (TOA) reflektans Δρ (det vill säga reflektans mätt av Sentinel-2 inklusive bidrag från atmosfäriska aerosoler och gaser) mellan två satellitpassager och de två SWIR-banden; ett baslinjepass där ingen metan finns (bas) och ett övervakningspass där en aktiv metanpunktkälla misstänks (monitor). Matematiskt kan detta uttryckas på följande sätt:

Ekvation 1Ekvation (1)

där ρ är TOA-reflektansen mätt med Sentinel-2, cbildskärm och Cbas beräknas genom att regressera TOA-reflektansvärdena för band-12 mot de för band-11 över hela scenen (det vill säga ρb11 = c * ρb12). För mer information, se denna studie om högfrekvent övervakning av anomala metanpunktkällor med multispektrala Sentinel-2-satellitobservationer.

Implementera en metan-detekteringsalgoritm med SageMaker geospatiala funktioner

För att implementera metandetekteringsalgoritmen använder vi SageMaker geospatiala anteckningsbok i Amazon SageMaker Studio. Den geospatiala anteckningsbokens kärna är förutrustad med viktiga geospatiala bibliotek som t.ex GDAL, Geopandas, Välväxt, röntgenbildoch Rasterio, som möjliggör direkt visualisering och bearbetning av geospatial data inom Python-notebookmiljön. Se den Uppstartnings Guide för att lära dig hur du börjar använda SageMakers geospatiala funktioner.

SageMaker tillhandahåller en specialbyggd API utformad för att underlätta hämtning av satellitbilder genom ett konsoliderat gränssnitt med hjälp av SearchRasterDataCollection API-samtal. SearchRasterDataCollection förlitar sig på följande ingångsparametrar:

  • Arn: Amazon-resursnamnet (ARN) för den efterfrågade rasterdatainsamlingen
  • AreaOfInterest: Ett polygonobjekt (i GeoJSON-format) som representerar området av intresse för sökfrågan
  • TimeRangeFilter: Definierar tidsintervallet av intresse, betecknat som {StartTime: <string>, EndTime: <string>}
  • PropertyFilters: Kompletterande egenskapsfilter, såsom specifikationer för maximalt acceptabelt molntäcke, kan också införlivas

Denna metod stöder förfrågningar från olika rasterdatakällor som kan utforskas genom att anropa ListRasterDataCollections. Vår implementering av metandetektering använder Sentinel-2 satellitbilder, som kan refereras globalt med följande ARN: arn:aws:sagemaker-geospatial:us-west-2:378778860802:raster-data-collection/public/nmqj48dcu3g7ayw8.

Denna ARN representerar Sentinel-2-bilder, som har bearbetats till nivå 2A (ytreflektans, atmosfäriskt korrigerad). För metandetektionsändamål kommer vi att använda top-of-atmosphere (TOA) reflektansdata (nivå 1C), som inte inkluderar atmosfäriska ytnivåkorrigeringar som skulle göra ändringar i aerosolens sammansättning och densitet (det vill säga metanläckor) omöjliga att upptäcka .

För att identifiera potentiella utsläpp från en specifik punktkälla behöver vi två ingångsparametrar: koordinaterna för den misstänkta punktkällan och en angiven tidsstämpel för övervakning av metanutsläpp. Med tanke på att SearchRasterDataCollection API använder polygoner eller multipolygoner för att definiera ett intresseområde (AOI), vårt tillvägagångssätt innebär att först expandera punktkoordinaterna till en begränsningsram och sedan använda den polygonen för att fråga efter Sentinel-2-bilder med SearchRasterDateCollection.

I det här exemplet övervakar vi en känd metanläcka som kommer från ett oljefält i norra Afrika. Detta är ett standardvalideringsfall i fjärranalyslitteraturen och refereras till till exempel i detta studie. En helt körbar kodbas finns på amazon-sagemaker-exempel GitHub-förvar. Här markerar vi endast utvalda kodsektioner som representerar de viktigaste byggstenarna för att implementera en metandetektionslösning med SageMaker geospatiala möjligheter. Se arkivet för ytterligare information.

Vi börjar med att initiera koordinaterna och målet för övervakningsdatum för exemplet.

#coordinates and date for North Africa oil field
#see here for reference: https://doi.org/10.5194/amt-14-2771-2021
point_longitude = 5.9053
point_latitude = 31.6585
target_date = '2019-11-20'
#size of bounding box in each direction around point
distance_offset_meters = 1500

Följande kodavsnitt genererar en begränsningsruta för de givna punktkoordinaterna och utför sedan en sökning efter tillgängliga Sentinel-2-bilder baserat på begränsningsrutan och det angivna övervakningsdatumet:

def bbox_around_point(lon, lat, distance_offset_meters): #Equatorial radius (km) taken from https://nssdc.gsfc.nasa.gov/planetary/factsheet/earthfact.html earth_radius_meters = 6378137 lat_offset = math.degrees(distance_offset_meters / earth_radius_meters) lon_offset = math.degrees(distance_offset_meters / (earth_radius_meters * math.cos(math.radians(lat)))) return geometry.Polygon([ [lon - lon_offset, lat - lat_offset], [lon - lon_offset, lat + lat_offset], [lon + lon_offset, lat + lat_offset], [lon + lon_offset, lat - lat_offset], [lon - lon_offset, lat - lat_offset], ]) #generate bounding box and extract polygon coordinates
aoi_geometry = bbox_around_point(point_longitude, point_latitude, distance_offset_meters)
aoi_polygon_coordinates = geometry.mapping(aoi_geometry)['coordinates'] #set search parameters
search_params = { "Arn": "arn:aws:sagemaker-geospatial:us-west-2:378778860802:raster-data-collection/public/nmqj48dcu3g7ayw8", # Sentinel-2 L2 data "RasterDataCollectionQuery": { "AreaOfInterest": { "AreaOfInterestGeometry": { "PolygonGeometry": { "Coordinates": aoi_polygon_coordinates } } }, "TimeRangeFilter": { "StartTime": "{}T00:00:00Z".format(as_iso_date(target_date)), "EndTime": "{}T23:59:59Z".format(as_iso_date(target_date)) } },
}
#query raster data using SageMaker geospatial capabilities
sentinel2_items = geospatial_client.search_raster_data_collection(**search_params)

Svaret innehåller en lista över matchande Sentinel-2-objekt och deras motsvarande metadata. Dessa inkluderar Molnoptimerade GeoTIFFs (COG) för alla Sentinel-2 band, såväl som miniatyr bilder för en snabb förhandsvisning av bildens visuella band. Naturligtvis är det också möjligt att komma åt satellitbilden i full upplösning (RGB-plot), som visas i figur 2 som följer.

Figur 2Figur 2 – Satellitbild (RGB-plot) av AOI

Som tidigare beskrivits bygger vår detekteringsmetod på bråkdelar av förändringar i top-of-the-atmosphere (TOA) SWIR-reflektans. För att detta ska fungera är identifieringen av en bra baslinje avgörande. Att hitta en bra baslinje kan snabbt bli en tråkig process som involverar mycket försök och misstag. Men bra heuristik kan räcka långt för att automatisera denna sökprocess. En sökheuristik som har fungerat bra för fall som undersökts tidigare är följande: för det förflutna day_offset=n dagar, hämta alla satellitbilder, ta bort eventuella moln och klipp in bilden till AOI i omfattning. Beräkna sedan den genomsnittliga band-12-reflektansen över AOI. Returnera Sentinel-brickans ID för bilden med den högsta genomsnittliga reflektansen i band-12.

Denna logik implementeras i följande kodutdrag. Dess motivering bygger på det faktum att band-12 är mycket känsligt för CH4-absorption (se figur 1). Ett högre medelreflektansvärde motsvarar en lägre absorption från källor såsom metanemissioner och ger därför en stark indikation på en emissionsfri baslinjescen.

def approximate_best_reference_date(lon, lat, date_to_monitor, distance_offset=1500, cloud_mask=True, day_offset=30): #initialize AOI and other parameters aoi_geometry = bbox_around_point(lon, lat, distance_offset) BAND_12_SWIR22 = "B12" max_mean_swir = None ref_s2_tile_id = None ref_target_date = date_to_monitor #loop over n=day_offset previous days for day_delta in range(-1 * day_offset, 0): date_time_obj = datetime.strptime(date_to_monitor, '%Y-%m-%d') target_date = (date_time_obj + timedelta(days=day_delta)).strftime('%Y-%m-%d') #get Sentinel-2 tiles for current date s2_tiles_for_target_date = get_sentinel2_meta_data(target_date, aoi_geometry) #loop over available tiles for current date for s2_tile_meta in s2_tiles_for_target_date: s2_tile_id_to_test = s2_tile_meta['Id'] #retrieve cloud-masked (optional) L1C band 12 target_band_data = get_s2l1c_band_data_xarray(s2_tile_id_to_test, BAND_12_SWIR22, clip_geometry=aoi_geometry, cloud_mask=cloud_mask) #compute mean reflectance of SWIR band mean_swir = target_band_data.sum() / target_band_data.count() #ensure the visible/non-clouded area is adequately large visible_area_ratio = target_band_data.count() / (target_band_data.shape[1] * target_band_data.shape[2]) if visible_area_ratio <= 0.7: #<-- ensure acceptable cloud cover continue #update maximum ref_s2_tile_id and ref_target_date if applicable if max_mean_swir is None or mean_swir > max_mean_swir: max_mean_swir = mean_swir ref_s2_tile_id = s2_tile_id_to_test ref_target_date = target_date return (ref_s2_tile_id, ref_target_date)

Genom att använda den här metoden kan vi uppskatta ett lämpligt baslinjedatum och motsvarande Sentinel-2-bricka-ID. Sentinel-2-bricka-ID:n innehåller information om uppdrags-ID (Sentinel-2A/Sentinel-2B), det unika bricknumret (t.ex. 32SKA) och datumet då bilden togs bland annan information och identifierar unikt en observation (dvs. , en scen). I vårt exempel föreslår approximationsprocessen 6 oktober 2019 (Sentinel-2-bricka: S2B_32SKA_20191006_0_L2A), som den mest lämpliga baslinjekandidaten.

Därefter kan vi beräkna den korrigerade fraktionella förändringen i reflektans mellan baslinjedatumet och det datum vi vill övervaka. Korrektionsfaktorerna c (se ekvation 1 föregående) kan beräknas med följande kod:

def compute_correction_factor(tif_y, tif_x): #get flattened arrays for regression y = np.array(tif_y.values.flatten()) x = np.array(tif_x.values.flatten()) np.nan_to_num(y, copy=False) np.nan_to_num(x, copy=False) #fit linear model using least squares regression x = x[:,np.newaxis] #reshape c, _, _, _ = np.linalg.lstsq(x, y, rcond=None) return c[0]

Den fullständiga implementeringen av ekvation 1 ges i följande kodavsnitt:

def compute_corrected_fractional_reflectance_change(l1_b11_base, l1_b12_base, l1_b11_monitor, l1_b12_monitor): #get correction factors c_monitor = compute_correction_factor(tif_y=l1_b11_monitor, tif_x=l1_b12_monitor) c_base = compute_correction_factor(tif_y=l1_b11_base, tif_x=l1_b12_base) #get corrected fractional reflectance change frac_change = ((c_monitor*l1_b12_monitor-l1_b11_monitor)/l1_b11_monitor)-((c_base*l1_b12_base-l1_b11_base)/l1_b11_base) return frac_change

Slutligen kan vi slå in ovanstående metoder i en end-to-end-rutin som identifierar AOI för en given longitud och latitud, övervakningsdatum och baslinjeruta, skaffar de nödvändiga satellitbilderna och utför beräkningen av fraktionerad reflektansförändring.

def run_full_fractional_reflectance_change_routine(lon, lat, date_monitor, baseline_s2_tile_id, distance_offset=1500, cloud_mask=True): #get bounding box aoi_geometry = bbox_around_point(lon, lat, distance_offset) #get S2 metadata s2_meta_monitor = get_sentinel2_meta_data(date_monitor, aoi_geometry) #get tile id grid_id = baseline_s2_tile_id.split("_")[1] s2_tile_id_monitor = list(filter(lambda x: f"_{grid_id}_" in x["Id"], s2_meta_monitor))[0]["Id"] #retrieve band 11 and 12 of the Sentinel L1C product for the given S2 tiles l1_swir16_b11_base = get_s2l1c_band_data_xarray(baseline_s2_tile_id, BAND_11_SWIR16, clip_geometry=aoi_geometry, cloud_mask=cloud_mask) l1_swir22_b12_base = get_s2l1c_band_data_xarray(baseline_s2_tile_id, BAND_12_SWIR22, clip_geometry=aoi_geometry, cloud_mask=cloud_mask) l1_swir16_b11_monitor = get_s2l1c_band_data_xarray(s2_tile_id_monitor, BAND_11_SWIR16, clip_geometry=aoi_geometry, cloud_mask=cloud_mask) l1_swir22_b12_monitor = get_s2l1c_band_data_xarray(s2_tile_id_monitor, BAND_12_SWIR22, clip_geometry=aoi_geometry, cloud_mask=cloud_mask) #compute corrected fractional reflectance change frac_change = compute_corrected_fractional_reflectance_change( l1_swir16_b11_base, l1_swir22_b12_base, l1_swir16_b11_monitor, l1_swir22_b12_monitor ) return frac_change

Att köra den här metoden med parametrarna vi bestämde tidigare ger den fraktionella förändringen i SWIR TOA-reflektans som en xarray.DataArray. Vi kan utföra en första visuell inspektion av resultatet genom att köra en enkel plot() anrop på denna datamatris. Vår metod avslöjar närvaron av en metanplym i mitten av AOI som var odetekterbar i RGB-plotten som setts tidigare.

Figur 3Figur 3 – Fraktionell reflektansförändring i TOA-reflektans (SWIR-spektrum)

Som ett sista steg extraherar vi den identifierade metanplymen och lägger över den på en rå RGB-satellitbild för att ge det viktiga geografiska sammanhanget. Detta uppnås genom tröskelvärden, som kan implementeras enligt följande:

def get_plume_mask(change_in_reflectance_tif, threshold_value): cr_masked = change_in_reflectance_tif.copy() #set values above threshold to nan cr_masked[cr_masked > treshold_value] = np.nan #apply mask on nan values plume_tif = np.ma.array(cr_masked, mask=cr_masked==np.nan) return plume_tif

För vårt fall ger ett tröskelvärde på -0.02 fraktionerad förändring i reflektans bra resultat men detta kan ändras från scen till scen och du måste kalibrera detta för ditt specifika användningsfall. Figur 4 som följer illustrerar hur plymöverlägget genereras genom att kombinera den råa satellitbilden av AOI med den maskerade plymen till en enda sammansatt bild som visar metanplymen i dess geografiska sammanhang.

Figur 4 – RGB-bild, förändring av fraktionerad reflektans i TOA-reflektans (SWIR-spektrum) och metanplymöverlägg för AOI

Figur 4 – RGB-bild, förändring av fraktionerad reflektans i TOA-reflektans (SWIR-spektrum) och metanplymöverlägg för AOI

Lösningsvalidering med verkliga metanemissionshändelser

Som ett sista steg utvärderar vi vår metod för dess förmåga att korrekt detektera och lokalisera metanläckage från en rad källor och geografier. Först använder vi ett kontrollerat metanfrisättningsexperiment speciellt designat för validering av rymdbaserad punktkälladetektering och kvantifiering av metanutsläpp på land. I detta experiment 2021 utförde forskare flera metanutsläpp i Ehrenberg, Arizona under en 19-dagarsperiod. Att köra vår detektionsmetod för en av Sentinel-2-passen under tiden för det experimentet ger följande resultat som visar en metanplym:

Figur 5Figur 5 – Metanplymintensiteter för experiment med kontrollerad frisättning i Arizona

Plymen som genereras under den kontrollerade frisättningen identifieras tydligt av vår detektionsmetod. Detsamma gäller för andra kända verkliga läckor (i figur 6 som följer) från källor som en deponi i Östasien (vänster) eller en olje- och gasanläggning i Nordamerika (höger).

Figur 6Figur 6 – Metanplymintensiteter för en östasiatisk deponi (vänster) och ett olje- och gasfält i Nordamerika (höger)

Sammanfattningsvis kan vår metod hjälpa till att identifiera metanutsläpp både från kontrollerade utsläpp och från olika verkliga punktkällor över hela världen. Detta fungerar bäst för punktkällor på land med begränsad omgivande vegetation. Det fungerar inte för off-shore scener pga den höga absorptionen (det vill säga låg transmittans) av SWIR-spektrumet av vatten. Med tanke på att den föreslagna detektionsalgoritmen bygger på variationer i metanintensitet, kräver vår metod också observationer före läckage. Detta kan göra övervakning av läckage med konstanta utsläppshastigheter utmanande.

Städa upp

För att undvika att ta på dig oönskade avgifter efter att ett metanövervakningsjobb har slutförts, se till att du avslutar SageMaker-instansen och tar bort alla oönskade lokala filer.

Slutsats

Genom att kombinera SageMakers geospatiala möjligheter med öppna geospatiala datakällor kan du implementera dina egna mycket anpassade fjärrövervakningslösningar i stor skala. Det här blogginlägget fokuserade på metandetektering, ett fokusområde för regeringar, icke-statliga organisationer och andra organisationer som vill upptäcka och i slutändan undvika skadliga metanutsläpp. Du kan komma igång idag med din egen resa in i geospatial analys genom att snurra upp en anteckningsbok med SageMaker geospatiala kärna och implementera din egen detekteringslösning. Se den GitHub repository för att komma igång med att bygga din egen satellitbaserade lösning för metandetektion. Kolla också in sagemaker-exempel arkiv för ytterligare exempel och handledning om hur man använder SageMakers geospatiala funktioner i andra verkliga fjärranalysapplikationer.


Om författarna

Karsten SchroerDr Karsten Schroer är lösningsarkitekt på AWS. Han stödjer kunder i att utnyttja data och teknik för att driva hållbarheten i deras IT-infrastruktur och bygga molnbaserade datadrivna lösningar som möjliggör hållbar verksamhet i sina respektive vertikaler. Karsten började på AWS efter sina doktorandstudier i tillämpad maskininlärning och driftledning. Han brinner verkligen för teknikbaserade lösningar på samhällsutmaningar och älskar att dyka djupt in i de metoder och applikationsarkitekturer som ligger till grund för dessa lösningar.

Janosch WoschitzJanosch Woschitz är Senior Solutions Architect på AWS, specialiserad på geospatial AI/ML. Med över 15 års erfarenhet stödjer han kunder globalt med att utnyttja AI och ML för innovativa lösningar som drar nytta av geospatial data. Hans expertis spänner över maskininlärning, datateknik och skalbara distribuerade system, förstärkt av en stark bakgrund inom mjukvaruteknik och branschexpertis inom komplexa domäner som autonom körning.

plats_img

VC Café

VC Café

Senaste intelligens

plats_img