DW Openpose로 인물 수정하기 (ft.IP-Adapter)

스테이블 디퓨전의 컨트롤넷 기능 중 오픈포즈(openpose)는 인물을 컬러풀 뼈다구로 간소화하여 각 관절을 제어할 수 있도록 해주는 기술입니다. 전통적인 오픈포즈 기술은 스테이블 디퓨전 뿐만 아니라 3D, 모션 등 다양한 분야에서 범용적으로 사용되고 있는데요, 오늘은 기존의 오픈포즈 기술에서 조금더 정확도가 향상된 DW openpose를 활용해 스테이블 디퓨전에서 인물을 수정하는 방법에 대해 살펴보고자 합니다.

DW openpose 설치

DW openpose는 기존의 컨트롤넷이 설치되어 있고 openpose 모델을 다운받아 이용중인 분들께서는 따로 추가로 설치할 부분은 없습니다. WebUI 컨트롤넷 설치 및 오픈포즈 모델 다운로드 방법에 대해 도움이 필요하신 분들은 아래 글을 참고하시기 바랍니다.

DW openpose 인물 자세 수정방법

DW openpose는 기존 openpose와 사용법이 완전히 동일합니다. 여기서는 간단히 인물 자세를 수정하는 방법을 살펴보면서 DW openpose의 기초 사용법에 대해 먼저 살펴보도록 하겠습니다.

Allow Preview

T2I에서 컨트롤넷을 사용하거나, I2I에서 컨트롤 이미지를 따로 업로드하여 컨트롤넷을 사용하는 경우, 이미지를 생성하기 전에 미리 컨트롤넷의 전처리를 진행하고, 전처리 결과를 볼 수 있습니다.

위 이미지는 T2I로 생성한 이미지를 원본 이미지로 사용하여 컨트롤넷 Openpose로 전처리를 진행한 모습입니다. 위 그림을 참고하여 Allow Preview를 활성화하고, Preprocessor를 dw_openpose_full로 선택한 뒤, 바로 오른쪽에 있는 폭발모양(?) 아이콘을 클릭하면 원본 사진을 기반으로 포즈 뼉다구가 추출되어 원본 이미지 우측 전처리기 프리뷰(Preprocessor Preview)에 생성됩니다. DW Openpose의 성능이 매우 좋아서 원본 이미지에 메인 모델의 포즈와 손가락은 물론, 그 뒤에 앉아있는 사람의 얼굴까지 인식한 모습입니다.

Edit

전처리를 완료한 뒤 뼉따구 우측 아래에 버튼4개를 확인할 수 있습니다. 여기서 Edit을 누르면 곧바로 이 뼉따구를 수정할 수 있습니다. 만약 Edit 버튼이 보이지 않는다면 아래 이미지를 참고하여 WebUI 설정을 바꿔주신 후 재시작하시기 바랍니다.

Disable openpose edit, Disable photopea edit을 비활성화해주시면 Edit 버튼과 포토피아 Edit 버튼이 모두 표시됩니다. 포토피아 Edit 버튼을 누를 경우 경우 컨트롤넷에서 무료 웹 이미지 에디터인 포토피아(Photopea)로 바로 전처리 이미지를 보내서 수정할 수 있습니다. 여기서는 그냥 Edit 버튼을 함께 살펴보겠습니다. 버튼을 누르면 아래와 같은 화면이 팝업으로 새로 나타납니다.

이제 여기서 DW openpose full로 전처리한 오픈포즈 뼉따구를 직접 수정할 수 있습니다. 뒷편에 앉아 있는 인물에 대한 포즈는 삭제하고, 전면 메인 인물의 오른손을 들어보겠습니다.

뼉따구의 점을 마우스로 클릭하면 분리가 되므로, 내가 움직이고자 하는 부위만 마우스로 드래그해서 그룹으로 선택한 뒤 이동하시면 됩니다. 선택한 뼈대 그룹이 이동함에 따라 연결된 빼대의 길이나 위치가 자동으로 따라옵니다. 이후 포즈 수정이 끝났다면 좌측에서 “ControlNet에 자세 보내기”를 선택합니다. 그럼 전처리기에 자세가 수정한 자세로 변경됩니다. 이 상태에서 프롬프트를 입력하고 Generate를 누르면 뼈대를 기준으로 새로 그린 인물이 생성됩니다.

인물 새로 그려넣기

위에서는 T2I로 인물의 포즈를 따온 뒤 포즈를 조금 수정하여 새로운 인물을 만들어봤습니다. 이번에는 인물 자체를 다시 그리는 작업을 해보고자 합니다. 다시 그리는 과정에서 전반적인 인물의 의상을 유지하며 체형을 바꾸는 방법과, 이와 반대로 아예 새로운 의상을 입히는 방법, 그리고 의상을 유지하면서 자세를 조금 수정해넣는 방법 등을 살펴보도록 하겠습니다.

