Arxiv | Бибтекс
Мы разрабатываем новый подход к изображению, который лучше воспроизводит заполненные регионы, демонстрирующие мелкие детали, вдохновленные нашим пониманием того, как работают художники: линии сначала, цвет дальше . Мы предлагаем двухступенчатую состязательную модель EdgeConnect, которая включает в себя генератор краев, за которым следует сеть завершения изображения. Генератор краев галлюцинает края недостающей области (как регулярного, так и нерегулярного) изображения, а сеть завершения изображения заполняет в недостающих областях, используя галлюцинированные края в качестве априори. Подробное описание системы можно найти в нашей статье.

git clone https://github.com/knazeri/edge-connect.git
cd edge-connectpip install -r requirements.txtМы используем наборы данных Place2, Celeba и Paris Street. Чтобы тренировать модель на полном наборе данных, загрузите наборы данных с официальных сайтов.
После загрузки запустите scripts/flist.py , чтобы сгенерировать списки файлов поезда, тестирования и проверки. Например, для создания списка файлов обучающих наборов на наборе данных Places2.
mkdir datasets
python ./scripts/flist.py --path path_to_places2_train_set --output ./datasets/places_train.flistНаша модель обучена набору данных нерегулярной маски, предоставленным Liu et al. Вы можете загрузить публично доступный набор данных нерегулярной маски с их веб -сайта.
В качестве альтернативы, вы можете загрузить набор данных нерегулярной маски от Карима Искакова, который составляет 50 миллионов инсультов, нанесенных человеческой рукой.
Пожалуйста, используйте scripts/flist.py чтобы сгенерировать списки файлов поезда, тестирования и проверки маски, как описано выше.
Загрузите предварительно обученные модели, используя следующие ссылки и скопируйте их по каталогу ./checkpoints .
Места 2 | Celeba | Париж-стрит
В качестве альтернативы, вы можете запустить следующий сценарий для автоматической загрузки предварительно обученных моделей:
bash ./scripts/download_model.sh Чтобы тренировать модель, создайте файл config.yaml аналогичный файлу конфигурации примера и скопируйте его в каталоге контрольно -пропускных пунктов. Прочитайте руководство по настройке для получения дополнительной информации о конфигурации модели.
EdgeConnect обучается на трех этапах: 1) Обучение модели Edge, 2) Обучение модели INPAINT и 3) Обучение совместной модели. Чтобы тренировать модель:
python train.py --model [stage] --checkpoints [path to checkpoints] Например, для обучения модели Edge на наборе данных Places2 под ./checkpoints/places2 каталог:
python train.py --model 1 --checkpoints ./checkpoints/places2 Конвергенция модели отличается от набора данных к набору данных. Например, набор данных Place2 сходится в одну из двух эпох, в то время как небольшие наборы данных, такие как Celeba, требуют почти 40 эпох для сходимости. Вы можете установить количество обучающих итераций, изменяя значение MAX_ITERS в файле конфигурации.
Чтобы проверить модель, создайте файл config.yaml аналогичный файлу примера конфигурации и скопируйте его в каталоге контрольно -пропускных пунктов. Прочитайте руководство по настройке для получения дополнительной информации о конфигурации модели.
Вы можете проверить модель на всех трех этапах: 1) модель края, 2) модель INPAINT и 3) Совместная модель. В каждом случае вам необходимо предоставить входное изображение (изображение с маской) и файл маски из серого. Пожалуйста, убедитесь, что файл маски покрывает всю область маски на входном изображении. Чтобы проверить модель:
python test.py
--model [stage]
--checkpoints [path to checkpoints]
--input [path to input directory or file]
--mask [path to masks directory or mask file]
--output [path to the output directory] Мы предоставляем несколько тестовых примеров в рамках каталога ./examples . Пожалуйста, загрузите предварительно обученные модели и запустите:
python test.py
--checkpoints ./checkpoints/places2
--input ./examples/places2/images
--mask ./examples/places2/masks
--output ./checkpoints/results Этот скрипт будет освящать все изображения в ./examples/places2/images , используя свои соответствующие маски в каталоге ./examples/places2/mask и сохраняет результаты в каталоге ./checkpoints/results . По --model=3 test.py
Чтобы оценить модель, вам нужно сначала запустить модель в режиме тестирования против вашего набора валидации и сохранить результаты на диске. Мы предоставляем утилиту ./scripts/metrics.py для оценки модели с использованием PSNR, SSIM и средней абсолютной ошибки:
python ./scripts/metrics.py --data-path [path to validation set] --output-path [path to model output] Чтобы измерить расстояние на основе основания Fréchet ( ./scripts/fid_score.py ). Мы используем внедрение Pytorch FID отсюда, которая использует предварительно проведенные веса из модели основания Pytorch.
python ./scripts/fid_score.py --path [path to validation, path to model output] --gpu [GPU id to use] По умолчанию мы используем хитрый детектор края для извлечения информации о краях из входных изображений. Если вы хотите обучить модель с обнаружением внешнего края (например, обнаружение крайно вложенного края), вам необходимо генерировать карты краев для всех наборов обучения/тестирования в качестве предварительной обработки и соответствующих списков файлов с использованием scripts/flist.py как объяснено выше. Пожалуйста, убедитесь, что имена файлов и структура каталогов соответствуют вашим наборам обучения/тестирования. Вы можете переключиться на обнаружение внешнего края, указав EDGE=2 в файле конфигурации.
Конфигурация модели хранится в файле config.yaml в вашем каталоге контрольных точек. Следующие таблицы предоставляют документацию для всех параметров, доступных в файле конфигурации:
| Вариант | Описание |
|---|---|
| РЕЖИМ | 1: поезд, 2: тест, 3: Eval |
| МОДЕЛЬ | 1: Edge Model, 2: модель INPaint, 3: модель Edge-Inpaint, 4: Совместная модель |
| Маска | 1: случайный блок, 2: половина, 3: внешний, 4: внешний + случайный блок, 5: внешний + случайный блок + половина |
| КРАЙ | 1: canny, 2: внешний |
| Нс | 0: нет не-макс-супрессии, 1: не-макс-супрессия на внешних краях |
| СЕМЯ | Семена генератора случайных чисел |
| Графический процессор | Список идентификаторов графического процессора, отдельный список запятой, например [0,1] |
| ОТЛАЖИВАТЬ | 0: Без отладки, 1: режим отладки |
| Многословный | 0: Нет словеса, 1: Вывод подробная статистика в выходной консоли |
| Вариант | Описание |
|---|---|
| Train_flist | текстовый файл, содержащий списки файлов обучения |
| Val_flist | текстовый файл, содержащий списки файлов проверки, установленных файлов |
| Test_flist | Текстовый файл, содержащий списки файлов тестовых наборов |
| Train_edge_flist | Текстовый файл, содержащий обучающий набор списка файлов внешнего ребра (только с Edge = 2) |
| Val_edge_flist | Текстовый файл, содержащий проверку, установите список файлов внешних ребра (только с Edge = 2) |
| Test_edge_flist | Текстовый файл, содержащий набор тестовых файлов внешнего ребра (только с Edge = 2) |
| Train_mask_flist | Текстовый файл, содержащий учебный набор, маскируется список файлов (только с Mask = 3, 4, 5) |
| Val_mask_flist | Текстовый файл, содержащий проверку, устанавливает список файлов маски (только с Mask = 3, 4, 5) |
| Test_mask_flist | Текстовый файл, содержащий список файлов тестового набора, (только с Mask = 3, 4, 5) |
| Вариант | По умолчанию | Описание |
|---|---|---|
| Лр | 0,0001 | скорость обучения |
| D2G_LR | 0,1 | Соотношение скорости обучения дискриминатора/генератора |
| Бета1 | 0,0 | Adam Optimizer Beta1 |
| Бета2 | 0,9 | Adam Optimizer Beta2 |
| Batch_size | 8 | Входной пакетный размер |
| Input_size | 256 | Входной размер изображения для обучения. (0 для исходного размера) |
| СИГМА | 2 | Стандартное отклонение гауссового фильтра, используемого в детекторе хэмкого края (0: случайный, -1: без края) |
| Max_iters | 2E6 | максимальное количество итераций для обучения модели |
| Edge_Threshold | 0,5 | Порог обнаружения краев (0-1) |
| L1_loss_weight | 1 | L1 Потеря веса |
| Fm_loss_weight | 10 | Вес утраты |
| Style_loss_weight | 1 | Вес утраты в стиле |
| Content_loss_weight | 1 | Вес потери восприятия |
| Inpaint_adv_loss_weight | 0,01 | Вес состязательного потери |
| Gan_loss | NSGAN | NSGAN : Не насыщенный GAN, LSGAN : наименьшие квадраты Ган, Хинге : Хинг-Потеря Ган |
| Gan_pool_size | 0 | Поддельные изображения размер пула |
| Save_interval | 1000 | Сколько итераций ждать перед сохранением модели (0: никогда) |
| Eval_interval | 0 | Сколько итераций ждать, прежде чем оценить модель (0: никогда) |
| Log_interval | 10 | Сколько итераций подождать, прежде чем в регистрации потери тренировок (0: никогда) |
| Sample_Interval | 1000 | Сколько итераций ждать перед сохранением образца (0: никогда) |
| SAMPLE_SIZE | 12 | Количество изображений для образца в каждом интервале Samling |
Лицензирован в соответствии с Creative Commons Attribution-Noncommercial 4.0 International.
За исключением случаев, когда это отмечается, этот контент публикуется по лицензии CC BY-NC, что означает, что вы можете копировать, ремикс, преобразовать и опираться на контент, если вы не используете материал для коммерческих целей, и предоставлять соответствующий кредит и предоставлять ссылку на лицензию.
Если вы используете этот код для своего исследования, пожалуйста, цитируйте наши документы EdgeConnect: генеративное изображение, внедрение с помощью административного обучения краевым краям или EdgeConnect: Структурное управление изображением с использованием Edge прогнозирование:
@inproceedings{nazeri2019edgeconnect,
title={EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning},
author={Nazeri, Kamyar and Ng, Eric and Joseph, Tony and Qureshi, Faisal and Ebrahimi, Mehran},
journal={arXiv preprint},
year={2019},
}
@InProceedings{Nazeri_2019_ICCV,
title = {EdgeConnect: Structure Guided Image Inpainting using Edge Prediction},
author = {Nazeri, Kamyar and Ng, Eric and Joseph, Tony and Qureshi, Faisal and Ebrahimi, Mehran},
booktitle = {The IEEE International Conference on Computer Vision (ICCV) Workshops},
month = {Oct},
year = {2019}
}