Skip to content

Latest commit

 

History

History
250 lines (179 loc) · 10.7 KB

File metadata and controls

250 lines (179 loc) · 10.7 KB

🦷 DentiScan

구강 이미지 한 장으로 충치(Caries)와 마모(Abrasion) 의심 부위를 자동으로 탐지·분류하는 2단계 딥러닝 파이프라인 기반 진단 보조 시스템입니다.

RF-DETR(Detection) → Swin Transformer(Classification) 순으로 이어지는 2-Stage 구조를 채택했습니다.


1. 연구 배경 및 문제 정의

  • 충치·마모는 초기 발견 시 간단한 치료로 해결 가능하지만, 방치 시 신경치료·발치로 이어집니다. 그러나 일반인은 증상이 나타난 뒤에야 치과를 방문하는 경우가 대부분입니다.
  • 구강 이미지는 복잡한 배경(잇몸·혀·입술·조명 반사), 작고 모호한 병변 경계, 치아 간 유사한 질감 때문에 AI 모델이 병변에 집중하기 어렵다는 기술적 난점이 있습니다.
  • 본 프로젝트는 Detection으로 병변 위치를 먼저 좁히고, Classification으로 정밀 판별하는 2단계 구조를 통해 이 문제를 완화하고자 했습니다.

2. 데이터셋

AlphaDent (Zenodo, Sechenov University, CC BY 4.0) — zenodo.org/records/16582489

항목 내용
이미지 수 약 1,200장
환자 수 295명
이미지 유형 고해상도 구강 사진 (DSLR)
어노테이션 픽셀 단위 Instance Segmentation Mask
클래스 Abrasion, Filling, Crown, Caries 1~6 (총 9개) → 본 프로젝트는 Abrasion / Caries 중심으로 재구성
데이터 분할 Train 273명 / Val 22명 / Test 135장

Detection 라벨 분포 (객체 수 기준)

클래스 Train Valid Test
Abrasion 5,125 609 616
Caries 2,912 337 315

Abrasion 대비 Caries 데이터가 약 1.76:1로 불균형하여, Copy-Paste 증강으로 Caries 객체 수를 +25% 확장(2,923 → 3,660)해 비율을 1.40:1로 완화했습니다.

Classification 라벨 분포 (Train 기준, 총 14,497장)

클래스 학습 수
Neither (정상) 5,634
Caries 1,771
Abrasion 6,050
Caries & Abrasion (Both) 1,042

3. 전체 파이프라인

입력 이미지
    │
    ▼
[1단계] RF-DETR (Detection)
    │   threshold=0.001 → score ≥ 0.35 필터
    │   bbox + confidence 후보군 추출
    ▼
[2단계] Swin Transformer (Classification)
    │   각 bbox 크롭 → 재분류
    │   Normal 확률 ≥ 0.45 이면 제거 (False Positive 억제)
    │   Abrasion / Caries 중 확률 높은 클래스로 최종 판정
    ▼
결과 집계 (bbox별 신뢰도, 평균 신뢰도, 병변 개수)

Detection이 찾은 bbox를 Classification 모델로 한 번 더 검증함으로써, Detection 단독 대비 False Positive를 줄이고 True Positive를 늘리는 방향으로 설계했습니다.


📈 Key Results

Experiment Precision Recall F1-score Remark
RF-DETR Baseline 0.8128 0.5736 0.6725 Detection 최종 모델 선정
RF-DETR + Copy-Paste 0.6885 0.6216 0.6532 전체 Recall 상승
Caries Recall (Copy-Paste) 0.3206 → 0.5370 +67% - 가장 큰 개선폭
Caries Recall (Gamma) - +34% - mAP@0.5 유지하며 개선
Final Pipeline Detection + Swin Transformer FP 억제 - 2-Stage 통합 시스템

4. 실험 결과

4.1 Detection — 모델 선정

원본(전처리 X) 데이터셋 기준, RF-DETR이 D-FINE 대비 전반적으로 우세하여 최종 Detection 모델로 채택했습니다.

모델 Precision Recall F1-score mAP@0.5 mAP@0.5:0.95
RF-DETR 0.8128 0.5736 0.6725 0.6376 0.4504
D-FINE 0.6378 0.5768 0.6058 0.5437 0.4014
RF-DETR (Caries only) 0.7594 0.3206 0.4509 0.4560 0.1706
D-FINE (Caries only) 0.5946 0.1397 0.2262 0.3043 0.1164

Caries는 두 모델 모두에서 전체 평균 대비 Recall이 크게 낮아, 별도의 증강·튜닝이 필요함을 확인했습니다.

4.2 Detection — Caries Recall 개선 실험

Copy-Paste Augmentation

구분 Precision Recall F1-score mAP@0.5:0.95
RF-DETR (증강 전) 0.8128 0.5736 0.6725 0.4504
RF-DETR (증강 전, Caries) 0.7594 0.3206 0.4509 0.1706
RF-DETR (증강 후) 0.6885 0.6216 0.6532 0.5104
RF-DETR (증강 후, Caries) 0.6105 0.5370 0.5714 0.3219
  • Caries Recall 0.32 → 0.54 (+67%), Caries mAP@0.5:0.95 약 2배 상승
  • 전체 Recall도 0.57 → 0.62로 함께 상승, Abrasion 성능 저하 없이 Caries 탐지력만 개선
  • Precision 하락은 Recall 극대화에 따른 트레이드오프로 해석, 이후 Classification 단계에서 정밀도 보완을 시도

