|
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) |
|
|