WebUI版AnimateDiffの品質の改善方法

かなり雑なやり方なので、全ての状況で機能するかはわかりません。自己責任でお願いします。
浅い知識でやっているので、正式な修正に関してはissueで依頼をしています。

AnimateDiffのオリジナルリポジトリでの生成時のalphas_cumprodを出力したものです。これをwebui-user.batと同じフォルダに入れます。

\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddim.pyを下記のように書き換えます。
(追記) ddim.pyの上の方にimport json も追加してください

    def make_schedule(self, ddim_num_steps, ddim_discretize="uniform", ddim_eta=0., verbose=True):
        self.ddim_timesteps = make_ddim_timesteps(ddim_discr_method=ddim_discretize, num_ddim_timesteps=ddim_num_steps,
                                                  num_ddpm_timesteps=self.ddpm_num_timesteps,verbose=verbose)
        alphas_cumprod = self.model.alphas_cumprod

        #ここに差し込む 
        #スケジュールの変更 
        with open('new_schedule.json', 'r') as f:
            new_schedule_list = json.load(f)
        new_schedule_tensor = torch.tensor(new_schedule_list)
        if new_schedule_tensor.shape == alphas_cumprod.shape:
            new_schedule_converted = new_schedule_tensor.to(dtype=alphas_cumprod.dtype, device=alphas_cumprod.device)
            alphas_cumprod = new_schedule_converted
        #ここに差し込む 

        assert alphas_cumprod.shape[0] == self.ddpm_num_timesteps, 'alphas have to be defined for each timestep'
        to_torch = lambda x: x.clone().detach().to(torch.float32).to(self.model.device)

そして、Sampling methodをDDIMにしてAnimateDiffで生成すると多分うまく行くと思います。

修正後
修正前

この記事が気に入ったらサポートをしてみませんか?