qic999's picture
Upload folder using huggingface_hub
28e6f98 verified
Raw
History Blame Contribute Delete
5.21 kB
from diffusion_pytorch import GaussianDiffusion, Trainer, Model
from Fid import calculate_fid_given_samples
import torchvision
import os
import errno
import shutil
import argparse
def create_folder(path):
try:
os.mkdir(path)
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
pass
def del_folder(path):
try:
shutil.rmtree(path)
except OSError as exc:
pass
create = 0
if create:
trainset = torchvision.datasets.CIFAR10(
root='./data', train=False, download=True)
root = './root_cifar10_test/'
del_folder(root)
create_folder(root)
for i in range(10):
lable_root = root + str(i) + '/'
create_folder(lable_root)
for idx in range(len(trainset)):
img, label = trainset[idx]
print(idx)
img.save(root + str(label) + '/' + str(idx) + '.png')
parser = argparse.ArgumentParser()
parser.add_argument('--time_steps', default=50, type=int)
parser.add_argument('--sample_steps', default=None, type=int)
parser.add_argument('--kernel_std', default=0.1, type=float)
parser.add_argument('--save_folder', default='progression_cifar', type=str)
parser.add_argument('--load_path', default='/cmlscratch/eborgnia/cold_diffusion/paper_defading_random_1/model.pt', type=str)
parser.add_argument('--data_path', default='./root_cifar10_test/', type=str)
parser.add_argument('--test_type', default='test_paper_showing_diffusion_images_diff', type=str)
parser.add_argument('--fade_routine', default='Random_Incremental', type=str)
parser.add_argument('--sampling_routine', default='x0_step_down', type=str)
parser.add_argument('--remove_time_embed', action="store_true")
parser.add_argument('--discrete', action="store_true")
parser.add_argument('--residual', action="store_true")
args = parser.parse_args()
print(args)
img_path=None
if 'train' in args.test_type:
img_path = args.data_path
elif 'test' in args.test_type:
img_path = args.data_path
print("Img Path is ", img_path)
image_channels = 1
if model_name == "unet":
model = Model(resolution=args.image_size,
in_channels=1,
out_ch=1,
ch=128,
ch_mult=(1, 2, 2, 2),
num_res_blocks=2,
attn_resolutions=(16,),
dropout=0.1).cuda()
elif model_name == "twounet":
model = TwoBranchNewModel(resolution=args.image_size,
in_channels=1,
out_ch=1,
ch=128,
ch_mult=(1, 2, 2, 2),
num_res_blocks=2,
attn_resolutions=(16,),
dropout=0.1).cuda()
elif model_name == "twobranch":
downsample = [4, 4, 4]
disc_channels = 64
disc_layers = 3
discriminator_iter_start = 10000
disc_loss_type = "hinge"
image_gan_weight = 1.0
video_gan_weight = 1.0
l1_weight = 4.0
gan_feat_weight = 4.0
perceptual_weight = 4.0
i3d_feat = False
restart_thres = 1.0
no_random_restart = False
norm_type = "group"
padding_type = "replicate"
num_groups = 32
base_num_every_group = 2
num_features = 64
act = "PReLU"
num_channels = 1
model = TwoBranchModel(
image_channels,
disc_channels, disc_layers, disc_loss_type,
gan_feat_weight, image_gan_weight,
discriminator_iter_start,
perceptual_weight, l1_weight,
num_features, act, base_num_every_group, num_channels
).cuda()
diffusion = GaussianDiffusion(
diffusion_type,
model,
image_size=args.image_size, # Used to be 32
channels=image_channels,
device_of_kernel='cuda',
timesteps=args.time_steps,
loss_type=args.loss_type, #$'l1',
kernel_std=args.kernel_std,
fade_routine=args.fade_routine,
sampling_routine=args.sampling_routine,
discrete=args.discrete
).cuda()
trainer = Trainer(
diffusion,
img_path,
image_size = 32,
train_batch_size = 32,
train_lr = 2e-5,
train_num_steps = 700000, # total training steps
gradient_accumulate_every = 2, # gradient accumulation steps
ema_decay = 0.995, # exponential moving average decay
fp16 = False, # turn on mixed precision training with apex
results_folder = args.save_folder,
load_path = args.load_path
)
if args.test_type == 'train_data':
trainer.test_from_data('train', s_times=args.sample_steps)
elif args.test_type == 'test_data':
trainer.test_from_data('test', s_times=args.sample_steps)
elif args.test_type == 'mixup_train_data':
trainer.test_with_mixup('train')
elif args.test_type == 'mixup_test_data':
trainer.test_with_mixup('test')
elif args.test_type == 'test_random':
trainer.test_from_random('random')
elif args.test_type == 'test_fid_distance_decrease_from_manifold':
trainer.fid_distance_decrease_from_manifold(calculate_fid_given_samples, start=0, end=None)
elif args.test_type == 'test_paper_invert_section_images':
trainer.paper_invert_section_images()
elif args.test_type == 'test_paper_showing_diffusion_images_diff':
trainer.paper_showing_diffusion_images()