쿠빅에서 진행했던 강아지 포즈 바꾸는 프로젝트이다
프로젝트를 하게 된 계기는 강아지를 좋아해서! 가 절대 아니라, CVPR 2024 highight 받은 논문중에 Coarse-to-Fine Latent DIffusion for Pose-Guided Person Image Synthesis(CFLD) 라는 논문이 있었다.
Input 이미지의 특성을 잘 살려주기 위해 coarse to fine 한 방식으로 디퓨전을 할 때 계속 컨디션을 주는 모델이다.
사실 CFLD말고도 pose 를 컨디션으로 넣어주기 위한 디퓨전 모델에 대한 연구들이 많았는데 PGIS나 PoCoLD 등등
사실 결과를 보면 알겠지만, 모델 복잡도면에서 개선할 사항은 있어보이지만 정확도 측면에서 개선할 수 있는 방법은 없어보였다.. 결과가 너무 잘나와서ㅋㅋㅋ
생각해보게 된 주제가, 사람 포즈를 바꾸는 연구는 많이 있었는데 왜 강아지 포즈를 바꾸는 연구는 없을까? 잘 생각해보면 사람들은 움직이라는대로 잘 움직여주는데, 강아지들은 같이 사진 한번 찍기가 어렵다. 해피랑 사진을 찍으려면 카메라를 봐달라고 나갈까? 간식먹자~ 등등 강아지 관심을 끌기 위한 말을 해줘야한다.
그럼 지금까지 왜 강아지 포즈바꾸기에 대한 연구가 없었을까? 일단 데이터셋을 구하는게 너무 어렵다. 강아지 키포인트를 따는것도 힘들고, 강아지 데이터셋 자체도 많이 없다. 그리고 사람의 keypoint랑 강아지의 키포인트는 너무 다르다. 사람의 keypoint 추출 방식을 강아지에 적용하기에는 무리가 있다.
그래도 정말 다행히 데이터셋을 구했다!! APT-36K라는 데이터셋인데, 동물의 영상을 16개의 프레임으로 나눠서 키포인트를 추출해놓은 데이터셋이다.
그럼 CFLD 모델에 이 데이터셋을 써서 훈련을 시키기 위해서는 input img, target img, target img 에 대한 pose 정보가 있어야 했다. 그래서 훈련을 시켜줄떄는 input img 가 target img의 포즈를 취하도록 바꾼 후, 그 결과를 target img 랑 비교하면서 훈련하는 형태이다.
연속되는 frame에서 각각 다른 frame을 pair 시켜서(예를 들면 frame 1이 인풋이라면 frame 3은 target) 이런식으로 데이터 로더를 구성해주고 model training 을 시켜줬다. 모델을 열심히 그려봤는데,,ㅎㅎ 다음과 같은 pipeline 으로 모델이 돌아간다.
모델 결과를 시각화해보기 전에 우려되었던 점이 CFLD는 사람 pose 바꾸기를 위한 모델이었고 VAE나 SwinTransformer 의 백본이 다 pretrained 된거라서 사람 pose 에 대한 bias가 들어가면 어떡하지?
그리고 사람은 포즈 이미지를 그려봤을떄 모양이 다 비슷한데, 강아지는 종별로 pose img 가 많이 다를 수 있다. 예를 들어 닥스훈트는 허리와 발 사이의 간격이 매우 짧지만 아메리칸 하운드 는 롱다리라서 길이 차이도 많이 난다.
근데 걱정과는 달리 결과가 너무 잘나왔다ㅎㅎ
자세히 보면 마지막 사진 갈색강아지 보면 물이 튀기는 장면도 있는데, 신기하게도 그 특성까지 그대로 복원해놓았다. 아마 HGA attention module을 통해 fine한 특성을 마지막에 합쳐준게 이런 특성도 잘 살릴 수 있게 해준것 같다.
그럼 결과도 나왔으니 사실 프로젝트 원래 목적이었던! 억울하게 생긴 이 친구로 결과를 내보았다.
사실 그냥해도 잘나오는데, 컨퍼런스 포스터에 들어갈 사진이니 좀 더 잘 나오게 하기 위해 해피 사진 4장을 약 30분간 파인튜닝하는 방식으로 완전 오버피팅 시켜서 학습을 했다. 해피 데이터셋 만드려고 쿨쿨 자고있는 친구를 억지로 깨우고 다양한 포즈를 취하게 하면서 사진을 찍었더니 해피가 화가 많이 났다(ㅎㅎㅎㅎ)
해피 데이터로더를 만들기 위해 Deeplapcut으로 키포인트 추출해주고, 모델을 돌렸는데
오잉? 성능이 더 안나왔다(가장 오른쪽이 아웃풋). 아마 포즈데이터가 기존 학습해켰던 모델이랑은 다르게 좀 세게 들어가서 그런것 같다
포즈 데이터를 아주 약하게, 안보일 수도 있겠지만 자세히 보면 흰점이 해피 관절따라서 찍혀있다.
이렇게 바꿔서 파인튜닝을 약 20분정도 시켜줬더니 결과가 다행히! 잘나왔다. 가장 오른쪽이 아웃풋인데 얘가 해피보다 더 예쁘게 생긴거 같기두?
사실 프로젝트를 하면서 해보고 싶거나 모델을 바꿔보고 싶은게 너무 많았다. 아까도 언급했던 닥스훈트와 아메리칸 하운드의 신체 차이를 해결하기 위한 방안도 여러 논문을 보고 생각을 해봤는데
그 중 가장 해보고 싶었던 것이 포즈맵도 디퓨전을 해가면서 Stochastical 하게 conditioning을 하고 싶었다. 포즈맵을 딱 정확하게 주지 않고, 노이즈를 추가해서 나머지 부분은 모델이 알아서 채워가게 하는, 이렇게 되면 딱 포즈에 맞춰서 생성되는게 아니라 포즈 비슷하게 생성은 되지만 더 자연스러운 output 이 나올것 같았다.
그치만 시간의 한계와, 그렇게 하지 않아도 모델 결과가 잘 나왔기에,, 이번 플젝은 여기서 마무리하려고 한다!
궁금하면 깃허브로~ ( https://github.com/seohyun8825/DogCFLD )
GitHub - seohyun8825/DogCFLD: modified dataset part based on CFLD code
modified dataset part based on CFLD code. Contribute to seohyun8825/DogCFLD development by creating an account on GitHub.
github.com