Ваше руководство по началу работы с pix2pix с использованием изображений в формате tiff

Генеративные состязательные сети (GAN) в последнее время привлекли к себе большое внимание благодаря впечатляющим достижениям, которых они достигли, начиная от генерации изображений, их перевода, переноса стилей, раскрашивания изображений и так далее. В частности, pix2pix, разработанный Isola et al., Стал очень популярным как условно-генеративная состязательная сеть (CGAN), которая позволяет пользователям генерировать изображения на основе входного изображения. Некоторые примеры включают перевод из изображений с семантическими метками в уличную сцену, дневных фотографий в ночные, эскизов в фотографии и так далее.

Все это очень впечатляет, но в настоящее время pix2pix обслуживает в основном изображения PNG и JPG. Это досадно, поскольку некоторые задачи, например, медицинская визуализация, используют изображения TIFF без потерь, тогда как стандартные файлы JPEG не содержат потерь, что позволяет получать более точные детали. Изображения TIFF имеют значения с плавающей запятой, тогда как изображения PNG и JPG имеют целочисленные значения, поэтому важно сохранить эту точность при реализации pix2pix.

Кроме того, CGAN требует, чтобы изображения были масштабированы в диапазоне [-1, 1] для более стабильного обучения. Однако нормализация не так проста, просто используя готовую функцию, потому что изображения TIFF, в отличие от стандартных изображений PNG и JPG, которые имеют значения пикселей от 0 до 255, могут иметь разные значения. В моем случае у моих изображений TIFF были значения от 0 до 1200!

Помня об этом, я подробно расскажу, как можно успешно применить pix2pix к изображениям TIFF.

Понимание ваших данных

Прежде всего, найдите количество каналов, которые есть у вашего изображения. Изображения RGB имеют 3 канала, тогда как изображения в градациях серого имеют только 1. Для изображений TIFF они могут иметь различное количество каналов, поэтому важно понимать данные вашего изображения перед использованием pix2pix, потому что более поздние решения, которые вы примете при кодировании архитектуры, будут зависят от этого. Используйте следующий фрагмент кода, чтобы узнать количество каналов вашего изображения:

Подготовка набора данных

Теперь, когда вы лучше понимаете свой набор данных, вам нужно подготовить свой набор данных. Pix2pix уникален, потому что для него требуются парные изображения в двух доменах, которые в точности идентичны друг другу. Следовательно, в официальной реализации PyTorch изображения должны быть объединены вместе, чтобы получить составное изображение шириной * 2 x высотой. Помня о необходимости сохранить точность значений файла TIFF, я использовал библиотеку PIL для открытия изображений, а затем использовал numpy для объединения двух изображений вместе.

Сначала подготовьте набор данных в следующем формате: папка A должна содержать подпапки train, проверка (если есть) и test (если есть), содержащие все изображения в домене A, а папка B должна содержать подпапки train, проверка (если есть) , и проверьте (если есть), содержащий все изображения в домене B. Убедитесь, что изображения в папке A и папке B имеют одинаковые размеры и одно и то же имя. Затем используйте следующий код, приведенный ниже, для создания объединенных изображений. Путь назначения (dest_path) - это каталог, в котором вы хотите, чтобы ваши объединенные изображения были сохранены. Полученное имя будет таким же, как исходное имя в папке A и папке B.

Нормализация ваших данных

Pix2pix использует функцию активации tanh для выходного слоя модели генератора, которая создает изображения со значениями пикселей в диапазоне [-1, 1]. Следовательно, важно, чтобы дискриминатор получал реальные изображения также в том же диапазоне, что и генерируемые моделью генератора. Однако готовые решения не работают, потому что они предполагают, что значения пикселей находятся в диапазоне 0–255, как в случае с обычными изображениями PNG и JPG. Это не относится к изображениям TIFF, поскольку диапазон значений пикселей варьируется для каждого изображения, поэтому важно сначала найти минимум и максимум для изображения перед разделением. Приведенный ниже фрагмент кода позволяет масштабировать изображения на основе исходных значений пикселей:

Подведение итогов

Итак, это все! Вы подготовили свой набор данных tiff и готовы реализовать код pix2pix, будь то официальная реализация Torch, PyTorch, Tensorflow и так далее. Если у вас возникнут какие-либо проблемы, дайте мне знать в комментариях, и я постараюсь вам помочь.

Эта статья также была опубликована здесь в моем блоге.