Spaces:
Sleeping
Sleeping
| import torch | |
| from diffusers import DDIMScheduler, UNet2DConditionModel | |
| from .pipeline import OneStepLaplacianInpaintPipeline | |
| class DiffusionInpaintPipeline: | |
| """Test inference pipeline wrapper""" | |
| def __init__(self, model_path, device="cuda"): | |
| self.model_path = model_path | |
| self.device = device | |
| self.scheduler = None | |
| self.unet = None | |
| self.pipeline = None | |
| self.load_model() | |
| def load_model(self, base_model="stabilityai/stable-diffusion-2-inpainting"): | |
| """Load model""" | |
| # Set up scheduler | |
| self.scheduler = DDIMScheduler.from_pretrained( | |
| base_model, | |
| subfolder="scheduler", | |
| timestep_spacing="trailing", | |
| prediction_type="v_prediction" | |
| ) | |
| self.scheduler.set_timesteps(1) | |
| # Load UNet model | |
| self.unet = UNet2DConditionModel.from_pretrained( | |
| self.model_path, | |
| subfolder="unet", | |
| torch_dtype=torch.float16 | |
| ) | |
| # Create pipeline | |
| self.pipeline = OneStepLaplacianInpaintPipeline.from_pretrained( | |
| base_model, | |
| torch_dtype=torch.float16, | |
| scheduler=self.scheduler, | |
| unet=self.unet | |
| ) | |
| self.pipeline.to(self.device) | |
| return self.pipeline | |
| def run_inference(self, images, masks, prompts, seed=42): | |
| """Run inference""" | |
| return self.pipeline( | |
| prompts, | |
| image=images, | |
| generator=torch.Generator(device="cpu").manual_seed(seed), | |
| num_inference_steps=1, | |
| mask_image=masks, | |
| guidance_scale=0, | |
| )[0] |