{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\nimport glob\nimport shutil\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    print(dirname)\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session\ncwd = os.getcwd()\nfrom random import sample\nfrom PIL import Image\nfrom IPython.display import HTML","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Refer to this paper for more details regarding the implementation [Link](https://arxiv.org/pdf/2007.15651.pdf). CUT is a lighter and faster alternative to CycleGAN. Have a look at the video below where the authors describe their approach:"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"HTML('<iframe width=\"840\" height=\"560\" src=\"https://www.youtube.com/embed/jSGOzjmN8q0?rel=0&amp;controls=0&amp;showinfo=0\" frameborder=\"0\" allowfullscreen></iframe>')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"!git clone https://github.com/sumanyumuku98/contrastive-unpaired-translation.git CUT\n# !pip install -r requirements.txt\n# os.chdir(cwd)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"os.chdir(\"CUT/\")\n!pip install -r requirements.txt\nos.chdir(cwd)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.chdir(\"/kaggle/working/CUT/datasets/\")\nos.mkdir(\"images\")\nos.chdir(\"images\")\nos.mkdir(\"trainA\")\nos.mkdir(\"trainB\")\n# os.chdir(cwd)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"trainA = glob.glob(\"/kaggle/input/gan-getting-started/photo_jpg/*\")\ntrainB = glob.glob(\"/kaggle/input/gan-getting-started/monet_jpg/*\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# os.chdir(\"/kaggle/working/CUT/datasets/images/\")\n# !ls","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Sample Few images from photos_jpg as required. Here I have sampled 300 out of 7038 images.\ntrainA_sample = sample(trainA,300)\ntrainB_sample = trainB\nfor file in trainA_sample:\n    imgName = file.split(\"/\")[-1]\n    newPath = os.path.join(\"./trainA/\",imgName)\n    shutil.copyfile(file,newPath)\nfor file in trainB_sample:\n    imgName = file.split(\"/\")[-1]\n    newPath = os.path.join(\"./trainB/\",imgName)\n    shutil.copyfile(file,newPath)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.chdir(cwd)\nos.chdir(\"/kaggle/working/CUT/\")","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"# Change the no. of epochs and decay accordingly\n!python train.py --dataroot ./datasets/images --name monet_CUT --CUT_mode FastCUT --n_epochs 1 --n_epochs_decay 1 --save_epoch_freq 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.mkdir(\"./checkpoints/monet_test\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!cp ./checkpoints/monet_CUT/latest_net_G.pth ./checkpoints/monet_test/","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!ln -s /kaggle/input/gan-getting-started/photo_jpg ./datasets/images/testA","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!ln -s /kaggle/input/gan-getting-started/monet_jpg ./datasets/images/testB","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"!python test.py --dataroot /kaggle/working/CUT/datasets/images --name monet_test --CUT_mode FastCUT --num_test 7037","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# lister = glob.glob(\"./results/monet_test/test_latest/images/fake_B/*\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"shutil.make_archive(\"/kaggle/working/images\",\"zip\",\"./results/monet_test/test_latest/images/fake_B/\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!du -sh /kaggle/working/images.zip","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.chdir(cwd)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!rm -r CUT","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# !ls","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}