AI 이미지/SD Video

얼굴이 동일한 비디오를 빠르게 생성하기 - ComfyUI

하늘이푸른오늘 2023. 12. 28. 11:30

이 글에서는 Video-to-video 기법, 즉 기존의 비디오를 소스로 해서 인물과 배경을 바꾼 새로운 비디오를 생성하는 기법을 설명합니다. 다만, 예전 글에서 설명한 것처럼,  Video-to-video를 적용하면 화면이 번쩍거리던가 매 장면마다 사람 얼굴이 바뀌는 등의 문제가 발생하기 쉬운데, 여기서는 이런 문제를 해결한 비디오를 생성합니다. 여기서 다루는 사항은 아래와 같습니다.

  • IP-adapter - 얼굴을 일관성있게 유지하는데 중요합니다.
  • 다중 콘트롤넷 - 프레임간 움직임을 일정하게 유지하는데 중요합니다.
  • AnimateDiff - 프레임간 일관성 유지에 필요합니다. 원래 짧은 비디오를 생성하는 img-to-video 모델입니다.
  • LCM LoRA - 비디오 생성속도를 3배 이상 빠르게 합니다.
  • Detailer(ComfyUI의 ADetailer) - 얼굴을 수정합니다(AnimateDiff와 함께 사용해서 일관성을 유지합니다)

최종 생성 비디오(GIF 버전, 품질 저하 버전)

이 글의 목차는 아래와 같습니다.

소프트웨어

이 글에서는 노드-링크 기반의 스테이블 디퓨전 GUI인 ComfyUI를 사용합니다. ComfyUI 가 처음이신 분은 설치 및 기초 사용법초보자 가이드를 참고하시기 바랍니다.

따라해 보기

1단계 : ComfyUI 워크플로 불러오기

아래의 .json 파일을 다운로드 받은 후, ComfyUI 캔버스에 Drag&Drop하면 이 워크플로를 사용할 수 있습니다. 워크플로가 엄청 복잡하네요. 물론 그럴 수 밖에 없겠지만요... ㅎ

animatediff-v2v-controlnet-openpose-HED-LCM-LoRA-detailer2.json
0.05MB

2단계 : ComfyUI 업데이트

매번 다른 사람이 제작한 새로운 워크플로를 불러올 때마다, 아래의 작업이 필요할 수 있습니다.

저의 경우엔 매번 ComfyUI를 새로 시작할 때마다 ComfyUI Manager를 실행하고 [Update All] 버튼을 눌러주고 있습니다.

3단계 : 비디오 입력 설정

아래 파일이 여기에서 사용하는 비디오입니다. 이걸 다운로드 받습니다.

dance4.mp4
8.20MB

그 다음 [Load Video(Upload)] 노드에 넣어줍니다. 여기에서 frame_load_cap은 최대 사용 프레임 수입니다. 테스트용이면 16으로 설정하세요.

비디오의 크기를 설정합니다. 이 값은 입력한 비디오의 크기와 일치해야 합니다.

4 단계 : 모델 다운로드

체크포인트 모델은 IMP v1.0 모델을 사용합니다. 다운로드 받고 ComfyUI\models\checkpoints 폴더에 넣어줍니다(AUTOMATIC1111과 모델을 공유할 경우 이 글을 보세요) 그 다음 화면을 새로고침(F5)하고 [Load Checkpoint w/ Noise Selector] 노드에서 선택합니다.

이 워크플로는 Stability.ai 사의 표준 VAE인 FT-MSE-840000 VAE 모델을 사용합니다. 다운로드 받고 ComfyUI\models\vae 폴더에 넣어줍니다(AUTOMATIC1111과 모델을 공유할 경우 이 글을 보세요) 그 다음 화면을 새로고침(F5)하고 [Load VAE] 노드에서 선택합니다.

이 워크플로는 IP-adpater를 사용하여 얼굴 및 옷의 일관성을 유지합니다. IP adapter 모델을 다운로드 받고, ComfyUI\models\ipadapter 폴더에 넣어줍니다. 그 다음 화면을 새로고침(F5)하고 [Load IPADdapter Model] 노드에서 선택합니다.

또한 SD 1.5 CLip vision 모델을 다운로드 받고 (파일명을 clip_vision_sd15.safetensors로 변경하세요), ComfyUI\models\clip_vision 폴더에 넣어줍니다. 그 다음 화면을 새로고침(F5)하고 [Load CLIP Vision] 노드에서 선택합니다. 

다음으로 참조 이미지를 [Load Image(IP-adapter)] 노드에서 선택합니다. 아래의 파일을 사용하셔도 됩니다.

17047-2451536345-full-body-woman-pink-hair-black-jean-white-top-white-background.png
0.28MB

 

이 워크플로에서는 add_detail LoRA를 사용합니다. 다운로드 받아서 ComfyUI\models\lora 폴더에 넣어줍니다. (AUTOMATIC1111과 모델을 공유할 경우 이 글을 보세요) 그 다음 화면을 새로고침(F5)하고 [Load LoRA] 노드에서 선택합니다.

