프로젝트 개요
목록 | 내용 |
---|---|
프로젝트명 | 소아흉부 폐질환 진단 및 분류 모델 개발 |
개발기간 | 2021년 11월 - 2021.12월 |
역할 | 팀리더 |
기여도 | 40% (설계 및 전처리 중심) |
개발환경 | 네이버클라우드, Ubuntu 16.04, T4(1), RAM 20GB, HDD 100GB |
경진대회 개요
목록 | 내용 |
---|---|
대회명 | “소아흉부 폐질환 진단 및 분류” 모델 개발 경진대회 |
대회기간 | 2021년 11월 - 2021.12월 |
주최/주관 | 한국지능정보사회진흥원(NIA), 과학기술정보통신부 / (주)FA솔루션, 고려대학교 |
참가 규모 | 300팀 → 5팀 본선 → 3팀 수상 |
최종 성과 | 2위 수상 (상금 100만원) |
경진대회 핵심과제
소아 흉부 X-ray 이미지를 활용하여 정상을 포함한 7가지의 질환을 예측하는 모델 개발
기술적 제약사항
- 정해진 서버 내에서만 사용이 가능한 외부 인터넷 연결이 제한된 폐쇄망 환경
- 제공받은 데이터의 클래스 불균형 (약 8:1)
- 팀 공용 서버 내 제한된 GPU 리소스로 동시 접속 시 성능이 저하
- Github등 협업 도구 활용이 제한되어 있음
핵심 성과 지표
지표 | 달성값 | 측정 방법 |
---|---|---|
F1-Score | 평균 0.63 | 비공개 Test 데이터 활용, 평가 |
데이터 규모 | 4,000장 | 주관측에서 제공받은 소아 흉부 X-ray 이미지 |
상금 | 100만원 | 경진대회 2위 수상 |
기술 스택 및 아키텍처
핵심 기술 스택
Model : CheXNet # (DenseNet121 기반)
Framework : TensorFlow # (Keras)
Preprocessing: CLAHE + U-Net # (폐 영역 분할)
Data : DICOM 처리 # (pydicom)
Optimization: Class Weight # (불균형 해결)
GUI : PyQt5 # (의료진 사용)
시스템 아키텍처
graph TD subgraph 경진대회 A[DICOM 원본이미지<br/>4,000장] --> B[전처리 파이프라인] B --> C[U-NET<br/>폐 영역 분할] B --> D[CLAHE+전체 폐 처리] D --> E[Data Augmentation<br/>4배 증강] C --> E E --> F[CheXNet 모델<br/경진대회학습>] F --> G[성능평가<br/>F1-Score] end subgraph 추가개발 H[RSNA 데이터셋] --> I[전처리 파이프라인] I --> K[CheXNet 모델<br/RSNA학습>] K --> J[PyQt GUI 개발] end F <--> K
주요 기술적 도전과 해결책
1. 데이터 불균형 문제 해결
도전과제
- 목표: 제공받은 데이터의 불균형을 해결하여 모델을 개발해야 함
- 제약: 심각한 클래스 불균형 (정상 25% vs 과대팽창 3.1%)
- 제한: 소수 클래스의 학습 데이터 부족으로 인한 성능 저하
문제 해결 과정
- Classweight: 소수 클래스에 높은 가중치 부여
# Class Weight 적용 예시
class_weights = {
0: 1.0, # 정상 (25%)
1: 1.0, # 폐렴 (25%)
2: 1.56, # 신생아호흡곤란증후군 (16%)
3: 2.06, # 흉막삼출 (12.1%)
4: 2.45, # 공기누출 (10.23%)
5: 2.92, # 무기폐 (8.58%)
6: 8.06 # 과다팽창 (3.1%)
}
- Data Augmentation: 4배 데이터 증강 (회전, 반전, 노이즈 추가)
결과 (Negative)
소수 클래스 학습 성능 향상, 하지만 여전한 과적합 문제
2. 의료 영상 전처리 파이프라인 최적화
- 목표: DICOM 형식 의료 영상의 효과적 전처리 방법 부재
- 제약: 동시 접속시 GPU 리소스 분할 사용 어려움
- 갈등: 각자 주장하는 전처리 방법의 다양함
문제 해결 과정
- 협업: 각자 샘플 데이터로 전처리 구현 → 시각적 비교 → 최적 방법 선정
# 전처리 파이프라인 예제
# CLAHE (Contrast Limited Adaptive Histogram Equalization)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
enhanced_image = clahe.apply(image)
# U-Net Segmentation을 통한 폐 영역 분할
segmented_lung = unet_model.predict(enhanced_image)
# 품질 필터링: 폐 개수 2개 이하 이미지 제거
if count_lung_regions(segmented_lung) <= 2:
process_image(segmented_lung)
발견
- Segmentation 역효과
- 일부 질환(흉막삼출)에서 폐 분할이 없는 원본이 더 좋은 성능
- 흉강 변화의 중요성
- 특정 폐질환은 흉강 전체 관찰이 진단 핵심을 발견
- 도메인 인사이트
- 폐 내부만이 아닌 흉강 전체 관찰의 필요성 발견
3. CheXNet 모델 Customization
- 목표: CheXNet 모델을 활용해서 향상된 구분 모델 개발
- 한계
- VGG16, InceptionV3, DenseNet169, ResNet50, MobileNet 등
- 일반 CNN 모델등의 낮은 성능
- 이유
- DenseNet121을 백본으로 하는 흉부 X-ray 특화 모델
- 의료 영상에서 입증된 안정적 성능
모델 아키텍처 커스터마이징
아키텍처 예제
# CheXNet 기반 구조
base_model = DenseNet121(
include_top=False, # feature extractor로 사용
weights=None, # 사전 학습 없이 NIA 데이터로 처음부터 학습
input_shape=(224, 224, 1)
)
model = Sequential([
base_model,
GlobalAveragePooling2D(), # 공간 정보 평균화
Dense(units=7, activation='softmax') # 7-class 분류
])
학습설정
{
Epoch: 150,
steps_per_epoch: 6,
class_weight: class_weight,
}
backbone = DenseNet121(input_shape=(224, 224, 3),
weights= None,
include_top=False)
x = backbone.output # fc layer
x = GlobalAveragePooling2D()(x)
x = Flatten()(x)
output = Dense(units=7, activation='softmax', name='output_layer')(x)
chexnet_model = Model(inputs=backbone.input, outputs=output)
성과
Train F1-score 결과 0.94 (과적합 예상) 비공개 Test F1-score 결과 0.63 (2위 수상)
4. 프로젝트 협업
1. 협업 방식
- 제약
- 제한된 서버 환경에서 손수 협업 필요
문제 해결 과정
- Git을 사용할 수 없기에 직접 docs에 연구 과정 및 결과 기록
- 각자 샘플 데이터로 전처리 방법 구현
- 시간적 결과 비교 검토
- 최적 방법 선정 및 적용
- 명확한 역할 분배로 14일 내 개발 완료
성능 평가 및 검증
데이터 셋
주최측에서 공개하지 않은 비공개 데이터셋 사용
평가 지표
- 주요지표: F1-Score
- 보조지표: Precision, Recall, Accuracy, AUC
최종 성능
- Test F1-Score: 0.63
- 1등팀 비교: 0.8 (앙상블 모델 사용)
- 성능차이원인: 단일모델 vs 아상블 모델 차이
비즈니스 임팩트 및 확장성
의료 현장 적용 가능성
- 의료진 업무 지원: 소아 폐질환 진단 보조 도구
- 진단 정확도 향상: 7가지 주요 폐질환 자동 분류로 오진위험감소
- 접근성 개선: 전문의 부족 지역에서 1차 스크리닝 도구
- 의료 비용 절감: 자동화된 진단 보조로 의료진 업무 효율성 향상
후속 연구 및 솔루션 개발
- 데이터 제약 해결: NIA 데이터 공개 불가 → RSNA 데이터셋 활용
- 공개 데이터로 모델 일반화 검증
- PyQt기반 진단 시스템 개발: GUI 기반 사용자 친화적 인터페이스 제공
프로젝트 한계 및 개선 방향
아쉬운 점
- 데이터 제약: NIA 데이터 공개 불가로 솔루션 배포 한계
- DICOM 메타데이터 미활용: 의료 영상 고유 정보 활용 부족
- 클래스 불균형 한계: 소수 클래스 성능 저하
- 평가 지표 제한: 의료 AI 특화 지표 미검토
개선 방향
- DICOM 전처리 고도화: 의료 메타데이터 활용으로 성능 향상
- 도메인 전문성 강화: 의료진 협업을 통한 흉강 영역 포함 분석
- 불균형 데이터 처리: 고급 샘플링 기법 및 합성 데이터 생성
- 설명 가능한 AI: GradCAM 등을 통한 진단 근거 시각화
- 실시간 진단 시스템: 웹/모바일 애플리케이션 개발