Skip to content
Guides4 min read

Potato로 의료 영상 어노테이션하기

Potato에서 의료 영상을 어노테이션하는 모범 사례, DICOM 표시, 영상의학 판독문 라벨링, 이상반응 추출, IRB 준수 자체 호스팅 배포를 다룹니다.

Potato Team

PNG나 JPG 같은 표준 형식이라면 X선, 피부 병변 사진, 그 밖의 임상 영상 같은 의료 영상에 Potato의 이미지 어노테이션을 사용할 수 있습니다. 이 가이드에서는 이런 프로젝트를 제대로 구성하는 방법을 다룹니다.

이미지 어노테이션의 기본 동작 방식은 원본 문서를 참고하십시오.

시작하기 전에

의료 어노테이션 프로젝트에는 Potato와 무관한 의무가 따릅니다. 먼저 이미지에서 모든 PHI(보호 대상 건강 정보)를 제거하십시오. 데이터는 저장과 처리 모두 기관의 보안 인프라에 두십시오. 이미 운영 중인 인증 체계를 통해 어노테이터의 접근을 통제하십시오. 그리고 나중에 요구사항을 뒤늦게 발견하기보다 기관의 요건을 충족할 수 있도록 IRB 및 컴플라이언스 팀을 일찍 참여시키십시오.

한 가지 분명히 해 둘 점이 있습니다. Potato는 어노테이션 도구이지 의료 영상 플랫폼이 아닙니다. HIPAA 준수 기능이 내장되어 있지 않고, DICOM 뷰어도 없으며, 전문 영상 기능도 없습니다. 그런 부분은 인프라 수준에서 처리하십시오.

기본 의료 영상 어노테이션 설정

표준 의료 영상을 위해 Potato를 구성하는 방법은 다음과 같습니다.

yaml
annotation_task_name: "Medical Image Annotation"
 
data_files:
  - path: data/medical_images.json
    type: json
 
annotation_schemes:
  - annotation_type: bounding_box
    name: lesions
    allow_multiple: true
    labels:
      - name: primary
        color: "#EF4444"
        description: "Primary finding"
 
      - name: secondary
        color: "#F97316"
        description: "Secondary finding"
 
      - name: artifact
        color: "#6B7280"
        description: "Artifact or noise"
 
  - annotation_type: radio
    name: image_quality
    question: "Overall image quality?"
    options:
      - name: diagnostic
        label: "Diagnostic Quality"
      - name: limited
        label: "Limited Quality"
      - name: non_diagnostic
        label: "Non-Diagnostic"

X선 및 임상 사진 어노테이션

표준 이미지 형식으로 내보낸 X선이나 임상 사진의 경우:

yaml
annotation_task_name: "X-Ray Findings Annotation"
 
data_files:
  - path: data/xray_images.json
    type: json
 
annotation_schemes:
  - annotation_type: polygon
    name: abnormalities
    allow_multiple: true
    labels:
      - name: opacity
        color: "#EF4444"
        description: "Pulmonary opacity"
 
      - name: consolidation
        color: "#F97316"
        description: "Consolidation"
 
      - name: nodule
        color: "#EAB308"
        description: "Pulmonary nodule"
 
      - name: effusion
        color: "#3B82F6"
        description: "Pleural effusion"
 
  - annotation_type: multiselect
    name: findings
    question: "Select all findings present"
    options:
      - name: normal
        label: "No acute findings"
      - name: pneumonia
        label: "Pneumonia"
      - name: atelectasis
        label: "Atelectasis"
      - name: pneumothorax
        label: "Pneumothorax"
      - name: fracture
        label: "Fracture"

피부 병변 어노테이션

피부과 영상의 경우:

yaml
annotation_task_name: "Dermoscopy Annotation"
 
data_files:
  - path: data/skin_lesions.json
    type: json
 
