Buckets:

mishig's picture
|
download
raw
17.8 kB
#
# Licenciado sob a Apache License, Versão 2.0 (a "Licença");
# você não pode usar este arquivo, exceto em conformidade com a Licença.
# Você pode obter uma cópia da Licença em
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# A menos que exigido pela lei aplicável ou acordado por escrito, o software
# distribuído sob a Licença é distribuído em uma base "COMO ESTÁ",
# SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas.
# Consulte a Licença para o idioma específico que rege as permissões e
# limitações sob a Licença.
-->
# GLM-Image
## Visão geral
GLM-Image é um modelo de geração de imagens que adota uma arquitetura híbrida de decodificador autoregressivo + difusão, elevando efetivamente o limite superior de fidelidade visual e detalhes finos. Em termos de qualidade geral de geração de imagens, ele se alinha às abordagens padrão do setor baseadas em LDM, demonstrando, no entanto, vantagens significativas em cenários de geração de imagens intensivos em conhecimento.
Arquitetura do modelo: um design híbrido de decodificador autoregressivo + difusão、
+ Gerador autoregressivo: um modelo de 9B parâmetros inicializado a partir de [GLM-4-9B-0414](https://huggingface.co/zai-org/GLM-4-9B-0414), com um vocabulário expandido para incorporar tokens visuais. O modelo primeiro gera uma codificação compacta de aproximadamente 256 tokens, em seguida expande para 1K–4K tokens, correspondendo a saídas de imagens de alta resolução de 1K–2K. Você pode verificar o modelo AR na classe `GlmImageForConditionalGeneration` da biblioteca `transformers`.
+ Diffusion Decoder: um decodificador de 7 bilhões de parâmetros baseado em uma arquitetura DiT de fluxo único para decodificação de imagens no espaço latente. Ele é equipado com um módulo de texto Glyph Encoder, melhorando significativamente a renderização precisa de texto dentro das imagens.
Pós-treino com aprendizado por reforço desacoplado: o modelo introduz uma estratégia de feedback modular e de granularidade fina usando o algoritmo GRPO, aprimorando substancialmente tanto a compreensão semântica quanto a qualidade dos detalhes visuais.
+ Módulo autoregressivo: fornece sinais de feedback de baixa frequência focados em estética e alinhamento semântico, melhorando o seguimento de instruções e a expressividade artística.
+ Módulo decodificador: fornece feedback de alta frequência direcionado à fidelidade de detalhes e à precisão do texto, resultando em texturas, iluminação e reprodução de cores altamente realistas, bem como em uma renderização de texto mais precisa.
O GLM-Image suporta tanto a geração de texto para imagem quanto a geração de imagem para imagem em um único modelo
+ Texto para imagem: gera imagens de alto detalhe a partir de descrições textuais, com desempenho particularmente forte em cenários densos em informações.
+ Image-to-image: suporta uma ampla variedade de tarefas, incluindo edição de imagem, transferência de estilo, consistência de múltiplos sujeitos e geração que preserva a identidade para pessoas e objetos.
Este pipeline foi contribuído por [zRzRzRzRzRzRzR](https://github.com/zRzRzRzRzRzRzR). A base de código pode ser encontrada [aqui](https://huggingface.co/zai-org/GLM-Image).
## Exemplos de uso
### Geração de Texto para Imagem
```python
import torch
from diffusers.pipelines.glm_image import GlmImagePipeline
pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image",dtype=torch.bfloat16,device_map="cuda")
prompt = "A beautifully designed modern food magazine style dessert recipe illustration, themed around a raspberry mousse cake. The overall layout is clean and bright, divided into four main areas: the top left features a bold black title 'Raspberry Mousse Cake Recipe Guide', with a soft-lit close-up photo of the finished cake on the right, showcasing a light pink cake adorned with fresh raspberries and mint leaves; the bottom left contains an ingredient list section, titled 'Ingredients' in a simple font, listing 'Flour 150g', 'Eggs 3', 'Sugar 120g', 'Raspberry puree 200g', 'Gelatin sheets 10g', 'Whipping cream 300ml', and 'Fresh raspberries', each accompanied by minimalist line icons (like a flour bag, eggs, sugar jar, etc.); the bottom right displays four equally sized step boxes, each containing high-definition macro photos and corresponding instructions, arranged from top to bottom as follows: Step 1 shows a whisk whipping white foam (with the instruction 'Whip egg whites to stiff peaks'), Step 2 shows a red-and-white mixture being folded with a spatula (with the instruction 'Gently fold in the puree and batter'), Step 3 shows pink liquid being poured into a round mold (with the instruction 'Pour into mold and chill for 4 hours'), Step 4 shows the finished cake decorated with raspberries and mint leaves (with the instruction 'Decorate with raspberries and mint'); a light brown information bar runs along the bottom edge, with icons on the left representing 'Preparation time: 30 minutes', 'Cooking time: 20 minutes', and 'Servings: 8'. The overall color scheme is dominated by creamy white and light pink, with a subtle paper texture in the background, featuring compact and orderly text and image layout with clear information hierarchy."
image = pipe(
prompt=prompt,
height=32 * 32,
width=36 * 32,
num_inference_steps=30,
guidance_scale=1.5,
generator=torch.Generator(device="cuda").manual_seed(42), # or "mps", "xpu", "cpu"
).images[0]
image.save("output_t2i.png")
```
### Geração de Imagem para Imagem
```python
import torch
from diffusers.pipelines.glm_image import GlmImagePipeline
from PIL import Image
pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image",dtype=torch.bfloat16,device_map="cuda")
image_path = "cond.jpg"
prompt = "Replace the background of the snow forest with an underground station featuring an automatic escalator."
image = Image.open(image_path).convert("RGB")
image = pipe(
prompt=prompt,
image=[image], # can input multiple images for multi-image-to-image generation such as [image, image1]
height=33 * 32,
width=32 * 32,
num_inference_steps=30,
guidance_scale=1.5,
generator=torch.Generator(device="cuda").manual_seed(42), # or "mps", "xpu", "cpu"
).images[0]
image.save("output_i2i.png")
```
+ Como o modelo AR usado no GLM-Image é configurado com `do_sample=True` e uma temperatura de `0.95` por padrão, as imagens geradas podem variar significativamente entre execuções. Não recomendamos definir do_sample=False, pois isso pode levar a saídas incorretas ou degeneradas do modelo AR.
## GlmImagePipeline[[diffusers.GlmImagePipeline]]
#### diffusers.GlmImagePipeline[[diffusers.GlmImagePipeline]]
```python
diffusers.GlmImagePipeline(tokenizer: ByT5Tokenizer, processor: GlmImageProcessor, text_encoder: T5EncoderModel, vision_language_encoder: GlmImageForConditionalGeneration, vae: AutoencoderKL, transformer: GlmImageTransformer2DModel, scheduler: FlowMatchEulerDiscreteScheduler)
```
[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/glm_image/pipeline_glm_image.py#L161)
**Parâmetros:**
tokenizer (`PreTrainedTokenizer`) : Tokenizador para o codificador de texto.
processor (`AutoProcessor`) : Processador para o modelo AR para lidar com modelos de chat e tokenização.
text_encoder (`T5EncoderModel`) : Codificador de texto congelado para incorporações de glifos.
vision_language_encoder (`GlmImageForConditionalGeneration`) : O modelo AR que gera tokens de imagem a partir de prompts de texto.
vae ([AutoencoderKL](/docs/diffusers/main/pt/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
transformer ([GlmImageTransformer2DModel](/docs/diffusers/main/pt/api/models/glm_image_transformer2d#diffusers.GlmImageTransformer2DModel)) : Um transformer condicionado por texto para desruidar os latentes da imagem codificada (DiT).
scheduler ([SchedulerMixin](/docs/diffusers/main/pt/api/schedulers/overview#diffusers.SchedulerMixin)) : Um scheduler para ser usado em combinação com `transformer` para desruidar os latentes da imagem codificada.
Pipeline para geração de texto para imagem usando GLM-Image.
Este pipeline integra tanto o modelo AR (autoregressivo) para geração de tokens quanto o modelo DiT (diffusion transformer) para decodificação de imagens.
#### __call__[[diffusers.GlmImagePipeline.__call__]]
```python
__call__(prompt: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] | None = None, sigmas: list[float] | None = None, guidance_scale: float = 1.5, num_images_per_prompt: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prior_token_ids: typing.Optional[torch.Tensor] = None, prior_token_image_ids: list[torch.Tensor] | None = None, source_image_grid_thw: list[torch.Tensor] | None = None, crops_coords_top_left: tuple[int, int] = (0, 0), output_type: str = 'pil', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 2048)
```
[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/glm_image/pipeline_glm_image.py#L719)
**Parâmetros:**
prompt (`str` ou `list[str]`, *opcional*) : O prompt ou os prompts para orientar a geração da imagem. Deve conter informações de formato no formato 'H W', onde H e W são as dimensões dos tokens (d32). Exemplo: "A beautiful sunset36 24" gera uma imagem de 1152x768.
image : Imagens de condição opcionais para geração de imagem para imagem.
height (`int`, *opcional*) : A altura em pixels. Se não for fornecida, é derivada das informações de forma do prompt.
width (`int`, *opcional*) : A largura em pixels. Se não for fornecida, é derivada das informações de forma do prompt.
num_inference_steps (`int`, *opcional*, padrão `50`) : O número de etapas de desruidamento para o DiT.
timesteps (`list[int]`, *opcional*) : Passos de tempo personalizados para usar no processo de desruido. Se não definido, o agendamento padrão do agendador para `num_inference_steps` é utilizado.
sigmas (`list[float]`, *opcional*) : Sigmas personalizados para usar no processo de desruidamento. Se não definidos, o agendamento padrão do agendador é utilizado.
guidance_scale (`float`, *opcional*, padrão `1.5`) : Escala de orientação para orientação livre de classificador.
num_images_per_prompt (`int`, *opcional*, padrão `1`) : O número de imagens a serem geradas por prompt.
generator (`torch.Generator`, *opcional*) : Gerador de números aleatórios para reprodutibilidade.
latents (`torch.Tensor`, *opcional*) : Latentes ruidosos pré-gerados para serem usados como entradas para a geração de imagens.
prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto pré-gerados. Se não fornecidos, os embeddings são gerados a partir de `prompt`.
negative_prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto negativo pré-gerados. Usado quando a orientação sem classificador (classifier-free guidance) está habilitada.
prior_token_ids (`torch.Tensor`, *opcional*) : ids de tokens anteriores pré-gerados por `generate_prior_tokens`. Se fornecidos, a geração anterior é ignorada.
prior_token_image_ids (`list[torch.Tensor]`, *opcional*) : ids de tokens de imagem associados a `prior_token_ids`.
source_image_grid_thw (`list[torch.Tensor]`, *opcional*) : Informações da grade THW por amostra para os tokens da imagem de origem.
crops_coords_top_left (`tuple[int, int]`, *opcional*, padrão `(0, 0)`) : As coordenadas do canto superior esquerdo do recorte usado para embeddings de condicionamento.
output_type (`str`, *opcional*, padrão `"pil"`) : Formato de saída: "pil", "np" ou "latent".
return_dict (`bool`, *opcional*, padrão `True`) : Se deve ou não retornar um `GlmImagePipelineOutput` em vez de uma tupla simples.
attention_kwargs (`dict`, *opcional*) : Um dicionário de kwargs que, se especificado, é passado para o `AttentionProcessor`.
callback_on_step_end (`Callable`, `PipelineCallback`, `MultiPipelineCallbacks`, *opcional*) : Uma função chamada no final de cada etapa de remoção de ruído.
callback_on_step_end_tensor_inputs (`list[str]`, *opcional*) : Entradas de Tensor passadas para `callback_on_step_end`.
max_sequence_length (`int`, *opcional*, padrão `2048`) : Comprimento máximo da sequência para o codificador de texto.
**Retorna:** `GlmImagePipelineOutput` ou `tuple`
Imagens geradas.
Função invocada ao chamar o pipeline para geração.
Exemplos:
```python
>>> import torch
>>> from diffusers import GlmImagePipeline
>>> pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]
>>> image.save("output.png")
```
#### encode_prompt[[diffusers.GlmImagePipeline.encode_prompt]]
```python
encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None, max_sequence_length: int = 2048)
```
[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/glm_image/pipeline_glm_image.py#L545)
**Parâmetros:**
prompt (`str` ou `list[str]`, *opcional*) : prompt a ser codificado
do_classifier_free_guidance (`bool`, *opcional*, padrão `True`) : Se deve ou não usar classifier free guidance.
num_images_per_prompt (`int`, *opcional*, padrão 1) : Número de imagens que devem ser geradas por prompt. Dispositivo torch para colocar os embeddings resultantes
prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, *por exemplo*, ponderação de prompts. Se não forem fornecidos, os embeddings de texto serão gerados a partir do argumento de entrada `prompt`.
device : (`torch.device`, *opcional*): dispositivo torch
dtype : (`torch.dtype`, *opcional*): dtype do torch
max_sequence_length (`int`, padrão `2048`) : Comprimento máximo da sequência no prompt codificado. Pode ser definido para outros valores, mas isso pode levar a resultados piores.
Codifica o prompt em estados ocultos do codificador de texto.
#### generate_prior_tokens[[diffusers.GlmImagePipeline.generate_prior_tokens]]
```python
generate_prior_tokens(prompt: str | list[str], height: int, width: int, image: list[list[PIL.Image.Image]] | None = None, device: typing.Optional[torch.device] = None, generator: typing.Optional[torch.Generator] = None)
```
[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/glm_image/pipeline_glm_image.py#L321)
**Parâmetros:**
prompt : Prompt único ou lista de prompts
height : Altura da imagem de destino
width : Largura da imagem de destino
image : Entrada de imagem normalizada como List[List[PIL.Image]]. Deve ser pré-validada usando _validate_and_normalize_images() antes de chamar este método.
device : Dispositivo de destino
generator : Gerador aleatório para reprodutibilidade
**Retorna:** `Tuple of`
- prior_token_ids: Tensor de forma (batch_size, num_tokens) com tokens anteriores interpolados
- prior_token_image_ids_per_sample: Lista de tensores, um por amostra. Cada tensor contém os ids de tokens prior upsampled para todas as imagens de condição naquela amostra. None para t2i.
- source_image_grid_thw_per_sample: Lista de tensores, um por amostra. Cada tensor tem a forma (num_condition_images, 3) com informações de grade ampliadas. None para t2i.
Gere tokens anteriores para o modelo DiT usando o modelo AR.
#### get_glyph_texts[[diffusers.GlmImagePipeline.get_glyph_texts]]
```python
get_glyph_texts(prompt)
```
[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/glm_image/pipeline_glm_image.py#L476)
Extrai os textos dos glifos dos prompts. Retorna uma lista de listas para processamento em lote.
## GlmImagePipelineOutput[[diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput]]
#### diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput[[diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput]]
```python
diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)
```
[Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/glm_image/pipeline_output.py#L10)
**Parâmetros:**
images (`List[PIL.Image.Image]` ou `np.ndarray`) : Lista de imagens PIL desruidas de comprimento `batch_size` ou array numpy de forma `(batch_size, height, width, num_channels)`. As imagens PIL ou o array numpy apresentam as imagens desruidas do pipeline de difusão.
Classe de saída para os pipelines do CogView3.

Xet Storage Details

Size:
17.8 kB
·
Xet hash:
c1c1bf1a3bc37f22cf7c3450c563e5a683f87b99b6efcca75e33cb5952b845a0

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.