Neste tutorial, você descobrirá como aplicar o modelo Meta Llama 3.2-90b-vision-instruct, agora disponível no watsonx.ai, a tarefas de visão computacional, como legendas de imagens e respostas a perguntas visuais.
Muitos de nós estamos familiarizados com aplicações unimodais de IA. Uma ferramenta popular de IA unimodal é o ChatGPT. Chatbots como ChatGPT usam processamento de linguagem natural (NLP) para entender perguntas dos usuários e automatizar respostas em tempo real. O tipo de entrada ao qual esses grandes modelos de linguagem (LLMs) unimodais podem ser aplicados é limitado ao texto.
A inteligência artificial (IA) multimodal depende de modelos de aprendizado de máquina desenvolvidos em redes neurais. Essas redes neurais são capazes de processar e integrar informações de vários tipos de dados usando técnicas complexas de deep learning. Essas diferentes modalidades produzidas pelo modelo de IA generativa, às vezes chamadas de modelos de IA gen, podem incluir texto, imagens, entrada de vídeo e áudio.
Os sistemas de IA multimodal têm muitos casos de uso no mundo real, desde diagnósticos de imagens médicas em ambientes de saúde usando computer vision até reconhecimento de fala em aplicações de tradução. Esses avanços da tecnologia de IA podem otimizar vários domínios. A principal vantagem das arquiteturas multimodais é a capacidade de processar diferentes tipos de dados.
A IA multimodal envolve três elementos:
Módulo de entrada
O módulo de entrada é construído com base em múltiplas redes neurais unimodais para pré-processar diferentes tipos de dados. Aqui, os dados são preparados para algoritmos de aprendizado de máquina realizados no módulo de fusão.
Módulo de fusão
A combinação, alinhamento e processamento de dados ocorrem neste módulo. O processo de fusão ocorre para cada modalidade de dados. Várias técnicas são comumente usadas neste módulo. Um exemplo é a fusão inicial, onde dados brutos de todos os tipos de entradas são combinados. Além disso, o mid-fusão ocorre quando dados de diferentes modalidades são codificados em diferentes estágios de pré-processamento. Por último, a fusão tardia consolida os dados após serem processados inicialmente no módulo de entrada por diferentes modelos correspondentes a cada modalidade.
Módulo de saída
O módulo de saída gera resultados no formato de saída desejado, entendendo os dados produzidos no módulo de fusão. Essas saídas podem assumir várias formas, como texto, imagem ou uma combinação de formatos.
Consulte este vídeo da IBM Technology no YouTube que mostra as instruções de configuração a seguir nas etapas 1 e 2.
Embora seja possível escolher entre várias ferramentas, este tutorial é mais adequado para um Jupyter Notebook. Os Jupyter Notebooks são amplamente utilizados na ciência de dados para combinar código com várias fontes de dados, como texto, imagens e visualização de dados.
Este tutorial vai orientar você em como configurar uma conta IBM para usar um Jupyter Notebook.
Faça login no watsonx.ai usando sua conta do IBM Cloud.
Criar um projeto do watsonx.ai.
Você pode obter a ID do projeto a partir de seu projeto. Clique na guia Gerenciar. Em seguida, copie a ID do projeto da seção Detalhes da página Geral. Você precisa dessa ID para este tutorial.
Crie um Jupyter Notebook.
Esta etapa abrirá um ambiente de notebook onde você pode copiar o código deste tutorial para implementar o ajuste de prompt por conta própria. Ou então, você pode baixar esse Notebook em seu sistema local e carregá-lo como um ativo em seu projeto do watsonx.ai. Esse Jupyter Notebook , juntamente com os conjuntos de dados utilizados, pode ser encontrado no GitHub.
Para evitar conflitos de dependência de pacotes Python, recomendamos configurar um ambiente virtual.
Para este tutorial, sugerimos usar o modelo Meta 3.2-90b-vision-instruct com watsonx.ai para obter resultados semelhantes. Você é livre para usar qualquer modelo de IA compatível com o aprendizado multimodal de sua escolha. Existem vários modelos de IA multimodal para escolher, incluindo o GPT-4 V(ision) e o DALL-E 3 da OpenAI, bem como o Gemini do Google. Certifique-se de que você esteja usando a API apropriada se estiver trabalhando com outros modelos, pois este tutorial foi desenvolvido para o watsonx.ai.
Crie uma instância do serviço do watsonx.ai Runtime (tempo de execução) (selecione a região apropriada e escolha o plano Lite, que é uma instância gratuita).
Gere uma chave de API.
Associe a instância do serviço do watsonx.ai Runtime ao projeto que você criou no watsonx.ai.
Precisaremos de algumas bibliotecas e módulos para este tutorial. Não deixe de importar os seguintes itens; se eles não estiverem instalados, você poderá resolver isso com uma instalação rápida.
Para definir nossas credenciais, precisamos do WATSONX_APIKEY e do WATSONX_PROJECT_ID que você gerou na etapa 1. Você pode armazená-los em um arquivo .env no seu diretório ou substitua o texto do espaço reservado. Também definiremos a URL como o endpoint da API.
Podemos usar a classe Credentials para encapsular nossas credenciais passadas.
Neste tutorial, trabalharemos com várias imagens para aplicações de IA multimodal, como legendas de imagens e detecção de objetos. As imagens que usaremos podem ser acessadas usando as seguintes URLs. Podemos armazenar essas URLs em uma lista para codificá-las de forma iterativa.
Para entender melhor nossa entrada de dados, vamos exibir as imagens.
Saídas:
url_image_0
url_image_1
url_image_2
url_image_3
Para codificar essas imagens de uma maneira que seja digerível para o LLM, codificaremos as imagens em bytes que, em seguida, decodificamos para representação UTF-8.
Agora que as imagens podem ser enviadas para o LLM, vamos configurar uma função para as chamadas de API do watsonx. A função augment_api_request_body recebe a consulta e a imagem do usuário como parâmetros e aumenta o corpo da solicitação de API. Usaremos essa função em cada iteração.
def augment_api_request_body(user_query, image): messages = [ { "role": "user", "content": [{ "type": "text", "text": "Você é um assistente útil. Responda à seguinte consulta do usuário em uma ou duas frases: " + user_query }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{image}", } }] } ] return messages
Vamos instanciar a interface do modelo usando a classe TheModelInference. Neste tutorial, usaremos o modelo meta-llama/llama-3-2-90b-vision-instruct.
Agora, podemos percorrer nossas imagens para ver as descrições de texto produzidas pelo modelo em resposta à consulta "O que está acontecendo nesta imagem?"
Saída:
Esta imagem mostra uma rua movimentada da cidade com edifícios altos, carros e pessoas caminhando na calçada. A rua está repleta de semáforos, árvores e placas de trânsito, e há várias pessoas atravessando a rua em um cruzamento.
A imagem mostra uma mulher em trajes atléticos correndo pela rua, com um prédio e um carro visível ao fundo. A mulher está vestindo um suéter amarelo, leggings pretas e tênis, e parece estar engajada em uma corrida casual.
A imagem mostra uma área alagada, com água cobrindo o solo e os edifícios ao redor. A inundação parece ser severa, com o nível da água atingindo os telhados de algumas estruturas.
**Descrição
da imagem** * A imagem mostra um close de um rótulo nutricional, com um dedo apontando para ele.
* O rótulo fornece informações detalhadas sobre o conteúdo nutricional de um alimento específico, incluindo:
+ Calorias
+
Sódio
+ Carboidratos
+ Outras informações relevantes
* O rótulo é exibido em um fundo branco com texto em preto, facilitando a leitura e a compreensão .
O modelo Llama 3.2-90b-vision-instruct foi capaz de legendar com sucesso cada imagem com detalhes significativos.
Agora que mostramos a capacidade do modelo de realizar a conversão de imagem em texto na etapa anterior, vamos fazer ao modelo algumas perguntas que exigem detecção de objetos. Em relação à segunda imagem que mostra a mulher correndo ao ar livre, perguntaremos ao modelo: "Quantos carros há nesta imagem?"
Saída: há um carro nesta imagem. O carro está estacionado na rua, à direita do prédio.
O modelo identificou corretamente o veículo singular na imagem. Agora, vamos perguntar sobre os danos representados na imagem de uma inundação.
Saída: o dano nesta imagem é grave, com as águas da cheia cobrindo uma parte significativa do terreno e podendo causar grandes danos às estruturas e às culturas. O nível da água parece estar pelo menos na altura da cintura, o que pode levar a perdas significativas para os proprietários e agricultores da região.
Essa resposta destaca o valor que a IA multimodal tem para domínios como o de seguros. O modelo foi capaz de detectar a gravidade dos danos causados à casa alagada. Essa pode ser uma ferramenta poderosa para melhorar o tempo de processamento de pedidos de seguro.
Em seguida, vamos perguntar ao modelo quanto de conteúdo de Sódio aparece na imagem do rótulo nutricional.
Saída: **Teor de sódio:** 640 miligramas (mg)
Ótimo! O modelo foi capaz de discernir objetos dentro das imagens após consultas de usuários. Incentivamos que você faça mais consultas para demonstrar melhor o desempenho do modelo.
Neste tutorial, você usou o modelo Llama 3.2-90b-vision-instruct para realizar operações multimodais, incluindo legendas de imagens e respostas a perguntas visuais. Para ver mais casos de uso desse modelo, incentivamos você a verificar a página de documentação oficial. Lá você encontrará mais informações sobre os parâmetros e recursos do modelo. A saída do Python é importante, pois mostra a capacidade do sistema multimodal de extrair informações de dados multimodais.
Treine, valide, ajuste e implemente recursos de IA generativa, modelos de base e recursos de aprendizado de máquina com o IBM watsonx.ai, um estúdio empresarial de última geração para construtores de IA. Crie aplicações de IA em uma fração do tempo com uma fração dos dados.
Use a IA a serviço de sua empresa com a experiência e o portfólio de soluções líder do setor da IBM à sua disposição.
Reinvente os fluxos de trabalho e operações críticos adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor de negócios.