Buckets:
| # Outpainting | |
| Outpainting, bir görüntüyü orijinal sınırlarının ötesine uzatarak, orijinal görüntüyü korurken görsel öğeleri eklemenize, değiştirmenize veya düzenlemenize olanak tanır. [Inpainting](../using-diffusers/inpaint)'de olduğu gibi, orijinal görüntüyü (siyah piksellerden oluşan bir maske ile temsil edilir) koruyarak beyaz alanı (bu durumda, orijinal görüntünün dışındaki alan) yeni görsel öğelerle doldurmak istersiniz. Outpainting için [ControlNet](https://hf.co/blog/OzzyGT/outpainting-controlnet) veya [Differential Diffusion](https://hf.co/blog/OzzyGT/outpainting-differential-diffusion) gibi birkaç yöntem bulunmaktadır. | |
| Bu kılavuz, bir inpainting modeli, ControlNet ve ZoeDepth tahminleyicisi kullanarak outpainting yapmayı size gösterecektir. | |
| Başlamadan önce, ZoeDepth tahmincisini kullanabilmek için [controlnet_aux](https://github.com/huggingface/controlnet_aux) kütüphanesinin yüklü olduğundan emin olun. | |
| ```py | |
| !pip install -q controlnet_aux | |
| ``` | |
| ## Görsel hazırlama | |
| Önce [BRIA-RMBG-1.4](https://hf.co/spaces/briaai/BRIA-RMBG-1.4) gibi bir Space ile arka planı kaldırarak outpaint yapılacak bir görsel seçerek başlayın. | |
| <iframe src="https://briaai-bria-rmbg-1-4.hf.space" frameborder="0" width="850" height="450" | |
| > | |
| Örneğin, bu ayakkabı çiftinin görselinden arka planı kaldırın. | |
| orijinal görüntü | |
| arka plan kaldırıldı | |
| [Stable Diffusion XL (SDXL)](../api/pipelines/stable_diffusion/stable_diffusion_xl) modelleri 1024x1024 boyutundaki görsellerle en iyi sonucu verir, ancak donanımınızın bunu destekleyecek kadar belleğe sahip olması koşuluyla görseli herhangi bir boyuta yeniden boyutlandırabilirsiniz. Görseldeki şeffaf arka planın da beyaz bir arka planla değiştirilmesi gerekir. Görseli ölçekleyip beyaz bir arka plana yapıştıran bir fonksiyon (aşağıdaki gibi) oluşturun. | |
| ```py | |
| import random | |
| import requests | |
| import torch | |
| from controlnet_aux import ZoeDetector | |
| from PIL import Image, ImageOps | |
| from diffusers import ( | |
| AutoencoderKL, | |
| ControlNetModel, | |
| StableDiffusionXLControlNetPipeline, | |
| StableDiffusionXLInpaintPipeline, | |
| ) | |
| def scale_and_paste(original_image): | |
| aspect_ratio = original_image.width / original_image.height | |
| if original_image.width > original_image.height: | |
| new_width = 1024 | |
| new_height = round(new_width / aspect_ratio) | |
| else: | |
| new_height = 1024 | |
| new_width = round(new_height * aspect_ratio) | |
| resized_original = original_image.resize((new_width, new_height), Image.LANCZOS) | |
| white_background = Image.new("RGBA", (1024, 1024), "white") | |
| x = (1024 - new_width) // 2 | |
| y = (1024 - new_height) // 2 | |
| white_background.paste(resized_original, (x, y), resized_original) | |
| return resized_original, white_background | |
| original_image = Image.open( | |
| requests.get( | |
| "https://huggingface.co/datasets/stevhliu/testing-images/resolve/main/no-background-jordan.png", | |
| stream=True, | |
| ).raw | |
| ).convert("RGBA") | |
| resized_img, white_bg_image = scale_and_paste(original_image) | |
| ``` | |
| İstenmeyen ek detayların eklenmesini önlemek için, ayakkabıların orijinal görüntüyle tutarlı kalmasını sağlamak ve üretim sırasında ek yönlendirme sunmak üzere ZoeDepth tahmincisini kullanın. | |
| ```py | |
| zoe = ZoeDetector.from_pretrained("lllyasviel/Annotators") | |
| image_zoe = zoe(white_bg_image, detect_resolution=512, image_resolution=1024) | |
| image_zoe | |
| ``` | |
| ## Outpaint | |
| Görsel hazır olduğunda, inpainting için eğitilmiş bir SDXL ControlNet olan [controlnet-inpaint-dreamer-sdxl](https://hf.co/destitech/controlnet-inpaint-dreamer-sdxl) ile ayakkabıların etrafındaki beyaz alanda içerik üretebilirsiniz. | |
| Inpainting ControlNet, ZoeDepth modelini ve VAE'yi yükleyip bunları [StableDiffusionXLControlNetPipeline](/docs/diffusers/main/tr/api/pipelines/controlnet_sdxl#diffusers.StableDiffusionXLControlNetPipeline) nesnesine iletin. Ardından, başlangıç görselini outpaint etmek için isteğe bağlı bir `generate_image` fonksiyonu (kolaylık sağlamak amacıyla) oluşturabilirsiniz. | |
| ```py | |
| controlnets = [ | |
| ControlNetModel.from_pretrained( | |
| "destitech/controlnet-inpaint-dreamer-sdxl", dtype=torch.float16, variant="fp16" | |
| ), | |
| ControlNetModel.from_pretrained( | |
| "diffusers/controlnet-zoe-depth-sdxl-1.0", dtype=torch.float16 | |
| ), | |
| ] | |
| vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", dtype=torch.float16).to("cuda") # or "mps", "xpu", "cpu" | |
| pipeline = StableDiffusionXLControlNetPipeline.from_pretrained( | |
| "SG161222/RealVisXL_V4.0", dtype=torch.float16, variant="fp16", controlnet=controlnets, vae=vae | |
| ).to("cuda") | |
| def generate_image(prompt, negative_prompt, inpaint_image, zoe_image, seed: int = None): | |
| if seed is None: | |
| seed = random.randint(0, 2**32 - 1) | |
| generator = torch.Generator(device="cpu").manual_seed(seed) | |
| image = pipeline( | |
| prompt, | |
| negative_prompt=negative_prompt, | |
| image=[inpaint_image, zoe_image], | |
| guidance_scale=6.5, | |
| num_inference_steps=25, | |
| generator=generator, | |
| controlnet_conditioning_scale=[0.5, 0.8], | |
| control_guidance_end=[0.9, 0.6], | |
| ).images[0] | |
| return image | |
| prompt = "nike air jordans on a basketball court" | |
| negative_prompt = "" | |
| temp_image = generate_image(prompt, negative_prompt, white_bg_image, image_zoe, 908097) | |
| ``` | |
| Orijinal görüntüyü başlangıçtaki genişletilmiş (outpainted) görüntünün üzerine yapıştırın. Genişletilmiş arka planı sonraki bir adımda iyileştireceksiniz. | |
| ```py | |
| x = (1024 - resized_img.width) // 2 | |
| y = (1024 - resized_img.height) // 2 | |
| temp_image.paste(resized_img, (x, y), resized_img) | |
| temp_image | |
| ``` | |
| > [!TIP] | |
| > Bellek azalıyorsa, biraz bellek boşaltmak için şimdi iyi bir zaman! | |
| > | |
| > ```py | |
| > pipeline=None | |
| > torch.cuda.empty_cache() | |
| > ``` | |
| Şimdi elinizde başlangıç düzeyinde bir outpainting görseli var; daha iyi kalitede nihai outpainting görselini üretmek için [StableDiffusionXLInpaintPipeline](/docs/diffusers/main/tr/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLInpaintPipeline)'ı [RealVisXL](https://hf.co/SG161222/RealVisXL_V4.0) modeliyle yükleyin. | |
| ```py | |
| pipeline = StableDiffusionXLInpaintPipeline.from_pretrained( | |
| "OzzyGT/RealVisXL_V4.0_inpainting", | |
| dtype=torch.float16, | |
| variant="fp16", | |
| vae=vae, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| ``` | |
| Son outpainting görüntüsü için bir maske hazırlayın. Orijinal görüntü ile outpainting arka planı arasında daha doğal bir geçiş oluşturmak için maskenin daha iyi birleşmesine yardımcı olmak üzere maskeyi bulanıklaştırın. | |
| ```py | |
| mask = Image.new("L", temp_image.size) | |
| mask.paste(resized_img.split()[3], (x, y)) | |
| mask = ImageOps.invert(mask) | |
| final_mask = mask.point(lambda p: p > 128 and 255) | |
| mask_blurred = pipeline.mask_processor.blur(final_mask, blur_factor=20) | |
| mask_blurred | |
| ``` | |
| Daha iyi bir prompt oluşturun ve son outpainting görselini üretmek için `generate_outpaint` fonksiyonuna iletin. Tekrar, orijinal görseli son outpainting arka planının üzerine yapıştırın. | |
| ```py | |
| def generate_outpaint(prompt, negative_prompt, image, mask, seed: int = None): | |
| if seed is None: | |
| seed = random.randint(0, 2**32 - 1) | |
| generator = torch.Generator(device="cpu").manual_seed(seed) | |
| image = pipeline( | |
| prompt, | |
| negative_prompt=negative_prompt, | |
| image=image, | |
| mask_image=mask, | |
| guidance_scale=10.0, | |
| strength=0.8, | |
| num_inference_steps=30, | |
| generator=generator, | |
| ).images[0] | |
| return image | |
| prompt = "high quality photo of nike air jordans on a basketball court, highly detailed" | |
| negative_prompt = "" | |
| final_image = generate_outpaint(prompt, negative_prompt, temp_image, mask_blurred, 7688778) | |
| x = (1024 - resized_img.width) // 2 | |
| y = (1024 - resized_img.height) // 2 | |
| final_image.paste(resized_img, (x, y), resized_img) | |
| final_image | |
| ``` | |
Xet Storage Details
- Size:
- 8.04 kB
- Xet hash:
- 7860dc0ac95a7b051eefcb41a166a64075aeb87d41c51a3c112991ca7b8d7a2c
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.