Как стандартизировать данные изображения для простого Unet - PullRequest
0 голосов
/ 26 февраля 2020

Я надеюсь обучить Unet сегментировать очень простые данные изображения (примеры ввода, ожидаемый прогноз и окончательный прогноз с пороговым значением ниже).

Кажется, Unet также изучает величины пикселей. Например, если я передаю ему изображение из другого источника, который использовал более высокое время экспозиции (поэтому объекты выглядят одинаково, но интенсивность пикселей может сильно различаться по величине), то алгоритм с треском проваливается.

Я пробовал разные методы предварительной обработки ad ho c, чтобы решить эту проблему. Я пробовал z-скоринг изображений перед тренировкой, ie:

img = (img - np.mean(img)) / np.std(img)

Я также пытался использовать keras ImageDataGenerator для увеличения своих данных. У меня нет четкого представления о том, что происходит под капотом каждого из этих вычислений (и особенно о том, как они взаимодействуют друг с другом). Я также обнаружил, что когда я выполняю стандартизацию, такую ​​как приведенная выше, это искажает входное изображение, и я больше не уверен, как интерпретировать вывод. Как мне восстановить первоначальную структуру, которая меня интересует?

Я бы очень признателен за любые указания на базовые c способы решения этой проблемы. Моя конечная цель - обеспечить подачу входных изображений, как показано ниже, с разным распределением пикселей, но с очень стабильной морфологией объекта, и обучить Unet прогнозировать 2 класса, как показано ниже (по существу, только передний план и фон).

Примечание. Я адаптирую эту реализацию Kaggle для Unet: https://www.kaggle.com/keegil/keras-u-net-starter-lb-0-277

images

...