Compartilhar via


Como usar o modelo de IA de serviços de saúde do MedImageInsight para geração de inserção de imagem médica

Importante

Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Importante

Os modelos de IA para serviços de saúde destinam-se à exploração de pesquisa e desenvolvimento de modelos. Os modelos não são projetados ou destinados a serem implantados em ambientes clínicos no estado em que se encontram, nem para uso no diagnóstico ou tratamento de qualquer condição médica ou de saúde, e o desempenho dos modelos individuais para tais finalidades não foi estabelecido. Você é o único responsável por qualquer uso dos modelos de IA para serviços de saúde, incluindo a verificação de resultados e incorporação em qualquer produto ou serviço destinado a fins médicos ou para informar a tomada de decisões clínicas, conformidade com as leis e regulamentações de assistência médica aplicáveis ​​e obtenção de quaisquer autorizações ou aprovações necessárias.

Neste artigo, você aprenderá a implantar o MedImageInsight no catálogo de modelos como um ponto de extremidade online para inferência em tempo real. Você também aprenderá a emitir uma chamada básica à API. As etapas são:

  • Implantar o modelo em uma computação gerenciada auto-hospedada.
  • Conceda permissões ao ponto de extremidade.
  • Enviar dados de teste para o modelo, receber e interpretar resultados

MedImageInsight – o modelo de inserção de imagens médicas

O modelo base para integridade do MedImageInsight é um modelo poderoso que pode processar uma ampla variedade de imagens médicas. Essas imagens incluem imagens de Raio-X, Ct, ressonância magnética, fotografia clínica, dermoscopia, histopatologia, ultrassom e mamografia. Avaliações rigorosas demonstram a capacidade do MedImageInsight de alcançar desempenho em nível de última geração ou em nível de especialista humano em tarefas de ajuste fino, classificação e pesquisa de imagem por imagem. Especificamente, em conjuntos de dados públicos, o MedImageInsight obtém ou excede o desempenho de última geração na classificação e pesquisa de doenças de raios-X torácicos, classificação e pesquisa de dermatologia, classificação e pesquisa de OCT (tomografia de coerência óptica) e recuperação de imagem médica 3D. O modelo também obtém um desempenho quase de última geração para classificação e pesquisa de histopatologia.

Um modelo de inserção é capaz de servir como base de muitas soluções diferentes, desde classificação até cenários mais complexos, como correspondência de grupos ou detecção de exceções. A animação a seguir mostra um modelo de inserção sendo usado para pesquisa de similaridade de imagens e para detectar imagens que são exceções.

Animação que mostra um modelo de inserção capaz de dar suporte a cenários de pesquisa de similaridade e controle de qualidade.

Pré-requisitos

Para usar o modelo MedImageInsight, você precisa dos seguintes pré-requisitos:

Uma implantação de modelo

Implantação em uma computação gerenciada auto-hospedada

O modelo MedImageInsight pode ser implantado em nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido. Você pode implantar o modelo por meio da interface do usuário do catálogo (em Estúdio de IA ou Estúdio do Azure Machine Learning) ou implantar programaticamente.

Para implantar o modelo por meio da interface do usuário:

  1. Vá para o catálogo.

  2. Pesquise MedImageInsight e selecione o cartão de modelo.

  3. Na página de visão geral do modelo, selecione Implantar.

  4. Se houver a opção de escolher entre implantação de API sem servidor e implantação usando uma computação gerenciada, selecione Computação Gerenciada.

  5. Preencha os detalhes na janela de implantação.

    Observação

    Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.

  6. Selecione Implantar.

Para implantar o modelo programaticamente, confira Como implantar e inferir uma implantação de computação gerenciada com código.

Trabalhar com um modelo de incorporação

Nesta seção, você consumirá o modelo e fará chamadas básicas para ele.

Use a API REST para consumir o modelo

Consumir o modelo de inserção MedImageInsight como uma API REST, usando solicitações GET simples ou criando um cliente da seguinte maneira:

from azure.ai.ml import MLClient
from azure.identity import DeviceCodeCredential

credential = DefaultAzureCredential()

ml_client_workspace = MLClient.from_config(credential)

Na configuração de implantação, você pode escolher o método de autenticação. Este exemplo usa a autenticação baseada em token do Azure Machine Learning. Para mais opções de autenticação, confira a página de documentação correspondente. Além disso, observe que o cliente é criado a partir de um arquivo de configuração que é criado automaticamente para máquinas virtuais (VMs) do Azure Machine Learning. Saiba mais na página de documentação da API correspondente.

Fazer chamadas básicas para o modelo

Depois que o modelo for implantado, use o seguinte código para enviar dados e recuperar inserções.

import base64
import json
import os

endpoint_name = "medimageinsight"
deployment_name = "medimageinsight-v1"

sample_image_xray = os.path.join(image_path)

def read_image(image_path):
    with open(image_path, "rb") as f:
        return f.read()

data = {
    "input_data": {
        "columns": ["image", "text"],
        #  IMPORTANT: Modify the index as needed
        "index": [0],
        "data": [
            [
                base64.encodebytes(read_image(sample_image_xray)).decode("utf-8"),
                "x-ray chest anteroposterior Pneumonia",
            ]
        ],
    },
    "params": {"get_scaling_factor": True},
}

# Create request json
request_file_name = "sample_request_data.json"
with open(request_file_name, "w") as request_file:
    json.dump(data, request_file)

