Google Earth Engine 스크립트의 실행 시간 최적화
Google Earth Engine(GEE)은 대규모 지리공간 데이터를 분석하기 위한 강력한 플랫폼입니다. 그러나 사용자는 스크립트가 기본으로 표시되는 경우에도 실행 시간 문제에 직면하는 경우가 많습니다. 실행하는 데 몇 분 정도 걸리는 스크립트는 생산성에 영향을 미치고 통찰력을 지연시킬 수 있습니다.
이 경우 사용자는 Sentinel 및 Landsat 8 데이터를 처리하기 위한 간단한 스크립트를 만들었습니다. 단순함에도 불구하고 스크립트를 실행하는 데 약 3~5분 정도 걸립니다. 효율적인 데이터 처리를 위해서는 이런 일이 발생하는 이유와 스크립트를 최적화하는 방법을 이해하는 것이 필수적입니다.
GEE 스크립트의 성능은 데이터 크기, 필터링 및 계산 복잡성을 포함한 여러 요소에 따라 달라집니다. 실행 시간을 줄이려면 불필요한 작업이나 처리 속도를 늦추는 대규모 데이터 세트 등 스크립트 내의 병목 현상을 식별해야 합니다.
이 기사에서는 GEE에서 실행 시간이 느려지는 원인을 살펴보고 주어진 스크립트를 최적화하기 위한 실용적인 팁을 제공합니다. 이러한 전략을 구현함으로써 사용자는 지리공간 데이터 분석 작업의 속도와 성능을 크게 향상시킬 수 있습니다.
명령 | 사용예 |
---|---|
normalizedDifference() | 이 함수는 두 대역 간의 차이를 합으로 나누어 계산하여 NDVI, NDWI 및 NDSI와 같은 지수를 계산하는 데 사용됩니다. 이는 초목, 물, 눈 지수가 필요한 원격 감지 분석에만 해당됩니다. |
filterBounds() | 주어진 형상과 교차하는 이미지만 포함하도록 이미지 컬렉션을 필터링합니다. 이 경우 위성 데이터를 정의된 관심 지점 주변 지역으로 제한하여 관련 없는 데이터를 제외하여 처리 효율성을 높입니다. |
filterDate() | 이 명령은 이미지 수집을 특정 날짜 범위로 제한합니다. 우리 문제의 경우 Sentinel 및 Landsat 데이터 세트의 동일한 기간 간의 차이를 분석하는 것이 중요합니다. |
addBands() | 컬렉션의 각 이미지에 새로 계산된 밴드(예: NDVI, NDWI 및 NDSI)를 추가합니다. 이는 별도의 데이터 세트를 만들지 않고 동일한 이미지 컬렉션에 여러 인덱스를 적용하는 데 필수적입니다. |
unmask() | 마스크된 픽셀을 지정된 값으로 채웁니다. 우리 스크립트에서는 영구 수역의 마스크를 해제하여 데이터가 전체 지역에서 일관되게 처리되도록 하는 데 사용됩니다. |
reduce() | ee.Reducer.percentile()과 같은 지정된 감속기 함수를 사용하여 이미지 컬렉션을 줄입니다. 여기서는 픽셀 값의 30번째 백분위수를 계산하여 합성 이미지 생성을 최적화하는 데 사용됩니다. |
clip() | 지정된 관심 영역의 경계에 맞춰 이미지를 자릅니다. 이렇게 하면 해당 영역과 관련된 데이터만 처리되므로 실행 속도가 빨라집니다. |
gt() | 이 명령은 '보다 큼'을 나타내며 임계값을 기준으로 이진 이미지를 생성하는 데 사용됩니다. 이 경우 물 발생률이 80% 이상인 지역을 식별합니다. |
map() | 컬렉션의 각 이미지에 기능을 적용합니다. 이 예에서는 addIndices 함수를 적용하여 컬렉션의 모든 이미지에 대해 NDVI, NDWI 및 NDSI를 계산하여 워크플로를 간소화합니다. |
효율성 향상을 위해 GEE 스크립트 최적화
제공된 스크립트의 목표는 Sentinel과 Landsat라는 두 가지 소스에서 위성 이미지를 추출하고 처리하는 것입니다. 그만큼 Google 어스 엔진(GEE) 플랫폼을 통해 사용자는 방대한 양의 위성 데이터에 접근하고 필터링, 인덱싱, 시각화 등 다양한 작업을 적용할 수 있습니다. 이 스크립트에 사용된 주요 기능 중 하나는 정규화된차이() NDVI, NDWI 및 NDSI와 같은 중요한 지수를 계산하는 데 사용되는 함수입니다. 이러한 지수는 특정 지역의 식생, 물, 적설량을 분석하는 데 중요합니다. 스크립트는 관심 지점을 정의하는 것부터 시작하고 제공된 좌표를 사용하여 지도의 중심을 그 지점으로 지정합니다.
스크립트는 다음과 같은 여러 필터를 적용합니다. 필터날짜() 그리고 필터바운드(), 처리되는 데이터의 양을 줄여 실행 시간을 향상시킵니다. 예를 들어, 필터바운드() 관심 영역과 교차하는 이미지만 포함되도록 보장합니다. 필터날짜() 이미지를 특정 날짜 범위로 제한합니다. 이는 계산 부하를 최소화하므로 Sentinel 및 Landsat 이미지와 같은 대규모 데이터 세트를 처리하는 데 필수적입니다. 추가적으로, 필터 클라우드 적용 범위는 클라우드가 너무 많은 이미지를 폐기하는 데 도움이 되어 더 나은 품질의 분석을 보장합니다.
스크립트의 중요한 측면 중 하나는 밴드 추가() 계산된 지수(NDVI, NDWI, NDSI)를 이미지에 추가하여 추가 분석을 위해 액세스할 수 있게 해주는 함수입니다. 또한 이 스크립트에는 JRC Global Surface Water 데이터 세트의 데이터를 사용하여 영구 물 마스크가 포함되어 있습니다. 워터 마스크는 식생 및 눈 분석 결과를 왜곡시킬 수 있는 물 발생률이 높은(80% 이상) 영역을 제외하는 데 도움이 됩니다. 이는 다음을 통해 수행됩니다. gt() 그리고 마스크 해제() 스크립트가 픽셀 값을 기준으로 영역을 분리할 수 있도록 하는 함수입니다.
마지막으로 스크립트는 줄이다() 백분위수 감소기와 함께 기능하여 선택한 픽셀 값의 30번째 백분위수를 나타내는 합성 이미지를 생성합니다. 그런 다음 이 합성 이미지를 관심 영역으로 잘라서 다음을 사용하여 지도에 시각화합니다. 클립() 기능. Sentinel 및 Landsat 합성물 모두에 대해 시각적 매개변수가 정의되어 있어 사용자가 적절한 색상 설정으로 이를 볼 수 있습니다. 필터링, 마스킹 및 합성 생성과 같은 다양한 이미지 처리 단계를 결합함으로써 이 스크립트는 위성 이미지를 분석하는 효율적인 방법을 제공하지만 실행 시간을 줄이기 위해 추가 최적화를 적용할 수도 있습니다.
더 빠른 처리를 위해 Google Earth Engine 스크립트 실행 최적화
이 솔루션은 데이터 검색 시간을 줄이고 작업을 단순화하여 성능을 최적화하는 데 중점을 두고 Google Earth Engine(GEE)을 사용합니다. 스크립트 언어로는 JavaScript가 사용됩니다.
var pointJSP = ee.Geometry.Point([86.465263, 20.168076]);
Map.centerObject(pointJSP, 14);
// Combine date variables for flexibility
var startDate = '2024-02-01';
var endDate = '2024-03-01';
// Function to add NDVI, NDWI, NDSI
var addIndices = function(image) {
var ndvi = image.normalizedDifference(['NIR', 'RED']).rename('NDVI');
var ndwi = image.normalizedDifference(['NIR', 'SWIR1']).rename('NDWI');
var ndsi = image.normalizedDifference(['SWIR1', 'SWIR2']).rename('NDSI');
return image.addBands(ndvi).addBands(ndwi).addBands(ndsi);
};
// Use fewer data points by filtering for cloud-free pixels only once
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30));
GEE의 효율적인 데이터 처리를 사용하여 스크립트 지연 최소화
이 솔루션은 지수 계산과 임계값을 결합하여 최적화된 데이터 처리를 통합합니다. Google Earth Engine 처리에는 JavaScript가 적용됩니다.
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUD_COVER', 30));
// Apply water mask for permanent water areas
var waterMask = ee.Image('JRC/GSW1_4/GlobalSurfaceWater').select('occurrence').gt(80).unmask();
// Add indices to Landsat 8 imagery
var landsatIndices = landsat8.map(addIndices);
var composite = landsatIndices.reduce(ee.Reducer.percentile([30])).clip(pointJSP).mask(waterMask.eq(0));
Map.addLayer(composite, {bands: ['RED', 'GREEN', 'BLUE'], min: 0, max: 3000}, 'Landsat Composite');
Map.addLayer(waterMask, {min: 0, max: 1, palette: ['white', 'blue']}, 'Water Mask', false);
원격 감지 스크립트의 효율성 향상
Google Earth Engine(GEE) 스크립트를 사용할 때 고려해야 할 주요 사항 중 하나는 작업이 효율적으로 처리되도록 하는 것입니다. 환경 분석에서는 Sentinel 및 Landsat와 같은 대규모 데이터 세트를 사용하는 것이 일반적이지만 엄청난 양의 데이터로 인해 스크립트 실행 속도가 느려질 수 있습니다. 성능을 향상시키는 한 가지 방법은 필요한 데이터만 처리되도록 하는 것입니다. 다음과 같은 명령을 사용하여 필터바운드() 그리고 필터날짜() 데이터 세트 크기를 최소화하여 계산을 간소화하는 데 도움이 됩니다. 특정 날짜 범위와 지리적 지역을 선택하면 실행 시간을 크게 줄일 수 있습니다.
GEE 스크립트 성능에 영향을 미치는 또 다른 측면은 데이터 처리 방법입니다. 스크립트 예제에서는 함수를 사용하여 NDVI, NDWI 및 NDSI와 같은 중요한 지수를 계산합니다. 이러한 인덱스는 이미지 컬렉션에 밴드로 추가되므로 보다 철저한 분석이 가능합니다. 그러나 일반적인 실수는 이러한 함수를 먼저 필터링하지 않고 전체 데이터세트에 적용하는 것입니다. 관련 없는 데이터에 대한 불필요한 계산을 피하기 위해 필터링 후에 이러한 작업을 적용하는 것이 중요합니다.
시각화는 최적화할 수 있는 스크립트의 또 다른 요소입니다. 너무 많은 레이어를 추가하거나 복잡한 시각화를 추가하면 처리 시간이 느려질 수 있습니다. 스크립트는 미리 정의된 시각적 매개변수를 사용하여 합성물을 렌더링하지만 명시적으로 필요하지 않은 한 특정 레이어를 비활성화하면 성능이 향상될 수 있습니다. 이는 기능을 유지하면서 스크립트를 가볍게 유지하는 데 도움이 됩니다. 사용 클립() 또한 명령을 사용하면 필요한 영역만 렌더링되어 전체 처리 부담이 줄어듭니다.
Google Earth Engine 스크립트 최적화에 대해 자주 묻는 질문
- GEE 스크립트의 성능을 어떻게 향상합니까?
- 사용 최적화 filterDate(), filterBounds(), 처리하기 전에 데이터세트의 크기를 줄이세요.
- GEE 스크립트를 실행하는 데 시간이 오래 걸리는 이유는 무엇입니까?
- 대규모 데이터 세트와 복잡한 계산으로 인해 실행 속도가 느려질 수 있습니다. 사용 reduce() 그리고 clip() 처리를 관련 영역으로 제한합니다.
- GEE에서 처리되는 이미지 수를 줄일 수 있나요?
- 네, 신청하시면 됩니다 filter() 클라우드 커버리지와 filterDate() 특정 기간에 집중합니다.
- 내 스크립트에서 인덱스 계산을 어떻게 단순화할 수 있나요?
- 다음과 같은 기능을 사용하십시오. addBands() 한 단계로 여러 지수(예: NDVI, NDWI) 추가를 간소화합니다.
- 필수 레이어만 시각화하는 것이 가능한가요?
- 예, 불필요한 레이어를 비활성화하고 다음과 같은 단순화된 시각화 매개변수를 사용합니다. Map.addLayer() 더 나은 성능을 위해.
GEE 스크립트 최적화에 대한 최종 생각
Google Earth Engine 스크립트를 최적화하려면 대규모 데이터세트를 효율적으로 처리하고, 필터를 조기에 적용하고, 불필요한 데이터 작업을 줄이는 것이 포함됩니다. 필터링과 같은 필수 영역에 집중 날짜 위치는 처리 시간을 크게 줄일 수 있습니다.
등의 기능을 통합함으로써 밴드 추가 관련 없는 데이터를 제거하기 위해 임계값 마스크를 사용하면 스크립트 성능이 더욱 향상될 수 있습니다. 이러한 기술을 사용하면 실행을 간소화하여 Google Earth Engine 플랫폼의 더 빠른 결과와 더 나은 활용도를 제공할 수 있습니다.
Google Earth Engine 스크립트 최적화를 위한 소스 및 참조
- 이 문서는 스크립트 최적화 기술에 대한 통찰력을 제공하는 공식 Google Earth Engine 문서를 기반으로 한 콘텐츠를 사용하여 작성되었습니다. Google 어스 엔진 가이드
- 복잡한 스크립트의 성능 향상을 위한 토론과 솔루션을 제공하는 GEE 커뮤니티 포럼에서 추가 정보가 수집되었습니다. Google 어스 엔진 커뮤니티
- 대규모 데이터 세트를 처리하기 위한 모범 사례는 다음 링크에서 제공되는 원격 감지 문헌 및 튜토리얼에서 참조되었습니다. NASA 지구 관측소