TensorFlow: маскирует неизвестные пиксели в модели U- net - PullRequest
0 голосов
/ 09 июля 2020

Справочная информация

Я все еще новичок в 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 м из точки выборки (окрашен в серый цвет в соответствии с процентной долей чистого покрытия), а окружающие неизвестные пиксели - черным.

enter image description here

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)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...