Diffusers documentation
UNetMotionModel
UNetMotionModel
UNet 모델은 Ronneberger et al이 생물의학 이미지 분할을 위해 처음 도입했지만, 입력과 동일한 크기의 이미지를 출력하기 때문에 🤗 Diffusers에서도 널리 사용됩니다. 실제 확산 과정을 담당하는 핵심 구성 요소 중 하나입니다. 🤗 Diffusers에는 차원 수와 조건부 모델 여부 등에 따라 UNet 모델의 여러 변형이 있습니다. 여기서는 2D UNet 모델입니다.
해당 논문의 초록은 다음과 같습니다:
딥 네트워크의 성공적인 학습에는 수천 개의 라벨이 붙은 학습 샘플이 필요하다는 데에 큰 합의가 있습니다. 본 논문에서는 데이터 증강을 강하게 활용하여 사용 가능한 라벨 샘플을 더 효율적으로 사용하는 네트워크와 학습 전략을 제시합니다. 아키텍처는 컨텍스트를 포착하기 위한 수축 경로와 정확한 위치 파악을 가능하게 하는 대칭적인 확장 경로로 구성됩니다. 이러한 네트워크가 매우 적은 이미지로 끝에서 끝까지(end-to-end) 학습될 수 있으며, 전자 현미경 스택의 신경 구조 분할을 위한 ISBI 챌린지에서 이전의 최선 방법(슬라이딩 윈도우 컨볼루션 네트워크)보다 우수한 성능을 보임을 보여줍니다. 동일한 네트워크를 투과광 현미경 이미지(위상 대비 및 DIC)로 학습하여, 해당 카테고리에서 ISBI 세포 추적 챌린지 2015를 큰 격차로 우승했습니다. 또한, 이 네트워크는 빠릅니다. 최신 GPU에서 512x512 이미지의 분할은 1초 미만으로 수행됩니다. 전체 구현(Caffe 기반)과 학습된 네트워크는 http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net에서 사용할 수 있습니다.
UNetMotionModel
클래스 diffusers.UNetMotionModel
< source >( sample_size: int | None = Nonein_channels: int = 4out_channels: int = 4down_block_types: tuple = ('CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'DownBlockMotion')up_block_types: tuple = ('UpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion')block_out_channels: tuple = (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 )
노이즈 샘플, 조건 상태, 타임스텝을 입력으로 받아 샘플 모양의 출력을 반환하는 수정된 조건부 2D UNet 모델입니다.
이 모델은 ModelMixin에서 상속됩니다. 모든 모델에 대해 구현된 일반적 메서드(다운로드 또는 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.
FreeU 메커니즘을 비활성화합니다.
enable_forward_chunking
< source >( chunk_size: int | None = Nonedim: int = 0 )
피드 포워드 청킹을 사용할 어텐션 프로세서를 설정합니다.
enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
매개변수
- s1 (
float) — 1단계의 스케일링 계수로, 스킵 특징의 기여도를 감쇠시키는 데 사용됩니다. 이는 강화된 노이즈 제거 과정에서 “과도한 매끄러움 효과(oversmoothing effect)”를 완화하기 위한 것입니다. - s2 (
float) — 2단계의 스케일링 계수로, 스킵 특징의 기여도를 감쇠시키는 데 사용됩니다. 이는 강화된 노이즈 제거 과정에서 “과도한 매끄러움 효과(oversmoothing effect)”를 완화하기 위한 것입니다. - b1 (
float) — 백본 특징의 기여도를 증폭하기 위한 1단계의 스케일링 계수. - b2 (
float) — 백본 특징의 기여도를 증폭하기 위한 2단계의 스케일링 계수.
https://huggingface.co/papers/2309.11497의 FreeU 메커니즘을 활성화합니다.
스케일링 인자 뒤에 붙는 접미사는 해당 인자가 적용되는 스테이지 블록을 나타냅니다.
Stable Diffusion v1, v2, 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
매개변수
- sample (
torch.Tensor) — 다음과 같은 형태(batch, num_frames, channel, height, width를 가진 노이즈 입력 텐서 - timestep (
torch.Tensor또는float또는int) — 입력의 노이즈를 제거할 타임스텝 수. - encoder_hidden_states (
torch.Tensor) —(batch, sequence_length, feature_dim)모양의 인코더 히든 상태입니다. - timestep_cond — (
torch.Tensor, 선택 사항, 기본값None): timestep에 대한 조건부 임베딩입니다. 값이 제공되면,self.time_embedding레이어를 통과한 샘플과 합산되어 timestep 임베딩을 생성합니다. - attention_mask (
torch.Tensor, 선택 사항, 기본값None) —(batch, key_tokens)형태의 attention mask가encoder_hidden_states에 적용됩니다.1인 경우 mask가 유지되고,0인 경우 폐기됩니다. Mask는 bias로 변환되어 “폐기” 토큰에 해당하는 attention score에 큰 음수 값을 더합니다. - cross_attention_kwargs (
dict, 선택 사항) — 지정된 경우 diffusers.models.attention_processor의self.processor에서 정의된AttentionProcessor로 전달되는 kwargs 사전입니다. - added_cond_kwargs (
dict, 선택 사항) — 모델을 조건부로 만들기 위해 사용되는 추가 임베딩(예: 텍스트 및 시간 임베딩)의 사전입니다. - down_block_additional_residuals — (
tupleoftorch.Tensor, 선택 사항): 지정된 경우, down unet 블록의 잔차에 추가되는 텐서의 튜플입니다. - mid_block_additional_residual — (
torch.Tensor, 선택 사항): 지정된 경우 중간 unet 블록의 잔차에 추가되는 텐서입니다. - return_dict (
bool, 선택 사항, 기본값True) —UNetMotionOutput을 반환할지, 아니면 단순 튜플을 반환할지를 결정합니다.
반환값
UNetMotionOutput 또는 tuple
return_dict가 True이면 UNetMotionOutput이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 tuple이 반환됩니다.
UNetMotionModel의 forward 메서드입니다.
UNet2DConditionModel의 가중치만 동결하고, motion modules은 동결 해제 상태로 유지하여 fine tuning을 수행합니다.
융합된 QKV 투영을 활성화합니다. 셀프 어텐션 모듈의 경우, 모든 투영 행렬(즉, 쿼리, 키, 값)이 융합됩니다. 크로스 어텐션 모듈의 경우, 키와 값 투영 행렬이 융합됩니다.
> 이 API는 🧪 실험적입니다.
커스텀 어텐션 프로세서를 비활성화하고 기본 어텐션 구현을 설정합니다.
UNet3DConditionOutput
클래스 diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput
< source >( sample: Tensor )
UNet3DConditionModel의 출력입니다.