의상을 유지하며 체형 바꾸는 방법

기존 사진에서 인물을 최대한 유지하면서 얼굴만 바꾸는 방법은 얼굴에만 인페인트를 하는 것이 제일 편리하고 쉬운 방법입니다. 하지만 인물의 얼굴이 아닌 체형만 수정하고 싶을 때는 인페인트 난이도가 상승합니다. 얼굴은 변경하고 싶은 부분이기 때문에 원본과 달라져도 괜찮지만, 체형만 변화시키고 싶을 때는 의상이 변화하면 안되기 때문입니다. 이럴 경우에는 아래와 같이 DW openpose와 Tile Resample을 적절히 잘 섞어서 사용해주셔야 합니다.

설정값은 위의 이미지와 같이 주었지만, 상황에 따라 조금씩 다르게 사용하셔도 무방합니다. 여기서 타일리샘플의 역할은 인물의 전체적인 의상과 자세를 유지시켜주는 것이며, DW openpose는 자세를 더 견고하게 잡아주는 역할을 합니다. 프롬프트에 체형의 변화를 줄 수 있는 태그를 입력하고 그림을 생성하자 위와 같이 전체적인 모습을 유지한채로 조금 더 볼륨감 있는 인물을 그릴 수 있었습니다. 한쪽 끈의 색이 검은색으로 변한 것은 리터칭이나, 여러번 생성하여 다시 수정이 가능한 부분입니다.

새로운 의상을 입히는 방법

실사의 경우 컨트롤넷의 Depth모델을 잘 활용하면 인물에 새로운 의상을 쉽게 입힐 수 있습니다. 그런데 Depth의 경우 말 그대로 전면에서 그림을 바라봤을 때 깊이감을 파악하는 기술이므로, 인물 외에 다른 사물이 있거나, 조금 복잡한 포즈를 하고 있는 인물 사진의 경우 정확히 인물을 파악하지 못하는 경우가 종종 있습니다. 게다가 바지를 입고 있는 인물에게 드레스나 치마를 입히려면 역시나 깊이감이 달라지기 때문에 Depth의 한계가 있습니다. 이때는 역시 DW openpose를 활용하면 훨씬 정확하게 인물을 파악하고 새로운 의상을 입힐 수 있습니다.

위 이미지와 같이 흐니 셔츠에 청바지를 입은 인물에게 웨딩 드레스를 입혀보고자 합니다. 위와 같이 인페인트 마스크를 얼굴을 제외한 전신에 둘러줍니다. 인페인트 설정은 Only masked로, 디노이즈 강도는 의상을 아예 새로 그려야 하므로 높게(예시는 0.92)를 설정합니다. 컨트롤넷은 openpose로, 전처리는 dw openpose를 선택하고 이미지를 생성합니다.

그 결과 완벽하게 포즈를 유지한 채 의상만 웨딩드래스로 갈아입은 인물이 생성되었습니다. 미리 드레스의 라인을 예상해서 인페인트 마스킹 영역을 넓게 잡아주었고, 그에 따라 다리사이와 다리 바깥쪽까지 공간을 잘 채운 드레스가 그려진 모습입니다.

의상을 유지하면서 자세를 수정하는 방법

이번에는 난이도가 꽤 높은 작업을 할 예정입니다. 인물의 의상과 배경을 유지하면서 자세를 수정하는 것입니다. 먼저 DW openpose로 자세를 수정합니다. 예시에서는 인물의 차렷자세 팔을 양옆으로 펼쳐보았습니다.

이후 위 그림과 같이 원본 이미지를 inpaint에 넣은 후 기존의 차렷 자세 팔과 바뀌어야 하는 팔의 부분까지 마스킹을 해줍니다. 마지막으로 위에서 수정한 자세를 DW openpose에 설청하고, 추가로 위 그림과 같이 원본 이미지를 컨트롤 이미지로 넣고 두번째 컨트롤넷을 IP Adapter로 설정해줍니다. 본문 상단의 오픈포즈 모델 다운로드 링크에서 IP Adapter 모델도 다운받을 수 있습니다. 마지막으로 인페인트 설정에서 디노이즈 강도를 최대치인 1.0으로 설정하고 이미지를 생성하해줍니다.

디노이즈 강도가 0.9일 때컨트롤넷이 팔의 위치를 바꾸기는 했지만, 원래 팔이 있던 자리는 기존의 팔 색상을 고려하여 해당 위치를 다시 그리기 때문에 옷으로 채운 것을 확인할 수 있습니다. 반면 디노이즈 강도를 1.0으로 설정하면 스테이블 디퓨전은 기존 팔이 있던 곳이전 이미지는 무시하고 아예 새로운 이미지를 생성해 채워넣습니다. 새로운 팔은 컨트롤넷으로 자세를 잡고 IP-Adapter로 원래 팔의 스타일을 유지하게 됩니다.