Android 개발자를 위한 MediaPipe 온디바이스 텍스트-이미지 생성 솔루션 출시

10월 09, 2023
Paul Ruiz Senior Developer Relations Engineer
Kris Tonthat Technical Writer

올해 초, 저희는 MediaPipe Solutions를 통해 Android용 확산 모델을 사용한 온디바이스 텍스트-이미지 생성 기능의 미리보기를 제공했습니다. 오늘은 개발자들이 Android 기기에서 체험해 볼 수 있는 실험적인 초기 솔루션인 Image Generator가 출시되었음을 알려드립니다. 이 생성기를 사용하면 고사양 기기에서 기기 성능만으로 15초 이내에 이미지를 쉽게 생성할 수 있습니다. 여러분이 어떤 결과물을 만들어 낼지 정말 기대됩니다!

다음과 같은 세 가지 방법을 주로 사용하여 새로운 MediaPipe Image Generator 작업을 수행할 수 있습니다.

  1. 표준 확산 모델을 사용하여 텍스트 프롬프트를 기반으로 텍스트-이미지 생성.
  2. 확산 플러그인을 사용하여 텍스트 프롬프트와 컨디셔닝 이미지를 기반으로 제어 가능한 텍스트-이미지 생성.
  3. 고유한 사용 사례에 대해 미리 정의한 특정 개념의 이미지를 만들 수 있는 LoRA(Low-Rank Adaptation) 가중치를 사용하여 텍스트 프롬프트를 기반으로 사용자 설정된 텍스트-이미지 생성.

모델

이 새로운 MediaPipe 작업의 모든 재미있고 흥미로운 부분을 살펴보기 전에 Image Generation API가 Stable Diffusion v1.5 아키텍처와 정확히 일치하는 모든 모델을 지원한다는 점을 아는 것이 중요합니다. 변환 스크립트를 사용하여 MediaPipe Image Generator에서 지원하는 모델 형식으로 변환하여 미리 학습된 모델이나 미세 조정된 모델을 사용할 수 있습니다.

또한 Vertex AI에서 MediaPipe Diffusion LoRA 미세 조정을 통해 파운데이션 모델을 사용자 설정하여 전체 모델을 미세 조정하지 않고도 파운데이션 모델에 새로운 개념을 주입할 수 있습니다. 이 프로세스에 대한 자세한 내용은 공식 문서에서 확인할 수 있습니다.

지금 바로 사용자 설정 없이 이 작업을 시도해 보려는 경우에 대해서는 같은 문서에서 정상 작동이 검증된 몇 가지 모델에 대한 링크도 제공합니다.

확산 모델을 통한 이미지 생성

Image Generator 작업을 시도하는 가장 간단한 방법은 작업에 텍스트 프롬프트를 제공한 다음 확산 모델을 사용하여 결과 이미지를 받는 것입니다.

MediaPipe의 다른 작업과 마찬가지로, 옵션 객체를 생성하는 것으로 시작합니다. 이 경우 기기에서 파운데이션 모델 파일의 경로만 정의하면 됩니다. 해당 옵션 객체가 있으면 ImageGenerator를 만들 수 있습니다.

val options = ImageGeneratorOptions.builder().setImageGeneratorModelDirectory(MODEL_PATH).build() imageGenerator = ImageGenerator.createFromOptions(context, options)

새 ImageGenerator를 생성한 후 프롬프트, 생성기가 생성을 위해 거쳐야 하는 반복 횟수, 시드 값을 전달하여 새 이미지를 생성할 수 있습니다. 그러면 차단 작업이 실행되어 새 이미지를 생성하므로, 새 비트맵 결과 객체를 반환하기 전에 백그라운드 스레드에서 실행해야 합니다.

val result = imageGenerator.generate(prompt_string, iterations, seed) val bitmap = BitmapExtractor.extract(result?.generatedImage())

