2024년 2학기 AIKU 활동으로 진행한 프로젝트입니다
2024년 2학기 AIKU Conference 최우수상 수상!
소개
사용자가 입력한 이미지와 가장 비슷하게 생긴 포켓몬을 찾아주는 프로젝트
닮은 꼴 포켓몬 찾기 - 웹사이트 체험해보기
AIKU에서는 팀원들끼리 서로 닮은 연예인 또는 캐릭터 이름을 붙여주곤 하는데 이걸 서비스로 만들어서 배포해두면 매 기수마다 보다 쉽게 별명을 지어줄 수 있지 않을까 생각하게 되었습니다. 포켓몬스터가 다른 캐릭터에 비하여 대중적이고 종류가 다양하여 프로젝트의 목표를 닮은 포켓몬 찾기 서비스 배포로 정하게 되었습니다.
목표
•
아이쿠 회장 부회장과 비슷한 포켓몬을 찾아 학회원들에게 납득받기
•
사용자가 직접 사용할 수 있는 웹서비스 배포하기
데이터셋
데이터셋 | 설명 |
포켓몬스터 1세대 ~ 8세대 까지의 모든 포켓몬에 대해, 게임 버전 별 이미지를 전부 모아둔 데이터셋입니다. 위 데이터셋에 포함된 포켓몬 중, 주어진 이미지와 가장 비슷한 이미지를 찾아 반환합니다. |
모델링
저희는 총 2가지의 문제를 주요하게 생각하였습니다.
1.
사람-포켓몬 닮은꼴 데이터셋의 부재
2.
사람 이미지와 포켓몬 이미지의 domain 차이
사람-포켓몬의 닮은꼴 데이터셋이 없어서 저희는 특화된 모델을 직접 학습시킬 수 없었습니다. 또한, 명확한 정답이 존재하지도 않을 뿐더러, 포켓몬만 해도 900 종 가량 되기 때문에 직접 데이터셋을 구축하는 것도 어려웠습니다. 따라서 최대한 학습 없이, 추론 만으로 문제를 해결할 수 있는 방법을 떠올리고자 하였습니다.
사람-포켓몬 도메인 차이가 존재하여, FaceNet 또는 Pose detector 등을 이용해 사람의 특징을 비교하는 방법을 사용할 수 없었습니다. FaceNet을 직접 돌려본 결과 아무것도 검출해내지 못하는 것을 확인할 수 있었습니다. 사람의 신체적 특징을 찾아내는 모델들의 경우 학습 과정에서 애니메이션 이미지, 또는 사람이 아닌 대상에 관한 이미지를 보지 못했기 때문입니다.
CLIP & DINOv2
따라서 도메인에 관계 없이 범용성 있는 임베딩 값을 비교하는 방식을 채택하게 되었습니다. 멀티모달/이미지 분야 연구에서 유사도 비교를 위해 가장 많이 사용되는 두 가지 metric인 CLIP 과 DINOv2를 사용하여 주어진 이미지와 데이터셋 속 포켓몬 이미지들의 임베딩 값을 비교 후 가장 유사한 포켓몬을 찾아내고자 하였습니다. CLIP은 이미지의 전반적인 구조, 색상 등을 반영하고, DINOv2는 이미지의 디테일한 정보들에 집중한다는 특징이 알려져 있기에 두 가지 벡터 검색의 결과를 앙상블 하였습니다.
sd-pokemon-diffusers & Plug-And-Play
CLIP embedding을 추출하는 과정에서, ‘두 이미지의 도메인을 포켓몬스터 애니메이션으로 맞추면 성능이 향상될 것이다’ 라는 가설을 세웠습니다. Stable Diffusion 모델을 포켓몬스터 이미지로 학습시킨 sd-pokemon-diffusers 모델을 Diffusion 기반의 Plug-And-Play 모델에 적용하여 사용자의 이미지를 포켓몬스터 도메인으로 바꾼 뒤, CLIP score를 비교하였습니다.
Plug-And-Play를 활용하여 두 이미지간 도메인을 맞춰주는 것이 정확한 CLIP score 기반 검색에 도움이 되지만, 배포 파이프라인에선 속도 때문에 부득이하게 제거하였습니다. Plug-And-Play의 성능은 Github에 공개된 코드를 통해서 체험해보실 수 있습니다.
FAISS
DINOv2 및 CLIP 임베딩 벡터 검색을 위해 Meta AI의 Faiss 라이브러리를 사용하였습니다. 갖고 있는 모든 포켓몬스터 이미지에 대해 임베딩을 미리 추출해두고, faiss index로 저장한 뒤 Faiss의 검색 메소드를 사용하는 방식을 사용하였습니다.
PIPELINE
위 과정을 하나의 파이프라인으로 구축하여, 사용자가 서버로 이미지를 업로드하면 준비한 파이프라인을 거쳐 가장 닮은 포켓몬 3마리가 결과로 나오도록 배포를 진행하였습니다. Vercel을 이용해 프론트엔드를 만들었고, Modal Labs의 T4 GPU 1개 및 api serving을 이용하고 있습니다.
훈련 및 평가
주어진 사람과 닮은 포켓몬을 찾아내는 문제는 정답이 없지만, hyperparameter tuning을 위해 정량적 지표가 필요하였고, 이에 인터넷 연예 기사에 공개된 “포켓몬을 닮은 연예인”을 100개 가량 수집하여 벤치마크로 사용하였습니다.
결과
위 그림에서 알 수 있듯이, 포켓몬-연예인 벤치마크에서 7.5%의 성능(TOP 3 Retrieval)을 보인 것을 알 수 있습니다. 앞서 언급하였지만, 주어진 사람과 닮은 포켓몬을 찾아내는 것은 정성평가에 해당하기에 정답이 존재하지 않습니다. 따라서 기존 프로젝트 목표였던 아이쿠 회장, 부회장과 비슷한 포켓몬을 찾아내는 것에 있어서 여러분이 평가해주세요!
한계 분석
벤치마크
결과물
저희가 제안한 모델의 가장 큰 한계점은, 모델이 우리가 원하는 특징에 집중하지 않는다는 것입니다. 직접 구축한 데이터셋을 통해 어떤 특징에 집중할 지 명시적으로 알려주지 않고, CLIP과 DINOv2가 학습한 범용적인 특징들을 이용하기 때문에 어쩔 수 없이 드러나는 한계라고 생각합니다.
후속 프로젝트
향후 프로젝트를 발전시킨다면, 직접 구축한 데이터셋을 통해 두 임베딩 모델을 RL 등의 foundation model fine-tuning 기법을 활용하여 팀원들의 선호도를 학습시키고 싶습니다.