최근에 AI 프로필 사진 생성 기능을 구현할 필요가 있었다. 이 작업에 가장 유명한 기술은 Dreambooth지만, 파인튜닝은 비용과 시간이 많이 드는 작업이다. 단순히 사람 얼굴에 한정된 생성 작업이라면, 파인튜닝 대신 추론 시 이미지 프롬프트를 사용하는 방식으로 접근해도 충분할 것이다. 여러 모델을 테스트한 결과, 텐센트 AI 랩에서 개발한 IP-Adapter 모델(https://arxiv.org/abs/2308.06721)의 성능이 가장 우수했다. 한편, 몇몇 모델(InstantID 등)은 많은 좋아요에도 불구하고 그럴싸하게 포장한 낚시에 가까웠다.
기존의 텍스트 기반 이미지 생성 모델들은 이미지 프롬프트 사용이 어려웠다. DALL·E2가 디퓨전 모델에 이미지 조건화 기능을 지원한 최초 사례일 것이다. 그러나 대부분의 디퓨전 모델은 텍스트 조건화 기능만 제공한다.
이 문제를 해결하기 위해 연구자들은 여러 가지 접근 방식을 시도했다. 첫째, 이미지 임베딩을 사용하여 텍스트 조건부 디퓨전 모델을 파인튜닝하는 방법(SD Image Variations, Stable unCLIP)이다. 그러나 이 방법은 텍스트-이미지 변환(T2I) 능력을 제거하고, 대규모 연산을 필요로 하며, 기존의 구조 제어 도구들과 호환되지 않는 문제가 있다. 둘째, 텍스트 인코더를 이미지 인코더로 대체하여 파인튜닝하는 방법도 시도되었지만, 이 역시 T2I 능력이 제거되고 이미지 품질이 하락하는 문제가 있다. 셋째, ControlNet이나 T2I-Adapter와 같은 어댑터 기반 접근 방식이다. 이들은 이미지를 별도의 피처로 변환한 다음 텍스트 피처와 병합하여 크로스 어텐션에 사용하는 방식이다. 하지만 이 방법의 경우 이미지 프롬프트의 일부분에만 충실하고 이미지 품질이 하락하는 문제가 발생했다. 사실 이미지와 텍스트 피처를 병합하는 것은 이미지를 텍스트 피처에 정렬한다는 것을 의미하며, 이는 이미지 정보의 누락을 야기하게 된다.
본 논문에서는 이미지 피처를 효과적으로 활용하기 위해 새로운 아키텍처를 제안한다. 구체적으로, 이미지 피처 전용 크로스 어텐션 레이어를 추가하여 학습시켰다. 이 때, 이미지 인코더로는 사전 학습된 CLIP 이미지 인코더를 사용하고, 프로젝션 레이어를 통해 이미지 임베딩을 디퓨전 모델의 텍스트 피처와 동일한 차원의 피처 시퀀스로 변환한 후 레이어 정규화를 적용했다.
이렇게 분리된(Decoupled) 크로스 어텐션 레이어는 사전 학습된 UNet 모델의 각 크로스 어텐션 레이어에 삽입된다. 즉, 기존의 쿼리 피처와 텍스트 피처에 대한 크로스 어텐션 레이어는 유지하면서, 이미지 피처를 위한 새로운 크로스 어텐션 레이어를 추가한 것이다. 이때 쿼리 피처는 텍스트와 동일한 값을 사용하고, 새로운 크로스 어텐션 레이어의 키와 밸류 피처 파라미터만 학습시킨다.
훈련 시에는 기존 디퓨전 모델의 파라미터를 고정하고 새로 추가된 어댑터만 최적화했다. 목적 함수는 Stable Diffusion 모델과 동일한 것을 사용했고, 분류기 없는 가이드(Classifier-Free Guidance) 활성화를 통해 이미지와 텍스트 조건을 무작위로 제거하면서 학습했다. 또한, 추론 시에는 이미지 조건의 강도를 조정할 수 있도록 설계했다.
이러한 아키텍처 설계를 통해 이미지 피처를 텍스트 피처와 분리하여 처리함으로써 이미지 피처를 보다 효과적으로 활용할 수 있게 되었다. 또한, 기존 모델의 파라미터를 고정하고 새로운 어댑터만 훈련시킴으로써 효율적인 학습이 가능해졌을 뿐만 아니라 기존 모델과의 호환성도 유지할 수 있게 되었다.
참고로 나는 AI 프로필 사진 생성을 위해 해당 허깅페이스 모델을 아마존 세이지메이커에 호스팅하고, 그라디오에서 API 게이트웨이와 람다 함수를 통해 모델을 호출하는 CDK 코드를 여기에 간단히 구현해두었다. https://github.com/aldente0630/persona-genie
#Diffusion #Adapter
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 5월 20일 오후 3:02