이 간단한 입력/결과 출력 형식 외에도 execute() 함수를 통해 각 반복을 수동으로 단계별로 진행하여 생성 진행률을 표시하도록 중간 결과 이미지를 다른 단계에서 다시 수신하는 방법도 지원합니다. 성능과 복잡성으로 인해 대부분의 앱에서는 중간 결과를 다시 받는 방법은 권장되지 않지만, 내부에서 일어나는 일을 보여주기에는 좋은 방법입니다. 이것은 좀 더 심층적인 프로세스이지만, 이 데모와 이 게시물에 표시된 다른 예는 GitHub의 공식 예시 앱에서 찾을 수 있습니다.

플러그인을 사용한 이미지 생성

기기의 프롬프트에서만 새 이미지를 만들 수 있다는 것 자체가 이미 크나큰 진전이지만, 확산 모델을 사용하여 텍스트 프롬프트와 함께 조건 이미지를 입력으로 허용할 수 있는 새로운 플러그인 시스템을 구현함으로써 조금 더 발전시켰습니다.

저희는 현재 생성의 기초를 제공할 수 있는 세 가지 방식, 즉 얼굴 구조, 가장자리 감지, 깊이 인식을 지원합니다. 플러그인을 통해 이미지를 제공하고 이미지에서 특정 구조를 추출한 다음 해당 구조를 사용하여 새 이미지를 만들 수 있습니다.

LoRA 가중치

오늘 선보일 세 번째 주요 기능은 LoRA를 사용하여 Image Generator 작업을 사용자 설정하여 학습 중에 제시된 특정 객체, 사람 또는 스타일과 같은 새로운 개념에 대한 파운데이션 모델을 가르치는 기능입니다. 새로운 LoRA 가중치를 통해 Image Generator는 생성된 이미지에 특정 개념을 주입할 수 있는 특수 생성기가 됩니다.

LoRA 가중치는 모든 이미지를 유화 스타일로 하거나 생성된 설정에 특정 찻주전자가 표시되도록 하려는 경우에 유용합니다. Vertex AI의 LoRA 가중치에 대한 자세한 내용은 MediaPipe Stable Diffusion LoRA 모델 카드에서 확인할 수 있으며 이 노트북을 사용하여 만들 수 있습니다. 일단 생성되면 MediaPipe Tasks Image Generator API를 사용하여 LoRA 가중치를 기기 내에 배포하거나 Vertex AI의 원 클릭 배포를 통해 최적화된 서버 추론을 위해 배포할 수 있습니다.

아래 예에서는 Dreambooth 찻주전자 학습 이미지 세트의 여러 찻주전자 이미지를 사용하여 LoRA 가중치를 만들었습니다. 그런 다음 가중치를 사용하여 다양한 설정에서 찻주전자의 새로운 이미지를 생성합니다.

다음 단계

이는 온디바이스 이미지 생성과 함께 지원하려고 계획하는 것의 시작에 불과합니다. 개발자 커뮤니티에서 개발하는 모든 훌륭한 작품에 대한 기대가 크니 #MediaPipeImageGen 해시태그 및 @GoogleDevs 태그와 함께 X(이전의 Twitter)에 꼭 게시해 주세요. GitHub에서 방금 배운 모든 것을 보여주는 공식 샘플을 확인하고, 공식 문서를 읽어 자세한 내용을 살펴보고, Google for Developers YouTube 채널에서 MediaPipe 팀에서 공개하는 업데이트와 튜토리얼이 있는지 계속 지켜봐 주세요.

감사의 말

이 작업에 기여해 주신 Core ML 팀의 Lu Wang, Yi-Chun Kuo, Sebastian Schmidt, Kris Tonthat, Jiuqiang Tang, Khanh LeViet, Paul Ruiz, Qifei Wang, Yang Zhao, Yuqi Li, Lawrence Chan, Tingbo Hou, Joe Zou, Raman Sarokin, Juhyun Lee, Geng Yan, Ekaterina Ignasheva, Shanthal Vasanth, Glenn Cameron, Mark Sherwood, Andrei Kulik, Chuo-Ling Chang, Matthias Grundmann은 물론이고, Google Cloud의 Changyu Zhu, Genquan Duan, Bo Wu, Ting Yu, Shengyang Dai를 포함한 모든 팀원에게 감사드립니다.