Сегментация изображений с помощью TensorFlow

Я пытаюсь понять целесообразность использования TensorFlow для идентификации функций в данных моего изображения. У меня есть изображения ядер размером 50x50 пикселей в градациях серого, которые я хотел бы сегментировать - желаемый результат будет 0 или 1 для каждого пикселя. 0 для фона, 1 для ядра.

Пример ввода: исходные данные

Пример метки (что такое "метка"/ реальный ответ): выходные данные (метка)

Можно ли даже использовать TensorFlow для такого машинного обучения в моем наборе данных? Я мог бы потенциально иметь тысячи изображений для тренировочного набора.

Многие примеры имеют метку, соответствующую одной категории, например, массив из 10 цифр [0,0,0,0,0,0,0,0,0,0,0] для набора данных рукописных цифр, но я не видел много примеров, которые выводили бы больший массив. Я хотел бы предположить, что метка будет 50x50 массив?

Кроме того, какие-либо идеи по обработке процессорного времени для этого времени анализа?

3 ответа

Да, это возможно с TensorFlow. На самом деле, есть много способов приблизиться к этому. Вот очень простой:

Считайте, что это задача двоичной классификации. Каждый пиксель должен быть классифицирован как передний план или фон. Выберите набор функций, по которым будет классифицироваться каждый пиксель. Этими функциями могут быть локальные элементы (например, участок вокруг рассматриваемого пикселя) или глобальные элементы (например, расположение пикселя на изображении). Или комбинация двух.

Затем обучите модель по вашему выбору (например, NN) на этом наборе данных. Конечно, ваши результаты будут сильно зависеть от вашего выбора функций.


Вы также можете использовать подход с разрезанием графа, если вы можете представить это вычисление как вычислительный граф, используя примитивы, которые предоставляет TensorFlow. Тогда вы можете либо не использовать функции оптимизации TensorFlow, такие как backprop, либо, если в ваших вычислениях есть некоторые дифференцируемые переменные, вы можете использовать функции оптимизации TF для оптимизации этих переменных.

SoftmaxWithLoss() работает для вашей проблемы сегментации изображения, если вы преобразуете предсказанную метку и карту истинной метки из [batch, height, width, channel] в [N, channel].

В вашем случае ваша окончательная прогнозируемая карта будет иметь канал = 2, и после изменения формы N = ширинавысоты пакета, вы можете использовать SoftmaxWithLoss() или аналогичную функцию потерь в тензорном потоке для запуска оптимизации.

Посмотрите на этот вопрос, который может помочь.

Попробуйте использовать сверточные фильтры для модели. Укладка слоев свертки и понижающей дискретизации. На входе должно быть нормализованное пиксельное изображение, а на выходе должна быть маска. Последний слой должен быть softmaxWithLoss. НТН.

Другие вопросы по тегам