Справочная информация
Я все еще новичок в CNN, и какое-то время борюсь с этим.
Я пытаюсь использовать TensorFlow и Google Earth Engine вместе, чтобы предсказать голое покрытие с использованием модели U- net. До сих пор я в основном следовал этому руководству , доступному в Интернете. Цель состоит в том, чтобы спрогнозировать переменную непрерывного отклика, процентное значение голого покрытия, с использованием составных полос изображений Landsat. участков.
Готово
Чтобы взять образцы, я преобразовал свой слой наземных точек истинности в изображение, где теперь точки представляют собой пиксели размером 30x30 м:
FeaColImg = GROUND_DATA.reduceToImage(
properties = [RESPONSE], # Bareground cover
reducer = ee.Reducer.mean()
).reproject(crs = 'epsg:4326', scale = 30).divide(100).unmask(-9999).clip(ROI).rename([RESPONSE])
Это изображение показывает точка выборки выделена желтым цветом, а также преобразованный пиксель изображения размером 30x30 м из точки выборки (окрашен в серый цвет в соответствии с процентной долей чистого покрытия), а окружающие неизвестные пиксели - черным.
I then concatenated that with the Landsat composite image. I turned it into an array image, with 256 pixels kernel size.
featureStack = ee.Image.cat([
LANDSAT_COMPOSITE.select(BANDS),
FeaColImg.select(RESPONSE).float()
]).float()
list = ee.List.repeat(1, 256)
lists = ee.List.repeat(list, 256)
kernel = ee.Kernel.fixed(256, 256, lists)
arrays = featureStack.neighborhoodToArray(kernel)
simple_points = GROUND_DATA.geometry().getInfo()['coordinates']
df = arrays.sampleRegions(
collection = simple_points,
scale = 30)
Since I only have ground truth data at a single pixel (30m plot), the array samples contain only one pixel value for my response, and all unknown pixels are -9999
(since I used unmask(-9999)
). If I don't use .unmask()
, the unknown pixels seem to be turned into 0
. Either case leads to bad model results.
The trick seems to be to add a masking layer, where known pixels are 1
, and unknown pixels are 0
. For example, if unknown pixels are set to -9999
:
ROI_image = ee.Image(1).clip(ROI)
mask = ROI_image.updateMask(FeaColImg.gt(0)).unmask(0)
Question
Looking at the пример online , где бы я мог интегрировать эту маску в модель U- net, чтобы неизвестные пиксели игнорировались (где значения маски 0
)?