캐릭터 포즈를 잡고 싶으신가요? Wan 2.2 Pose Control 워크플로우를 소개합니다
요약
Wan 2.2 I2V 비디오 모델을 활용하여 캐릭터의 일관성을 유지하면서 특정 포즈를 구현하는 새로운 워크플로우를 소개합니다. 80프레임의 비디오 시퀀스를 생성하여 첫 프레임의 캐릭터가 마지막 프레임의 포즈를 취하도록 유도하는 독창적인 프롬프팅 기법을 다룹니다.
핵심 포인트
- Wan 2.2 I2V 모델을 이용한 캐릭터 포징 문제 해결
- 비디오 모델의 특성을 활용해 캐릭터 일관성 유지
- 80프레임 시퀀스 생성을 통한 단일 이미지 추출 기법
- 구조화된 프롬프트를 통한 캐릭터와 포즈의 결합
Wan 2.2 Pose Control
한동안 저는 오픈 웨이트 (open-weight) 모델을 사용하여 캐릭터 포징 (character posing) 문제를 해결하려고 노력해 왔습니다. 이전에 Flux.2 Klein을 사용했던 시도는 상당히 괜찮았지만, 스타일 블리딩 (style bleeding) 현상이 발생하고 원래 캐릭터의 비율 (예: 머리 대 몸의 비율)을 지키지 못하는 문제가 있었습니다. 캐릭터 일관성 (character consistency)은 이미지 편집 모델들이 여전히 어려움을 겪고 있는 부분이지만 (특히 스타일화된 캐릭터의 경우), 한 가지 예외가 있습니다. 바로 Wan2.2 I2V Video입니다. 비디오 모델에서는 캐릭터 일관성을 기대할 수 있지 않을까요?
I2V Wan 모델을 광범위하게 실험한 끝에, "image_1의 캐릭터를 image_2의 포즈로 넣는" 특정 프롬프팅 (prompting) 기법을 발견했습니다.
성격이 급하신 분들을 위해 워크플로우 링크를 공유합니다.
우리의 작업은 다음과 같이 들립니다:
"왼쪽에 있는 이 캐릭터를 가져와서 오른쪽의 포즈를 따라 하게 만드세요"
로컬 오픈 웨이트 모델을 사용하여 이를 수행하는 두 가지 방법이 있습니다:
- Flux.2 Klein 캐릭터 교체 워크플로우
- Wan 2.2 Pose Control 워크플로우 (이 포스트의 주제입니다)
각 방법의 결과는 다음과 같습니다:
[IMG:1]
[IMG:2]
폐쇄형 소스 (closed-source) 모델들과도 결과를 비교해 보겠습니다. 캐릭터 디자인은 해결되었지만 스타일 충실도 (style fidelity)가 떨어집니다. 제 생각에 거대한 멀티모달 (multimodal) 이미지 편집 모델조차 진정한 캐릭터 일관성에 도달하지 못하는 반면, 비디오 모델에게 그것은 그저 타고난 속성인 것 같습니다.
아이디어는 간단합니다: Wan 2.2에게 First-Frame-Last-Frame 모드를 사용하여 80프레임의 시퀀스를 생성하도록 요청하는 것입니다. 이 프레임 시퀀스는 4개의 부분으로 구성됩니다:
- 피사체가 그냥 서 있음
- 피사체가 포즈 참조 (pose reference)의 포즈를 복사하며 움직임
- 피사체 캐릭터가 포즈 참조의 캐릭터로 변형 (morph)됨
- 포즈 참조의 캐릭터가 프레임 안에 있음
우리의 목표는 피사체가 포즈 참조 이미지(pose reference image)의 포즈대로 서 있거나, 앉아 있거나, 누워 있는 단일 프레임을 얻는 것이지만, 아직 포즈 참조 이미지의 캐릭터로 변형(morph)되지는 않은 상태를 만드는 것입니다. 이를 위해 우리는 첫 번째 프레임에서 마지막 프레임으로의 전환이 가능한 한 부드럽게 이루어질 수 있도록 텍스트 프롬프트(text prompt)를 구성해야 합니다. 즉, 피사체에 대한 정보(디자인 및 스타일)와 포즈에 대한 정보가 프레임 시퀀스의 중간 지점에서 만나 우리가 원하는 결과를 만들어내도록 하는 것입니다.
네, 맞습니다. 우리는 단 하나의 이미지를 얻기 위해 무려 80개의 프레임을 생성합니다.
구조화된 프롬프트(structured prompt) 작성 방법
위의 예시 영상에서 사용된 두 가지 프롬프트는 다음과 같습니다:
은발 여성 (Silver hair woman)
0s: 짧은 은발을 가진 소녀가 초록색 주름치마와 가죽 부츠를 신고 서 있음
1s: 짧은 은발을 가진 소녀가 초록색 주름치마와 가죽 부츠를 신고 왼쪽으로 몸을 돌려 무릎을 꿇고, 왼손을 머리에 얹으며, 오른손을 다리 사이에 둠
2s: 그녀는 그 포즈를 유지한 채 고정됨. 장면이 다른 장면으로 전환됨
3s: 그녀의 몸이 흰색 배경에서 흰 피부와 대머리를 가진 다른 캐릭터로 변형됨
검은 수염 남성 (Black beard man)
0s: 날카로운 치아를 가진 흑인이 초록색 수트와 어두운 색 바지를 입고 흰색 배경에 서 있음
1s: 날카로운 치아를 가진 흑인이 초록색 수트와 어두운 색 바지를 입고 안락의자에 앉아 고개를 기울인 채 손을 턱에 대고 다리를 꼬고 있음
2s: 그는 그 포즈를 유지한 채 고정됨. 장면이 다른 장면으로 전환됨
3s: 그의 몸이 짧은 오렌지색 드레스, 오렌지색 탑 햇, 갈색 머리와 망사 스타킹을 착용한 다른 캐릭터로 변형됨
피사체에 대한 설명은 comfy-mtb 확장 기능의 Apply Text Template을 사용하여 추출할 수 있도록 반복적으로 작성되었습니다.
피사체 설명을 추출하여 다음과 같은 템플릿을 얻을 수 있습니다:
은발 여성 (Silver hair woman)
0s: {var_1}이(가) 서 있음
1s: {var_1}이(가) 왼쪽으로 몸을 돌려 무릎을 꿇고, 왼손을 머리에 대며, 오른손을 다리 사이에 둠
2s: 그녀는 그 자세를 그대로 유지함. 장면이 다른 장면으로 전환됨
3s: 그녀의 몸이 흰색 피부, 대머리, 흰색 배경을 가진 다른 캐릭터로 변함
검은 수염을 가진 남성 (Black beard man)
0s: {var_1}이(가) 흰색 배경에 서 있음
1s: {var_1}이(가) 고개를 기울이고 손을 턱에 댄 채 안락의자에 앉아 다리를 꼬고 있음
2s: 그는 그 자세를 그대로 유지함. 장면이 다른 장면으로 전환됨
3s: 그의 몸이 짧은 오렌지색 드레스, 오렌지색 탑 햇(top hat), 갈색 머리, 망사 스타킹을 착용한 다른 캐릭터로 변함
이 프롬프트의 4가지 구성 요소를 살펴보겠습니다.
0s - 초기 설명 (Initial description)
이 부분은 첫 번째 프레임을 설명하는 곳입니다. 대부분의 경우 'is standing (서 있음)'만으로 충분하지만, 피사체의 초기 포즈를 구체적으로 지정할 수도 있습니다.
1s - 실제 포징 (Actual posing)
이 부분은 피사체가 초기 포즈에서 목표 포즈로 이동하기 위해 취해야 하는 움직임을 지정하는 곳입니다. 쉼표로 구분된 단순한 움직임(왼쪽으로 돌기, 앉기, 웅크리기, 손 들기)이 가장 효과적입니다. 또한 목표 포즈에 다른 카메라 각도가 필요한 경우 'Camera follows his movement (카메라가 그의 움직임을 따라감)'를 추가할 수 있습니다.
2s - 장면 전환 전 일시 정지 (Pause before scene transition)
항상 동일하게 he/she keeps his pose frozen in place. Scene transitions into another scene (그/그녀는 그 자세를 그대로 유지함. 장면이 다른 장면으로 전환됨)을 사용합니다. 여기서 "Scene transitions into another scene" 부분이 가장 중요합니다. Wan 2.2는 (놀랍게도) 이 경계를 준수합니다.
3s - 마지막 프레임 고정 (Anchoring your last frame)
다음과 같이 작성합니다: body transforms into another character <마지막 프레임의 캐릭터 설명>. 우리는 Wan 2.2가 영상 시작 부분의 캐릭터와 영상 끝 부분의 캐릭터가 서로 다르다는 것을 이해하기를 원합니다.
실전 예시
지금까지 배운 내용을 연습해 봅시다. 여기 피사체와 포즈 이미지들이 있습니다:
피사체(subject)에 대한 설명부터 시작하세요. 특별한 기술은 필요 없습니다:
다음 단계는 움직임을 설명하는 것입니다:
마지막으로 마지막 프레임으로의 전환(transition)을 작성하세요
불행히도 실패했습니다:
Wan 2.2가 총의 위치는 포착했지만 포즈(pose)는 포착하지 못했습니다. 여기서 주요 원인은 타겟 이미지의 검은색 옷이 모델이 포즈를 "처리"하는 것을 방해하기 때문입니다. 다행히 Flux.2에서 이를 수정할 수 있습니다:
remove hair, remove clothes and draw this person bald and in skin tone underwear. Turn into white wireframe figure (머리카락 제거, 옷 제거, 이 사람을 대머리에 살구색 속옷을 입은 모습으로 그리기. 흰색 와이어프레임(wireframe) 피규어로 변환)
업데이트된 프롬프트로 Pose Control 워크플로우를 다시 실행합니다:
이번에는 결과가 훨씬 더 좋습니다:
이 지식을 활용하면 여러분의 특정 사례에 맞게 이 워크플로우를 조정할 수 있습니다.
워크플로우 링크 (권장되는 Wan 2.2 파인튜닝(finetune)에 대한 노트가 포함되어 있습니다)
몇 가지 팁:
- 첫 번째 프레임과 마지막 프레임 사이에 눈에 띄는 대비(contrast)가 있을 때(예: 다른 머리카락 색상, 피부색, 배경 등) 전체 프로세스가 가장 잘 작동합니다. 다른 모델을 사용하여 포즈 참조 이미지를 전처리(pre-process)하여 와이어프레임(wireframe) 피규어 마네킹으로 변환하면 Wan 2.2가 포즈를 읽을 확률이 높아집니다.
- 캐릭터 디자인의 일부 요소가 변경되는 경우(예: 장갑이 너무 빨리 사라지는 경향이 있음), 모델이 이 디자인 요소를 기억할 수 있도록 피사체 설명 프롬프트에 추가하세요.
- 피사체 이미지와 포즈 참조 이미지의 크기가 다른 경우, "Camera zooms in capturing new view" 또는 "Camera zooms out capturing new view"를 추가해 보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 r/StableDiffusion의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기