Diffusers documentation
AsymmetricAutoencoderKL
AsymmetricAutoencoderKL
Modelo de autoencoder variacional (VAE) más grande mejorado con pérdida KL para la tarea de inpainting: Designing a Better Asymmetric VQGAN for StableDiffusion de Zixin Zhu, Xuelu Feng, Dongdong Chen, Jianmin Bao, Le Wang, Yinpeng Chen, Lu Yuan, Gang Hua.
El resumen del artículo es:
StableDiffusion es un generador de texto a imagen revolucionario que está causando revuelo en el mundo de la generación y edición de imágenes. A diferencia de los métodos tradicionales que aprenden un modelo de difusión en el espacio de píxeles, StableDiffusion aprende un modelo de difusión en el espacio latente mediante un VQGAN, garantizando tanto la eficiencia como la calidad. No solo admite tareas de generación de imágenes, sino que también permite la edición de imágenes reales, como el relleno de imágenes (inpainting) y la edición local. Sin embargo, hemos observado que el VQGAN estándar utilizado en StableDiffusion provoca una pérdida de información significativa, lo que genera artefactos de distorsión incluso en las regiones de la imagen que no se han editado. Con este fin, proponemos un nuevo VQGAN asimétrico con dos diseños simples. En primer lugar, además de la entrada del codificador, el decodificador contiene una rama condicional que incorpora información de priorizaciones específicas de la tarea, como la región de imagen sin enmascarar en el relleno. En segundo lugar, el decodificador es mucho más pesado que el codificador, lo que permite una recuperación más detallada mientras solo aumenta ligeramente el costo total de inferencia. El costo de entrenamiento de nuestro VQGAN asimétrico es bajo, y solo necesitamos volver a entrenar un nuevo decodificador asimétrico manteniendo el codificador del VQGAN estándar y StableDiffusion sin cambios. Nuestro VQGAN asimétrico puede utilizarse ampliamente en métodos de relleno y edición local basados en StableDiffusion. Experimentos extensos demuestran que puede mejorar significativamente el rendimiento del relleno y la edición, al tiempo que mantiene la capacidad original de texto a imagen. El código está disponible en https://github.com/buxiangzhiren/Asymmetric_VQGAN
Los resultados de la evaluación se pueden encontrar en la sección 4.1 del artículo original.
Puntos de control disponibles
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-1-5
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-2
Ejemplo de uso
from diffusers import AsymmetricAutoencoderKL, StableDiffusionInpaintPipeline
from diffusers.utils import load_image, make_image_grid
prompt = "a photo of a person with beard"
img_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/celeba_hq_256.png"
mask_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png"
original_image = load_image(img_url).resize((512, 512))
mask_image = load_image(mask_url).resize((512, 512))
pipe = StableDiffusionInpaintPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-inpainting")
pipe.vae = AsymmetricAutoencoderKL.from_pretrained("cross-attention/asymmetric-autoencoder-kl-x-1-5")
pipe.to("cuda") # or "mps", "xpu", "cpu"
image = pipe(prompt=prompt, image=original_image, mask_image=mask_image).images[0]
make_image_grid([original_image, mask_image, image], rows=1, cols=3)AsymmetricAutoencoderKL
clase diffusers.AsymmetricAutoencoderKL
< source >( in_channels: int = 3out_channels: int = 3down_block_types: tuple[str, ...] = ('DownEncoderBlock2D',)down_block_out_channels: tuple[int, ...] = (64,)layers_per_down_block: int = 1up_block_types: tuple[str, ...] = ('UpDecoderBlock2D',)up_block_out_channels: tuple[int, ...] = (64,)layers_per_up_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215 )
Parámetros
- in_channels (int, opcional, valor predeterminado 3) — Número de canales en la imagen de entrada.
- out_channels (int, opcional, valor predeterminado 3) — Número de canales en la salida.
- down_block_types (
tuple[str], opcional, por defecto("DownEncoderBlock2D",)) — tupla de tipos de bloques de muestreo descendente. - down_block_out_channels (
tuple[int], opcional, por defecto(64,)) — tupla de canales de salida de los bloques de bajada. - layers_per_down_block (
int, opcional, valor predeterminado1) — Número de capas para el bloque de bajada. - up_block_types (
tuple[str], opcional, por defecto("UpDecoderBlock2D",)) — tupla de tipos de bloques de remuestreo ascendente. - up_block_out_channels (
tuple[int], opcional, por defecto(64,)) — tupla de canales de salida de los bloques de expansión. - layers_per_up_block (
int, opcional, valor predeterminado1) — Número de capas para el bloque de subida. - act_fn (
str, opcional, por defecto"silu") — La función de activación a utilizar. - latent_channels (
int, opcional, valor predeterminado 4) — Número de canales en el espacio latente. - sample_size (
int, opcional, valor predeterminado32) — Tamaño de la entrada de muestra. - norm_num_groups (
int, opcional, valor predeterminado32) — Número de grupos a utilizar para la primera capa de normalización en los bloques ResNet. - scaling_factor (
float, opcional, valor predeterminado 0.18215) — La desviación estándar por componente del espacio latente entrenado, calculada utilizando el primer lote del conjunto de entrenamiento. Se utiliza para escalar el espacio latente para que tenga varianza unitaria al entrenar el modelo de difusión. Los latentes se escalan con la fórmulaz = z * scaling_factorantes de ser pasados al modelo de difusión. Al decodificar, los latentes se escalan de vuelta a la escala original con la fórmula:z = 1 / scaling_factor * z. Para más detalles, consulte las secciones 4.3.2 y D.1 del artículo High-Resolution Image Synthesis with Latent Diffusion Models.
Diseño de un VQGAN asimétrico mejorado para StableDiffusion https://huggingface.co/papers/2306.04632 . Un modelo VAE con pérdida KL para codificar imágenes en latentes y decodificar representaciones latentes en imágenes.
Este modelo hereda de ModelMixin. Consulta la documentación de la clase superior para sus métodos genéricos implementados para todos los modelos (como la descarga o el guardado).
forward
< source >( sample: Tensormask: typing.Optional[torch.Tensor] = Nonesample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple
Parámetros
- sample (
torch.Tensor) — Muestra de entrada. - mask (
torch.Tensor, opcional, valor predeterminadoNone) — Máscara de inpainting opcional. - sample_posterior (
bool, opcional, por defectoFalse) — Si se muestrea de la posterior. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver unDecoderOutputen lugar de una tupla simple. - generator (
torch.Generator, opcional) — Untorch.Generatorpara hacer que la muestreo sea determinista.
Devuelve
DecoderOutput o tuple
Si return_dict es True, se devuelve un DecoderOutput; en caso contrario, se devuelve una tuple simple.
AutoencoderKLOutput
clase diffusers.models.modeling_outputs.AutoencoderKLOutput
< source >( latent_dist: DiagonalGaussianDistribution )
Salida del método de codificación de AutoencoderKL.
DecoderOutput
clase diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Salida del método de decodificación.