본문 바로가기
Study/Medical AI

U-Net 모델 데이터셋 변경

by 오서영 2025. 5. 2.

1. 원래 U-Net 모델이 사용한 데이터셋은?

- ISBI 2015 Cell Tracking Challenge

  • 사용 목적: U-Net 원 논문에서 사용된 주요 데이터셋
  • 데이터 특징: Electron Microscopy(EM)로 촬영된 세포 이미지, 픽셀 단위 세분화
  • 데이터 형태: 흑백 이미지, 분할 마스크 포함
  • 사용 이유: 세포 경계를 정확히 분할하는 데 최적화되어 있어, U-Net의 픽셀 단위 분할 능력을 잘 평가할 수 있음

 

2. U-Net 모델에 활용 가능한 대체 데이터셋

데이터셋 이름 설명 용도 이미지/마스크 형태 다운로드 링크
ISBI 2015 Cell Tracking U-Net 원 논문 사용. 전자현미경(EM) 세포 이미지. 흑백 이미지에 세포 경계 분할 마스크 포함 세포 분할 Grayscale 이미지 (2D), PNG / TIFF 형식  
ISIC 2018 피부 병변(흑색종 등) RGB 이미지 + 정확한 병변 마스크 제공. 실제 임상 피부사진 기반 피부 병변 분할 RGB 이미지 (2D) + PNG 마스크 (0/255) https://challenge.isic-archive.com/data/
LUNA16 CT 스캔 기반 폐결절 검출용 데이터. 3D CT 데이터를 slice로 전처리해 2D 분할에 활용 폐 결절 분할 512×512 CT 이미지 (Grayscale), NIfTI 또는 MHD 포맷 https://luna16.grand-challenge.org/Download/
BRATS 2020 다채널 뇌 MRI (T1, T2, FLAIR 등) + 종양 영역 분할 마스크. 3D 기반이지만 2D slice로도 사용 가능 뇌종양 분할 240×240×155, NIfTI (.nii.gz) 형식 https://www.med.upenn.edu/cbica/brats2020/data.html
CHASE_DB1 망막(눈) 혈관 이미지 + 분할 마스크. 눈 이미지에서 혈관을 분리해야 하는 경우 사용 망막 혈관 분할 RGB 이미지 (999x960), PNG 마스크 https://researchdata.kingston.ac.uk/96/
DRIVE 당뇨병성 망막증 이미지 + 혈관 분할 마스크. 의료 영상 처리 기본 실습용 망막 혈관 분할 RGB 이미지 (565x584), PNG 마스크 https://drive.grand-challenge.org/

https://paperswithcode.com/task/retinal-vessel-segmentation

 

Papers with Code - Retinal Vessel Segmentation

Retinal vessel segmentation is the task of segmenting vessels in retina imagery. <span style="color:grey; opacity: 0.6">( Image credit: [LadderNet](https://github.com/juntang-zhuang/LadderNet) )</span>

paperswithcode.com

다운로드 링크에 접속 권한이 없다고 하면 paperswithcode에서 찾자.

 

DRIVE: 망막 혈관 분할로 데이터셋 변경

https://datasets.activeloop.ai/docs/ml/datasets/drive-dataset/

 

 

DRIVE Dataset - Machine Learning Datasets

Load DRIVE dataset in Python fast with one line of code. Blood vessels in the retina images. Stream DRIVE while training models in PyTorch and TensorFlow.

datasets.activeloop.ai

 

 

DRIVE 데이터셋 기반 U-Net 사용 시 주요 변경 사항 및 주의점

- 데이터 형식이 .tif → Deep Lake Tensor 형태로 바뀜

  • 기존: train-volume.tif, train-labels.tif → PIL.Image.open으로 열어 사용
  • 변경 후: Deep Lake의 Tensor 객체 사용 → ds["rgb_images"][i].numpy()처럼 접근

📌 주의:

  • os.path.join() 등 경로 문자열로 다루던 로직은 더 이상 적용되지 않음
  • DeepLakeDataset 객체 자체는 str이 아님 → TypeError 발생 가능

- 채널 수 / 모양이 다를 수 있음

  • 기존 코드: grayscale (1채널) 기준
  • DRIVE:
    • 입력: rgb_images → (H, W, 3)
    • 레이블: manual_masks/mask → (H, W, 2) (클래스별 one-hot 혹은 stacked 형태)

📌 주의:

  • label이 (H, W, 2)면 imshow 불가능 → .squeeze() 또는 특정 채널 선택 필요
  • input은 (H, W, 3)이므로 transpose((2,0,1)) 처리 후 torch.Tensor로 변환 필요

- 저장 방식의 변화

  • 기존: tif → frame별로 분리 후 저장
  • 현재: npy로 저장 (input_###.npy, label_###.npy)

📌 주의:

  • U-Net 학습 코드는 .npy 로딩 기반으로 수정되어야 함
  • Dataset 클래스에서 np.load()를 기반으로 수정 완료

- train/val/test 분할 수 수동 → 자동화 필요

  • 기존: 총 30장 기준으로 24/3/3 분할
  • 현재: DRIVE는 20장 → 자동 비율(70:15:15) 계산 적용 필요

📌 주의:

  • 분할 수 hardcoding 시 IndexError 발생 가능
  • np.random.shuffle 이후 slicing 인덱스 주의해야 함

- Transform 적용 시 이미지 타입 변환 필수

  • numpy → Tensor: ToTensor()
  • 정규화(Normalization)는 반드시 ToTensor 이후에 적용해야 함

📌 주의:

  • Normalization 전에 ToTensor 필수 (Tensor만 정규화 가능)
  • RandomFlip은 numpy 기반이라 ToTensor 전에 적용

3. 왜 U-Net은 의료 영상 분석에 많이 사용될까?

 

- 픽셀 단위 정밀 분할이 중요하기 때문

  • 의료 영상(CT, MRI, X-ray, 현미경 이미지 등)은 미세한 병변, 종양, 조직 구조를 픽셀 단위로 구분해야 함
  • U-Net은 픽셀 단위(Semantic Segmentation) 출력을 생성하는 구조이므로 매우 적합함

- 적은 양의 데이터로도 학습 가능

  • 의료 데이터는 프라이버시, 비용, 전문성 문제로 레이블링된 데이터 수가 적음
  • U-Net은 데이터 증강(data augmentation)과 skip connection 구조를 통해 소량 데이터로도 학습 가능

- 인코더-디코더 구조 + Skip Connection

  • 인코더: 이미지의 큰 특징(맥락, 위치 등)을 추출
  • 디코더: 위치 정보를 기반으로 세부 영역 복원
  • Skip connection: 인코더의 세부 정보가 디코더로 넘어가면서 정밀한 경계 분할 가능

- 대칭형 구조로 구조화된 학습 가능

  • 인코더와 디코더가 대칭 구조를 이루어 이해, 구현, 수정이 용이함
  • 의료 현장에서 특정 구조(예: 종양, 혈관, 병변)에 특화된 변형이 쉬움

- 평가지표와 잘 맞는 출력

  • U-Net의 출력은 마스크 형태이므로, 의료에서 자주 사용하는 Dice, IoU, Pixel Accuracy 등 평가 지표로 직접 비교 가능함
 

'Study > Medical AI' 카테고리의 다른 글

Foundation models for generalist medical artificial intelligence  (0) 2025.04.09
인공지능  (0) 2024.04.05