요즘 Stable Diffusion 커뮤니티의 핫한 주제는 Video-to-Video입니다. 그 가운데에는 AnimateDiff 가 있죠. 저도 몇번 생성해봤지만, 아직도 잘 모르는 게 많아, 천천히 알아보려는 중입니다. 이 글은 AnimateDiff for AUTOMATIC1111에 이어 네번째 글로, https://wikiwiki.jp/sd_toshiaki/AnimateDiff 를 번역한 글입니다.
AnimateDiff 개요
- GIF 등의 짧은 동영상(표준은 16프레임/2초)을 생성하는 도구. Stable Diffusion을 기반으로 생성할 수 있다.
- AnimateDiff에 대한 공식 페이지는 여기
- AUTOMATIC1111(아래에서는 A1111으로 지칭) 용 AnimateDiff 확장은 여기
- VRAM이 12GB (xformers 사용 시 8GB 이하도 가능).
- txt2vid 및 vid2vid 가능
- 23/07에 기술 공개. 23/08경부터 활성화(ControlNet의 연동 가능하게 된 후(
- A1111에 확장을 설치하면 사용가능
- 참고로, v1.5.0 이전에는 버그가 많았다.(특정 모션 모델에서만 제대로 생성되지 않거나 색감이 이상하는 등). v1.5.0은 A1111 v1.6 이상에서 지원되므로, 제대로 동작하지 않는 경우 A1111 버전 확인 필요하다.
- 일반 이미지와 마찬가지로 ControlNet과 결합하여 다양한 제어가 가능하지만, 별도의 확장이므로버전에 따라 잘 동작하지 않을 수 있다.
- ComfyUI가 설정 가능한 파라미터가 더 많고, 확장 기능 간의 연동이 편하다.
사용방법 (A1111의 경우)
- 사용방법 가이드 : https://github.com/continue-revolution/sd-webui-animatediff#how-to-use (번역)
- 간략한 설명
- AnimateDiff 확장을 설치한다.
- 모션 모듈을 다운로드 받아 stable-diffusion\extensions\sd-webui-animatediff\model 폴더에 넣는다.
- 설정을 변경한다. (아마도 특정한 상황에서 생성이 실패하는 데 대한 대책)
모션 모듈이란?
동영상 생성에 필요한 '동작'을 학습한 파일입니다. 크게 v1 모델, v2 모델, v3 모델(23/12에 공개), sdxl-beta 가 있다. 아래는 AnimateDiff for Stable Diffusion WebUI의 [Motion Module Model Zoo]에 링크되어 있는 것을 나열합니다(23/09/19 기준). 동작의 크기와 안정성이 다르며, 그림에도 영향을 미칩니다.
아래에 생성한 이미지들에 대한 기본 설정 값은 아래와 같다.
모델 : beelmix_v10(모델 hash: Model hash: 5534a38029)
VAE : ClearVAE V2.3.safetensors (VAE hash : 500ea30284)
프롬프트: 1girl, hatsune miku, light smile, dancing, onstage, heart
부정적 프롬프트 : easynegative
샘플링 단계 : 25
샘플러 : DPM++ 2M SDE Karras
CFG 척도 : 7,
씨드: 0,
Clip skip: 2, Version: v1.6.0
mm_sd_v14.ckpt
- 기본 모듈. v1.5보다 동작이 큰 편임
mm_sd_v15_v2.ckpt
- 글자가 표시되는 등의 버그가 있던 v1.5의 개선
mm-Stabilized_mid
- 기본 모델보다 조금 더 안정적이라고 함
mm-Stabilized_high
- 기본 모델보다 훨씬 더 안정적이지만 움직임이 훨씬 적다.
TemporalDiff
- 원래의 모델보다 더 높은 수준의 비디오 일관성을 보여준다.
어떤 모델을 사용하는 게 좋은가?
애니 스타일 동영상의 경우 mm-Stabiized_high를 추천한다. 큰 움직임을 원한다면 mm-Stabiized_mid를 사용하는 것도 좋다. 모두 v1 모델로 이미지에 미치는 영향이 적다. 또한 사실적 사진 느낌의 경우 Improved Humans Motion Module(v2 모델)도 추천한다.(civitai에 있음. 애니 스타일에는 이미지에 미치는 영향이 크다) v3 모델은 아직 검증되지 않았다. 오리지날 v3 모델은 v2와 큰 차이가 없다.
A1111 에서 사용방법
- txt2img, img2img 페이지에서 AnimateDiff 영역을 펼치고, "Enable AnimateDiff"를 체크한다.
- "Motion module" 드롭다운에서 원하는 파일을 선택한다. Number of frames, closed loop 등 왼쪽
- "Save"는 저장 포맷이다. PNG를 선택하면 개별 프레임이 저장된다. TXT를 선택하면 프롬프트 등 설정 관련 내용이 저장된다.
- 이미지 크기는 512x512로 두고, Hires.fix는 Off, ADetailer 등의 확장도 꺼둔다. (속도가 매우 느려진다)
- 모델이나 샘플러 등은 원하는 대로 설정한다. img2img의 경우, 원본 이미지를 생성한 모델을 사용하는 것이 좋다.
- 프롬프트는 우선 "1girl"정도 아주 짧은 프롬프트로 시작한다. 부정적 프롬프트에 EasyNegative를 넣어주는 게 좋다.
- [Generate]를 누르고 잠시 기다리면 동영상이 생성된다. 속도가 느리면 VRAM이 부족하기 떄문일 가능성이 높다. xformer 옵션을 사용하면 실행속도가 느리다(저는 3070 8GB라 항상 켜두었습니다. ㅠㅠ).
- 하나의 GIF 내에 연속되지 않는, 다른 내용이 2개가 들어 있을 경우, Settings/Optimization에서 "Pad prompt/negative prompt to be same length"를 활성화시켜라.
아래는 생성 예이다.
모델 : beelmix_v10(모델 hash: Model hash: 5534a38029)
프롬프트: 1girl, hatsune miku, light smile, dancing, onstage, heart
매개변수
여기는 간략한 내용만 정리한다. 상세한 내용은 A1111 확장의 Readme를 참고하라.
- Context batch size : 동시에 생성하는 잠상의 갯수이다. 모션 모듈 학습에 사용된 기본값을 지정한다. 즉, v1의 경우 16이다.
- Number of frame : 생성하는 프레임수 (16-20 정도면 적당한 시간내에 생성 가능하다). 프롬프트 트래블 없이 이 값만 늘릴 경우, 움짤 후반의 품질이 나빠진다..
- FPS : 초당 프레임수. Number of frame이 16이고 FPS가 8 이면 2초짜리 움짤이 생성된다.
- Display loop number : GIF의 반복횟수. 0이면 무한
- Closed loop : 동영상의 앞뒤를 동일하게 하여 부드럽게 연결되도록 하는 설정이다. Number of frame이 Context batch size보다 클 경우에 활성화 된다. 자세한 내용은 A1111 확장의 Readme 를 참고하라.
- Stride : 1로 고정하는 것이 좋다.
- Overlap : 이 값을 크게하면 움직임이 부드러워지지만 생성속도가 느려진다. -1로 설정하면 Context batch size 의 1/4로 설정된다. 4~10 정도가 적당하다. 씨드 값을 고정한 상태에서 변경해보면 차이를 느낄 수 있을 것이다.
Number of Frames(20), Overlap(2) R-P |
Number of Frames(20), Overlap(5(-1)) R-P |
Number of Frames(20), Overlap(8) R-P |
Number of Frames(20), Overlap(2) R+P |
Number of Frames(20), Overlap(5(-1)) R+P |
Number of Frames(20), Overlap(8) R+P |
체크포인트 및 LoRA 특성
- 체크포인트와 LoRA는 대부분 문제없이 사용할 수 있다. 다만, 일부 체크포인트와 LoRA를 사용하면 출력이 이상해지는 경우가 있는데, 이유는 알 수 없다.
- 체크포인트에 따라 자연스러운 움직임이 나오는 것과 움직임이 별로 없는 것 등, 특성이 다르다. 실사사진과 병합한 모델이 자연스러운 움직임이 나오는 듯하다.
- LoRA는 정지 이미지에서 자세가 고정되는 것(과학습된 것)을 사용하면 움직임이 작아지는 경우가 있다.
프롬프트 작성 방법
- 일반 이미지와 마찬가지로, 원하는 동영상을 생성하려면 프롬프트 작성시 약간의 기법이 필요하다.
- 캐릭터의 포즈를 고정시키고 싶다면 v2v 또는 ControlNet을 이용하라.
- 프롬프트는 일반적으로 모든 프레임에 동일하게 적용된다. 하지만, 프레임별로 다르게 적용할 수도 있는데, 이를 프롬프트 트래블(prompt travel)이라고 한다.
- 23/10/08 부터 프롬프트 트래블이 지원되었다.
- Dynamic Prompt 확장을 설치해야 사용할 수 있다. - 잘못된 내용임
- ComfyUI의 경우, FizzNodes 커스톰 노드중 Batch Prompt Schedule 노드를 사용하여 구현한다.
프롬프트 트래블을 사용하지 않는 경우
- walking, racing, dancing 등 동작을 나타내는 프롬프트를 사용하면, 그 개념이 반영된 동영상이 생성된다.
- 일반 이미지로 표현할 수 없는 구도는 동영상으로도 표현이 불가능하다.
- 물, 불 과 같은 유체는 잘 표현된다.
campfile | rain | soap bubble |
프롬프트 트래블을 사용하는 경우
Dynamic Prompt 확장의 경우, 아래의 예와 같이 {@} 구문을 사용하며, | 로 구분한다.
1girl, hatsune miku,white dress,black skirt,standing,classroom,{@arms behind back|arms behind back|arms behind back|arms behind back|||crossed arms|crossed arms|crossed arms|crossed arms|||arms up,smile|arms up,smile|arms up,smile|arms up,smile}
콘트롤넷
콘트롤넷을 사용하면 각 프레임을 제어하여, 2장의 이미지를 사용해 중간을 채우는 방법이나, 자세를 지정하여 동작을 구현하거나, 기타 구도를 지정할 수 있다.
23/10/02에 A1111용 확장으로 구현되었다. 자세한 내용은 Readme를 참고하라. ComfyUI를 사용하는 것이 자세히 제어할 수 있다.
AI 확대기(UpScaler)
동영상의 품질을 향상시키기 위해 AI 확대기(UpScaler)를 사용할 수 있다. 일반 이미지의 Hires.fix 와 동등하다.
- 출력한 모든 프레임 이미지를 img2img 로 각각 확대한 후 동영상으로 만들 수도 있다. 이경우 프레임간 연관을 고려하지 않으므로 부자연스러운 영상이 만들어지는 경우가 많다. 그래도 하겠다면, 잡음제거강도(Denoising Strength)를 작게 설정하고 Batch로 처리하는 것이 편하다
- A1111의 경우 [Hires.fix]을 켜고 동영상을 생성하면 된다. 다만 몇 배의 시간이 걸리는데다 랜덤 뽑기까지 고려하면 안하는 것이 좋다.
- ComfyUI에서는 동영상 생성과 업스케일링을 분리할 수 있다.
기타 고려사항
- 생성 프레임수가 늘어나면 배경이 달라지기 쉽다(ComfyUI에서는 motion_scale을 설정하면 어느정도 해결 가능하다)
- Settings에서 [Always save all generated image grids]를 ON으로 두면 모든 프레임이 정리된 GRID가 저장된다.
- 23/9/25 모션 LoRA가 공개되었다. v2 모델에서만 사용할 수 있다.
ComfyUI에서 사용방법
프롬프트 트래블 없는 워크플로
- ComfyUI 기본적인 사용방법 - 설치 방법 및 기본 사용법, 튜토리얼
- 필요한 커스톰 노드
- AnimateDiff Evolved
- ComfyUI-VideoHelperSuite - 동영상 read & write
- FizzNodes - 프롬프트 트래블
프롬프트 트래블 없는 워크플로
- AnimateDiffLoader (Gen ①) : 모션 모듈을 선택한다. 아래와 같이 하면 A1111 과 모델파일을 공유할 수 있다.
- Context Options - 루프 버전의 경우 [Context Options - Looped Uniform]노드를, 아닐 경우에는 [ContextOptions - Standard Static] 노드를 사용한다.
- context_length - 모션모듈 v1.4/1.5의 경우 16 으로 고정하여 사용한다.
- context_stride - 1 로 고정하여 사용
- context_overlap - 프레임 영상 생성시 반영하는 앞뒤 프레임 수. 2~10 정도. 크게하면 이동이 부드러워지나 생성속도가 느려진다.
- closed loop - true 로 설정하면 루프가 강조됨. false 로 설정하면??
프롬프트 트래블 사용하는 워크플로
- Batch Prompt Schedule (Latent Input)
- text - 프레임별 프롬프트. "0":"classroom,hatsune miku", "4":"classroom,hatsune miku", 이런 식으로 입력함. \
- pre_text - 모든 프롬프트 앞에 붙는 공통 텍스트
- app_text - 모든 프롬프트 뒤에 붙는 공통 텍스트
이상입니다.
===
- ComfyUI로 설치 및 사용법 기초
- ComfyUI 투토리얼
- ComfyUI를 위한 유용한 정보
- ComfyUI와 SDXL 사용법(1) - 기초
- ComfyUI에서 ControlNet 사용법
- 편리한 ComfyUI 워크플로 모음
- LCM-LoRA - 초고속 스테이블 디퓨전
- Stable Video Diffusion(비디오 스테이블 디퓨전)
- Stable Diffusion 인공지능 이미지 생초보 가이드
- Stable Diffusion 대표 UI - AUTOMATIC1111 설치방법
- Automatic1111 GUI: 초보자 가이드(메뉴 해설)
- Stable Diffusion에 대한 기본적인 이론
- ChatGPT로 스테이블 디퓨전 프롬프트 만들기