[Github] https://github.com/TencentARC/PhotoMaker
1. Introduction
바로 앞의 FaceChain과 마찬가지로 personalize 이미지 생성을 위해 어떻게 인물의 identity를 보존할 것인지에 대한 방법을 제시한 논문입니다. 이를 위해 본 논문에서 제안하는 방법은 입력 이미지들의 embedding 값들을 stacking하는 방법입니다. 이러한 방법은 다양한 identity의 정보를 유지하고 포괄적으로 담을 수 있습니다.
또한 DreamBooth와 같은 다른 모델들 보다 굉장히 빠르고 품질이 높으며, 높은 일반화 성능을 보여준다고 합니다. 뿐만 아니라 Attributes change, stylelization, Identity mixing 등 다양하게 응용 가능합니다.
2. Method
2.1 overview
2.2 Stacked ID Embedding
2.2.1 Encoders
CLIP image encoder를 사용합니다. 인물과 관련된(신체) 영역을 제외하고는 모두 노이즈로 채워 배경이 미치는 영향을 최소화합니다. CLIP은 기본적으로 natural image에 대해서 학습되었기에 masking 된 이미지에서 embedding 값을 더 잘 추출하기위해 transformer의 일부 layer를 fine-tuning 합니다.
2.2.2 Stacking
입력 caption으로부터 "man", "woman" 과 같은 class word를 찾고 그 위치의 feature vector를 추출합니다. 이 vector는 앞서 구한 image embedding 값들과 fusion됩니다. 2 MLP layer가 사용됩니다. 이때 다른 모델들과의 차이점은 입력 이미지들을 하나의 embedding vector로 통합해버리는 것이 아니라 stack을 유지하며 모델로 forwarding 한다는 점입니다. 그렇기에 여러 사람의 identity를 mixing하여 새로운 인물을 생성해내는 것도 가능합니다.
2.2.3 Merging
stacked ID embedding 에 포함된 정보들을 merger하기 위해 diffusion model의 cross-attention mechanism을 사용합니다.
또한 prompt weighting 을 통해서 각 이미지들의 기여도를 조절할 수 있고, 다른 모델들처럼 LoRA를 사용해 attention layer를 학습합니다.
2.3 ID-Oriented Human Data Construction
이번 절에서는 human-centric text-image dataset 설계를 위한 pipeline을 소개합니다.
2.3.1 Image downloading
VGGFace2가 포함하고 있는 인물들의 크롤링하여 각 100장씩 수집했습니다. 고품질의 데이터를 얻기 위해 해상도 512 이상인 이미지만 수집합니다.
2.3.1 Face detection and filtering
RetinaNet을 이용해 얼굴 영역을 탐지하고, 얼굴이 포함되지 않거나 얼굴 사이즈가 256 × 256보다 작은 이미지는 filtering 합니다.
2.3.2 ID verification
입력 이미지에 여러 사람의 얼굴이 포함되어 있을 수 있으므로 ArcFace를 통해 embedding 한 후 같은 인물 얼굴들끼리 grouping합니다.
2.3.3 Cropping and segmentation
얼굴 영역보다 좀 더 크게 이미지를 자르고 그 중 얼굴이 10% 이상을 차지하고 있는지 확인합니다. image encoder로 포워딩 전 배경을 제거해야 하므로 Mask2Former를 이용해 마스킹합니다.
2.3.4 Captioning and marking
BLIP2를 이용해 crop된 이미지로부터 caption을 추출합니다. 이 작업을 class word가 나타날때까지 계속 반복합니다.
3. Experiments
별도의 코드 실행없이 아래 링크에서 바로 실행해 볼 수 있습니다.
https://huggingface.co/spaces/TencentARC/PhotoMaker