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.
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 catálogo (no Azure AI Foundry ou no estúdio do Azure Machine Learning) ou implantar programaticamente.
Para implantar o modelo por meio da interface do usuário:
Vá para o catálogo.
Pesquise MedImageInsight e selecione o cartão de modelo.
Na página de visão geral do modelo, selecione Implantar.
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.
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.
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] |
Nnull |
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 |
NTrue |
"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
- Implantando e usando o MedImageInsight: saiba como implantar o modelo MedImageInsight programaticamente e emitir uma chamada à API para ele.
Técnicas de classificação
Criando um Classificador de Tiro Zero: descubra como usar o MedImageInsight para criar um classificador sem a necessidade de treinamento ou grande quantidade de dados de verdade de fundamentação rotulados.
Aprimorando a classificação com redes de adaptador: aprimore o desempenho de classificação criando uma rede de adaptador pequena sobre o MedImageInsight.
Aplicativos avançados
Inferindo parâmetros de aquisição de ressonância magnética de dados de pixel: entenda como extrair parâmetros de aquisição de exame de ressonância magnética diretamente de dados de imagem.
Uso escalonável do ponto de extremidade MedImageInsight: saiba como gerar inserções de imagens médicas em escala usando a API MedImageInsight enquanto lida normalmente com possíveis problemas de rede.