{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":11126810,"sourceType":"datasetVersion","datasetId":6939180},{"sourceId":11127370,"sourceType":"datasetVersion","datasetId":6939569},{"sourceId":11138331,"sourceType":"datasetVersion","datasetId":6947532},{"sourceId":11148505,"sourceType":"datasetVersion","datasetId":6955187},{"sourceId":11162585,"sourceType":"datasetVersion","datasetId":6965459}],"dockerImageVersionId":30822,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!git clone https://github.com/Pham-Xuan-Thanh/PSLD.git","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:12:28.958122Z","iopub.execute_input":"2025-03-25T11:12:28.958394Z","iopub.status.idle":"2025-03-25T11:12:30.279064Z","shell.execute_reply.started":"2025-03-25T11:12:28.958372Z","shell.execute_reply":"2025-03-25T11:12:30.278308Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!python --version","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install torch==1.13.1+cu116 -f https://download.pytorch.org/whl/torch_stable.html","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:39:22.819825Z","iopub.execute_input":"2025-03-25T14:39:22.820030Z","iopub.status.idle":"2025-03-25T14:41:11.866519Z","shell.execute_reply.started":"2025-03-25T14:39:22.820003Z","shell.execute_reply":"2025-03-25T14:41:11.865474Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install torchvision==0.14.1+cu116 -f https://download.pytorch.org/whl/torch_stable.html","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:41:11.867541Z","iopub.execute_input":"2025-03-25T14:41:11.867846Z","iopub.status.idle":"2025-03-25T14:41:18.434765Z","shell.execute_reply.started":"2025-03-25T14:41:11.867824Z","shell.execute_reply":"2025-03-25T14:41:18.433825Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install \\\n  torch \\\n  torchvision \\\n  torchdiffeq==0.2.3 \\\n  torch-fidelity==0.3.0 \\\n  torchmetrics==0.11.0 \\\n  tqdm==4.64.1 \\\n  wandb==0.13.5 \\\n  scipy==1.9.3 \\\n  scikit-learn==1.1.3 \\\n  Pillow==9.3.0 \\\n  numpy==1.23.5 \\\n  matplotlib==3.6.2 \\\n  hydra-core==1.2.0 \\\n  pytorch-lightning==1.9.0 \\\n  ninja==1.11.1","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:41:18.435914Z","iopub.execute_input":"2025-03-25T14:41:18.436253Z","iopub.status.idle":"2025-03-25T14:42:02.439423Z","shell.execute_reply.started":"2025-03-25T14:41:18.436220Z","shell.execute_reply":"2025-03-25T14:42:02.438513Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Pretrained ciphar10 ","metadata":{}},{"cell_type":"code","source":"cd PSLD","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:12:36.168291Z","iopub.execute_input":"2025-03-25T11:12:36.168571Z","iopub.status.idle":"2025-03-25T11:12:36.174136Z","shell.execute_reply.started":"2025-03-25T11:12:36.168551Z","shell.execute_reply":"2025-03-25T11:12:36.173388Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!python main/eval/sample.py +dataset=cifar10/cifar10_psld \\\n                     dataset.diffusion.model.score_fn.in_ch=6 \\\n                     dataset.diffusion.model.score_fn.out_ch=6 \\\n                     dataset.diffusion.model.score_fn.nf=128 \\\n                     dataset.diffusion.model.score_fn.ch_mult=[2,2,2] \\\n                     dataset.diffusion.model.score_fn.num_res_blocks=4 \\\n                     dataset.diffusion.model.score_fn.attn_resolutions=[16] \\\n                     dataset.diffusion.model.score_fn.dropout=0.15 \\\n                     dataset.diffusion.model.score_fn.progressive_input='Residual' \\\n                     dataset.diffusion.model.score_fn.fir=True \\\n                     dataset.diffusion.model.score_fn.embedding_type='Fourier' \\\n                     dataset.diffusion.model.sde.beta_min=8.0 \\\n                     dataset.diffusion.model.sde.beta_max=8.0 \\\n                     dataset.diffusion.model.sde.nu=4.01 \\\n                     dataset.diffusion.model.sde.gamma=0.01 \\\n                     dataset.diffusion.model.sde.kappa=0.04 \\\n                     dataset.diffusion.model.sde.decomp_mode='lower' \\\n                     dataset.diffusion.evaluation.seed=0 \\\n                     dataset.diffusion.evaluation.sample_prefix='ciphar_10' \\\n                     dataset.diffusion.evaluation.devices=2 \\\n                     dataset.diffusion.evaluation.save_path=\"/kaggle/working/ciphar_10\" \\\n                     dataset.diffusion.evaluation.batch_size=16 \\\n                     dataset.diffusion.evaluation.stride_type='uniform' \\\n                     dataset.diffusion.evaluation.sample_from='target' \\\n                     dataset.diffusion.evaluation.workers=1 \\\n                     dataset.diffusion.evaluation.chkpt_path=\"/kaggle/input/psld-pretrained/psld_hsm_gamma0.01_nu4.01_cifar10_continuous_sfnncsnpp_nparams55M.ckpt\" \\\n                     dataset.diffusion.evaluation.sampler.name=\"em_sde\" \\\n                     dataset.diffusion.evaluation.n_samples=50000 \\\n                     dataset.diffusion.evaluation.n_discrete_steps=50 \\\n                     dataset.diffusion.evaluation.path_prefix=\"50\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:13:06.029774Z","iopub.execute_input":"2025-03-25T11:13:06.030072Z","iopub.status.idle":"2025-03-25T14:04:03.886213Z","shell.execute_reply.started":"2025-03-25T11:13:06.030050Z","shell.execute_reply":"2025-03-25T14:04:03.885075Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ls ../ciphar_10/50/images","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!zip -r /kaggle/working/ciphar_10.zip /kaggle/working/ciphar_10","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:04:30.965004Z","iopub.execute_input":"2025-03-25T14:04:30.965278Z","iopub.status.idle":"2025-03-25T14:04:38.693101Z","shell.execute_reply.started":"2025-03-25T14:04:30.965255Z","shell.execute_reply":"2025-03-25T14:04:38.692278Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## FID between real Ciphar 10 and generated ciphar 10","metadata":{}},{"cell_type":"code","source":"!pip install pytorch-fid","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:42:02.441359Z","iopub.execute_input":"2025-03-25T14:42:02.441619Z","iopub.status.idle":"2025-03-25T14:42:06.312152Z","shell.execute_reply.started":"2025-03-25T14:42:02.441597Z","shell.execute_reply":"2025-03-25T14:42:06.311239Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pickle\nimport numpy as np\nimport os\nfrom PIL import Image\n\n# Hàm tải dữ liệu từ file pickle\ndef load_cifar_batch(filename):\n    with open(filename, 'rb') as f:\n        datadict = pickle.load(f, encoding='bytes')\n        X = datadict[b'data']\n        Y = datadict[b'labels']\n        X = X.reshape(-1, 3, 32, 32).transpose(0, 2, 3, 1)  # Chuyển thành [N, 32, 32, 3]\n        return X, Y\n\n# Thư mục lưu ảnh thực tế\nreal_images_dir = '/kaggle/working/cifar10_real'\nos.makedirs(real_images_dir, exist_ok=True)\n\n# Đường dẫn tới thư mục chứa các file pickle CIFAR-10\ndata_dir = '/kaggle/input/ciphar-10/cifar-10-batches-py'\n\n# Danh sách các batch train (data_batch_1 đến data_batch_5)\nbatch_files = [os.path.join(data_dir, f'data_batch_{i}') for i in range(1, 6)]\n\n# Biến để đếm tổng số ảnh\ntotal_images = 0\n\n# Xử lý từng batch trong tập train\nfor batch_file in batch_files:\n    images, labels = load_cifar_batch(batch_file)\n    for i, img in enumerate(images):\n        img = Image.fromarray(img)\n        img.save(f'{real_images_dir}/{total_images + i}.png')\n    total_images += len(images)\n    print(f\"Đã lưu {len(images)} ảnh từ {batch_file}\")\n\nprint(f\"Đã lưu tổng cộng {total_images} ảnh từ tập train CIFAR-10 vào {real_images_dir}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:42:06.315356Z","iopub.execute_input":"2025-03-25T14:42:06.315588Z","iopub.status.idle":"2025-03-25T14:42:28.226768Z","shell.execute_reply.started":"2025-03-25T14:42:06.315550Z","shell.execute_reply":"2025-03-25T14:42:28.225560Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Calculate FID in real images and generated images","metadata":{}},{"cell_type":"code","source":"!fidelity --gpu 0 --fid --input1 '/kaggle/working/cifar100_real' --input2 '/kaggle/input/ciphar-10-50000-samples/kaggle/working/ciphar_10/50/images'","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:44:07.097553Z","iopub.execute_input":"2025-03-25T14:44:07.097862Z","iopub.status.idle":"2025-03-25T14:44:11.647600Z","shell.execute_reply.started":"2025-03-25T14:44:07.097839Z","shell.execute_reply":"2025-03-25T14:44:11.646516Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!python -m pytorch_fid /kaggle/working/cifar10_real '/kaggle/input/ciphar-10-50000-samples/kaggle/working/ciphar_10/50/images'","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T14:45:22.294474Z","iopub.execute_input":"2025-03-25T14:45:22.294843Z","iopub.status.idle":"2025-03-25T14:52:31.701697Z","shell.execute_reply.started":"2025-03-25T14:45:22.294813Z","shell.execute_reply":"2025-03-25T14:52:31.700833Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Pretrained CelebA_64","metadata":{}},{"cell_type":"code","source":"cd PSLD","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!python main/eval/sample.py +dataset=celeba64/celeba64_psld \\\n                     dataset.diffusion.model.score_fn.in_ch=6 \\\n                     dataset.diffusion.model.score_fn.out_ch=6 \\\n                     dataset.diffusion.model.score_fn.nf=128 \\\n                     dataset.diffusion.model.score_fn.ch_mult=[1,2,2,2] \\\n                     dataset.diffusion.model.score_fn.num_res_blocks=4 \\\n                     dataset.diffusion.model.score_fn.attn_resolutions=[16] \\\n                     dataset.diffusion.model.score_fn.dropout=0.1 \\\n                     dataset.diffusion.model.score_fn.progressive_input='residual' \\\n                     dataset.diffusion.model.score_fn.fir=True \\\n                     dataset.diffusion.model.score_fn.embedding_type='fourier' \\\n                     dataset.diffusion.model.sde.beta_min=8.0 \\\n                     dataset.diffusion.model.sde.beta_max=8.0 \\\n                     dataset.diffusion.model.sde.nu=4.005 \\\n                     dataset.diffusion.model.sde.gamma=0.005 \\\n                     dataset.diffusion.model.sde.kappa=0.04 \\\n                     dataset.diffusion.model.sde.decomp_mode='lower' \\\n                     dataset.diffusion.evaluation.seed=0 \\\n                     dataset.diffusion.evaluation.sample_prefix='celeba64' \\\n                     dataset.diffusion.evaluation.devices=2 \\\n                     dataset.diffusion.evaluation.save_path='/kaggle/working/celeba_64' \\\n                     dataset.diffusion.evaluation.batch_size=16 \\\n                     dataset.diffusion.evaluation.stride_type='uniform' \\\n                     dataset.diffusion.evaluation.sample_from='target' \\\n                     dataset.diffusion.evaluation.workers=1 \\\n                     dataset.diffusion.evaluation.chkpt_path='/kaggle/input/pretrained-celeba64/psld_hsm_gamma0.005_nu4.005_celeba64_continuous_sfnncsnpp_nparams62M.ckpt' \\\n                     dataset.diffusion.evaluation.sampler.name=\"em_sde\" \\\n                     dataset.diffusion.evaluation.n_samples=2000 \\\n                     dataset.diffusion.evaluation.n_discrete_steps=1000 \\\n                     dataset.diffusion.evaluation.path_prefix=\"50\"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!zip -r /kaggle/working/celeba_64 /kaggle/working/celeba_64","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Pretrained Ciphar 100","metadata":{}},{"cell_type":"code","source":"cd PSLD","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T13:19:32.697954Z","iopub.execute_input":"2025-03-24T13:19:32.698323Z","iopub.status.idle":"2025-03-24T13:19:32.704645Z","shell.execute_reply.started":"2025-03-24T13:19:32.698289Z","shell.execute_reply":"2025-03-24T13:19:32.703828Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!python main/eval/sample.py +dataset=cifar100/cifar100_psld \\\n                     dataset.diffusion.model.score_fn.in_ch=6 \\\n                     dataset.diffusion.model.score_fn.out_ch=6 \\\n                     dataset.diffusion.model.score_fn.nf=128 \\\n                     dataset.diffusion.model.score_fn.ch_mult=[2,2,2] \\\n                     dataset.diffusion.model.score_fn.num_res_blocks=4 \\\n                     dataset.diffusion.model.score_fn.attn_resolutions=[16] \\\n                     dataset.diffusion.model.score_fn.dropout=0.15 \\\n                     dataset.diffusion.model.score_fn.progressive_input='Residual' \\\n                     dataset.diffusion.model.score_fn.fir=True \\\n                     dataset.diffusion.model.score_fn.embedding_type='Fourier' \\\n                     dataset.diffusion.model.sde.beta_min=8.0 \\\n                     dataset.diffusion.model.sde.beta_max=8.0 \\\n                     dataset.diffusion.model.sde.nu=4.01 \\\n                     dataset.diffusion.model.sde.gamma=0.01 \\\n                     dataset.diffusion.model.sde.kappa=0.04 \\\n                     dataset.diffusion.model.sde.decomp_mode='lower' \\\n                     dataset.diffusion.evaluation.seed=0 \\\n                     dataset.diffusion.evaluation.sample_prefix='ciphar_100' \\\n                     dataset.diffusion.evaluation.devices=2 \\\n                     dataset.diffusion.evaluation.save_path=\"/kaggle/working/ciphar_100\" \\\n                     dataset.diffusion.evaluation.batch_size=16 \\\n                     dataset.diffusion.evaluation.stride_type='uniform' \\\n                     dataset.diffusion.evaluation.sample_from='target' \\\n                     dataset.diffusion.evaluation.workers=1 \\\n                     dataset.diffusion.evaluation.chkpt_path=\"/kaggle/input/psld-pretrained/psld_hsm_gamma0.01_nu4.01_cifar10_continuous_sfnncsnpp_nparams55M.ckpt\" \\\n                     dataset.diffusion.evaluation.sampler.name=\"em_sde\" \\\n                     dataset.diffusion.evaluation.n_samples=5000 \\\n                     dataset.diffusion.evaluation.n_discrete_steps=500 \\\n                     dataset.diffusion.evaluation.path_prefix=\"50\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T13:19:38.819520Z","iopub.execute_input":"2025-03-24T13:19:38.819831Z","iopub.status.idle":"2025-03-24T16:12:14.005346Z","shell.execute_reply.started":"2025-03-24T13:19:38.819808Z","shell.execute_reply":"2025-03-24T16:12:14.004110Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!zip -r /kaggle/working/ciphar_100 /kaggle/working/ciphar_100","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:18:51.459590Z","iopub.execute_input":"2025-03-24T16:18:51.459916Z","iopub.status.idle":"2025-03-24T16:18:52.356105Z","shell.execute_reply.started":"2025-03-24T16:18:51.459892Z","shell.execute_reply":"2025-03-24T16:18:52.355342Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Download ciphar 100","metadata":{}},{"cell_type":"code","source":"!wget https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:12:49.023253Z","iopub.execute_input":"2025-03-24T16:12:49.023584Z","iopub.status.idle":"2025-03-24T16:12:51.558244Z","shell.execute_reply.started":"2025-03-24T16:12:49.023559Z","shell.execute_reply":"2025-03-24T16:12:51.557295Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!tar -xvzf cifar-100-python.tar.gz -C /kaggle/working/","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:16:12.740118Z","iopub.execute_input":"2025-03-24T16:16:12.740482Z","iopub.status.idle":"2025-03-24T16:16:14.758951Z","shell.execute_reply.started":"2025-03-24T16:16:12.740456Z","shell.execute_reply":"2025-03-24T16:16:14.758084Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cd ..","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:16:33.046087Z","iopub.execute_input":"2025-03-24T16:16:33.046442Z","iopub.status.idle":"2025-03-24T16:16:33.052606Z","shell.execute_reply.started":"2025-03-24T16:16:33.046417Z","shell.execute_reply":"2025-03-24T16:16:33.051818Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ls","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:16:38.931507Z","iopub.execute_input":"2025-03-24T16:16:38.931837Z","iopub.status.idle":"2025-03-24T16:16:39.050864Z","shell.execute_reply.started":"2025-03-24T16:16:38.931810Z","shell.execute_reply":"2025-03-24T16:16:39.049684Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pickle\nimport numpy as np\nimport os\nfrom PIL import Image\n\n# Hàm tải dữ liệu từ file pickle của CIFAR-100\ndef load_cifar100_batch(filename):\n    with open(filename, 'rb') as f:\n        datadict = pickle.load(f, encoding='bytes')\n        X = datadict[b'data']  # Dữ liệu ảnh\n        Y = datadict[b'fine_labels']  # Nhãn chi tiết (100 lớp)\n        # Chuyển từ [N, 3072] sang [N, 32, 32, 3]\n        X = X.reshape(-1, 3, 32, 32).transpose(0, 2, 3, 1)\n        return X, Y\n\n# Thư mục lưu ảnh thực tế\nreal_images_dir = '/kaggle/working/cifar100_real'\nos.makedirs(real_images_dir, exist_ok=True)\n\n# Đường dẫn tới file pickle CIFAR-100 (train)\nbatch_file = '/kaggle/working/cifar-100-python/train'  # File train từ CIFAR-100\nimages, labels = load_cifar100_batch(batch_file)\n\n# Lưu ảnh dưới dạng PNG\nfor i, img in enumerate(images):\n    img = Image.fromarray(img)\n    img.save(f'{real_images_dir}/{i}.png')\n\nprint(f\"Đã lưu {len(images)} ảnh từ CIFAR-100 (train) vào {real_images_dir}\")\n\n# (Tùy chọn) Chuyển file test nếu cần\ntest_file = '/kaggle/working/cifar-100-python/test'  # File test từ CIFAR-100\ntest_images, test_labels = load_cifar100_batch(test_file)\n\nfor i, img in enumerate(test_images):\n    img = Image.fromarray(img)\n    img.save(f'{real_images_dir}/test_{i}.png')\n\nprint(f\"Đã lưu {len(test_images)} ảnh từ CIFAR-100 (test) vào {real_images_dir}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:19:56.291961Z","iopub.execute_input":"2025-03-24T16:19:56.292305Z","iopub.status.idle":"2025-03-24T16:20:18.928442Z","shell.execute_reply.started":"2025-03-24T16:19:56.292276Z","shell.execute_reply":"2025-03-24T16:20:18.927551Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!python -m pytorch_fid /kaggle/working/cifar100_real /kaggle/working/ciphar_100/50/images","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:27:26.805301Z","iopub.execute_input":"2025-03-24T16:27:26.805609Z","iopub.status.idle":"2025-03-24T16:32:52.422090Z","shell.execute_reply.started":"2025-03-24T16:27:26.805586Z","shell.execute_reply":"2025-03-24T16:32:52.421258Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!fidelity --gpu 0 --fid --input1 /kaggle/working/cifar100_real --input2 kaggle/working/ciphar_100/50/images","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-24T16:20:41.362749Z","iopub.execute_input":"2025-03-24T16:20:41.363064Z","iopub.status.idle":"2025-03-24T16:25:23.923416Z","shell.execute_reply.started":"2025-03-24T16:20:41.363030Z","shell.execute_reply":"2025-03-24T16:25:23.922281Z"}},"outputs":[],"execution_count":null}]}