현재 우리가 사용하는 스테이블 디퓨전 모델은 일반적인 인물과 동물, 사물 등을 모두 잘 그려내기는 하지만, 조금 더 디테일한 행동묘사는 주로 인물 그림에만 적용이 잘 되고, 동물에게는 적용이 힘들었습니다. 하지만 컨트롤넷에서 Animal Openpose를 지원하면서 어느정도 동물의 자세도 제어할 수 있게 되었는데요, 오늘 본문에서는 animal openpose를 이용해 춤추는 모습의 강아지 그림을 생성해보고자 합니다.
Animal Openpose 설치
먼저 animal openpose는 컨트롤넷의 기능 중 하나이므로, 컨트롤넷 설치 후 모델을 적용해 사용할 수 있습니다. 컨트롤넷 설치는 앞선 포스팅에서 다루고 있으므로 따로 자세히 기술하지는 않겠습니다.
Animal Openpose 사용을 위해서는 오픈포즈 모델(control_sd15_animal_openpose.pth)을 다운받아 WebUI 컨트롤넷 모델 폴더로 이동시켜 줍니다.
Animal Openpose 적용
설치를 마친 뒤에는 곧바로 animal openpose를 사용할 수 있습니다. 기본적인 사용법은 오픈포즈와 동일하기 때문에 큰 어려운 점이 없습니다. 먼저 평범한 동물 포즈로 예시 이미지를 한 번 만들어보겠습니다.
컨트롤넷의 기본적인 설정은 위 사진과 같이 해주면 되는데요, 프리셋이 마련되지 않은만큼 Control Type은 All을 선택한 채로 전처리로 animal_openpose를 선택하고 모델은 앞서 다운받은 모델을 선택해주면 됩니다.
일반 오픈포즈와 마찬가지로 preview(폭발버튼)를 통해 미리 전처리를 진행하고, 오픈포즈 뼈따구를 생성한 뒤 Edit으로 직접 수정이 가능합니다. 프리뷰 및 오픈포즈 에디터 관련 추가적인 설명이 필요하신 분들은 dw openpose 글에서 설명드렸던 내용을 참고하시기 바랍니다.
이제 위 예시 이미지 속 포메라니안의 자세를 고정한 채로 프롬프트는 간단하게 a dog만 입력하고 그림을 생성해보면 다음과 같습니다.
자세는 고정된 상태에서 스테이블 디퓨전 모델이 임의로 견종과 색상, 배경 등을 바꿔가며 그림을 그려줍니다. 이번에는 프롬프트상 강아지의 색상을 바꿔보았습니다.
a dog 태그 대신 a white dog, a red dog, a blue dog으로 생성한 예시입니다. 흰색과 붉은색 강아지는 현실에서도 자주 접할 수 있는 색이라 어느정도 예상이 되었지만, 파란색 강아지는 현실에 잘 없기에 스테이블 디퓨전이 학습을 잘 못해 제대로 못그릴 수도 있겠다고 생각했는데, 생각보다 준수한 품질로 파란 털을 가진 강아지를 생성해냈습니다.
강아지 품종 바꾸기
이번에는 과연 스테이블 디퓨전 모델이 어느정도까지 동물을 분류하고 있는지 개인적인 궁금함이 생겨 프롬프트 상 아예 강아지의 품종을 바꿔 입력해보았습니다.
좌상단부터 순서대로 웰시코기, 불독, 푸들, 비숑프리제, 말티즈, 골든리트리버를 프롬프트로 주고 생성한 이미지입니다. 확실히 프롬프트의 영향으로 어느정도 품종에 대한 느낌은 나타내고 있는 것 같습니다. 오픈포즈로 자세를 고정시켰기 때문에 몸의 비율 표현이 어색할 수는 있지만, 기본적으로 얼굴을 보면 완벽하진 않지만 품종에 따른 차이는 명확합니다. 단, 푸들, 비숑, 말티즈와 같은 소형견들의 머즐 길이, 귀 모양, 모질 등 서로 다른 특색을 표현하는 디테일에는 한계가 보입니다.
이번에는 소형견 3종을 가중치를 증가시키면서 이미지의 변화를 살펴보았습니다. 확실히 가중치가 높아질수록 해당 품종의 특성이 조금씩 더 살아나는 느낌입니다. 특히 푸들과 말티즈의 경우 1.4정도의 가중치를 줬을 때 해당 품종의 귀 모양이나 얼굴 등이 꽤 그럴듯하게 표현되는 모습입니다. 하지만 비숑의 경우 여전히 품종 전매특허인 하이바가 생성되지는 않는 모습입니다. 가중치를 1.6까지 끌어올리자 강아지들의 눈동자가 너무 깊고 검게 표현되고, 모질이 지나치게 강조되면서 마치 옷을 입은 것처럼 변질되는 부작용이 나타나기 시작합니다.
동물을 바꾸기
이번에는 다른 궁금증이 생겨 자세는 강아지로부터 animal openpose를 이용해 복사해왔지만, 동물의 종 자체를 바꿔서 적용하면 어떻게 될지 테스트해봤습니다.
순서대로 고양이, 사자, 호랑이, 토끼, 대지, 소, 말, 닭을 생성한 모습입니다. 원래 4족보행을 하는 동물들은 신체 비율이 작고 통통한 귀여운 모습으로 고정된 상태로 그려진 모습입니다. 사자, 호랑이, 소의 경우 아기같은 모습이며, 반대로 토끼는 원래 모습보다 더 통통하고 늠름한 느낌으로 생성되었습니다.
무엇보다 animal openpose에서 다리가 4개로 인지된 상태에서 닭을 그려달라고 하면 어떻게 될지 궁금했는데, 생성해본 결과 기괴한 분위기의 변종 4발 닭이 그려졌습니다. 역시 컨트롤넷을 이용하면 이런 식으로 상식을 뛰어넘는 그림을 생성할 수 있다는 점이 매력입니다. 물론 예시의 4발 닭은 기괴하지만, 컨트롤넷을 좋은 쪽으로(?) 잘만 응용하면 대중의 관심을 끌 수 있는 특별한 이미지를 생성할 수 있습니다.
자세를 바꾸기
다시 강아지로 돌아와 이번에는 얌전히 서있는 자세가 아닌 다양한 자세를 시도해보고자 합니다.
먼저 좌상단의 원본 이미지를 다운받아 올곧게 서있는 강아지의 자세를 animal openpose로 얻어낸 뒤 프롬프트를 수정하며 생성해본 결과입니다. 컨트롤 이미지 뒤 연이어 생성한 4장의 그림은 순서대로 [a dog > a standing dog > a standing dog, two legs on the air > 로라적용] 하여 생성했습니다. 결과에서 보다시피 프롬프트 상 강아지가 서있다는 것을 명시해줘야 두 발을 들기 시작합니다. 마지막 그림은 자세와는 상관없이 조금 더 몽환적인 그림을 그려보기 위해 로라를 추가 적용해 그림을 생성해본 것입니다.
마찬가지로 이번에는 달리는 강아지의 모습을 본따온 뒤 프롬프트를 개선해가며 그림을 생성하고 로라까지 적용해본 모습입니다. 역시 프롬프트로 강아지가 달리고 있다는 것을 명시해줘야 두 앞발을 지상에서 띄운 모습을 잘 표현하는 모습입니다.
이번에는 자세를 복사한 뒤 임의로 수정해서 춤추는 강아지를 만들어 보고자 합니다. 먼저 기본 자세를 얻기 위해 구글에서 춤추는 고양이 사진을 한 장 구한 뒤 아래와 같이 작업했습니다.
춤추는 고양이 사진으로부터 animal openpose로 자세를 얻어온 다음 양 앞다리를 좌우로 모두 벌린 자세를 만들고 시드를 고정한 채로 각각 이미지를 생성했습니다. 그 결과 동일한 강아지가 양 다리를 열심히 흔들면서 춤추는 모습이 완성되었습니다.
이처럼 동물 오픈포즈 사용이 가능해졌기 때문에 이를 기반으로 m2m 또는 animated diff 등을 활용해 동물의 춤추는 영상을 만드는 것도 가능 할 것 같은데요, 영상 부분은 다음에 다시 시도해보고 결과가 나오면 포스팅해보도록 하겠습니다.