DiffMorpher / main.py
qninhdt's picture
Upload 53 files
bf63092 verified
import os
import torch
import numpy as np
import cv2
from PIL import Image
from argparse import ArgumentParser
from model import DiffMorpherPipeline
parser = ArgumentParser()
parser.add_argument(
"--model_path", type=str, default="stabilityai/stable-diffusion-2-1-base",
help="Pretrained model to use (default: %(default)s)"
)
parser.add_argument(
"--image_path_0", type=str, default="",
help="Path of the first image (default: %(default)s)")
parser.add_argument(
"--prompt_0", type=str, default="",
help="Prompt of the second image (default: %(default)s)")
parser.add_argument(
"--image_path_1", type=str, default="",
help="Path of the first image (default: %(default)s)")
parser.add_argument(
"--prompt_1", type=str, default="",
help="Prompt of the second image (default: %(default)s)")
parser.add_argument(
"--output_path", type=str, default="./results",
help="Path of the output image (default: %(default)s)"
)
parser.add_argument(
"--save_lora_dir", type=str, default="./lora",
help="Path of the output lora directory (default: %(default)s)"
)
parser.add_argument(
"--load_lora_path_0", type=str, default="",
help="Path of the lora directory of the first image (default: %(default)s)"
)
parser.add_argument(
"--load_lora_path_1", type=str, default="",
help="Path of the lora directory of the second image (default: %(default)s)"
)
parser.add_argument(
"--use_adain", action="store_true",
help="Use AdaIN (default: %(default)s)"
)
parser.add_argument(
"--use_reschedule", action="store_true",
help="Use reschedule sampling (default: %(default)s)"
)
parser.add_argument(
"--lamb", type=float, default=0.6,
help="Lambda for self-attention replacement (default: %(default)s)"
)
parser.add_argument(
"--fix_lora_value", type=float, default=None,
help="Fix lora value (default: LoRA Interp., not fixed)"
)
parser.add_argument(
"--save_inter", action="store_true",
help="Save intermediate results (default: %(default)s)"
)
parser.add_argument(
"--num_frames", type=int, default=16,
help="Number of frames to generate (default: %(default)s)"
)
parser.add_argument(
"--duration", type=int, default=100,
help="Duration of each frame (default: %(default)s ms)"
)
parser.add_argument(
"--no_lora", action="store_true"
)
args = parser.parse_args()
os.makedirs(args.output_path, exist_ok=True)
pipeline = DiffMorpherPipeline.from_pretrained(
args.model_path, torch_dtype=torch.float32)
pipeline.to("cuda")
images = pipeline(
img_path_0=args.image_path_0,
img_path_1=args.image_path_1,
prompt_0=args.prompt_0,
prompt_1=args.prompt_1,
save_lora_dir=args.save_lora_dir,
load_lora_path_0=args.load_lora_path_0,
load_lora_path_1=args.load_lora_path_1,
use_adain=args.use_adain,
use_reschedule=args.use_reschedule,
lamd=args.lamb,
output_path=args.output_path,
num_frames=args.num_frames,
fix_lora=args.fix_lora_value,
save_intermediates=args.save_inter,
use_lora=not args.no_lora
)
images[0].save(f"{args.output_path}/output.gif", save_all=True,
append_images=images[1:], duration=args.duration, loop=0)