response = ml_client_workspace.online_endpoints.invoke(
    endpoint_name=endpoint_name,
    deployment_name=deployment_name,
    request_file=request_file_name,
)

Usar a API REST do MedImageInsight

O modelo MedImageInsight assume uma interação simples de turno único em que uma solicitação produz uma resposta.

Esquema de solicitação

O conteúdo da solicitação é uma cadeia de caracteres formatada em JSON contendo os seguintes parâmetros:

Chave Tipo Obrigatório/Padrão Valores permitidos Descrição
input_data [object] Y Um objeto contendo o conteúdo de dados de entrada
params [object] N
null
Um objeto que contém parâmetros passados para o modelo

O objeto input_data contém os seguintes campos:

Chave Tipo Obrigatório/Padrão Valores permitidos Descrição
columns list[string] Y "text", "image" Um objeto contendo as cadeias de mapeamento de dados para entradas passadas para o modelo.
index integer Y 0 – 1024 Contagem de entradas passadas para o modelo. Você está limitado pela quantidade de dados que pode ser passada em uma única solicitação POST, o que depende do tamanho das suas imagens. Portanto, você deve manter esse número nas dezenas
data list[list[string]] Y "" A lista contém os itens passados para o modelo que é definido pelo parâmetro de índice. Cada item é uma lista de duas cadeias de caracteres. A ordem é definida pelo parâmetro columns. A cadeia de caracteres text contém texto a ser inserido. As cadeias de caracteres image são os bytes da imagem codificados usando base64 e decodificados como cadeia de caracteres UTF-8

O objeto params contém os seguintes campos:

Chave Tipo Obrigatório/Padrão Valores permitidos Descrição
get_scaling_factor boolean N
True
"True" OU "False" Se o modelo deve retornar o fator de dimensionamento "temperatura". Esse fator é útil quando você planeja comparar vários valores de similaridade de cosseno em um aplicativo, como classificação. É essencial para a implementação correta de cenários do tipo "tiro zero". Para uso, consulte o exemplo de classificação de tiro zero vinculado na seção Técnicas de classificação.

Exemplo de solicitação

Uma simples inferência solicitando a inserção de apenas uma cadeia de caracteres

{
  "input_data": {
    "columns": [
      "image",
      "text"
    ],
    "index":[0],
    "data": [
      ["", "a quick brown fox jumps over the lazy dog"]
    ]
  },
  "params": {}
}

Solicitação de inserção de uma imagem e uma cadeia de caracteres, solicitando o retorno do fator de dimensionamento

{
    "input_data": {
        "columns": ["image", "text"],
        "index": [0],
        "data": [
            [
                "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n",
                "x-ray chest anteroposterior Pleural Effusion"
            ]
        ]
    },
    "params": {
        "get_scaling_factor": "true"
    }
}

Esquema de resposta

O conteúdo da resposta é uma cadeia de caracteres formatada em JSON que contém os seguintes campos:

Chave Type Descrição
image_features list[list[float]] Se solicitado, lista de vetores, uma para cada imagem enviada.
text_features list[list[float]] Se solicitado, lista de vetores, uma para cada cadeia de caracteres de texto enviada.
scaling_factor float Se solicitado, o fator de dimensionamento

Exemplo de resposta

Uma simples inferência solicitando a inserção de apenas uma cadeia de caracteres

{
  "image_features": [[0.029661938548088074, -0.027228673920035362, ... , -0.0328846238553524]],
  "text_features": [[0.0028937323950231075, 0.004354152828454971, -0.0227945726364851, ..., 0.002080598147585988]],
  "scaling_factor": 4.516357
}

Outras considerações de implementação

O número máximo de tokens processados na cadeia de caracteres de entrada é 77. Qualquer coisa que exceda 77 tokens seria cortada antes de ser passada para o modelo. O modelo está usando um token CLIP (Contraste de Imagem de Linguagem de Pré-treinamento), que usa cerca de três caracteres latinos por token.

O texto enviado é inserido no mesmo espaço latente que a imagem. Como resultado, cadeias de caracteres que descrevem imagens médicas de determinadas partes do corpo obtidas com determinadas modalidades de imagem são inseridas perto dessas imagens. Além disso, ao criar sistemas sobre um modelo MedImageInsight, você deve garantir que todas as cadeias de caracteres de inserção sejam consistentes entre elas (ordem de palavras e pontuação). Para obter melhores resultados com o modelo base, as cadeias de caracteres devem seguir o padrão <image modality> <anatomy> <exam parameters> <condition/pathology>., por exemplo: x-ray chest anteroposterior Atelectasis..

Se você estiver ajustando o modelo, poderá alterar esses parâmetros para melhor atender às suas necessidades de aplicativo.

Formatos de imagem compatíveis

A API do modelo implantado dá suporte a imagens codificadas no formato PNG.

Quando o modelo recebe as imagens, ele faz o pré-processamento que envolve compactar e redimensionar as imagens para 512x512 pixels.

O formato de compactação preferencial é PNG sem perda, contendo uma imagem monocromática de 8 bits ou RGB. Para fins de otimização, você pode executar o redimensionamento no lado do cliente para reduzir o tráfego de rede.

Saiba mais com exemplos

O MedImageInsight é um modelo versátil que pode ser aplicado a uma ampla gama de tarefas e modalidades de imagem. Para obter exemplos mais específicos de resolução de várias tarefas com o MedImageInsight, confira os notebooks interativos do Python a seguir.

Introdução

Técnicas de classificação

Aplicativos avançados