캐릭터 일관성이 뭔가요?
여러분들은 Stable diffusion[1](이하 SD)을 사용해본 적 있으신가요? SD로 컨텐츠를 만들 때 답답한 점은 이미지를 생성 할 때마다 얼굴이나 의상, 헤어스타일, 머리색깔과 같은 캐릭터의 외적인 부분이 계속 바뀐다는 점인데요. 프롬프트를 아무리 잘 써도 말이죠. 캐릭터의 외적인 부분이 생성할 때마다 바뀌는 것을 일관성(consistency)이 유지되지 않는다고 표현합니다.
캐릭터 일관성을 유지하는게 중요한가요?
생성하는 이미지들이 한번만 쓰이고 말 캐릭터들이면 캐릭터 일관성을 유지하는것이 중요하지 않은 경우가 많습니다. 하지만 컨텐츠에 따라서 동일한 캐릭터가 여러 장면에 등장해야하는 경우가 있을 수 있잖아요? 시리즈물이라던가 어떤 스토리를 표현한다거나 하는 경우에는 시청자들이 보기에 ‘아 저 캐릭터가 아까 나왔던 그 캐릭터구나’를 느낄 수 있을 정도까지는 캐릭터 일관성을 유지하는게 필요하죠.
캐릭터 일관성을 유지하는 방법이 없었나요?
SD로 컨텐츠를 만드려고 시도하신 분들은 다들 공감하시겠지만 Identity가 유지된 사진을 뽑기 위해서 몇십 장의 사진을 뽑고 또 고르는 반복작업을 해보셨을 겁니다. 그래서 SD 사용자들은 이런 문제를 해결하기위해 LoRA[2]를 학습시키거나 IP-Adapter[3]를 이용해 이미지를 생성하는 등 여러가지 시도를 하고 있고, 이를 이용해 이미지를 생성하면 캐릭터가 꽤 일관되게 나옵니다.
그래서 보여줄게 뭔가요?
LoRA와 IP-Adapter 모두 괜찮은 성능을 보여주지만 두 방법 모두 단점이 존재합니다. LoRA는 최소 20~30장의 이미지가 필요하고, 추가로 학습을 진행해야므로 GPU와 같은 컴퓨팅 자원이 오랜시간 들어가게 됩니다. Instant ID[5]를 이용하면 번거롭게 LoRA를 학습할 필요가 없습니다! 또한 기존 IP-Adapter보다 얼굴의 일관성이 잘 유지되는 이미지를 얻을 수 있습니다. 물론 animate diff[6]와 같은 영상컨텐츠에는 LoRA가 더 활용성이 높긴 하지만, 간단하고 빠르게 identity가 유지된 이미지를 뽑아볼 수 있다는 점에서는 확실히 Instant ID도 사용할 만합니다.
Instant ID 논문의 핵심은 뭔가요? (비전공자는 어려울 수 있음!)
Instant ID는 크게 3가지로 핵심을 나눌수 있습니다.
- Face Encoder에서 Face embedding을 추출하는 ID embedding
- Face embedding과 Text embedding을 합치는 decoupled cross-attention
- Face Identity의 영향력을 높이기 위한 IdentityNet
각각에 대해서 간단하게 살펴보도록 하겠습니다. 첫번째로 ID Embedding 과정은 주어진 Ref image에서 Face embedding 추출하는 과정입니다. 기존에는 비주얼 프롬프트(Face embedding)를 이미지로부터 추출하기 위해서는 Clip encoder를 사용했었습니다. 하지만 Clip encoder로 추출된 특징은 얼굴에 집중하기 보다는 이미지의 전반적인 구도, 스타일, 색상같은 광범위한 시맨틱 정보들입니다. 그래서 Clip encoder는 텍스트 임베딩을 보조하는 용으로는 좋겠지만, 이 연구에서는 좀 더 얼굴에 집중하기 위해서 Ip adapter를 Face encoder로 사용해 face feature를 추출합니다. 그리고 추출된 face feature를 text embedding과 같이 사용하기위해 한번 가공하는 과정을 거치게 되는데, 이 때 나온 결과가 face embedding 입니다.
두번째로 face embedding을 비주얼 프롬프트로 사용하기 위한 과정입니다. ID embedding에서 추출한 face embedding과 프롬프트로 입력된 text embedding을 결합하는 decoupled cross attention을 거칩니다. text embedding의 cross attention결과에 face embedding의 cross attention결과를 더해서 query feature(Z_new)를 새로 만드는 것이죠. 식은 다음과 같습니다.
마지막으로 face landmark와 face embedding을 이용해서 얼굴 이미지의 세부 특징을 인코딩하는 identityNet입니다. 앞의 ID embedding과 decoupled cross-attention은 IP-Adapter와 거의 똑같다고 볼 수 있죠. IP adapter의 한계점을 간단하게 설명드리면 이미지와 텍스트의 임베딩을 합쳤기 때문에 기존에 텍스트 프롬프트가 발휘하던 영향력이 줄어들게 됩니다. 그렇다고 이미지 임베딩의 영향력을 낮추면 identity가 유지가 잘 안되구요. 또 그렇다고 identity 유지를 잘 하기위해서 이미지 임베딩의 영향력을 높이면 텍스트 프롬프트의 영향력이 반대로 낮아져서 텍스트 프롬프트가 적용이 잘 안됩니다. 이 문제를 해결하기 위해서 별도의 face embedding값과 랜드마크를 이용한 Control Net[7]을 만들었고, Identity Net이라고 명명했습니다. 다만 얼굴 랜드마크가 openpose가 아니고 눈2개, 코1개, 입2개의 총 5개의 얼굴 키포인트를 가진 랜드마크입니다.
Instant ID가 얼마나 더 잘하나요?
다양한 IPA(IP-Adapter)들과 PhotoMaker[8]와 Instant ID를 비교한 그림입니다. IP-Adapter에는 얼굴의 identity를 더 잘 표현하기 위한 다양한 모델(FaceID)들이 있는데요, 그러한 모델들보다도 text style이 잘 적용되어 결과가 좋게 나온 것을 볼 수 있습니다. Photomaker는 Instant ID와 같이 사진 한 장으로 Identity가 유지된 이미지를 생성해주는 프로젝트입니다. 하지만 Instant ID가 더 좋은 결과를 내는 것을 볼 수 있습니다.
Lora와 Instant ID의 이미지를 비교한 그림입니다. 전체적인 퀄리티를 보면 LoRA가 개인적으로는 조금은 더 나아보이긴 합니다만, LoRA를 만들기 위해 필요한 작업들(이미지 수집, 전처리, 학습 파라미터 최적화, 학습 등)을 생각해보면 Instant ID도 매력적인 선택지죠. 다만 아직까지는 Animate diff와 같은 동영상 작업에서는 LoRA가 더 좋을 것 같다는 생각입니다.
InsightFace Swapper[9]와 Instant ID의 face swapping 결과를 비교한 그림입니다. Swapper는 Roop[10]나 Reactor[11]로 많이 사용하고 있는 face swap 모델입니다. 실사 이미지에서는 swapper와 Instant ID 모두 결과가 좋은데, 실사이미지가 아닌 경우에는 Instant ID가 배경이나 그림체에 좀 더 잘 결합하는 것을 확인할 수 있습니다.
Instant ID를 WebUI에서 사용할 수 있나요?
A1111의 SD-Webui[12]에서 확장기능으로 사용이 가능합니다. 블로그에서 글로 설명하기보다 영상으로 확인하는게 더 명확하기 때문에 저희 Endplan 유튜브 채널에 올려둔 Instant ID 영상을 링크합니다. 이 영상에 Instant ID의 기능, Instant ID 논문에서 제안한 방법(IP Adapter + Identity Net)에 대한 간단한 설명, Web-UI에서 사용하는 방법까지 담았습니다. 영상을 시청하시고 질문을 남겨주시면 답변 드리겠습니다!
마치며
사진 한장으로 학습 없이 Identity 유지된 이미지를 생성하는 Instant ID에 대해서 살펴보았습니다. 얼굴의 Identity를 향상시키는 이미지 어댑터(핵심 1,2)와 복잡한 얼굴 특징을 보존하기 위한 IdentityNet(핵심 3)입니다. 실험 결과는 텍스트 프롬프트의 영향력을 보존함과 동시에 InstantID의 Identity 유지 성능을 확인시켜 줍니다. 또한 호환성이 좋기 때문에 LoRA 및 ControlNet과 같은 다른 모델과 원활하게 통합할 수 있어 추가적인 노력 없이 적용 범위를 넓힐 수 있습니다.
한편 사람의 얼굴을 유지하는 것과 관련된 윤리적 고려 사항, 특히 모욕적이거나 문화적으로 부적절한 이미지의 생성 가능성은 이 모델뿐만 아니라 생성형 AI를 다룰 때 신중하게 고려해야 할 중요한 문제입니다.
Reference
- Rombach, Robin, et al. “High-resolution image synthesis with latent diffusion models.” Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2022. https://arxiv.org/abs/2112.10752
- Hu, Edward J., et al. “Lora: Low-rank adaptation of large language models.” arXiv preprint arXiv:2106.09685 (2021). https://arxiv.org/abs/2106.09685
- Ye, Hu, et al. “Ip-adapter: Text compatible image prompt adapter for text-to-image diffusion models.” arXiv preprint arXiv:2308.06721 (2023). https://ip-adapter.github.io/
- https://civitai.com/
- Wang, Qixun, et al. “InstantID: Zero-shot Identity-Preserving Generation in Seconds.” arXiv preprint arXiv:2401.07519 (2024). https://instantid.github.io/
- Guo, Yuwei, et al. “Animatediff: Animate your personalized text-to-image diffusion models without specific tuning.” arXiv preprint arXiv:2307.04725 (2023). https://animatediff.github.io/
- Zhang, Lvmin, Anyi Rao, and Maneesh Agrawala. “Adding conditional control to text-to-image diffusion models.” Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023. https://github.com/lllyasviel/ControlNet
- Li, Zhen, et al. “Photomaker: Customizing realistic human photos via stacked id embedding.” arXiv preprint arXiv:2312.04461 (2023). https://photo-maker.github.io/
- https://github.com/haofanwang/inswapper
- https://github.com/s0md3v/roop
- https://github.com/Gourieff/sd-webui-reactor
- https://github.com/AUTOMATIC1111/stable-diffusion-webui