My Memoji는 유저 사진을 input으로 그와 닮은 memoji를 생성해주는 서비스입니다.
SDXL을 finetuning하고, 독립적인 ldm을 사용하여 post-hoc img2img 성능을 개선하였습니다. 더하여, React를 사용해 custom ui를 빌드하였습니다.
📄 Visit our notion for more detail!
미모지는 사용자가 자신을 닮은 맞춤형 캐릭터를 만들 수 있도록 도와주는 Apple의 앱입니다.
하지만, 미모지를 만들 때 지정할 수 있는 스타일에 한계가 있기에 나와 닮게 만들기 힘들다는 문제점이 있습니다.
저희는 이러한 문제점을 바탕으로, 사진을 찍으면 나와 닮은 미모지를 자동으로 생성해주는 프로젝트를 진행해보기로 하였습니다.
MyMemoji의 UI는 automatic1111을 활용하여 작성되었습니다. 따라서, MyMemoji webUI를 실행하기 전에, automatic1111에서 적절한 환경설정이 필요합니다.
1. Clone the repo
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
2. Download models
➡️ checkpoint for ControlNet : diffusers_xl_canny_full.safetensors
➡️ Download our model checkpoints here
- checkpoint for finetuned Samaritan SDXL :
./Lora/memoji-07.safetensors
- checkpoint for additional ldm :
./Stable-diffusion/samaritan3dCartoon_v40SDXL.safetensors
3. Set up files
다운로드한 모델 파일 위치를 다음과 같이 조정합니다.
└──...── extentions/
│ └── sd-webui-controlnet/
│ └── models/
│ └── diffusers_xl_canny_full.safetensors
│
└──...── models/
│ └── Stable-diffusion/
| └── samaritan3dCartoon_v40SDXL.safetensors
│ └── Lora/
| └── memoji-07.safetensors
|
4. Set up api
webui-user.bat
코드를 다음과 같이 수정합니다.
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--api
call webui.bat
5. Run SD WebUI
./webui.sh --api
1. Clone the repo
git clone https://github.com/alswn-03/emoji-generation-webui
2. Run MyMemoji WebUI
npm start
1️⃣ 이모지 생성을 원하는 사진을 업로드합니다.
2️⃣ Input 이미지에 맞게 Gender와 Face를 선택합니다.
3️⃣ (optional) email란에 본인 이메일 주소를 입력하면, 생성이미지가 해당 주소로 전송됩니다.
4️⃣ Generate 버튼을 누릅니다.
✅ Progress bar가 100%가 될 때까지 기다리면 끝!!
Samaritan-3d-Cartoon-SDXL
최대한 프로젝트 목적에 맞는, cartoon 화풍을 가진 모델로 선정했습니다.
Vanilla Samaritan SDXL은 cartoon 화풍을 보여주긴 했지만, 원하는 emoji 화풍과는 거리가 있다고 판단하여
총 2748개의 preprocessed data를 사용해 LoRA finetuning을 진행하였습니다.
🚨 원하는 스타일이 적용되긴 했지만, 원본 이미지 속 인물과 표정 및 자세가 일치하지 않는다는 문제점 발견을 발견했습니다.
2에서 생긴 문제점을 해결하기 위해서 입력 이미지의 edge 정보를 활용하기로 결정하여
Controlnet w/ canny edge를 활용하여 입력 이미지의 edge 정보를 반영하여 생성했습니다.
🚨 원본 이미지 속 인물의 윤곽을 잘못 인식하여 생성 이미지에 unwanted artifacts가 나타나는 것을 발견할 수 있었습니다.
(위 예시의 경우, 사진 속 인물의 쌍꺼풀과 애굣살까지 눈으로 인식해버림)
3에서 생긴 문제점을 해결하기 위해서, 독립적인 ldm을 추가로 사용하여 post-hoc img2img 성능을 개선하였습니다.
Empirical한 이유로, 추가 ldm은 vanilla 모델을 사용하였습니다.
- 추가 ldm의 역할 :
- 3에서의 artifact를 덮어버림
- upscaling을 통한 이미지 해상도 향상