Diffusers documentation
Lumina2
Lumina2
Lumina Image 2.0: A Unified and Efficient Image Generative Model은 텍스트 설명에서 다양한 이미지를 생성할 수 있는 20억 파라미터의 플로우 기반 확산 변환기입니다.
해당 논문의 초록은 다음과 같습니다:
다양한 벤치마크에서 이전의 최첨단(SOTA) 방법들을 능가하는 고급 텍스트-이미지 생성 모델인 Lumina-Image 2.0을 소개합니다. 또한 이 모델이 범용 비전 인텔리전스 모델로 발전할 수 있는 잠재력에 대한 통찰을 제공합니다. Lumina-Image 2.0은 세 가지 핵심 특성을 지닙니다. (1) 통합(Unification) – 텍스트와 이미지 토큰을 하나의 결합된 시퀀스로 취급하는 통합 아키텍처를 채택하여 자연스러운 크로스 모달 상호작용을 가능하게 하고 작업 확장을 용이하게 합니다. 또한 고품질 캡셔너(captioner)는 의미적으로 더 잘 정렬된 텍스트-이미지 학습 쌍을 제공할 수 있으므로, 모델에 대한 포괄적이고 정확한 캡션을 생성하는 통합 캡셔닝 시스템인 UniCaptioner를 도입했습니다. 이를 통해 모델 수렴 속도를 가속화할 뿐만 아니라 프롬프트 템플릿을 통한 프롬프트 준수, 가변 길이 프롬프트 처리 및 작업 일반화 성능을 향상시킵니다. (2) 효율성(Efficiency) – 통합 아키텍처의 효율성을 높이기 위해, 학습 중 의미론적 학습과 세밀한 텍스처 생성을 개선하는 동시에 이미지 품질을 저하시키지 않으면서 추론 시 가속 전략을 통합하는 최적화 기법 세트를 개발했습니다. (3) 투명성(Transparency) – 완전한 재현성을 보장하기 위해 모든 학습 세부 사항, 코드 및 모델을 오픈소스로 공개하며, 자원과 인프라가 풍부한 폐쇄형 연구 팀과 독립적인 개발자 간의 격차를 줄이는 것을 목표로 합니다.
Scheduler의 가이드를 확인하여 스케줄러의 속도와 품질 사이의 트레이드오프를 탐색하는 방법을 배우고, 파이프라인 간 구성 요소 재사용 섹션을 확인하여 동일한 구성 요소를 여러 파이프라인에 효율적으로 로드하는 방법을 배워보세요.
Lumina Image 2.0에서 단일 파일 로딩 사용
Lumina Image 2.0의 단일 파일 로딩은 Lumina2Transformer2DModel에서 사용할 수 있습니다.
import torch
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline
ckpt_path = "https://huggingface.co/Alpha-VLLM/Lumina-Image-2.0/blob/main/consolidated.00-of-01.pth"
transformer = Lumina2Transformer2DModel.from_single_file(
ckpt_path, dtype=torch.bfloat16
)
pipe = Lumina2Pipeline.from_pretrained(
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
"a cat holding a sign that says hello",
generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-single-file.png")
Lumina Image 2.0에서 GGUF 양자화 체크포인트 사용
Lumina2Transformer2DModel의 GGUF 양자화 체크포인트는 GGUFQuantizationConfig와 함께 from_single_file를 통해 로드할 수 있습니다.
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline, GGUFQuantizationConfig
ckpt_path = "https://huggingface.co/calcuis/lumina-gguf/blob/main/lumina2-q4_0.gguf"
transformer = Lumina2Transformer2DModel.from_single_file(
ckpt_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
dtype=torch.bfloat16,
)
pipe = Lumina2Pipeline.from_pretrained(
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
"a cat holding a sign that says hello",
generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-gguf.png")Lumina2Pipeline
클래스 diffusers.Lumina2Pipeline
< source >( transformer: Lumina2Transformer2DModelscheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: Gemma2PreTrainedModeltokenizer: GemmaTokenizer )
매개변수
- vae (AutoencoderKL) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 Variational Auto-Encoder (VAE) 모델.
- text_encoder (
Gemma2PreTrainedModel) — 동결된 Gemma2 텍스트 인코더입니다. - tokenizer (
GemmaTokenizer또는GemmaTokenizerFast) — Gemma 토크나이저. - transformer (Transformer2DModel) —
텍스트 조건부
Transformer2DModel로 인코딩된 이미지 잠재 변수의 노이즈를 제거합니다. - scheduler (SchedulerMixin) —
transformer와 함께 사용되어 인코딩된 이미지 latents의 노이즈를 제거하는 스케줄러.
Lumina-T2I를 사용한 텍스트-이미지 생성을 위한 Pipeline
이 모델은 DiffusionPipeline에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
__call__
< source >( prompt: str | list[str] = Nonewidth: int | None = Noneheight: int | None = Nonenum_inference_steps: int = 30guidance_scale: float = 4.0negative_prompt: str | list[str] = Nonesigmas: list = Nonenum_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']system_prompt: str | None = Nonecfg_trunc_ratio: float = 1.0cfg_normalization: bool = Truemax_sequence_length: int = 256 ) → ImagePipelineOutput or tuple
매개변수
- prompt (
str또는list[str], 선택 사항) — 이미지 생성을 안내할 프롬프트입니다. 정의되지 않은 경우prompt_embeds를 대신 전달해야 합니다. - negative_prompt (
str또는list[str], 선택 사항) — 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우negative_prompt_embeds를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때 무시됩니다(즉,guidance_scale이1보다 작으면 무시됩니다). - num_inference_steps (
int, 선택 사항, 기본값 30) — 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 더 높은 품질의 이미지를 생성하지만, 추론 속도가 느려집니다. - sigmas (
list[float], 선택 사항) —set_timesteps메서드에sigmas인수를 지원하는 스케줄러의 노이즈 제거 과정에 사용할 커스텀 시그마입니다. 정의되지 않은 경우,num_inference_steps가 전달될 때의 기본 동작이 사용됩니다. - guidance_scale (
float, 선택 사항, 기본값 4.0) — Classifier-Free Diffusion Guidance에서 정의한 가이던스 스케일입니다.guidance_scale은 Imagen Paper의 방정식 2의w로 정의됩니다.guidance_scale > 1로 설정하면 가이던스 스케일이 활성화됩니다. 가이던스 스케일이 높을수록prompt텍스트와 밀접하게 연결된 이미지를 생성하도록 유도하지만, 일반적으로 이미지 품질이 낮아지는 대가를 치릅니다. - num_images_per_prompt (
int, 선택 사항, 기본값 1) — 프롬프트당 생성할 이미지의 수입니다. - height (
int, 선택 사항, 기본값 self.unet.config.sample_size) — 생성된 이미지의 픽셀 단위 높이입니다. - width (
int, 선택 사항, 기본값 self.unet.config.sample_size) — 생성된 이미지의 픽셀 단위 너비입니다. - generator (
torch.Generator또는list[torch.Generator], 선택 사항) — 생성을 결정적으로 만들기 위한 torch generator 하나 또는 목록 - latents (
torch.Tensor, 선택 사항) — 이미지 생성의 입력으로 사용할 가우시안 분포에서 샘플링된 사전 생성된 노이즈 latents입니다. 동일한 생성을 다른 프롬프트로 조정하는 데 사용할 수 있습니다. 제공되지 않으면, 제공된 랜덤generator를 사용하여 샘플링하여 latents 텐서가 생성됩니다. - prompt_embeds (
torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면prompt입력 인자로부터 텍스트 임베딩이 생성됩니다. - prompt_attention_mask (
torch.Tensor, 선택 사항) — 텍스트 임베딩을 위한 사전 생성된 어텐션 마스크입니다. - negative_prompt_embeds (
torch.Tensor, 선택 사항) — 미리 생성된 부정 텍스트 임베딩입니다. Lumina-T2I의 경우 이 negative prompt는 ""여야 합니다. 제공되지 않으면negative_prompt입력 인수에서 negative_prompt_embeds가 생성됩니다. - negative_prompt_attention_mask (
torch.Tensor, 선택 사항) — 음성 텍스트 임베딩에 사용할 사전 생성된 어텐션 마스크입니다. - output_type (
str, 선택 사항, 기본값"pil") — 이미지 생성의 출력 형식입니다. PIL:PIL.Image.Image또는np.array중 하나를 선택합니다. - return_dict (
bool, 선택 사항, 기본값True) —~pipelines.stable_diffusion.IFPipelineOutput을 반환할지, 아니면 일반 튜플을 반환할지를 결정합니다. - attention_kwargs —
지정된 경우 diffusers.models.attention_processor의
self.processor에서 정의된AttentionProcessor로 전달되는 kwargs 사전입니다. - callback_on_step_end (
Callable, 선택 사항) — 추론 중 각 디노이징 단계의 끝에서 호출되는 함수입니다. 이 함수는 다음 인수를 받아 호출됩니다:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargs에는callback_on_step_end_tensor_inputs로 지정된 모든 텐서 목록이 포함됩니다. - callback_on_step_end_tensor_inputs (
list, 선택 사항) —callback_on_step_end함수의 텐서 입력 목록입니다. 목록에 지정된 텐서는callback_kwargs인수로 전달됩니다. 파이프라인 클래스의._callback_tensor_inputs속성에 나열된 변수만 포함할 수 있습니다. - system_prompt (
str, 선택 사항) — 이미지 생성에 사용할 시스템 프롬프트입니다. - cfg_trunc_ratio (
float, 선택 사항, 기본값1.0) — 정규화 기반 guidance scale을 적용할 timestep 구간의 비율입니다. - cfg_normalization (
bool, 선택 사항, 기본값True) — 정규화 기반 guidance scale을 적용할지 여부입니다. - max_sequence_length (
int, 기본값256) —prompt에 사용할 최대 시퀀스 길이입니다.
반환값
ImagePipelineOutput 또는 tuple
return_dict가 True인 경우 ImagePipelineOutput가 반환되고, 그렇지 않으면 첫 번째 요소가 생성된 이미지의 목록인 tuple이 반환됩니다.
생성을 위해 파이프라인을 호출할 때 호출되는 함수.
예:
>>> import torch
>>> from diffusers import Lumina2Pipeline
>>> pipe = Lumina2Pipeline.from_pretrained("Alpha-VLLM/Lumina-Image-2.0", torch_dtype=torch.bfloat16)
>>> # Enable memory optimizations.
>>> pipe.enable_model_cpu_offload()
>>> prompt = "Upper body of a young woman in a Victorian-era outfit with brass goggles and leather straps. Background shows an industrial revolution cityscape with smoky skies and tall, metal structures"
>>> image = pipe(prompt).images[0]encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str | list[str] = Nonenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonesystem_prompt: str | None = Nonemax_sequence_length: int = 256 )
매개변수
- prompt (
str또는list[str], 선택 사항) — 인코딩할 프롬프트 - negative_prompt (
str또는list[str], 선택 사항) — 이미지 생성을 유도하지 않을 프롬프트입니다. 정의되지 않은 경우 대신negative_prompt_embeds를 전달해야 합니다. 가이던스를 사용하지 않는 경우 무시됩니다(즉,guidance_scale이1보다 작은 경우 무시됨). Lumina-T2I의 경우 ""여야 합니다. - do_classifier_free_guidance (
bool, 선택 사항, 기본값True) — classifier free guidance를 사용할지 여부 - num_images_per_prompt (
int, 선택 사항, 기본값 1) — 프롬프트당 생성할 이미지 수 - device — (
torch.device, 선택 사항): 결과 임베딩을 배치할 torch device - prompt_embeds (
torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면prompt입력 인자로부터 텍스트 임베딩이 생성됩니다. - negative_prompt_embeds (
torch.Tensor, 선택 사항) — 미리 생성된 부정 텍스트 임베딩입니다. Lumina-T2I의 경우, "" 문자열의 임베딩이어야 합니다. - max_sequence_length (
int, 기본값256) — 프롬프트에 사용할 최대 시퀀스 길이입니다.
프롬프트를 텍스트 인코더의 히든 상태로 인코딩합니다.