Skip to main content

초보자를 위한 MedGemma 파인튜닝 가이드 – 유방 종양 분류를 위한 단계별 실습 방법

Published 3 min readMarkdown

# 📌 서론 – 왜 MedGemma와 유방 종양 분류가 중요한가?

의료 영상 분석 분야에서 유방 종양 분류는 조기 진단과 치료 전략 수립에 핵심적인 역할을 합니다. 최근 공개된 오픈소스 의료 모델 MedGemma는 강력한 전이 학습 능력과 경량화된 구조 덕분에 연구·실무 현장에서 큰 관심을 받고 있습니다. 하지만 “파인튜닝”이라는 용어가 낯설고, 실제 코드를 어떻게 적용해야 할지 막막한 초보자도 많습니다.

이 글에서는 MedGemma 파인튜닝 가이드를 따라, 전혀 경험이 없는 분도 단계별로 구현할 수 있도록 상세히 설명합니다.

Disclaimer: 본 가이드는 교육·학습 목적이며, 실제 임상 적용을 위해서는 전문 의료인·규제기관의 검증이 필수입니다.


# 🛠️ 1. 환경 설정 – 준비는 기본, 실행은 빠르게

| 항목 | 권장 사양 | 설치 명령 |

|------|-----------|-----------|

| OS | Ubuntu 20.04 LTS | - |

| Python | 3.9 이상 | sudo apt-get install python3-pip |

| GPU | NVIDIA RTX 3060 이상 (CUDA 11.8) | - |

| 라이브러리 | PyTorch, torchvision, transformers, scikit-learn, pandas, matplotlib | pip install torch torchvision transformers scikit-learn pandas matplotlib |

| 데이터셋 | 공개 유방 초음파 이미지 (예: BUSI) | wget https://.../BUSI.zip && unzip BUSI.zip |

Tip: 가상환경(venv 혹은 conda)을 사용하면 패키지 충돌을 방지할 수 있습니다.


# 📂 2. 데이터 준비 – 라벨링부터 전처리까지

  1. 폴더 구조 만들기

   data/

   ├─ train/

   │   ├─ benign/

   │   └─ malignant/

   └─ val/

       ├─ benign/

       └─ malignant/
  1. 이미지 리사이즈 & 정규화
python

   from torchvision import transforms

   transform = transforms.Compose([

       transforms.Resize((224, 224)),

       transforms.ToTensor(),

       transforms.Normalize(mean=[0.485, 0.456, 0.406],

                            std=[0.229, 0.224, 0.225])

   ])
  1. 데이터 로더 구현
python

   from torch.utils.data import DataLoader, ImageFolder

   train_dataset = ImageFolder('data/train', transform=transform)

   val_dataset   = ImageFolder('data/val',   transform=transform)

   train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4)

   val_loader   = DataLoader(val_dataset,   batch_size=32, shuffle=False, num_workers=4)

SEO 키워드: 유방 종양 분류, MedGemma, 파인튜닝 가이드


# 🤖 3. 모델 로드와 파인튜닝 – 핵심 코드는 여기!

# 3.1 MedGemma 기본 모델 불러오기

python

from transformers import AutoModelForImageClassification, AutoConfig

config = AutoConfig.from_pretrained('google/medgemma-base')

model  = AutoModelForImageClassification.from_pretrained(

    'google/medgemma-base', config=config, num_labels=2)

# 3.2 헤드 교체 (Binary Classification)

python

import torch.nn as nn

model.classifier = nn.Linear(model.classifier.in_features, 2)   # 0: benign, 1: malignant

# 3.3 학습 루프 (간단 버전)

python

import torch, torch.optim as optim

criterion = nn.CrossEntropyLoss()

optimizer = optim.AdamW(model.parameters(), lr=5e-5)

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model.to(device)

for epoch in range(5):          # 초보자용 5 epoch

    model.train()

    for imgs, labels in train_loader:

        imgs, labels = imgs.to(device), labels.to(device)

        optimizer.zero_grad()

        outputs = model(imgs).logits

        loss = criterion(outputs, labels)

        loss.backward()

        optimizer.step()

    print(f'Epoch {epoch+1} | Loss: {loss.item():.4f}')

# 3.4 검증 단계

python

from sklearn.metrics import accuracy_score, classification_report

model.eval()

all_preds, all_labels = [], []

with torch.no_grad():

    for imgs, labels in val_loader:

        imgs = imgs.to(device)

        outputs = model(imgs).logits

        preds = torch.argmax(outputs, dim=1).cpu().numpy()

        all_preds.extend(preds)

        all_labels.extend(labels.numpy())

print('Validation Accuracy :', accuracy_score(all_labels, all_preds))

print(classification_report(all_labels, all_preds, target_names=['Benign','Malignant']))

# 🚀 4. 평가·배포 – 실제 서비스에 적용하기

| 단계 | 내용 | 도구 |

|------|------|------|

| 성능 평가 | ROC‑AUC, 혼동 행렬 확인 | sklearn.metrics |

| 모델 압축 | 양자화(Quantization) 또는 프루닝(Pruning) | torch.quantization |

| API 서버 | FastAPI 혹은 Flask 로 RESTful 엔드포인트 구축 | uvicorn, docker |

| CI/CD | GitHub Actions 로 자동 배포 파이프라인 구현 | - |

Tip: 의료 AI는 데이터 프라이버시와 규제(예: HIPAA, GDPR)를 반드시 검토한 뒤 배포해야 합니다.


# 📌 결론 – 이제 직접 실행해 보세요!

이번 포스트에서는 MedGemma 파인튜닝 가이드를 통해 유방 종양 분류 모델을 처음부터 만들고, 검증하고, 배포까지 한 번에 살펴보았습니다.

  1. 환경을 셋업하고,

  2. 데이터를 전처리하고,

  3. MedGemma를 파인튜닝하고,

  4. 성능을 평가·배포하는 흐름을 익혔습니다.

초보자라면 먼저 GPU가 장착된 로컬 머신에서 실습해보고, 익숙해지면 클라우드(AWS SageMaker, GCP Vertex AI)로 확장해 보세요.

행동 유도: 오늘 바로 GitHub에 코드를 올리고, 작은 테스트 셋으로 Validation Accuracy를 확인해 보세요. 성공적인 결과가 나오면, 블로그에 공유하거나 의료 데이터 과학 커뮤니티에 질문을 올려 더 많은 피드백을 받아보는 것을 추천합니다!


본 글은 2025년 12월 현재 최신 정보를 기반으로 작성되었습니다. 기술 업데이트에 따라 일부 명령어나 API가 변동될 수 있습니다.

No comments yet. Be the first to comment.

More from this blog