Diffusers documentation
RePaintScheduler
RePaintScheduler
RePaintScheduler는 극단적인 마스크를 사용하는 비지도 inpainting을 위한 DDPM 기반 inpainting 스케줄러입니다. RePaintPipeline과 함께 사용하도록 설계되었으며, Andreas Lugmayr 외의 논문 RePaint: Inpainting using Denoising Diffusion Probabilistic Models에 기반합니다.
해당 논문의 초록은 다음과 같습니다:
Free-form inpainting은 임의의 바이너리 마스크로 지정된 영역에 새로운 콘텐츠를 추가하는 작업입니다. 대부분의 기존 접근 방식은 특정 마스크 분포를 대상으로 학습하여, 확인하지 못한 마스크 유형에 대한 일반화 능력을 제한합니다. 또한, 픽셀 단위 손실과 지각 손실을 사용하여 학습하면 의미론적으로 의미 있는 생성 대신 누락된 영역으로의 단순한 질감 확장으로 이어지는 경우가 많습니다. 이 작업에서는 극단적인 마스크에도 적용 가능한 DDPM(Denoising Diffusion Probabilistic Model) 기반 인페인팅 접근 방식인 RePaint를 제안합니다. 생성 사전 분포로 사전 학습된 무조건부 DDPM을 사용합니다. 생성 과정을 조건화하기 위해, 주어진 이미지 정보를 사용하여 마스크가 적용되지 않은 영역을 샘플링하여 역 확산 반복만 수정합니다. 이 기법은 원래 DDPM 네트워크 자체를 수정하거나 조건화하지 않으므로, 모델은 어떤 인페인팅 형태에 대해서도 고품질이고 다양한 출력 이미지를 생성합니다. 표준 및 극단적인 마스크를 사용하여 얼굴 및 일반 목적 이미지 인페인팅 모두에서 우리의 방법을 검증했습니다. RePaint는 6가지 마스크 분포 중 최소 5가지에서 최첨단 자기회귀(Autoregressive) 및 GAN 접근 방식을 능가합니다. GitHub 저장소: this http URL.
원래 구현은 andreas128/RePaint에서 찾을 수 있습니다.
RePaintScheduler
클래스 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 )
매개변수
- num_train_timesteps (
int, 기본값1000) — 모델을 학습할 때 사용할 diffusion 단계 수입니다. - beta_start (
float, 기본값0.0001) — 추론의 시작beta값입니다. - beta_end (
float, 기본값0.02) — 최종beta값입니다. - beta_schedule (
str, 기본값"linear") — 모델을 스테핑하기 위한 베타 범위에서 베타 시퀀스로의 매핑인 베타 스케줄입니다.linear,scaled_linear,squaredcos_cap_v2, 또는sigmoid중 하나를 선택합니다. - eta (
float, 기본값0.0) — 확산 단계에서 추가되는 노이즈의 가중치입니다.0.0값은 DDIM에,1.0값은 DDPM에 해당합니다. - trained_betas (
np.ndarray, 선택 사항) —beta_start와beta_end를 우회하여 베타 배열을 생성자에 직접 전달합니다. - clip_sample (
bool, 기본값True) — 수치적 안정성을 위해 예측된 샘플을 -1과 1 사이로 클리핑합니다.
RePaintScheduler는 주어진 마스크 내에서 DDPM 인페인팅을 수행하는 스케줄러입니다.
이 모델은 SchedulerMixin과 ConfigMixin을 상속합니다. 로딩 및 저장과 같은 모든 스케줄러에 대해 라이브러리가 구현하는 일반적 메서드에 대해서는 상위 클래스 문서를 확인하세요.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor )
매개변수
- original_samples (
torch.Tensor) — 노이즈를 추가할 원래 샘플입니다. - noise (
torch.Tensor) — 샘플에 추가될 노이즈입니다. - timesteps (
torch.IntTensor) — 각 샘플의 노이즈 수준을 결정하는 timesteps입니다.
발생
NotImplementedError
NotImplementedError— RePaint 학습은 DDPMScheduler.add_noise()를 사용해야 합니다.
RePaint 학습을 위한 노이즈 추가는 이 스케줄러에서 지원되지 않음을 나타냅니다.
scale_model_input
< source >( sample: Tensortimestep: int | None = None ) → torch.Tensor
현재 timestep에 따라 denoising 모델 입력을 scale해야 하는 scheduler와의 호환성을 보장합니다.
set_timesteps
< source >( num_inference_steps: intjump_length: int = 10jump_n_sample: int = 10device: typing.Union[str, torch.device, NoneType] = None )
매개변수
- num_inference_steps (
int) — 학습된 모델로 샘플을 생성할 때 사용되는 diffusion 단계 수입니다. - jump_length (
int, 기본값10) — RePaint 논문에서 단일 점프(“j”)를 수행하기 전에 시간 전방으로 이동하는 단계 수입니다. 논문의 Figure 9와 10을 참고하세요. - jump_n_sample (
int, 기본값10) — 주어진 시간 샘플에 대해 포워드 타임 점프를 수행할 횟수입니다. 논문에서 Figure 9와 10을 참고하세요. - device (
str또는torch.device, 선택 사항) — timesteps를 이동할 대상 device입니다.None인 경우 timesteps는 이동되지 않습니다.
추론 실행 전에 실행할 diffusion chain에 사용할 이산 timesteps를 설정합니다.
단계
< source >( model_output: Tensortimestep: intsample: Tensororiginal_image: Tensormask: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → RePaintSchedulerOutput or tuple[torch.Tensor, torch.Tensor]
매개변수
- model_output (
torch.Tensor) — 학습된 diffusion 모델의 직접적인 출력입니다. - timestep (
int) — 확산 체인(diffusion chain)의 현재 이산 시간 단계(discrete timestep)입니다. - sample (
torch.Tensor) — 확산 과정에 의해 생성된 샘플의 현재 인스턴스입니다. - original_image (
torch.Tensor) — 인페인팅을 수행할 원본 이미지입니다. - mask (
torch.Tensor) — 원본 이미지 중 inpaint할 부분을 0.0 값으로 나타내는 마스크입니다. - generator (
torch.Generator, 선택 사항) — 난수 생성기입니다. - return_dict (
bool, 기본값True) — tuple 대신 RePaintSchedulerOutput를 반환할지 여부.
반환값
RePaintSchedulerOutput 또는 tuple[torch.Tensor, torch.Tensor]
return_dict가 True인 경우 RePaintSchedulerOutput이 반환되고, 그렇지 않으면 첫 번째 요소가 이전 샘플, 두 번째 요소가 예측된 원래 샘플인 튜플이 반환됩니다.
이전 시간 단계의 샘플을 SDE를 역방향으로 적용하여 예측합니다. 이 함수는 학습된 모델의 출력(대부분 예측된 노이즈)으로부터 확산 과정을 전파합니다.
undo_step
< source >( sample: Tensortimestep: intgenerator: typing.Optional[torch.Generator] = None ) → torch.Tensor
샘플에 노이즈를 추가하여 확산 단계를 한 단계 앞으로 진행합니다.
RePaintSchedulerOutput
class diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: Tensor )
매개변수
- prev_sample (이미지의 경우
torch.Tensor, shape(batch_size, num_channels, height, width)) — 이전 timestep의 계산된 샘플(x_{t-1}).prev_sample은 denoising 루프에서 다음 모델 입력으로 사용해야 합니다. - pred_original_sample (
torch.Tensor, 이미지의 경우 shape(batch_size, num_channels, height, width)) — 현재 timestep의 모델 출력에 기반한 예측된 디노이즈 샘플(x_{0}).pred_original_sample은 진행 상황 미리보기 또는 가이던스에 사용할 수 있습니다.
스케줄러의 step 함수 출력을 위한 출력 클래스.