다음을 통해 공유


CXRReportGen Healthcare AI 모델을 사용하여 접지된 결과를 생성하는 방법

중요합니다

의료 AI 모델은 연구 및 모델 개발 탐색을 위한 것입니다. 모델은 임상 설정에 있는 그대로 또는 어떤 건강 또는 건강 상태의 진단 또는 치료에 사용되도록 설계되거나 의도되지 않으며, 이러한 목적을 위한 개별 모델의 성능은 확립되지 않았습니다. 의료용 제품 또는 서비스에 대한 출력 및 통합 확인 또는 임상 의사 결정, 적용 가능한 의료 법률 및 규정 준수, 필요한 허가 또는 승인 획득을 포함하여 의료 AI 모델 사용에 대한 단독 책임과 책임을 져야 합니다.

이 문서에서는 실시간 유추를 위해 CXRReportGen을 온라인 엔드포인트로 배포하고 API에 대한 기본 호출을 발급하는 방법을 알아봅니다. 수행할 단계는 다음과 같습니다.

  • 자체 호스팅 관리 컴퓨팅에 모델을 배포합니다.
  • 엔드포인트에 권한을 부여합니다.
  • 모델에 테스트 데이터 보내기, 결과 수신 및 해석

CXRReportGen - 흉부 X선에 대한 접지된 보고서 생성 모델

방사선학 보고에는 자세한 이미지 이해, 여러 입력의 통합(이전 이미징과의 비교 포함) 및 정확한 언어 생성이 요구되므로 생성 다중 모델에게 이상적인 후보입니다. CXRReportGen은 흉부 X 선 연구에서 발견 목록을 생성하고 접지 보고서 생성 또는 접지 작업을 수행합니다. 즉, CXRReportGen 모델은 이미지에 대한 개별 결과 지역화를 통합합니다. 접지 기능은 이미지 해석의 명확성과 AI 생성 텍스트의 투명성을 향상시켜 자동화된 보고서 초안 작성의 유용성을 향상시킵니다.

다음 애니메이션은 일반적인 이유 LLM(대규모 언어 모델)과 쌍을 이루는 포함 모델로 구성된 CXRReportGen 모델의 개념적 아키텍처를 보여 줍니다.

CXRReportGen 아키텍처 및 데이터 흐름의 애니메이션입니다.

CXRReportGen 모델은 방사형별 이미지 인코더를 큰 언어 모델과 결합하고 기존의 많은 방법보다 더 포괄적인 데이터 집합을 입력으로 사용합니다. 입력 데이터에는 현재 정면 이미지, 현재 횡적 이미지, 이전 정면 이미지, 이전 보고서 및 현재 보고서의 표시, 기술 및 비교 섹션이 포함됩니다. 이러한 추가는 보고서 품질을 크게 향상시키고 잘못된 정보를 줄여 궁극적으로 자동화된 방사선학에서 새로운 풍부한 작업으로 접지된 보고의 타당성을 입증합니다.

필수 조건

  • 유효한 결제 방법을 사용하는 Azure 구독입니다. 무료 또는 평가판 Azure 구독은 작동하지 않습니다. Azure 구독이 없는 경우, 시작하려면 유료 Azure 계정을 만드세요.

  • 없는 경우 허브 기반 프로젝트를 만듭니다.

  • Azure RBAC(Azure 역할 기반 액세스 제어)는 Azure AI Foundry 포털에서 작업에 대한 액세스 권한을 부여하는 데 사용됩니다. 이 문서의 단계를 수행하려면 사용자 계정에 리소스 그룹에 대한 Azure AI 개발자 역할이 할당되어야 합니다. 권한에 대한 자세한 내용은 Azure AI Foundry 포털의 역할 기반 액세스 제어를 참조 하세요.

관리형 컴퓨팅에 모델 배포

자체 호스팅 관리되는 유추 솔루션에 배포하면 모델을 제공하는 방법에 대한 모든 세부 정보를 사용자 지정하고 제어할 수 있습니다. Azure AI Foundry 또는 Azure Machine Learning 스튜디오의 카탈로그 UI에서 모델 카드에서 모델을 배포하거나 프로그래밍 방식으로 배포할 수 있습니다.

UI를 통해 모델을 배포하려면 다음을 수행합니다.

  1. 모델 카탈로그로 이동합니다.

  2. CxrReportGen 모델을 검색하고 해당 모델 카드를 선택합니다.

  3. 모델의 개요 페이지에서 배포를 선택합니다.

  4. 관리형 컴퓨팅을 사용하여 표준 배포와 배포 중에서 선택할 수 있는 옵션이 제공되면 Managed Compute를 선택합니다.

  5. 배포 창에서 세부 정보를 입력합니다.

    비고

    자체 호스팅 관리 컴퓨팅에 배포하려면 구독에 충분한 할당량이 있어야 합니다. 사용 가능한 할당량이 충분하지 않은 경우 공유 할당량을 사용하려는 옵션을 선택하여 임시 할당량 액세스를 사용할 수 있으며 이 엔드포인트는 168시간 후에 삭제됩니다.

  6. 배포를 선택합니다.

