Diffusers documentation
UNetMotionModel
UNetMotionModel
Le modèle UNet a été initialement introduit par Ronneberger et al. pour la segmentation d’images biomédicales, mais il est également couramment utilisé dans 🤗 Diffusers car il produit des images de la même taille que l’entrée. C’est l’un des composants les plus importants d’un système de diffusion, car il facilite le processus de diffusion proprement dit. Il existe plusieurs variantes du modèle UNet dans 🤗 Diffusers, en fonction de son nombre de dimensions et de savoir s’il s’agit ou non d’un modèle conditionnel. Il s’agit ici d’un modèle UNet 2D.
L'abstract de l'article est :
Il est largement admis que l’entraînement réussi de réseaux profonds nécessite des milliers d’échantillons d’entraînement annotés. Dans cet article, nous présentons un réseau et une stratégie d’entraînement qui reposent sur l’utilisation intensive de l’augmentation de données afin d’exploiter plus efficacement les échantillons annotés disponibles. L’architecture se compose d’un chemin contractant pour capturer le contexte et d’un chemin d’expansion symétrique permettant une localisation précise. Nous montrons qu’un tel réseau peut être entraîné de bout en bout à partir de très peu d’images et qu’il surpasse la meilleure méthode antérieure (un réseau convolutif à fenêtre glissante) lors du défi ISBI de segmentation de structures neuronales dans des piles de microscopie électronique. En utilisant le même réseau entraîné sur des images de microscopie en lumière transmise (contraste de phase et DIC), nous avons remporté le défi ISBI de suivi cellulaire 2015 dans ces catégories avec une large avance. De plus, le réseau est rapide. La segmentation d’une image de 512x512 prend moins d’une seconde sur un GPU récent. L’implémentation complète (basée sur Caffe) et les réseaux entraînés sont disponibles à l’adresse http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net.
UNetMotionModel
classe diffusers.UNetMotionModel
< source >( sample_size: int | None = Nonein_channels: int = 4out_channels: int = 4down_block_types: tuple[str, ...] = ('CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'DownBlockMotion')up_block_types: tuple[str, ...] = ('UpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion')block_out_channels: tuple[int, ...] = (320, 640, 1280, 1280)layers_per_block: int | tuple[int] = 2downsample_padding: int = 1mid_block_scale_factor: float = 1act_fn: str = 'silu'norm_num_groups: int = 32norm_eps: float = 1e-05cross_attention_dim: int = 1280transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1reverse_transformer_layers_per_block: int | tuple[int] | tuple[tuple] | None = Nonetemporal_transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1reverse_temporal_transformer_layers_per_block: int | tuple[int] | tuple[tuple] | None = Nonetransformer_layers_per_mid_block: int | tuple[int] | None = Nonetemporal_transformer_layers_per_mid_block: int | tuple[int] | None = 1use_linear_projection: bool = Falsenum_attention_heads: int | tuple[int, ...] = 8motion_max_seq_length: int = 32motion_num_attention_heads: int | tuple[int, ...] = 8reverse_motion_num_attention_heads: int | tuple[int, ...] | tuple[tuple[int, ...], ...] | None = Noneuse_motion_mid_block: bool = Truemid_block_layers: int = 1encoder_hid_dim: int | None = Noneencoder_hid_dim_type: str | None = Noneaddition_embed_type: str | None = Noneaddition_time_embed_dim: int | None = Noneprojection_class_embeddings_input_dim: int | None = Nonetime_cond_proj_dim: int | None = None )
Un modèle de UNet 2D conditionnel modifié qui prend un échantillon bruité, un état conditionnel et un pas de temps en entrée et renvoie une sortie de la même forme que l'échantillon.
Ce modèle hérite de ModelMixin. Consultez la documentation de la classe parente pour ses méthodes génériques implémentées pour tous les modèles (téléchargement ou sauvegarde, par exemple).
Désactive le mécanisme FreeU.
enable_forward_chunking
< source >( chunk_size: int | None = Nonedim: int = 0 )
Paramètres
- chunk_size (
int, facultatif) — La taille des blocs des couches feed-forward. Si non spécifiée, la couche feed-forward est exécutée individuellement sur chaque tenseur de dim=dim. - dim (
int, facultatif, par défaut0) — La dimension sur laquelle le calcul feed-forward doit être découpé. Choisissez entre dim=0 (batch) ou dim=1 (longueur de la séquence).
Définit le processeur d'attention à utiliser feed forward chunking.
enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
Paramètres
- s1 (
float) — Facteur d'échelle pour l'étape 1 afin d'atténuer les contributions des caractéristiques de saut. Cela permet de mitiger l'« effet de sur-lissage » dans le processus de débruitage amélioré. - s2 (
float) — Facteur d'échelle de l'étape 2 pour atténuer les contributions des caractéristiques de saut. Cela permet de mitiger l'« effet de sur-lissage » dans le processus de débruitage amélioré. - b1 (
float) — Facteur d'échelle pour l'étape 1 afin d'amplifier les contributions des fonctionnalités du backbone. - b2 (
float) — Facteur d'échelle pour l'étape 2 afin d'amplifier les contributions des fonctionnalités du backbone.
Active le mécanisme FreeU de https://huggingface.co/papers/2309.11497.
Les suffixes après les facteurs d'échelle représentent les blocs de stades où ils sont appliqués.
Veuillez consulter le dépôt officiel pour les combinaisons de valeurs qui fonctionnent bien pour différents pipelines tels que Stable Diffusion v1, v2 et Stable Diffusion XL.
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensortimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneadded_cond_kwargs: dict[str, torch.Tensor] | None = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNetMotionOutput or tuple
Paramètres
- sample (
torch.Tensor) — Le tenseur d'entrée bruité de la forme suivante(batch, num_frames, channel, height, width. - timestep (
torch.Tensoroufloatouint) — Le nombre de pas de temps pour débruitiser une entrée. - encoder_hidden_states (
torch.Tensor) — Les états cachés de l’encodeur, de forme(batch, sequence_length, feature_dim). - timestep_cond — (
torch.Tensor, facultatif, valeur par défautNone) : Incrustations conditionnelles pour le pas de temps. Si fournies, les incrustations seront additionnées aux échantillons passés à travers la coucheself.time_embeddingpour obtenir les incrustations de pas de temps. - attention_mask (
torch.Tensor, facultatif, par défautNone) — Un masque d’attention de forme(batch, key_tokens)est appliqué àencoder_hidden_states. Si la valeur est1, le masque est conservé ; sinon, si elle est0, il est ignoré. Le masque est converti en biais, qui ajoute de grandes valeurs négatives aux scores d’attention correspondant aux jetons « ignorés ». - cross_attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessordéfini sousself.processordans diffusers.models.attention_processor. - added_cond_kwargs (
dict, facultatif) — Un dictionnaire d’embeddings supplémentaires (par exemple, embeddings de texte et de temps) utilisés pour conditionner le modèle. - down_block_additional_residuals — (
tupledetorch.Tensor, facultatif) : Un tuple de tenseurs qui, s'il est spécifié, est ajouté aux résidus des blocs down du unet. - mid_block_additional_residual — (
torch.Tensor, facultatif) : Un tenseur qui, s'il est spécifié, est ajouté au résidu du bloc intermédiaire de l'unet. - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner unUNetMotionOutputplutôt qu'un simple tuplet.
Retourne
UNetMotionOutput ou tuple
Si return_dict est True, un UNetMotionOutput est renvoyé,
sinon un tuple est renvoyé dont le premier élément est le tenseur d'échantillon.
La méthode forward du UNetMotionModel.
Gélez les poids du UNet2DConditionModel uniquement, et laissez les modules de mouvement non gelés pour l’affinage.
Active les projections QKV fusionnées. Pour les modules d'auto-attention, toutes les matrices de projection (c'est-à-dire requête, clé, valeur) sont fusionnées. Pour les modules d'attention croisée, les matrices de projection des clés et des valeurs sont fusionnées.
> Cette API est 🧪 expérimentale.
Désactive les processeurs d'attention personnalisés et définit l'implémentation d'attention par défaut.
Désactive la projection QKV fusionnée si elle est activée.
> Cette API est 🧪 expérimentale.
UNet3DConditionOutput
classe diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput
< source >( sample: Tensor )
La sortie de UNet3DConditionModel.