Spaces:
Running
Running
 | |
 | |
 | |
## Introduction | |
This is the code used for two domain adaptation papers. | |
The `domain_separation` directory contains code for the "Domain Separation | |
Networks" paper by Bousmalis K., Trigeorgis G., et al. which was presented at | |
NIPS 2016. The paper can be found here: https://arxiv.org/abs/1608.06019. | |
The `pixel_domain_adaptation` directory contains the code used for the | |
"Unsupervised Pixel-Level Domain Adaptation with Generative Adversarial | |
Networks" paper by Bousmalis K., et al. (presented at CVPR 2017). The paper can | |
be found here: https://arxiv.org/abs/1612.05424. PixelDA aims to perform domain | |
adaptation by transfering the visual style of the target domain (which has few | |
or no labels) to a source domain (which has many labels). This is accomplished | |
using a Generative Adversarial Network (GAN). | |
### Other implementations | |
* [Simplified-DSN](https://github.com/AmirHussein96/Simplified-DSN): | |
An unofficial implementation of the [Domain Separation Networks paper](https://arxiv.org/abs/1608.06019). | |
## Contact | |
The domain separation code was open-sourced | |
by [Konstantinos Bousmalis](https://github.com/bousmalis) | |
(konstantinos@google.com), while the pixel level domain adaptation code was | |
open-sourced by [David Dohan](https://github.com/dmrd) (ddohan@google.com). | |
## Installation | |
You will need to have the following installed on your machine before trying out the DSN code. | |
* TensorFlow 1.x: https://www.tensorflow.org/install/ | |
* Bazel: https://bazel.build/ | |
## Initial setup | |
In order to run the MNIST to MNIST-M experiments, you will need to set the | |
data directory: | |
``` | |
$ export DSN_DATA_DIR=/your/dir | |
``` | |
Add models and models/slim to your `$PYTHONPATH` (assumes $PWD is /models): | |
``` | |
$ export PYTHONPATH=$PYTHONPATH:$PWD:$PWD/slim | |
``` | |
## Getting the datasets | |
You can fetch the MNIST data by running | |
``` | |
$ bazel run slim:download_and_convert_data -- --dataset_dir $DSN_DATA_DIR --dataset_name=mnist | |
``` | |
The MNIST-M dataset is available online [here](http://bit.ly/2nrlUAJ). Once it is downloaded and extracted into your data directory, create TFRecord files by running: | |
``` | |
$ bazel run domain_adaptation/datasets:download_and_convert_mnist_m -- --dataset_dir $DSN_DATA_DIR | |
``` | |
# Running PixelDA from MNIST to MNIST-M | |
You can run PixelDA as follows (using Tensorboard to examine the results): | |
``` | |
$ bazel run domain_adaptation/pixel_domain_adaptation:pixelda_train -- --dataset_dir $DSN_DATA_DIR --source_dataset mnist --target_dataset mnist_m | |
``` | |
And evaluation as: | |
``` | |
$ bazel run domain_adaptation/pixel_domain_adaptation:pixelda_eval -- --dataset_dir $DSN_DATA_DIR --source_dataset mnist --target_dataset mnist_m --target_split_name test | |
``` | |
The MNIST-M results in the paper were run with the following hparams flag: | |
``` | |
--hparams arch=resnet,domain_loss_weight=0.135603587834,num_training_examples=16000000,style_transfer_loss_weight=0.0113173311334,task_loss_in_g_weight=0.0100959947002,task_tower=mnist,task_tower_in_g_step=true | |
``` | |
### A note on terminology/language of the code: | |
The components of the network can be grouped into two parts | |
which correspond to elements which are jointly optimized: The generator | |
component and the discriminator component. | |
The generator component takes either an image or noise vector and produces an | |
output image. | |
The discriminator component takes the generated images and the target images | |
and attempts to discriminate between them. | |
## Running DSN code for adapting MNIST to MNIST-M | |
Then you need to build the binaries with Bazel: | |
``` | |
$ bazel build -c opt domain_adaptation/domain_separation/... | |
``` | |
You can then train with the following command: | |
``` | |
$ ./bazel-bin/domain_adaptation/domain_separation/dsn_train \ | |
--similarity_loss=dann_loss \ | |
--basic_tower=dann_mnist \ | |
--source_dataset=mnist \ | |
--target_dataset=mnist_m \ | |
--learning_rate=0.0117249 \ | |
--gamma_weight=0.251175 \ | |
--weight_decay=1e-6 \ | |
--layers_to_regularize=fc3 \ | |
--nouse_separation \ | |
--master="" \ | |
--dataset_dir=${DSN_DATA_DIR} \ | |
-v --use_logging | |
``` | |
Evaluation can be invoked with the following command: | |
``` | |
$ ./bazel-bin/domain_adaptation/domain_separation/dsn_eval \ | |
-v --dataset mnist_m --split test --num_examples=9001 \ | |
--dataset_dir=${DSN_DATA_DIR} | |
``` | |