Skip to content

AIKU-Official/aiku-24-2-similar-pokemon

Repository files navigation

닮은 포켓몬 찾기

📢 2024년 2/겨울학기 AIKU 활동으로 진행한 프로젝트입니다
🎉 2024년 2학기 AIKU Conference 최우수상 수상!

소개

AIKU에서는 매 기수마다 팀원들끼리 서로 닮은 연예인 또는 캐릭터 이름을 붙여주곤 하는데, 이걸 서비스로 만들어서 배포해두면 매 기수마다 보다 쉽게 별명을 지어줄 수 있지 않을까 생각하였습니다. 연예인과 캐릭터 중에 고민한 결과, 포켓몬스터 캐릭터가 구현 난이도가 좀 더 있을 것으로 생각되어 프로젝트의 목표를 닮은 포켓몬 찾기 서비스 배포 로 정하였습니다. 저희 프로젝트의 성공 기준은 아이쿠 회장 부회장과 비슷한 포켓몬을 찾아 학회원들에게 납득받기입니다.


아래는 닮은 포켓몬 찾기 서비스를 체험해볼 수 있는 데모 사이트입니다. (이미지 클릭 시 이동) image-클릭 시 이동
해당 데모 사이트에서는 속도 저하 문제로 Plug and Play를 이용한 domain 일치 과정은 생략되어 있어, 좀 더 나은 성능을 체험해보고 싶다면 github code를 참고해주시기 바랍니다.
프로젝트 관련 더 자세한 사항은 AIKU 노션에서 확인하실 수 있습니다.

방법론

  • 사용자가 입력한 이미지와 가장 비슷한 포켓몬을 찾아주는, Content Based Image Retrieval(CBIR) 문제 해결
  • 멀티모달/이미지 분야 연구에서 유사도 비교를 위해 가장 많이 사용되는 두 가지 metric인 CLIPDINOv2 사용
    • input 이미지와 포켓몬 이미지 dataset의 CLIP 및 DINOv2 임베딩 값을 비교하여 가장 유사한 포켓몬을 retrieval
  • CLIP : 이미지의 전반적인 구조, 색상 등의 high level feature에 집중
  • DINOv2 : 이미지의 디테일한 정보인 low level feature에 집중
    => 두 가지 벡터 검색의 결과를 가중치를 다르게 하여 emsemble, 벡터 검색 시 FAISS library 사용
  • CLIP embedding 추출 과정에서,
    • 두 이미지도메인을 포켓몬스터 애니메이션으로 맞추면 성능이 향상될 것이다’ 라는 가설에 따라
    • Stable Diffusion 모델을 포켓몬스터 이미지로 학습시킨 sd-pokemon-diffusers 모델을 Diffusion 기반의 Plug-and-Play 모델에 적용하여 사용자의 이미지를 포켓몬스터 도메인으로 바꾸는 과정을 CLIP score 비교 전에 실행
    • Plug-and-Play 모델: Project Page
    • sd-pokemon-diffusers : Project Page

image

Overall Architecture

환경 설정

environment를 생성하고 아래 코드를 실행하여 dependency들을 설치

  conda create -n env_name python=3.9
  conda activate env_name
  pip install -r requirements.txt

사용 방법

1. dataset/celebs 폴더 안의 celeb benchmark 사용하는 경우

  • inference_celeb.sh 파일 실행 혹은 아래 코드 실행

  • 이때 query_fpdataset/celebs 폴더 안의 원하는 파일 경로로 수정

  • 실행 시 output 폴더에 retrieval_result.png로 retrieval 결과가 저장됨

      export CUDA_VISIBLE_DEVICES=0
      python inference_celeb.py \
         --query_fp "/home/aikusrv04/pokemon/similar_pokemon/dataset/celebs/Beyonce.png" \
         --k 3
    

2. User가 직접 image 업로드하는 경우

  • dataset/images 폴더에 원하는 input image 업로드

  • inference_user.sh 파일 실행 혹은 아래 코드 실행

  • 이때 data_pathquery_fpdataset/images 폴더 안의 원하는 파일 경로로 수정

  • 실행 시 output 폴더에 retrieval_result.png로 retrieval 결과가 저장됨

     export CUDA_VISIBLE_DEVICES=0
     python pnp/preprocess.py \
         --data_path "/home/aikusrv04/pokemon/similar_pokemon/dataset/images/seungryong_kim.jpg" \
         --save_dir "/home/aikusrv04/pokemon/similar_pokemon/pnp/latents" \
         --start_index 0
     
     python pnp/pnp.py \
         --data_path "/home/aikusrv04/pokemon/similar_pokemon/dataset/images/seungryong_kim.jpg" \
         --save_dir "/home/aikusrv04/pokemon/similar_pokemon/dataset/pnp_images"\
         --start_index 0
     
     python inference_user.py \
         --query_fp "/home/aikusrv04/pokemon/similar_pokemon/dataset/images/seungryong_kim.jpg" \
         --k 3
    

예시 결과

image

Beyonce 사진으로 retrieval 한 결과

image

Paris Hilton 사진으로 retrieval 한 결과

팀원

팀원 역할
정우성 DINO & MODAL
김윤서 DINO & MODAL
조윤지 CLIP & PNP & 코드 정리
정다현 CLIP & PNP & 코드 정리
성준영 상임고문

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published