Реализация Pytorch обучения для обнаружения междоменных отношений с генеративными состязательными сетями.

* Все образцы в readme.md генерированы нейронной сетью, за исключением первого изображения для каждой строки.
* Структура сети немного отличается (здесь) из кода автора.
Первая загрузка наборов данных (от pix2pix) с:
$ bash ./data/download_dataset.sh dataset_name
facades : 400 изображений из набора данных CMP Facades.cityscapes : 2975 Изображения с учебного набора CityScapes.maps : 1096 Обучаемые изображения, соскобные с карт Googleedges2shoes : 50K Обучающие изображения из набора данных UT Zappos50K.edges2handbags : 137K изображения сумочки Amazon от Igan Project.Или вы можете использовать свой собственный набор данных, размещая такие изображения, как:
data
├── YOUR_DATASET_NAME
│ ├── A
│ | ├── xxx.jpg (name doesn't matter)
│ | ├── yyy.jpg
│ | └── ...
│ └── B
│ ├── zzz.jpg
│ ├── www.jpg
│ └── ...
└── download_dataset.sh
Все изображения в каждом наборе данных должны иметь одинаковый размер , как и ImageMagick:
# for Ubuntu
$ sudo apt-get install imagemagick
$ mogrify -resize 256x256! -quality 100 -path YOUR_DATASET_NAME/A/*.jpg
$ mogrify -resize 256x256! -quality 100 -path YOUR_DATASET_NAME/B/*.jpg
# for Mac
$ brew install imagemagick
$ mogrify -resize 256x256! -quality 100 -path YOUR_DATASET_NAME/A/*.jpg
$ mogrify -resize 256x256! -quality 100 -path YOUR_DATASET_NAME/B/*.jpg
# for scale and center crop
$ mogrify -resize 256x256^ -gravity center -crop 256x256+0+0 -quality 100 -path ../A/*.jpg
Чтобы тренировать модель:
$ python main.py --dataset=edges2shoes --num_gpu=1
$ python main.py --dataset=YOUR_DATASET_NAME --num_gpu=4
Чтобы проверить модель (используйте свой load_path ):
$ python main.py --dataset=edges2handbags --load_path=logs/edges2handbags_2017-03-18_10-55-37 --num_gpu=0 --is_train=False
Результат образцов из двухмерных моделей гауссовой смеси. Ipython Notebook
# Итерация: 0 :

# Итерация: 10000 :

# Итерация: 11200 :
x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) (обувь -> сумочка -> обувь)



x_B -> G_BA(x_B) -> G_AB(G_BA(x_B)) (сумочка -> обувь -> сумочка)



x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) -> G_AB(G_BA(G_AB(x_A))) -> G_BA(G_AB(G_BA(G_AB(x_A)))) -> ...







# Итерация: 9600 :
x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) (Color -> sketch -> color)



x_B -> G_BA(x_B) -> G_AB(G_BA(x_B)) (Sketch -> color -> sketch)



x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) -> G_AB(G_BA(G_AB(x_A))) -> G_BA(G_AB(G_BA(G_AB(x_A)))) -> ...







# Итерация: 9500 :
x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) (Color -> sketch -> color)



x_B -> G_BA(x_B) -> G_AB(G_BA(x_B)) (Sketch -> color -> sketch)



x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) -> G_AB(G_BA(G_AB(x_A))) -> G_BA(G_AB(G_BA(G_AB(x_A)))) -> ...







# Итерация: 8350 :
x_B -> G_BA(x_B) -> G_AB(G_BA(x_B)) (image -> сегментация -> image)



x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) (сегментация -> image -> сегментация)



# Итерация: 22200 :
x_B -> G_BA(x_B) -> G_AB(G_BA(x_B)) (image -> сегментация -> image)



x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) (сегментация -> image -> сегментация)



Генерация и реконструкция на наборе данных о плотной сегментации выглядит странно, которые не включены в статью.
Я предполагаю, что наивный выбор mean square error для реконструкции требует некоторых изменений в этом наборе данных.
# Итерация: 19450 :
x_B -> G_BA(x_B) -> G_AB(G_BA(x_B)) (image -> сегментация -> image)



x_A -> G_AB(x_A) -> G_BA(G_AB(x_A)) (сегментация -> image -> сегментация)



Taehoon kim / @carpedm20