모델을 프로그래밍 방식으로 배포하려면 코드를 사용하여 관리형 컴퓨팅 배포를 배포하고 유추하는 방법을 참조하세요.

흉부 X선 분석을 위한 기초 보고서 생성 모델 작업

이 섹션에서는 모델을 사용하고 기본 호출을 수행합니다.

REST API를 사용하여 모델 사용

간단한 GET 요청을 사용하거나 다음과 같이 클라이언트를 만들어 CXRReportGen 보고서 생성 모델을 REST API로 사용합니다.

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

credential = DefaultAzureCredential()

ml_client_workspace = MLClient.from_config(credential)

배포 구성에서 인증 방법을 선택할 수 있습니다. 이 예제에서는 Azure Machine Learning 토큰 기반 인증을 사용합니다. 더 많은 인증 옵션은 해당 설명서 페이지를 참조하세요. 또한 클라이언트는 Azure Machine Learning VM(가상 머신)에 대해 자동으로 생성되는 구성 파일에서 만들어집니다. 해당 API 설명서 페이지에서 자세히 알아보세요.

모델에 대한 기본 호출

모델이 배포되면 다음 코드를 사용하여 데이터를 보내고 결과 및 해당 경계 상자 목록을 검색합니다.

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,
    )

CXRReportGen REST API 사용

CXRReportGen 모델은 하나의 요청이 하나의 응답을 생성하는 간단한 단일 턴 상호 작용을 가정합니다.

요청 스키마

요청 페이로드는 다음 매개 변수를 포함하는 JSON 형식 문자열입니다.

열쇠 유형 필수/기본값 설명
input_data [object] Y 입력 데이터 페이로드를 포함하는 개체

개체에는 input_data 다음 필드가 포함됩니다.

열쇠 유형 필수/기본값 허용되는 값 설명
columns list[string] Y "frontal_image","lateral_image", "prior_image","indication", "technique", "comparison""prior_report" 모델에 전달된 입력에 데이터를 매핑하는 문자열을 포함하는 개체입니다.
index integer Y 0 - 10 모델에 전달된 입력 수입니다. CxrReportGen이 호스트되는 VM에 있는 GPU RAM의 양과 이미지 크기에 따라 단일 POST 요청으로 전달할 수 있는 데이터의 양에 따라 제한됩니다. 따라서 이 숫자를 10 미만으로 유지하는 것이 합리적입니다. 여러 입력을 전달할 때 오류가 발생하는 경우 모델 로그를 확인합니다.
data list[list[string]] Y "" 목록에는 모델에 전달된 항목 목록이 포함됩니다. 목록의 길이는 인덱스 매개 변수에 의해 정의됩니다. 각 항목은 여러 문자열의 목록입니다. 순서와 의미는 매개 변수에 columns 의해 정의됩니다. 텍스트 문자열에는 텍스트가 포함됩니다. 이미지 문자열은 base64를 사용하여 인코딩되고 utf-8 문자열로 디코딩된 이미지 바이트입니다.

예제 요청

표시가 제공되지 않은 단일 정면 이미지에 대한 결과 목록을 요청하는 간단한 유추

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

정면, 횡적, 표시 및 기술을 전달하는 더 복잡한 요청

{
  "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"]
    ]
  }
}

응답 스키마

응답 페이로드는 다음 필드를 포함하는 JSON 형식 문자열입니다.

열쇠 유형 설명
output list[list[string, list[list[float]]]] 결과 목록입니다. 각 찾기는 찾기 텍스트가 있는 문자열과 경계 상자가 포함된 목록을 포함하는 목록으로 표시되는 목록의 항목입니다. 각 경계 상자는 검색과 관련된 경계 상자의 4개 좌표 목록으로 다음 순서x_min로 표시됩니다. , , y_minx_maxy_max. 각 좌표 값은 0에서 1 사이이므로 이러한 값을 렌더링하거나 처리하기 위해 이미지 공간에서 좌표를 가져오려면 그에 따라 이미지 너비 또는 높이를 곱해야 합니다.

응답 예제

단일 문자열의 포함을 요청하는 간단한 유추

{
    "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]]]
    ]
}

지원되는 이미지 형식

배포된 모델 API는 PNG 또는 JPEG 형식으로 인코딩된 이미지를 지원합니다. 최적의 결과를 위해 8비트 단색 이미지와 함께 압축되지 않은/무손실 PNG를 사용하는 것이 좋습니다.

샘플에서 자세히 알아보기

CXRReportGen은 다양한 작업 및 이미징 형식에 적용할 수 있는 다양한 모델입니다. 자세한 예제는 다음 대화형 Python Notebook을 참조하세요.

  • CXRReportGen 배포 및 사용: CXRReportGen 모델을 배포하고 워크플로에 통합하는 방법을 알아봅니다. 이 Notebook에서는 경계 상자 구문 분석 및 시각화 기술도 다룹니다.