annotation_schemes:
  - annotation_type: polygon
    name: lesion_boundary
    labels:
      - name: lesion
        color: "#EF4444"
        description: "Lesion boundary"
 
  - annotation_type: multiselect
    name: dermoscopic_features
    question: "Select all features present"
    options:
      - name: pigment_network
        label: "Pigment Network"
      - name: dots_globules
        label: "Dots/Globules"
      - name: streaks
        label: "Streaks"
      - name: blue_white_veil
        label: "Blue-White Veil"
      - name: regression
        label: "Regression Structures"
      - name: vascular
        label: "Vascular Structures"
 
  - annotation_type: radio
    name: diagnosis
    question: "Most likely diagnosis?"
    options:
      - name: benign_nevus
        label: "Benign Nevus"
      - name: seborrheic_keratosis
        label: "Seborrheic Keratosis"
      - name: basal_cell
        label: "Basal Cell Carcinoma"
      - name: melanoma
        label: "Melanoma"
      - name: other
        label: "Other"
 
  - annotation_type: likert
    name: confidence
    question: "Diagnostic confidence"
    size: 5
    min_label: "Low"
    max_label: "High"

망막 영상 어노테이션

안저 사진과 그 밖의 망막 영상의 경우:

yaml
annotation_task_name: "Fundus Image Annotation"
 
data_files:
  - path: data/fundus_images.json
    type: json
 
annotation_schemes:
  - annotation_type: polygon
    name: anatomical_structures
    labels:
      - name: optic_disc
        color: "#FDE68A"
        description: "Optic disc boundary"
 
      - name: fovea
        color: "#A78BFA"
        description: "Fovea region"
 
      - name: macula
        color: "#93C5FD"
        description: "Macular region"
 
  - annotation_type: polygon
    name: pathology
    allow_multiple: true
    labels:
      - name: hemorrhage
        color: "#EF4444"
        description: "Retinal hemorrhage"
 
      - name: exudate
        color: "#FCD34D"
        description: "Hard/soft exudate"
 
      - name: microaneurysm
        color: "#F97316"
        description: "Microaneurysm"
 
  - annotation_type: radio
    name: dr_grade
    question: "Diabetic retinopathy grade"
    options:
      - name: none
        label: "No DR"
      - name: mild
        label: "Mild NPDR"
      - name: moderate
        label: "Moderate NPDR"
      - name: severe
        label: "Severe NPDR"
      - name: proliferative
        label: "PDR"

데이터 형식

이미지 데이터를 JSON으로 준비하십시오.

json
[
  {
    "id": "case_001",
    "image": "images/case_001.png",
    "metadata": {
      "body_part": "chest",
      "modality": "xray"
    }
  },
  {
    "id": "case_002",
    "image": "images/case_002.png",
    "metadata": {
      "body_part": "chest",
      "modality": "xray"
    }
  }
]

참고: 이미지는 웹 호환 표준 형식(PNG, JPG 등)이어야 합니다. DICOM 파일은 Potato에서 사용하기 전에 표준 이미지 형식으로 변환해야 합니다.

모범 사례

이 작업은 아무에게나 맡길 수 있는 일이 아니므로, 실제 임상 교육을 받은 어노테이터를 활용하십시오. 먼저 이미지를 전처리하십시오. DICOM과 그 밖의 전문 형식을 표준 형식으로 변환하고, PHI가 제거되었는지 확인하십시오. 일치도를 측정할 수 있도록 각 이미지를 한 명 이상의 어노테이터가 라벨링하게 하십시오. 일반적인 지침이 아니라 해당 임상 영역에 맞는 구체적인 지침을 작성하십시오. 정확도를 점검할 수 있도록 골드 스탠더드 사례를 섞어 넣으십시오. 그리고 데이터가 어떻게 처리되는지에 대해 컴플라이언스 팀과 계속 소통하십시오.

한계

Potato는 범용 이미지 어노테이션을 수행합니다. 네이티브 DICOM 지원이나 DICOM 뷰어, 다중 해상도 확대가 가능한 전체 슬라이드 영상 뷰어, 내장 HIPAA 준수 또는 감사 로깅, 자격 검증, 영상의학 윈도잉 도구는 제공하지 않습니다. 이런 기능이 필요하다면 데이터를 전처리하거나 Potato를 전용 의료 영상 인프라와 함께 배치하십시오.


이미지 어노테이션에 대한 자세한 내용은 /docs/features/image-annotation을 참고하십시오.