Diffusers documentation
UNet3DConditionModel
UNet3DConditionModel
El modelo UNet fue introducido originalmente por Ronneberger et al. para la segmentación de imágenes biomédicas, pero también se utiliza comúnmente en 🤗 Diffusers porque genera imágenes del mismo tamaño que la entrada. Es uno de los componentes más importantes de un sistema de difusión, ya que facilita el proceso de difusión propiamente dicho. Existen varias variantes del modelo UNet en 🤗 Diffusers, dependiendo de su número de dimensiones y de si es un modelo condicional o no. Este es un modelo UNet condicional de 3D.
El resumen del artículo es:
Existe un amplio consenso de que el entrenamiento exitoso de redes profundas requiere miles de muestras de entrenamiento anotadas. En este artículo, presentamos una red y una estrategia de entrenamiento que se basa en el uso intensivo de aumentación de datos para utilizar las muestras anotadas disponibles de manera más eficiente. La arquitectura consiste en una ruta contractiva para capturar el contexto y una ruta expansiva simétrica que permite una localización precisa. Demostramos que una red de este tipo puede entrenarse de extremo a extremo a partir de muy pocas imágenes y supera al mejor método anterior (una red convolucional de ventana deslizante) en el desafío ISBI para la segmentación de estructuras neuronales en pilas de microscopía electrónica. Utilizando la misma red entrenada con imágenes de microscopía de luz transmitida (contraste de fase y DIC), ganamos el desafío de seguimiento celular ISBI 2015 en estas categorías por un amplio margen. Además, la red es rápida. La segmentación de una imagen de 512x512 toma menos de un segundo en una GPU reciente. La implementación completa (basada en Caffe) y las redes entrenadas están disponibles en http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net.
UNet3DConditionModel
clase diffusers.UNet3DConditionModel
< source >( sample_size: int | None = Nonein_channels: int = 4out_channels: int = 4down_block_types: tuple = ('CrossAttnDownBlock3D', 'CrossAttnDownBlock3D', 'CrossAttnDownBlock3D', 'DownBlock3D')up_block_types: tuple = ('UpBlock3D', 'CrossAttnUpBlock3D', 'CrossAttnUpBlock3D', 'CrossAttnUpBlock3D')block_out_channels: tuple = (320, 640, 1280, 1280)layers_per_block: int = 2downsample_padding: int = 1mid_block_scale_factor: float = 1act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int = 1024attention_head_dim: int | tuple[int] = 64num_attention_heads: int | tuple[int] | None = Nonetime_cond_proj_dim: int | None = None )
Parámetros
- sample_size (
intotuple[int, int], opcional, valor predeterminadoNone) — Altura y anchura de la muestra de entrada/salida. - in_channels (
int, opcional, valor predeterminado 4) — El número de canales en la muestra de entrada. - out_channels (
int, opcional, valor predeterminado 4) — El número de canales en la salida. - down_block_types (
tuple[str], opcional, por defecto("CrossAttnDownBlock3D", "CrossAttnDownBlock3D", "CrossAttnDownBlock3D", "DownBlock3D")) — La tupla de bloques de muestreo descendente a utilizar. - up_block_types (
tuple[str], opcional, por defecto("UpBlock3D", "CrossAttnUpBlock3D", "CrossAttnUpBlock3D", "CrossAttnUpBlock3D")) — La tupla de bloques de remuestreo ascendente a utilizar. - block_out_channels (
tuple[int], opcional, por defecto(320, 640, 1280, 1280)) — La tupla de canales de salida para cada bloque. - layers_per_block (
int, opcional, valor predeterminado 2) — El número de capas por bloque. - downsample_padding (
int, opcional, valor predeterminado 1) — El relleno a utilizar para la convolución de reducción de muestreo. - mid_block_scale_factor (
float, opcional, valor predeterminado 1.0) — El factor de escala a utilizar para el bloque intermedio. - act_fn (
str, opcional, por defecto"silu") — La función de activación a utilizar. - norm_num_groups (
int, opcional, valor predeterminado 32) — El número de grupos a utilizar para la normalización. SiNone, se omiten las capas de normalización y activación en el posprocesamiento. - norm_eps (
float, opcional, valor predeterminado 1e-5) — El epsilon a utilizar para la normalización. - cross_attention_dim (
int, opcional, valor predeterminado 1024) — La dimensión de las características de atención cruzada. - attention_head_dim (
int, opcional, valor predeterminado 64) — La dimensión de las cabezas de atención. - num_attention_heads (
int, opcional) — El número de cabezas de atención. - time_cond_proj_dim (
int, opcional, valor predeterminadoNone) — La dimensión de la capacond_projen la incrustación del paso de tiempo.
Un modelo 3D UNet condicional que toma una muestra con ruido, un estado condicional y un paso de tiempo y devuelve una salida con forma de muestra.
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).
Desactiva el mecanismo FreeU.
enable_forward_chunking
< source >( chunk_size: int | None = Nonedim: int = 0 )
Parámetros
- chunk_size (
int, opcional) — El tamaño de bloque de las capas feed-forward. Si no se especifica, se ejecutará la capa feed-forward de forma individual sobre cada tensor con dim=dim. - dim (
int, opcional, valor predeterminado0) — La dimensión sobre la que se debe dividir en bloques el cálculo de la red feed-forward. Elija entre dim=0 (lote) o dim=1 (longitud de la secuencia).
Establece el procesador de atención para usar fragmentación de avance hacia adelante.
enable_freeu
< source >( s1s2b1b2 )
Parámetros
- s1 (
float) — Factor de escala para la etapa 1 para atenuar las contribuciones de las características de salto. Esto se hace para mitigar el “efecto de sobre-almohadillado” en el proceso de desruido mejorado. - s2 (
float) — Factor de escala para la etapa 2 para atenuar las contribuciones de las características de salto. Esto se hace para mitigar el “efecto de sobre-estriado” en el proceso de desruido mejorado. - b1 (
float) — Factor de escala para la etapa 1 para amplificar las contribuciones de las características del backbone. - b2 (
float) — Factor de escala para la etapa 2 para amplificar las contribuciones de las características del backbone.
Habilita el mecanismo FreeU de https://huggingface.co/papers/2309.11497.
Los sufijos después de los factores de escalado representan los bloques de etapa en los que se están aplicando.
Consulte el repositorio oficial para conocer las combinaciones de valores que funcionan bien en diferentes pipelines, como Stable Diffusion v1, v2 y Stable Diffusion XL.
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorclass_labels: typing.Optional[torch.Tensor] = Nonetimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNet3DConditionOutput or tuple
Parámetros
- sample (
torch.Tensor) — El tensor de entrada con ruido con la siguiente forma(batch, num_channels, num_frames, height, width. - timestep (
torch.Tensorofloatoint) — El número de pasos de tiempo para desruidar una entrada. - encoder_hidden_states (
torch.Tensor) — Los estados ocultos del codificador con forma(batch, sequence_length, feature_dim). - class_labels (
torch.Tensor, opcional, valor predeterminadoNone) — Etiquetas de clase opcionales para la condición. Sus incrustaciones se sumarán con las incrustaciones del paso de tiempo. - timestep_cond — (
torch.Tensor, opcional, valor predeterminadoNone): Incrustados condicionales para el paso de tiempo. Si se proporcionan, los incrustados se sumarán con las muestras pasadas a través de la capaself.time_embeddingpara obtener los incrustados del paso de tiempo. - attention_mask (
torch.Tensor, opcional, valor predeterminadoNone) — Una máscara de atención de forma(batch, key_tokens)se aplica aencoder_hidden_states. Si el valor es1, la máscara se conserva; en caso contrario, si es0, se descarta. La máscara se convierte en un sesgo que suma valores negativos grandes a las puntuaciones de atención correspondientes a los tokens “descartados”. - cross_attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor. - down_block_additional_residuals — (
tupledetorch.Tensor, opcional): Una tupla de tensores que, si se especifica, se suma a los residuos de los bloques down de unet. - mid_block_additional_residual — (
torch.Tensor, opcional): Un tensor que, si se especifica, se suma al residual del bloque intermedio de unet. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver un UNet3DConditionOutput en lugar de una tupla simple. - cross_attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttnProcessor.
Devuelve
UNet3DConditionOutput o tuple
Si return_dict es True, se devuelve un UNet3DConditionOutput,
en caso contrario se devuelve una tuple donde el primer elemento es el tensor de la muestra.
El método forward de UNet3DConditionModel.
Habilita las proyecciones QKV fusionadas. Para los módulos de autoatención, todas las matrices de proyección (es decir, consulta, clave y valor) se fusionan. Para los módulos de atención cruzada, las matrices de proyección de clave y valor se fusionan.
> Esta API es 🧪 experimental.
set_attention_slice
< source >( slice_size: str | int | list[int] )
Parámetros
- slice_size (
strointolist(int), opcional, valor predeterminado"auto") — Cuando es"auto", la entrada a las cabezas de atención se divide a la mitad, por lo que la atención se calcula en dos pasos. Si es"max", se ahorra la máxima cantidad de memoria ejecutando solo una porción a la vez. Si se proporciona un número, se usan tantas porciones comoattention_head_dim // slice_size. En este caso,attention_head_dimdebe ser un múltiplo deslice_size.
Habilitar el cálculo de atención segmentada.
Cuando esta opción está habilitada, el módulo de atención divide el tensor de entrada en fragmentos para calcular la atención en varias etapas. Esto es útil para ahorrar algo de memoria a cambio de una pequeña disminución en la velocidad.
Desactiva los procesadores de atención personalizados y establece la implementación de atención predeterminada.
Desactiva la proyección QKV fusionada si está habilitada.
> Esta API es 🧪 experimental.
UNet3DConditionOutput
clase diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput
< source >( sample: Tensor )
La salida de UNet3DConditionModel.