Solução MediaPipe de geração de texto para imagem no dispositivo disponível agora para desenvolvedores Android

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

No início deste ano, liberamos a prévia da geração de texto para imagem no dispositivo com modelos de difusão para Android via MediaPipe Solutions. Hoje temos o prazer de anunciar a disponibilização como uma solução antecipada e experimental, o Image Generator, para os desenvolvedores testarem nos dispositivos Android, permitindo gerar imagens inteiramente no dispositivo, de modo simples e em cerca de 15 segundos em dispositivos mais sofisticados. Estamos ansiosos para conferir o que você vai criar.

Existem três maneiras principais de usar a nova tarefa MediaPipe Image Generator:

  1. Geração de texto para imagem com base em comandos de texto usando modelos de difusão padrão.
  2. Geração controlável de texto para imagem com base em comandos de texto e imagens condicionadas usando plug-ins de difusão.
  3. Geração personalizada de texto para imagem com base em comandos de texto usando pesos de adaptação de baixa classificação (LoRA, na sigla em inglês) que permitem criar imagens de conceitos específicos que você predefine para seus casos de uso exclusivos.

Modelos

Antes de abordarmos todas as partes divertidas e incríveis desta nova tarefa do MediaPipe, é importante saber que nossa API de geração de imagens oferece suporte a qualquer modelo que corresponda exatamente à arquitetura Stable Diffusion v1.5. Você pode usar um modelo pré-treinado ou modelos ajustados, convertendo para um formato de modelo suportado pelo MediaPipe Image Generator usando nosso script de conversão.

Também é possível personalizar um modelo de base por meio do ajuste fino do MediaPipe Diffusion LoRA no Vertex AI, injetando novos conceitos em um modelo de base sem precisar ajustar todo o modelo. Confira mais informações sobre esse processo em nossa documentação oficial.

Se você quiser testar esta tarefa hoje sem qualquer personalização, também fornecemos links para alguns modelos de trabalho verificados nessa mesma documentação.

Geração de imagens por meio de modelos de difusão

A maneira mais simples de testar a tarefa Image Generator é dar um comando de texto e, em seguida, receber uma imagem resultante usando um modelo de difusão.

Como em outras tarefas do MediaPipe, você vai começar criando um objeto de opções. Nesse caso, você só precisará definir o caminho para os arquivos do modelo básico no dispositivo. Depois de ter esse objeto de opções, você pode criar o ImageGenerator.

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

Depois de criar seu novo ImageGenerator, você pode criar uma nova imagem passando o comando, o número de iterações que o gerador deve passar para gerar e um valor de semente. Com isso, será executada uma operação de bloqueio para criar uma nova imagem, portanto, é importante executar em uma linha de execução em segundo plano antes de retornar o novo objeto de resultado Bitmap.

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

Além desse formato simples de entrada/saída de resultados, também oferecemos uma maneira de percorrer cada iteração manualmente por meio da função execute(), recebendo as imagens dos resultados intermediários em diferentes estágios para mostrar o progresso generativo. Embora a obtenção de resultados intermediários não seja recomendada para a maioria dos apps devido ao desempenho e à complexidade, essa é uma ótima maneira de demonstrar o que está acontecendo nos bastidores. Esse é um processo um pouco mais aprofundado, mas você pode encontrar a demonstração, bem como os outros exemplos mostrados nesta postagem, em nosso app de exemplo oficial no GitHub.

Geração de imagem com plug-ins

Embora a criação de novas imagens usando apenas um comando em um dispositivo já seja um grande passo, fomos um pouco mais longe ao implementar um novo sistema de plug-ins que permite ao modelo de difusão aceitar uma imagem de condição, além de um comando de texto, como suas entradas.

Atualmente, oferecemos suporte a três maneiras diferentes de você conceder uma base para suas gerações: estruturas faciais, detecção de bordas e reconhecimento de profundidade. Os plug-ins têm a capacidade de fornecer uma imagem, extrair estruturas específicas dela e criar novas imagens usando essas estruturas.

Pesos LoRA

O terceiro recurso principal que estamos lançando hoje é a capacidade de personalizar a tarefa Image Generator com o LoRA para ensinar um modelo básico sobre um novo conceito, como objetos, pessoas ou estilos específicos apresentados durante o treinamento. Com os novos pesos LoRA, o Image Generator se torna um gerador especializado que é capaz de injetar conceitos específicos nas imagens geradas.

Os pesos LoRA são úteis para casos em que você deseja que cada imagem tenha o estilo de uma pintura a óleo ou que um bule específico apareça em qualquer ambiente criado. Você pode encontrar mais informações sobre pesos LoRA na Vertex AI no card de modelos MediaPipe Stable Diffusion LoRA e criar usando este notebook. Depois de gerados, é possível implantar os pesos LoRA no dispositivo usando a API MediaPipe Tasks Image Generator ou para inferência de servidor otimizada por meio da implantação com um clique da Vertex AI.

No exemplo abaixo, criamos pesos LoRA usando várias imagens de um bule do conjunto de imagens de treinamento de bules Dreambooth. Em seguida, usamos os pesos para gerar uma nova imagem do bule em diferentes configurações.

Próximas etapas

Este é apenas o começo do que planejamos como suporte à geração de imagens no dispositivo. Estamos ansiosos para ver todas as criações incríveis da comunidade de desenvolvedores, então não deixe de publicá-las no X (antigo Twitter) com a hashtag #MediaPipeImageGen e a tag @GoogleDevs. Confira a amostra oficial no GitHub, que demonstra tudo o que você aprendeu. Para saber ainda mais detalhes, leia a documentação oficial e acompanhe o canal do Google para Desenvolvedores no YouTube a fim de conferir as atualizações e os tutoriais lançados pela equipe do MediaPipe.

Agradecimentos

Queremos agradecer a todos os membros da equipe que contribuíram para este trabalho: 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 e Matthias Grundmann, da equipe de ML central; bem como Changyu Zhu, Genquan Duan, Bo Wu, Ting Yu e Shengyang Dai, do Google Cloud.