本地运行StableDiffusionXL输出128x128彩色噪点图像问题
StableDiffusionXL生成128x128彩色噪点问题解决
问题描述
本地通过git lfs clone https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0从HuggingFace下载StableDiffusionXL基础模型,使用diffusers库的StableDiffusionXLPipeline运行,输入提示词"A majestic Trex overlooking a jungle",但最终输出的是128x128的彩色噪点PNG。
运行代码如下:
import torch from diffusers import StableDiffusionXLPipeline import torchvision.transforms as transforms def main(): print(f"CUDA: {torch.cuda.is_available()}") torch.cuda.empty_cache() base_directory = "stable_diffusion/stable-diffusion-xl-base-1.0" # Load base model base = StableDiffusionXLPipeline.from_pretrained( pretrained_model_name_or_path=base_directory, # pretrained_model_or_path=base_directory, #for AutoPipeline torch_dtype=torch.float16, variant="fp16", use_safetensors=True, local_files_only=True, cache_dir="stable_diffusion", ) base.enable_model_cpu_offload() base.enable_xformers_memory_efficient_attention() base.enable_vae_slicing() # Parameters n_steps = 15 high_noise_frac = 0.8 prompt = "A majestic Trex overlooking a jungle" # Generate base image image = base( prompt=prompt, num_inference_steps=n_steps, denoising_end=high_noise_frac, output_type="latent", ).images[0] # Clear GPU cache (again) torch.cuda.empty_cache() # Convert tensor to PIL Image image_pil = transforms.ToPILImage()(image.cpu().squeeze(0)) # Save the image image_pil.save("test_image.png") #Cleanup del base del image del image_pil if __name__ == "__main__": main()
已排查内容
- 确认CUDA可用(通过
torch.cuda.is_available()及任务管理器验证) - 尝试调用
image.save("test.png")时触发AttributeError: 'Tensor' object has no attribute 'save' - 更换为diffusers库的
StableDiffusionPipeline类,问题未解决 - 调整
n_steps和noise fraction参数,仍输出彩色噪点图像
问题原因
- 指定了
output_type="latent",直接输出模型的潜在空间张量(latent),而非解码后的图像; - 添加了
denoising_end=0.8参数,让模型只完成80%的降噪步骤就终止,得到的是未完成降噪的噪点latent; - 直接将latent张量转为图像,而SDXL的latent空间尺寸是128x128,因此输出128x128的噪点图。
解决方案
方案1:直接生成完整图像(无需后续refiner处理)
移除denoising_end和output_type="latent"参数,让模型完成全部降噪流程并直接输出PIL图像:
# Generate base image image = base( prompt=prompt, num_inference_steps=n_steps, ).images[0] # 直接保存图像 image.save("test_image.png")
方案2:保留latent用于后续refiner处理
如果需要配合StableDiffusionXL的refiner模型,需保留output_type="latent",但要移除denoising_end让模型完成完整降噪,之后通过VAE解码latent为图像:
# Generate base image (完成完整降噪,得到latent) image_latent = base( prompt=prompt, num_inference_steps=n_steps, output_type="latent", ).images[0] # 用VAE解码latent为图像张量 image_tensor = base.vae.decode(image_latent / base.vae.config.scaling_factor, return_dict=False)[0] # 张量归一化并转为PIL图像 image_tensor = (image_tensor / 2 + 0.5).clamp(0, 1) image_pil = transforms.ToPILImage()(image_tensor.cpu().squeeze(0)) # 保存图像 image_pil.save("test_image.png")
当前环境依赖版本
accelerate==0.22.0 aiohttp==3.8.5 aiosignal==1.3.1 altgraph==0.17.3 appdirs==1.4.4 art==6.0 async-timeout==4.0.3 attrs==23.1.0 audioread==3.0.0 Brotli==1.0.9 cachetools==5.3.1 certifi==2023.7.22 cffi==1.15.1 charset-normalizer==3.2.0 click==8.1.7 colorama==0.4.6 decorator==4.4.2 diffusers==0.20.2 docker-pycreds==0.4.0 filelock==3.12.3 frozenlist==1.4.0 fsspec==2023.9.0 gitdb==4.0.10 GitPython==3.1.36 google-api-core==2.11.1 google-auth==2.22.0 google-cloud==0.34.0 google-cloud-core==2.3.3 google-cloud-speech==2.21.0 google-cloud-storage==2.10.0 google-crc32c==1.5.0 google-resumable-media==2.5.0 googleapis-common-protos==1.60.0 grpcio==1.57.0 grpcio-status==1.57.0 huggingface-hub==0.17.1 idna==3.4 imageio==2.31.1 imageio-ffmpeg==0.4.8 importlib-metadata==6.8.0 Jinja2==3.1.2 MarkupSafe==2.1.2 moviepy==1.0.3 mpmath==1.2.1 multidict==6.0.4 mutagen==1.46.0 networkx==3.0 numpy==1.25.2 openai==0.27.8 packaging==23.1 pathtools==0.1.2 pefile==2023.2.7 Pillow==10.0.0 pocketsphinx==5.0.2 proglog==0.1.10 proto-plus==1.22.3 protobuf==4.24.0 psutil==5.9.5 setproctitle==1.3.2 six==1.16.0 smmap==5.0.1 sounddevice==0.4.6 soundfile==0.12.1 sympy==1.11.1 tokenizers==0.13.3 torch==2.0.1+cu117 torchaudio==2.0.2+cu117 torchvision==0.15.2+cu117 tqdm==4.66.1 transformers==4.33.1 typing_extensions==4.7.1 urllib3==1.26.16 wandb==0.15.10 websockets==11.0.3 xformers==0.0.21 yarl==1.9.2 youtube-dl==2021.12.17 yt-dlp==2023.7.6 zipp==3.16.2
内容的提问来源于stack exchange,提问作者ProfessionalFrog
相关产品推荐
相关产品推荐

