Studiogan adalah perpustakaan Pytorch yang menyediakan implementasi dari Jaringan Perwakilan Generatif Perwakilan (GANS) untuk pembuatan gambar bersyarat/tanpa syarat. Studiogan bertujuan untuk menawarkan taman bermain yang identik untuk gans modern sehingga peneliti pembelajaran mesin dapat dengan mudah membandingkan dan menganalisis ide baru.
Selain itu , Studiogan memberikan tolok ukur skala yang belum pernah terjadi sebelumnya untuk model generatif. Benchmark mencakup hasil dari GANS (Biggan-Deep, StyleGan-XL), model regresif auto (maskgit, rq-transformer), dan model difusi (LSGM ++, CLD-SGM, ADM-GU).
| Metode | Lokasi | Arsitektur | GC | Dc | Kehilangan | Ema |
|---|---|---|---|---|---|---|
| DCGAN | arxiv'15 | Dcgan/resnetgan 1 | N/a | N/a | Vanila | PALSU |
| Infogan | Nips'16 | Dcgan/resnetgan 1 | N/a | N/a | Vanila | PALSU |
| LSGAN | Iccv'17 | Dcgan/resnetgan 1 | N/a | N/a | SQAURE terkecil | PALSU |
| Ggan | arxiv'17 | Dcgan/resnetgan 1 | N/a | N/a | Engsel | PALSU |
| WGAN-WC | Iclr'17 | Resnetgan | N/a | N/a | Wasserstein | PALSU |
| Wgan-gp | Nips'17 | Resnetgan | N/a | N/a | Wasserstein | PALSU |
| WGAN-DRA | arxiv'17 | Resnetgan | N/a | N/a | Wasserstein | PALSU |
| ACGAN-MOD 2 | - | Resnetgan | CBN | Ac | Engsel | PALSU |
| PDGAN | Iclr'18 | Resnetgan | CBN | PD | Engsel | PALSU |
| Sngan | Iclr'18 | Resnetgan | CBN | PD | Engsel | PALSU |
| Sagan | Icml'19 | Resnetgan | CBN | PD | Engsel | PALSU |
| Tacgan | Neurips'19 | Biggan | CBN | Tac | Engsel | BENAR |
| LGAN | Icml'19 | Resnetgan | N/a | N/a | Vanila | PALSU |
| Biggan tanpa syarat | Iclr'19 | Biggan | N/a | N/a | Engsel | BENAR |
| Biggan | Iclr'19 | Biggan | CBN | PD | Engsel | BENAR |
| Biggan-Deep-Comparegan | Iclr'19 | Biggan-Deep Comparegan | CBN | PD | Engsel | BENAR |
| Biggan-Deep-Studiogan | - | Biggan-Deep Studiogan | CBN | PD | Engsel | BENAR |
| StyleGan2 | CVPR '20 | StyleGan2 | Cadain | Spd | Logistik | BENAR |
| Crgan | Iclr'20 | Biggan | CBN | PD | Engsel | BENAR |
| ICRGAN | Aaai'21 | Biggan | CBN | PD | Engsel | BENAR |
| Logan | arxiv'19 | Resnetgan | CBN | PD | Engsel | BENAR |
| Contragan | Neurips'20 | Biggan | CBN | 2c | Engsel | BENAR |
| Mhgan | Wacv'21 | Biggan | CBN | MH | MH | BENAR |
| Biggan + Diffaugment | Neurips'20 | Biggan | CBN | PD | Engsel | BENAR |
| StyleGan2 + Ada | Neurips'20 | StyleGan2 | Cadain | Spd | Logistik | BENAR |
| Biggan + Lecam | CVPR'2021 | Biggan | CBN | PD | Engsel | BENAR |
| Reacgan | Neurips'21 | Biggan | CBN | D2D-CE | Engsel | BENAR |
| StyleGan2 + APA | Neurips'21 | StyleGan2 | Cadain | Spd | Logistik | BENAR |
| Stylegan3-t | Neurips'21 | Stylegan3 | caain | Spd | Logistik | BENAR |
| Stylegan3-r | Neurips'21 | Stylegan3 | caain | Spd | Logistik | BENAR |
| Adcgan | Icml'22 | Biggan | CBN | ADC | Engsel | BENAR |
GC/DC menunjukkan cara kami menyuntikkan informasi label ke generator atau diskriminator.
EMA: Pembaruan rata -rata bergerak eksponensial ke generator. CBN: Normalisasi batch bersyarat. Cadain: Versi bersyarat normalisasi instan adaptif. AC: Klasifikasi tambahan. PD: Diskriminator Proyeksi. TAC: Klasifikasi Twin Auxiliary. SPD: PD yang dimodifikasi untuk StyleGan. 2C: Kehilangan kontras bersyarat. MH: Kehilangan multi-engsek. ADC: Klasifikasi diskriminatif tambahan. D2D-CE: Data-to-Data Cross-entropy.
| Metode | Lokasi | Arsitektur |
|---|---|---|
| Skor awal (IS) | Neurips'16 | Inceptionv3 |
| Frechet Inception Distance (FID) | Neurips'17 | Inceptionv3 |
| Peningkatan ketepatan & penarikan | Neurips'19 | Inceptionv3 |
| Skor akurasi classifier (CAS) | Neurips'19 | Inceptionv3 |
| Kepadatan & cakupan | Icml'20 | Inceptionv3 |
| Fid intra-kelas | - | Inceptionv3 |
| SWAV FID | Iclr'21 | SWAV |
| Metrik bersih (IS, FID, PRDC) | Cvpr'22 | Inceptionv3 |
| Metrik Ramah Arsitektur (IS, FID, PRDC) | arxiv'22 | Tidak terbatas pada inceptionv3 |
| Metode | Lokasi | Arsitektur Target |
|---|---|---|
| Beku | Cvprw'20 | Kecuali untuk StyleGan2 |
| Pelatihan Top-K | Neurips'2020 | - |
| DDLS | Neurips'2020 | - |
| Sefa | CVPR'2021 | Biggan |
Kami memeriksa reproduktifitas GANS yang diimplementasikan di Studiogan dengan membandingkan IS dan FID dengan makalah asli. Kami mengidentifikasi platform kami berhasil mereproduksi sebagian besar GAN Perwakilan kecuali untuk PD-GAN, ACGAN, LOGAN, Sagan, dan Biggan-Deep. FQ berarti dataset flickr-faces-hq (FFHQ). Resolusi dataset Imagenet, AFHQV2, dan FQ masing -masing adalah 128, 512, dan 1024.
Pertama, instal Pytorch Rapat Lingkungan Anda (setidaknya 1,7):
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116Kemudian, gunakan perintah berikut untuk menginstal sisa perpustakaan:
pip install tqdm ninja h5py kornia matplotlib pandas sklearn scipy seaborn wandb PyYaml click requests pyspng imageio-ffmpeg timmDengan Docker, Anda dapat menggunakan (diperbarui 14/dec/2022):
docker pull alex4727/experiment:pytorch113_cuda116Ini adalah perintah kami untuk membuat wadah bernama "Studiogan".
docker run -it --gpus all --shm-size 128g --name StudioGAN -v /path_to_your_folders:/root/code --workdir /root/code alex4727/experiment:pytorch113_cuda116 /bin/zshJika versi driver NVIDIA Anda tidak memenuhi persyaratan, Anda dapat mencoba menambahkan di bawah ini ke perintah di atas.
--env NVIDIA_DISABLE_REQUIRE=true CIFAR10/CIFAR100: Studiogan akan secara otomatis mengunduh dataset setelah Anda menjalankan main.py
Tiny Imagenet, Imagenet, atau Dataset Kustom:
data
└── ImageNet, Tiny_ImageNet, Baby ImageNet, Papa ImageNet, or Grandpa ImageNet
├── train
│ ├── cls0
│ │ ├── train0.png
│ │ ├── train1.png
│ │ └── ...
│ ├── cls1
│ └── ...
└── valid
├── cls0
│ ├── valid0.png
│ ├── valid1.png
│ └── ...
├── cls1
└── ...
Sebelum memulai, pengguna harus login Wandb menggunakan kunci API pribadi mereka.
wandb login PERSONAL_API_KEY Dari rilis 0.3.0, Anda sekarang dapat menentukan metrik evaluasi mana yang akan digunakan melalui opsi -metrics . Tidak menentukan opsi default untuk menghitung FID saja. IE -metrics is fid hanya menghitung adalah dan fid dan -metrics none ada evaluasi.
-t ) dan evaluasi IS, FID, PRC, REC, DNS, CVG ( -metrics is fid prdc ) dari model yang didefinisikan dalam CONFIG_PATH menggunakan GPU 0 . CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -metrics is fid prdc -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH--pre_resizer lanczos ). Kemudian, latih ( -t ) dan evaluasi Friendly-IS, Friendly-Fid, Friendly-PRC, Friendly-Rec, Friendly-DNS, Friendly-CVG ( -metrics is fid prdc --post_resizer clean ) dari model yang ditentukan dalam CONFIG_PATH menggunakan GPU 0 . CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -metrics is fid prdc --pre_resizer lanczos --post_resizer clean -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH-t ) dan evaluasi FID dari model yang didefinisikan dalam CONFIG_PATH melalui DataParallel menggunakan GPU (0, 1, 2, 3) . Evaluasi FID tidak memerlukan argumen ( -metrics )! CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH-t ) dan lewati evaluasi ( -metrics none ) dari model yang didefinisikan dalam CONFIG_PATH melalui DistributedDataParallel menggunakan GPU (0, 1, 2, 3) , Synchronized batch norm , dan Mixed precision . export MASTER_ADDR= " localhost "
export MASTER_PORT=2222
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -metrics none -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -DDP -sync_bn -mpc Coba python3 src/main.py untuk melihat opsi yang tersedia.
Muat semua data dalam memori utama ( -hdf5 -l )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -hdf5 -l -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH DistributedDataParallel (silakan lihat di sini) ( -DDP )
# ## NODE_0, 4_GPUs, All ports are open to NODE_1
~ /code>>> export MASTER_ADDR=PUBLIC_IP_OF_NODE_0
~ /code>>> export MASTER_PORT=AVAILABLE_PORT_OF_NODE_0
~ /code/PyTorch-StudioGAN>>> CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -DDP -tn 2 -cn 0 -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH # ## NODE_1, 4_GPUs, All ports are open to NODE_0
~ /code>>> export MASTER_ADDR=PUBLIC_IP_OF_NODE_0
~ /code>>> export MASTER_PORT=AVAILABLE_PORT_OF_NODE_0
~ /code/PyTorch-StudioGAN>>> CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -DDP -tn 2 -cn 1 -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH Pelatihan Presisi Campuran ( -mpc )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -mpc -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATHUbah statistik normalisasi batch
# Synchronized batchNorm (-sync_bn)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -sync_bn -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH
# Standing statistics (-std_stat, -std_max, -std_step)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -std_stat -std_max STD_MAX -std_step STD_STEP -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH
# Batch statistics (-batch_stat)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -batch_stat -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHTrik pemotongan
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py --truncation_factor TRUNCATION_FACTOR -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH Ddls ( -lgv -lgv_rate -lgv_std -lgv_decay -lgv_decay_steps -lgv_steps )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -lgv -lgv_rate LGV_RATE -lgv_std LGV_STD -lgv_decay LGV_DECAY -lgv_decay_steps LGV_DECAY_STEPS -lgv_steps LGV_STEPS -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH Beku Diskriminator ( -freezeD )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t --freezeD FREEZED -ckpt SOURCE_CKPT -cfg TARGET_CONFIG_PATH -data DATA_PATH -save SAVE_PATH Studiogan mendukung Image visualization, K-nearest neighbor analysis, Linear interpolation, Frequency analysis, TSNE analysis, and Semantic factorization . Semua hasil akan disimpan di SAVE_DIR/figures/RUN_NAME/*.png .
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -v -cfg CONFIG_PATH -ckpt CKPT -save SAVE_DIR
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -knn -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -itp -cfg CONFIG_PATH -ckpt CKPT -save SAVE_DIRCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -fa -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -tsne -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -sefa -sefa_axis SEFA_AXIS -sefa_max SEFA_MAX -cfg CONFIG_PATH -ckpt CKPT -save SAVE_PATHStudiogan mendukung pelatihan 30 gans perwakilan dari DCGAN ke StyleGan3-R.
Kami menggunakan skrip yang berbeda tergantung pada dataset dan model, dan itu sebagai berikut:
CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -hdf5 -l -std_stat -std_max STD_MAX -std_step STD_STEP -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --post_resizer " friendly " --eval_backbone " InceptionV3_tf "CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -hdf5 -l -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --post_resizer " friendly " --eval_backbone " InceptionV3_tf "CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -hdf5 -l -sync_bn -std_stat -std_max STD_MAX -std_step STD_STEP -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " export MASTER_ADDR= " localhost "
export MASTER_PORT=8888
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " export MASTER_ADDR= " localhost "
export MASTER_PORT=8888
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python3 src/main.py -t -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " Studiogan mendukung skor awal, jarak awal Frechet, peningkatan presisi dan penarikan, kepadatan dan cakupan, FID intra-kelas, skor akurasi classifier. Pengguna bisa mendapatkan skor Intra-Class FID, Classifier Accuracy Score skor akurasi menggunakan -iFID, -GAN_train, and -GAN_test OPSI, masing -masing.
Pengguna dapat mengubah tulang punggung evaluasi dari InceptionV3 ke RESNET50, SWAV, DINO, atau SWIN Transformer menggunakan --eval_backbone ResNet50_torch, SwAV_torch, DINO_torch, or Swin-T_torch .
Selain itu, pengguna dapat menghitung metrik dengan pemisahan yang bersih atau ramah arsitektur menggunakan --post_resizer clean or friendly .
Skor Inception (IS) adalah metrik untuk mengukur berapa banyak GAN menghasilkan fidelititas tinggi dan beragam gambar. Menghitung IS membutuhkan jaringan awal-V3 pra-terlatih. Perhatikan bahwa kami tidak membagi dataset menjadi sepuluh lipatan untuk dihitung adalah sepuluh kali.
FID adalah metrik yang banyak digunakan untuk mengevaluasi kinerja model GAN. Menghitung FID membutuhkan jaringan inception-V3 pra-terlatih, dan pendekatan modern menggunakan FID berbasis TensorFlow. Studiogan menggunakan FID yang berbasis di Pytorch untuk menguji model GAN di lingkungan Pytorch yang sama. Kami menunjukkan bahwa implementasi FID berbasis Pytorch memberikan hasil yang hampir sama dengan implementasi TensorFlow (lihat Lampiran F dari Paper Contragan).
Presisi dan penarikan yang lebih baik dikembangkan untuk menebus kekurangan presisi dan penarikan. Seperti IS, FID, menghitung presisi dan penarikan yang lebih baik membutuhkan model awal-V3 terlatih. Studiogan menggunakan implementasi Pytorch yang disediakan oleh pengembang skor kepadatan dan cakupan.
Metrik kepadatan dan cakupan dapat memperkirakan kesetiaan dan keragaman gambar yang dihasilkan menggunakan model Inception-V3 pra-terlatih. Metrik diketahui kuat untuk outlier, dan mereka dapat mendeteksi distribusi nyata dan palsu yang identik. Studiogan menggunakan implementasi Pytorch resmi penulis, dan Studiogan mengikuti saran penulis untuk pemilihan hyperparameter.
Kami melaporkan yang terbaik adalah, FID, presisi & penarikan yang lebih baik, dan kepadatan & cakupan GANS.
Untuk mengunduh semua pos pemeriksaan yang dilaporkan di Studiogan, silakan klik di sini (HUBGING FACE HUB).
Anda dapat mengevaluasi pos pemeriksaan dengan menambahkan -ckpt CKPT_PATH opsi dengan jalur konfigurasi yang sesuai -cfg CORRESPONDING_CONFIG_PATH .
Resolusi CIFAR10, Baby Imagenet, Papa Imagenet, Kakek Imagenet, Imagenet, AFHQV2, dan FQ masing -masing adalah 32, 64, 64, 64, 128, 512, dan 1024.
Kami menggunakan jumlah yang sama dari gambar yang dihasilkan seperti gambar pelatihan untuk Frechet Inception Distance (FID), Precision, Recall, Density, dan Cakupan Perhitungan. Untuk percobaan yang menggunakan bayi/papa/kakek Imagenet dan Imagenet, kami secara luar biasa menggunakan gambar palsu 50k terhadap pelatihan lengkap yang ditetapkan sebagai gambar nyata.
Semua fitur dan momen set data referensi dapat diunduh melalui fitur dan momen .
Resolusi Imagenet-128 dan Imagenet 256 masing-masing adalah 128 dan 256.
Semua gambar yang digunakan untuk benchmark dapat diunduh melalui satu drive (akan segera diunggah).
-metrics is fid prdc ) dari folder gambar (sudah preprosesed) disimpan dalam DSET1 dan DSET2 menggunakan GPU (0,...,N) . CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --dset1 DSET1 --dset2 DSET2-metrics is fid prdc ) dari folder gambar yang disimpan dalam DSET2 menggunakan fitur yang telah dikomputasi ( --dset1_feats DSET1_FEATS ), momen dset1 ( --dset1_moments DSET1_MOMENTS ), dan gpus (0,...,N) CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --dset1_feats DSET1_FEATS --dset1_moments DSET1_MOMENTS --dset2 DSET2-metrics is fid prdc --post_resizer friendly ) dari folder gambar yang disimpan dalam DSET1 dan DSET2 melalui DistributedDataParallel menggunakan GPU (0,...,N) . export MASTER_ADDR= " localhost "
export MASTER_PORT=2222
CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --post_resizer friendly --dset1 DSET1 --dset2 DSET2 -DDP[Lisensi MIT] Batchnorm yang disinkronkan: https://github.com/vacancy/synchronized-batchnorm-pytorch
[Lisensi MIT] Modul swadaya: https://github.com/voletiv/self-attention-gan-pytorch
[Lisensi MIT] Diffaugment: https://github.com/mit-han-lab/data-eficient-gans
[Mit_license] pytorch meningkatkan presisi dan penarikan: https://github.com/clovaai/generative-evaluuation-prdc
[Mit_license] kepadatan dan cakupan pytorch: https://github.com/clovaai/generative-evaluuation-prdc
[Lisensi MIT] Pytorch Clean-Fid: https://github.com/gaparmar/clean-fid
[Lisensi Kode Sumber NVIDIA] StyleGan2: https://github.com/nvlabs/stylegan2
[Lisensi Kode Sumber NVIDIA] Augmentasi Diskriminator Adaptif: https://github.com/nvlabs/stylegan2
[Lisensi Apache] Pytorch Fid: https://github.com/mseitzer/pytorch-fid
Pytorch-Studiogan adalah perpustakaan open-source di bawah lisensi MIT (MIT). Namun, bagian dari perpustakaan tersedia di bawah istilah lisensi yang berbeda: StyleGan2, StyleGan2-OA, dan StyleGan3 dilisensikan di bawah lisensi kode sumber NVIDIA, dan Pytorch-Fid dilisensikan di bawah lisensi Apache.
Studiogan didirikan untuk proyek penelitian berikut. Harap kutip pekerjaan kami jika Anda menggunakan Studiogan.
@article { kang2023StudioGANpami ,
title = { {StudioGAN: A Taxonomy and Benchmark of GANs for Image Synthesis} } ,
author = { MinGuk Kang and Joonghyuk Shin and Jaesik Park } ,
journal = { IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI) } ,
year = { 2023 }
} @inproceedings { kang2021ReACGAN ,
title = { {Rebooting ACGAN: Auxiliary Classifier GANs with Stable Training} } ,
author = { Minguk Kang, Woohyeon Shim, Minsu Cho, and Jaesik Park } ,
journal = { Conference on Neural Information Processing Systems (NeurIPS) } ,
year = { 2021 }
} @inproceedings { kang2020ContraGAN ,
title = { {ContraGAN: Contrastive Learning for Conditional Image Generation} } ,
author = { Minguk Kang and Jaesik Park } ,
journal = { Conference on Neural Information Processing Systems (NeurIPS) } ,
year = { 2020 }
}[1] Eksperimen pada imagenet kecil dilakukan dengan menggunakan arsitektur resnet, bukan CNN.
[2] Implementasi ulang ACGAN (ICML'17) kami dengan sedikit modifikasi, yang membawa peningkatan kinerja yang kuat untuk percobaan menggunakan CIFAR10.