Compartilhar via


Como usar o modelo de IA da Área da Saúde CXRReportGen para gerar descobertas aterradas

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á como implantar o CXRReportGen como um ponto de extremidade online para inferência em tempo real e emitir uma chamada básica para a 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

CXRReportGen – modelo de geração de relatórios fundamentados para radiografias de tórax

O relatório de radiologia exige compreensão detalhada da imagem, integração de várias entradas (incluindo comparações com imagens anteriores) e geração de linguagem precisa, tornando-se um candidato ideal para modelos multimodal generativos. O CXRReportGen gera uma lista de achados de um estudo de radiografias do tórax e também realiza uma geração de relatórios fundamentados ou tarefa de aterramento. Ou seja, o modelo CXRReportGen também incorpora a localização de descobertas individuais na imagem. A fundamentação aprimora a clareza da interpretação de imagem e a transparência do texto gerado por IA, o que acaba melhorando a utilidade da redação de relatório automatizada.

A animação a seguir demonstra a arquitetura conceitual do modelo CXRReportGen, que consiste em um modelo de inserção emparelhado com um LLM (grande modelo de linguagem) de raciocínio geral.

Animação da arquitetura CXRReportGen e do fluxo de dados.

O modelo CXRReportGen combina um codificador de imagem específico da radiologia com um modelo de linguagem grande e usa como entradas um conjunto de dados mais abrangente do que muitas abordagens tradicionais. Os dados de entrada incluem a imagem frontal atual, a imagem lateral atual, a imagem frontal anterior, o relatório anterior e as seções de indicação, técnica e comparação do relatório atual. Essas adições aprimoram significativamente a qualidade do relatório e reduzem informações incorretas, demonstrando, em última análise, a viabilidade de relatórios fundamentados como uma tarefa nova e mais rica na radiologia automatizada.

Pré-requisitos

Para usar o modelo CXRReportGen, você precisará dos seguintes pré-requisitos:

Uma implantação de modelo

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

O modelo CXRReportGen 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 (no IA do Azure Foundry ou no Azure Machine Learning Studio) ou implantar programaticamente.

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

  1. Vá para o catálogo.

  2. Procure CxrReportGen 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.

Trabalhe com um modelo de geração de relatórios fundamentados para análise de radiografias de tórax

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 segmentação CXRReportGen 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 código a seguir para enviar dados e recuperar uma lista de descobertas e caixas delimitadoras correspondentes.

input_data = {
        "frontal_image": base64.encodebytes(read_image(frontal_path)).decode("utf-8"),
        "lateral_image": base64.encodebytes(read_image(lateral_path)).decode("utf-8"),
        "indication": indication,
        "technique": technique,
        "comparison": comparison,
    }

    data = {
        "input_data": {
            "columns": list(input_data.keys()),
            #  IMPORANT: Modify the index as needed
            "index": [0],  # 1, 2],
            "data": [
                list(input_data.values()),
            ],
        }
    }

    # 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 CXRReportGen

O modelo CXRReportGen 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 Descrição
input_data [object] Y Um objeto contendo o conteúdo de dados de entrada

O input_data objeto contém os seguintes campos:

Chave Tipo Obrigatório/Padrão Valores permitidos Descrição
columns list[string] Y "frontal_image", "lateral_image", "prior_image","indication", "technique", "comparison", "prior_report" Um objeto contendo as cadeias de mapeamento de dados para entradas passadas para o modelo.
index integer Y 0 - 10 Contagem de entradas passadas para o modelo. Você está limitado pela quantidade de RAM de GPU que tem na VM em que o CxrReportGen está hospedado e pela quantidade de dados que podem ser passados em uma única solicitação POST, que depende do tamanho de suas imagens. Portanto, é razoável manter esse número abaixo de 10. Verifique os logs de modelo se você estiver recebendo erros ao passar várias entradas.
data list[list[string]] Y "" A lista contém a lista de itens passados para o modelo. O comprimento da lista é definido pelo parâmetro de índice. Cada item é uma lista de várias cadeias de caracteres. A ordem e o significado são definidos pelo parâmetro columns. As cadeias de caracteres de texto contêm texto. As cadeias de caracteres de imagem são os bytes da imagem codificados usando base64 e decodificados como cadeia de caracteres UTF-8

Exemplo de solicitação

Uma lista simples de solicitações de inferência de descobertas para uma única imagem frontal sem nenhuma indicação fornecida

{
  "input_data": {
    "columns": [
      "frontal_image"
    ],
    "index":[0],
    "data": [
      ["iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n"]
    ]
  }
}

Solicitação mais complexa passando frontal, lateral, indicação e técnica

{
  "input_data": {
    "columns": [
      "frontal_image",
      "lateral_image",
      "indication",
      "technique"
    ],
    "index":[0],
    "data": [
      ["iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n",
        "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n",
       "Cough and wheezing for 5 months",
       "PA and lateral views of the chest were obtained"]
    ]
  }
}

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
output list[list[string, list[list[float]]]] A lista de conclusões. Cada localização é um item em uma lista representada por uma lista que contém uma cadeia de caracteres com o texto da localização e uma lista que contém caixas delimitadoras. Cada caixa delimitadora é representada por uma lista de quatro coordenadas da caixa delimitadora relacionadas à localização na seguinte ordem: x_min, y_min, x_max, y_max. Cada valor de coordenada está entre 0 e 1, portanto, para obter coordenadas no espaço da imagem para renderizar ou processar, esses valores precisam ser multiplicados pela largura ou altura da imagem adequadamente

Exemplo de resposta

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

{
    "output": [
        ["The heart size is normal.", null],
        ["Lungs demonstrate blunting of both costophrenic angles.", [[0.005, 0.555, 0.965, 0.865]]],
        ["There is an area of increased radiodensity overlying the left lower lung.", [[0.555, 0.405, 0.885, 0.745]]],
        ["Healed fractures of the left fourth, fifth, sixth, seventh, and eighth posterior ribs are noted.", [[0.585, 0.135, 0.925, 0.725]]]
    ]
}

Formatos de imagem compatíveis

A API do modelo implantado dá suporte a imagens codificadas nos formatos PNG ou JPEG. Para resultados ideais, recomendamos usar PNGs não compactados/sem perdas com imagens monocromáticas de 8 bits.

Saiba mais com exemplos

O CXRReportGen é um modelo versátil que pode ser aplicado a uma ampla gama de tarefas e modalidades de imagem. Para mais exemplos, confira os seguintes notebooks Python interativos:

  • Implantando e Usando o CXRReportGen: Saiba como implantar o modelo CXRReportGen e integrá-lo ao seu fluxo de trabalho. Este notebook também aborda técnicas de análise e visualização de caixa delimitadora.