Diffusers documentation
RePaintScheduler
RePaintScheduler
RePaintScheduler es un programador de inpainting basado en DDPM para inpainting no supervisado con máscaras extremas. Está diseñado para usarse con RePaintPipeline y se basa en el artículo RePaint: Inpainting using Denoising Diffusion Probabilistic Models de Andreas Lugmayr et al.
El resumen del artículo es:
El inpainting libre es la tarea de añadir nuevo contenido a una imagen en las regiones especificadas por una máscara binaria arbitraria. La mayoría de los enfoques existentes se entrenan para una cierta distribución de máscaras, lo que limita su capacidad de generalización a tipos de máscaras no vistos. Además, el entrenamiento con pérdidas a nivel de píxel y perceptuales a menudo conduce a extensiones texturales simples hacia las áreas faltantes en lugar de una generación semánticamente significativa. En este trabajo, proponemos RePaint: un enfoque de inpainting basado en un Modelo Probabilístico de Difusión con Ruido (DDPM) que es aplicable incluso a máscaras extremas. Empleamos un DDPM incondicional preentrenado como prior generativo. Para condicionar el proceso de generación, solo alteramos las iteraciones de difusión inversa muestreando las regiones no enmascaradas usando la información de la imagen dada. Dado que esta técnica no modifica ni condiciona la red DDPM original en sí, el modelo produce imágenes de salida de alta calidad y diversas para cualquier forma de inpainting. Validamos nuestro método tanto para inpainting de rostros como para inpainting de imágenes de uso general, utilizando máscaras estándar y extremas. RePaint supera a los enfoques Autoregressive y GAN del estado del arte para al menos cinco de las seis distribuciones de máscaras. Repositorio de GitHub: esta URL http.
La implementación original se puede encontrar en andreas128/RePaint.
RePaintScheduler
clase diffusers.RePaintScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'eta: float = 0.0trained_betas: numpy.ndarray | None = Noneclip_sample: bool = True )
Parámetros
- num_train_timesteps (
int, por defecto1000) — El número de pasos de difusión para entrenar el modelo. - beta_start (
float, por defecto0.0001) — El valor inicial debetapara la inferencia. - beta_end (
float, por defecto0.02) — El valor final debeta. - beta_schedule (
str, por defecto"linear") — El programa de betas, una correspondencia entre un rango de betas y una secuencia de betas para dar pasos al modelo. Elija entrelinear,scaled_linear,squaredcos_cap_v2osigmoid. - eta (
float, por defecto0.0) — El peso del ruido añadido durante un paso de difusión. Un valor de0.0corresponde a DDIM y un valor de1.0corresponde a DDPM. - trained_betas (
np.ndarray, opcional) — Pase un array de betas directamente al constructor para omitirbeta_startybeta_end. - clip_sample (
bool, por defectoTrue) — Recorta la muestra predicha entre -1 y 1 para la estabilidad numérica.
RePaintScheduler es un programador para el inpainting de DDPM dentro de una máscara dada.
Este modelo hereda de SchedulerMixin y ConfigMixin. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los programadores, como la carga y el guardado.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor )
Parámetros
- original_samples (
torch.Tensor) — Las muestras originales a las que se añadiría ruido. - noise (
torch.Tensor) — El ruido que se añadiría a las muestras. - timesteps (
torch.IntTensor) — Los pasos de tiempo que determinarán el nivel de ruido para cada muestra.
Lanza
NotImplementedError
NotImplementedError— El entrenamiento de RePaint debería usar DDPMScheduler.add_noise() en su lugar.
Indique que la adición de ruido para el entrenamiento de RePaint no es compatible con este programador.
scale_model_input
< source >( sample: Tensortimestep: int | None = None ) → torch.Tensor
Garantiza la interoperabilidad con los programadores que necesitan escalar la entrada del modelo de desruido en función del paso temporal actual.
set_timesteps
< source >( num_inference_steps: intjump_length: int = 10jump_n_sample: int = 10device: typing.Union[str, torch.device, NoneType] = None )
Parámetros
- num_inference_steps (
int) — El número de pasos de difusión utilizados al generar muestras con un modelo preentrenado. - jump_length (
int, por defecto10) — El número de pasos que se dan hacia adelante en el tiempo antes de retroceder en el tiempo para un solo salto (“j” en el artículo de RePaint). Consulte las figuras 9 y 10 del artículo. - jump_n_sample (
int, por defecto10) — El número de veces que se realiza un salto en el tiempo hacia adelante para una muestra de tiempo elegida. Consulte las figuras 9 y 10 del artículo. - device (
strotorch.device, opcional) — El dispositivo al que deben moverse los timesteps. Si esNone, los timesteps no se mueven.
Establece los pasos discretos utilizados para la cadena de difusión (para ejecutarse antes de la inferencia).
paso
< source >( model_output: Tensortimestep: intsample: Tensororiginal_image: Tensormask: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → RePaintSchedulerOutput or tuple[torch.Tensor, torch.Tensor]
Parámetros
- model_output (
torch.Tensor) — La salida directa del modelo de difusión aprendido. - timestep (
int) — El paso de tiempo discreto actual en la cadena de difusión. - sample (
torch.Tensor) — Una instancia actual de una muestra creada por el proceso de difusión. - original_image (
torch.Tensor) — La imagen original sobre la que se realizará el inpainting. - mask (
torch.Tensor) — La máscara donde un valor de 0.0 indica qué parte de la imagen original se debe inpaint. - generator (
torch.Generator, opcional) — Un generador de números aleatorios. - return_dict (
bool, por defectoTrue) — Indica si se debe devolver un RePaintSchedulerOutput en lugar de una tupla.
Devuelve
RePaintSchedulerOutput o tuple[torch.Tensor, torch.Tensor]
If return_dict is True, RePaintSchedulerOutput is returned,
otherwise a tuple is returned where the first element is the previous sample and the second is the
predicted original sample.
Predice la muestra del paso de tiempo anterior invirtiendo el SDE. Esta función propaga el proceso de difusión a partir de las salidas del modelo aprendido (con mayor frecuencia, el ruido predicho).
undo_step
< source >( sample: Tensortimestep: intgenerator: typing.Optional[torch.Generator] = None ) → torch.Tensor
Parámetros
- sample (
torch.Tensor) — La muestra a la que se le añade ruido. - timestep (
int) — El paso de tiempo discreto actual en la cadena de difusión. - generator (
torch.Generator, opcional) — Un generador de números aleatorios.
Devuelve
torch.Tensor
La muestra en el siguiente paso de tiempo de la cadena de difusión.
Añada ruido a una muestra para avanzar un paso de difusión.
RePaintSchedulerOutput
clase diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: Tensor )
Parámetros
- prev_sample (
torch.Tensorde forma(batch_size, num_channels, height, width)para imágenes) — Muestra (x_{t-1}) calculada del paso de tiempo anterior.prev_sampledebe usarse como entrada del modelo en el bucle de desruido. - pred_original_sample (
torch.Tensorde forma(batch_size, num_channels, height, width)para imágenes) — La muestra desruidada predicha (x_{0}) basada en la salida del modelo del paso de tiempo actual.pred_original_samplese puede usar para previsualizar el progreso o para la guía.
Clase de salida para la función de paso del programador.