Rotation & Gamma Augmentation

  • Gamma 보정: mAP@0.5 유지(0.60→0.61)하면서 Caries Recall 34% 향상
  • Rotation: mAP@0.5가 0.60→0.33으로 절반 가까이 하락 — 구강 X-ray/구내 사진 특성상 회전이 오히려 모델에 혼란을 유발
  • 목표였던 Caries Recall 0.7에는 미달(최고 0.43), 추가 전략(데이터셋 교체 등) 필요성 확인

데이터셋 교체 실험 (Syed vs AlphaDent vs Combined)

내부 평가와 외부 데이터셋 교차 평가를 통해 일반화 성능을 비교한 결과, 단일 데이터셋으로 학습한 모델은 자기 자신의 내부 평가에서는 높은 성능을 보이지만 외부 데이터셋에 대한 일반화 성능은 크게 떨어지는 것을 확인했습니다(Exp1, Exp3 모두 external 평가에서 mAP가 0에 가깝게 급락).

4.3 Classification — 모델 선정

Detection 결과 bbox를 GT label과 IoU 비교로 재라벨링한 데이터셋으로 RegNet과 Swin Transformer를 비교했습니다. Detection 단독 대비 (Detection + Classification) 파이프라인이 False Positive를 줄이는지, True Positive를 늘리는지를 기준으로 최종 모델을 선정했습니다.

파이프라인 Abrasion 예측 Caries 예측 Missed
Detection Only 514 / 0 0 / 239 Abrasion 101, Caries 174
Detection + RegNet 417 / 0 0 / 201 Abrasion 198, Caries 212
Detection + Swin 437 / 0 0 / 195 Abrasion 178, Caries 218

실험 조건: epoch 25, batch size 8, optimizer AdamW, learning rate 1e-4


5. 웹 데모

5.1 화면 미리보기

DentiScan 웹 데모 스크린샷

5.2 Demo Video

▶️ 시연 영상 보기

5.3 실행 방법

cd web
pip install -r requirements.txt
streamlit run app.py

화면 흐름: 홈 → 촬영/업로드 → 분석 중 → 결과

  • 결과 화면에서 bbox, 부위별 신뢰도, 평균 신뢰도, 병변 개수 확인 가능
  • AI 분석 결과는 참고용이며 실제 진단을 대체하지 않음을 화면에 명시

5.4 기술 스택

구분 내용
프레임워크 Streamlit
언어 Python 3.11
AI 모델 RF-DETR (탐지) + Swin Transformer (분류)
이미지 처리 Pillow, torchvision
배포 환경 Ubuntu EC2, port 8501

6. 한계점 및 향후 연구

  • Caries 탐지 Recall이 목표치(0.7)에 아직 도달하지 못함 — 추가 데이터 확보, 손실 함수 개선(class-balanced loss 등) 필요
  • 단일 데이터셋(AlphaDent) 학습 모델의 외부 데이터셋 일반화 성능이 크게 저하됨 — 다양한 촬영 환경/장비의 데이터 추가 확보 필요
  • Detection→Classification 2단계 구조에서 Classification이 Recall을 개선하지 못하고 오히려 Missed가 증가하는 경향 확인 — 임계값(threshold) 및 padding 비율 추가 튜닝 여지

7. 폴더 구조

code/
├─ classification/        # 분류 모델(Swin, RegNet 등) 실험 코드
│  ├─ gayoung/
│  ├─ gayoung_sequencial/
│  ├─ Jaewon_Classification_Final/
│  └─ seoyeon/
│
├─ detection/              # 탐지 모델(RF-DETR 등) 실험 코드
│  ├─ Jaewon/
│  ├─ Seoyeon/
│  └─ soyoung/
│
├─ web/                    # 웹 데모 (Streamlit)
│  ├─ app.py
│  ├─ requirements.txt
│  └─ README.md
│
└─ .gitignore

각 실험 폴더(classification/, detection/)는 팀원별로 진행한 모델 튜닝·증강 실험 스크립트를 담고 있습니다.


8. 팀 구성 및 역할

🤝 Team-wide Contributions

분야 내용
🔬 실험 설계 Ablation Study 설계 및 하이퍼파라미터(Threshold, Epoch, Batch Size, Learning Rate) 통일
🎯 Detection 모델 선정 RF-DETR과 D-FINE 성능 비교 후 RF-DETR 채택
🖼️ 전처리 및 증강 Baseline, Copy-Paste, Gamma, CP+Gamma 실험 수행
🏷️ Classification 데이터셋 구축 OoF 기반 데이터셋 생성 및 IoU 라벨링 기준 수립
🧠 Classification 모델 평가 RegNet과 Swin Transformer 비교 및 성능 분석
⚙️ 파이프라인 통합 Detection → Classification 전체 파이프라인 구축
📊 결과 분석 및 발표 주차별 발표자료 작성 및 실험 결과 토론

👥 Final Phase Responsibilities

가영 소영 재원 서연
Backend & Deployment Detection Experiments Classification Experiments Frontend & Web Demo

9. 추가 자료


⚠️ 안내

본 서비스의 AI 분석 결과는 참고용이며, 실제 진단을 대체하지 않습니다. 증상이나 불편함이 있다면 치과 전문의 상담을 받으시기 바랍니다.