이 워크플로에서는 OpenPose ControlNet 모델과 Soft Edge ControlNet 모델을 사용합니다. 다운로드 받아서 ComfyUI\models\controlnet 폴더에 넣어줍니다. (AUTOMATIC1111과 모델을 공유할 경우 이 글을 보세요) 그 다음 화면을 새로고침(F5)하고 각각 [Load Advanced ControlNet Model] 노드에서 선택합니다.

AnimateDiff 모델에서는 추가로 Motion Model v0.1 모듈을 다운로드 받아 ComfyUI\custom_nodes\ComfyUI-AnimateDiff-evolved\models에 넣어줍니다. 그 다음 화면을 새로고침(F5)하고 각각 [AnimateDiff Loader] 노드에서 선택합니다.

마지막으로 LCM LoRA를 다운로드 받아 ComfyUI\models\loras에 넣어줍니다. 가능하면 lcm-lora-sd15.safetentors 로 이름을 변경해줍니다. (AUTOMATIC1111과 모델을 공유할 경우 이 글을 보세요) 그 다음 화면을 새로고침(F5)하고 각각 [Load LoRA] 노드에서 선택합니다.

5단계 : 비디오 생성

DWPose 전처리기는 CPU를 사용하는 것이 기본 값입니다. 느릴 수 밖에 없죠. Nvidia GPU 카드가 있을 경우, ComfyUI_windows_portable\phtyon_embded 폴더에 들어가 아래의 명령을 실행합니다.  (그런데 이렇게 해도 GPU를 사용하지 않네요. 뭔가 오류가 있나봅니다.ㅠㅠ)

python -m pip install onnxruntime-gpu --user

완료되면 [Queue Prompt] 를 눌러 생성합니다. 아래는 결과입니다. LCM LoRA 를 사용해 시간을 줄였다고 줄였는데도 엄청나게 시간을 잡아먹네요. 3070을 사용하는데 거의 3시간이 걸렸습니다. ㅠㅠ

비디오 변경 방법

씨드 번호

이렇게 해도 얼굴이 변할 수 있는데, 이 때 씨드 번호를 변경하면 해결되는 경우가 있다고 합니다.

프롬프트

프롬프트를 바꾸거나 IP-adapter 의 참조 이미지를 바꾸면 캐릭터의 모습을 변경할 수 있습니다. 이 때 프롬프트를 IP-Adapter 참조 이미지를 생성하기 위한 프롬프트가 되도록(가능한 한) 지정하는 것이 좋습니다.

Soft Edge 콘트롤넷을 사용하기 때문에 배경은 그다지 변경되지 않습니다.

참고

동일한 인물 유지 방법

이 워크플로에서 동일한 인물을 유지하기 위한 요소는 아래와 같습니다.

  • ControlNet Openpose
  • ControlNet SoftEdge HED
  • IP-adapter

Openpose 만으로는 사람의 자세를 일정하게 유지할 수 없습니다. 그래서 ControlNet SoftEdge으로 생성한 외곽선으로 인물 생성 위치를 고정시킵니다.

IP-adapter는 인물의 얼굴 및 옷을 고정시키는 데 사용합니다. 이를 사용하지 않으면 인물이 너무 많이 변하게 됩니다.

얼굴 수정

ComfyUI Impact Pack에 포함된 Detailer노드는 얼굴을 수정하는데 사용됩니다. 이는 특별히 AnimateDiff를 위해 설계된 인페인트 노드입니다.

체크포인트 모델

어떤 체크포인트 모델을 사용하느냐는 애니메이션의 품질에 매우 큰 영향을 미칩니다. 일부 모델, 특히 일부 애니 모델의 경우 깨끗한 이미지를 생성하지 못합니다.

LoRA 모델

이 워크플로에 사용된 LoRA 는 다음과 같은 역할을 합니다.

  • Add_detail - 이미지에 세부적인 디테일을 추가합니다.
  • LCM LoRA - 속도를 빠르게 합니다.

IP-adapter

IP-adapter는 고정된 인물을 생성하는데 가장 중요한 역할을 합니다. 하지만 가중치(weight)를 너무 크게 하면 비디오가 흐려지게 될 수 있으니 주의해야 합니다.

IP-adapter용 참조 이미지는 배경을 제거하여야 합니다. 아니면 비디오에 배경이 스며들 수 있습니다.

ControlNet

이 워크플로에서는 ControlNet SoftEdge HED를 사용합니다. Lineart 콘트롤넷에 비하면 캐릭터를 생성할 때의 위치가 약간 더 자유롭게 됩니다. 덜 고정되기 때문입니다.

이 콘트롤넷의 가중치와 끝 위치(end percent)는 낮게 설정되어 있습니다. 배경을 고정하지 못하도록 하기 위해서입니다.

프롬프트

프롬프트는 좀더 자세하게 지정하고 고정시키는 것이 좋습니다. 예를 들면 머리색, 옷, 신발 등에 대한 프롬프트를 추가해 주면 좋습니다. 

또한 비디오에 나타나지 않아야할 물체 이름을 부정적 프롬프트에 넣어주는 것이 좋습니다.

민, 푸른하늘