Skip to content

Helios-G/Heliosclient

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

29 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

HELIOS πŸ₯

μ›Ή 기반 κ²½λŸ‰ν™” 의료 μ—°ν•©ν•™μŠ΅(Federated Learning) ν”Œλž«νΌ

πŸ“– ν”„λ‘œμ νŠΈ μ†Œκ°œ

HELIOSλŠ” κ³ μ„±λŠ₯ 인프라가 μ—†λŠ” μ€‘μ†Œλ³‘μ›λ„ μ›Ή λΈŒλΌμš°μ €λ§ŒμœΌλ‘œ μ°Έμ—¬ν•  수 μžˆλŠ” μ‹€μ‹œκ°„ μ—°ν•©ν•™μŠ΅ ν”Œλž«νΌμž…λ‹ˆλ‹€. TensorFlow.jsλ₯Ό ν™œμš©ν•œ On-device Learning κΈ°μˆ μ„ 톡해 의료 데이터가 병원 μ™ΈλΆ€λ‘œ μœ μΆœλ˜μ§€ μ•Šλ„λ‘ λ³΄ν˜Έν•˜λ©°, Python Flower μ„œλ²„μ™€ μ—°λ™ν•˜μ—¬ λ‹€κΈ°κ΄€ ν˜‘λ ₯ AI λͺ¨λΈμ„ κ΅¬μΆ•ν•©λ‹ˆλ‹€.

🎯 핡심 기술 및 νŠΉμ§•

  • πŸ”’ μ™„λ²½ν•œ ν”„λΌμ΄λ²„μ‹œ (Data Locality): 원본 λ°μ΄ν„°λŠ” λΈŒλΌμš°μ €(Local)λ₯Ό μ ˆλŒ€ λ– λ‚˜μ§€ μ•ŠμœΌλ©°, μ•”ν˜Έν™”λœ κ°€μ€‘μΉ˜(Weight)만 μ„œλ²„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€.
  • ⚑ Zero-Install ν™˜κ²½: λ³„λ„μ˜ μ†Œν”„νŠΈμ›¨μ–΄ μ„€μΉ˜ 없이 μ›Ή λΈŒλΌμš°μ € μ ‘μ†λ§ŒμœΌλ‘œ ν•™μŠ΅μ— μ°Έμ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • πŸ€– Client-side μ˜€ν† λΌλ²¨λ§: CheXpert둜 사전 ν•™μŠ΅λœ κ²½λŸ‰ν™” λͺ¨λΈ(DenseNet121 기반)이 λΈŒλΌμš°μ € λ‚΄μ—μ„œ X-rayλ₯Ό μ¦‰μ‹œ λΆ„μ„ν•˜μ—¬ 라벨링을 μžλ™ν™”ν•©λ‹ˆλ‹€.
  • 🀝 μ‹€μ‹œκ°„ μ—°ν•©ν•™μŠ΅: Python WebSocket μ„œλ²„μ™€ μ—°λ™ν•˜μ—¬ FedAvg, FedAdam λ“±μ˜ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ κΈ€λ‘œλ²Œ λͺ¨λΈμ„ μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  • πŸ“Š μ‹€μ‹œκ°„ λŒ€μ‹œλ³΄λ“œ: ν•™μŠ΅ μ§„ν–‰ 상황(Loss, Accuracy)을 μ‹€μ‹œκ°„ κ·Έλž˜ν”„λ‘œ μ‹œκ°ν™”ν•©λ‹ˆλ‹€.

πŸš€ λΉ λ₯Έ μ‹œμž‘ (Quick Start)

이 ν”„λ‘œμ νŠΈλŠ” **Backend(Python)**와 **Frontend(React)**λ₯Ό 각각 μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

1. 사전 μš”κ΅¬μ‚¬ν•­ (Prerequisites)

  • Node.js 18.x 이상
  • Python 3.9 이상

2. Backend μ„œλ²„ μ‹€ν–‰ (Python)

μ—°ν•©ν•™μŠ΅μ„ μ€‘κ°œν•˜λŠ” 쀑앙 μ„œλ²„λ₯Ό λ¨Όμ € μ‹€ν–‰ν•©λ‹ˆλ‹€.

# μ„œλ²„ ν΄λ”λ‘œ 이동
cd federated/server

# κ°€μƒν™˜κ²½ 생성 및 ν™œμ„±ν™” (ꢌμž₯)
python -m venv venv
source venv/bin/activate  # (Windows: venv\Scripts\activate)

# μ˜μ‘΄μ„± μ„€μΉ˜
pip install flwr websockets numpy torch torchvision

# μ„œλ²„ μ‹€ν–‰ (Port: 8080)
python simple_server.py

3. Frontend ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰ (React)

μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ 및 ν•™μŠ΅ 엔진을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

# ν΄λΌμ΄μ–ΈνŠΈ ν΄λ”λ‘œ 이동
cd Heliosclient

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# 개발 μ„œλ²„ μ‹€ν–‰ (Port: 5173)
npm run dev

λΈŒλΌμš°μ €μ—μ„œ http://localhost:5173 접속


🎨 기술 μŠ€νƒ (Tech Stack)

Frontend & AI Engine

  • Framework: React 18, TypeScript, Vite
  • AI/ML: TensorFlow.js (WebGL Backend)
  • Styling: Tailwind CSS, Radix UI
  • Visualization: Recharts

Backend & Orchestration

  • Language: Python 3.9+
  • FL Framework: Flower (Flwr) (Custom WebSocket Implementation)
  • Communication: WebSockets (Asyncio)
  • Computation: NumPy, PyTorch (for model conversion)

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

β”œβ”€β”€ public/
β”‚   └── models/
β”‚       └── chexpert_tfjs/    # πŸ“‚ λ³€ν™˜λœ TF.js λͺ¨λΈ 파일 μ €μž₯μ†Œ
β”‚           β”œβ”€β”€ model.json    # λͺ¨λΈ ꡬ쑰 (GraphModel)
β”‚           └── group1-shard* # λͺ¨λΈ κ°€μ€‘μΉ˜ (Binary)
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ lib/                  # 🧠 핡심 AI 및 톡신 둜직
β”‚   β”‚   β”œβ”€β”€ fl_client.js      # [Core] TF.js 둜컬 ν•™μŠ΅ μž‘μ—…μž
β”‚   β”‚   β”‚                     # - CNN λͺ¨λΈ μ •μ˜ 및 컴파일
β”‚   β”‚   β”‚                     # - fit(): 둜컬 데이터 ν•™μŠ΅ μˆ˜ν–‰
β”‚   β”‚   β”‚                     # - evaluate(): ν…ŒμŠ€νŠΈμ…‹ 평가
β”‚   β”‚   └── flwr/             # [Network] Flower 톡신 λͺ¨λ“ˆ
β”‚   β”‚       └── index.js      # - WebSocket μ—°κ²° 및 λ©”μ‹œμ§€ νŒŒμ‹±
β”‚   β”‚                         # - μ„œλ²„ λͺ…λ Ή(fit, evaluate)을 fl_client에 전달
β”‚   β”‚
β”‚   β”œβ”€β”€ contexts/             # 🌐 μ „μ—­ μƒνƒœ 관리
β”‚   β”‚   β”œβ”€β”€ TrainingDataContext.tsx # ν•™μŠ΅μš© ν…μ„œ(Tensor) 데이터 보관함
β”‚   β”‚   β”‚                           # (이미지 -> Tensor λ³€ν™˜ ν›„ λ©”λͺ¨λ¦¬ μœ μ§€)
β”‚   β”‚   β”œβ”€β”€ SessionContext.tsx      # μ„Έμ…˜ 정보(μ•Œκ³ λ¦¬μ¦˜, 클래슀 λ“±) 관리
β”‚   β”‚   └── AuthContext.tsx         # μ‚¬μš©μž 둜그인 μƒνƒœ 관리
β”‚   β”‚
β”‚   β”œβ”€β”€ pages/                # πŸ–₯️ ν™”λ©΄ ꡬ성 (Pages)
β”‚   β”‚   β”œβ”€β”€ HomePage.tsx            # μ„œλΉ„μŠ€ 메인 ν™ˆ (λŒ€μ‹œλ³΄λ“œ μ§„μž…)
β”‚   β”‚   β”œβ”€β”€ LoginPage.tsx           # μ‚¬μš©μž 둜그인
β”‚   β”‚   β”œβ”€β”€ SignUpPage.tsx          # νšŒμ›κ°€μž…
β”‚   β”‚   β”œβ”€β”€ MyPage.tsx              # μ‚¬μš©μž 정보 및 μ°Έμ—¬ 이λ ₯ 관리
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ SessionListPage.tsx     # μ°Έμ—¬ κ°€λŠ₯ν•œ μ—°ν•©ν•™μŠ΅ μ„Έμ…˜ λͺ©λ‘ 쑰회
β”‚   β”‚   β”œβ”€β”€ SessionCreatePage.tsx   # μ„Έμ…˜ 생성 (μ•Œκ³ λ¦¬μ¦˜, 데이터셋, 클래슀 μ„€μ •)
β”‚   β”‚   β”œβ”€β”€ SessionDetailPage.tsx   # μ„Έμ…˜ 상세 정보 확인
β”‚   β”‚   β”œβ”€β”€ SessionJoinPage.tsx     # μ„Έμ…˜ μ°Έμ—¬ 방식(μžλ™/μˆ˜λ™) 선택
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ LabelingAutoPage.tsx    # [AI] μžλ™ 라벨링 (Canvas μ΅œμ ν™” 적용)
β”‚   β”‚   β”‚                           # - 320x320 리사이징 및 μΆ”λ‘  μˆ˜ν–‰
β”‚   β”‚   β”œβ”€β”€ LabelingManualPage.tsx  # [AI] μˆ˜λ™ κ²€μˆ˜ 및 데이터 λ³€ν™˜
β”‚   β”‚   β”‚                           # - Train/Test(8:2) λΆ„ν•  및 ν…μ„œ 생성
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ SessionTrainingPage.tsx # [FL] μ‹€μ‹œκ°„ μ—°ν•©ν•™μŠ΅ λŒ€μ‹œλ³΄λ“œ
β”‚   β”‚   β”‚                           # - μ‹€μ‹œκ°„ Loss/Acc κ·Έλž˜ν”„ μ‹œκ°ν™”
β”‚   β”‚   β”œβ”€β”€ SessionResultsPage.tsx  # ν•™μŠ΅ κ²°κ³Ό 리포트 및 μ„±λŠ₯ μ§€ν‘œ 확인
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ ModelDownloadPage.tsx   # ν•™μŠ΅ μ™„λ£Œλœ λͺ¨λΈ λͺ©λ‘ 및 λ‹€μš΄λ‘œλ“œ
β”‚   β”‚   β”œβ”€β”€ ModelDetailPage.tsx     # λͺ¨λΈ 상세 μŠ€νŽ™ 확인
β”‚   β”‚   β”œβ”€β”€ AdminPage.tsx           # κ΄€λ¦¬μž μ „μš© νŽ˜μ΄μ§€ (승인/관리)
β”‚   β”‚   └── NotFoundPage.tsx        # 404 μ—λŸ¬ νŽ˜μ΄μ§€
β”‚   β”‚
β”‚   β”œβ”€β”€ components/           # 🧩 UI μ»΄ν¬λ„ŒνŠΈ
β”‚   β”‚   β”œβ”€β”€ ui/               # λ²„νŠΌ, μΉ΄λ“œ, μž…λ ₯μ°½ λ“± (Re-usable)
β”‚   β”‚   └── Layout.tsx        # 헀더/ν‘Έν„°λ₯Ό ν¬ν•¨ν•œ 곡톡 λ ˆμ΄μ•„μ›ƒ
β”‚   β”‚
β”‚   β”œβ”€β”€ App.tsx               # λΌμš°νŒ…(Routing) 및 Context Provider μ„€μ •
β”‚   └── main.tsx              # React μ•± μ§„μž…μ 
β”‚
β”œβ”€β”€ package.json              # μ˜μ‘΄μ„± 관리 (@tensorflow/tfjs, recharts λ“±)
└── vite.config.ts            # Vite λΉŒλ“œ μ„€μ •

πŸ’‘ μ£Όμš” κΈ°λŠ₯ μ‹œμ—°

1. μ„Έμ…˜ 생성 및 μ•Œκ³ λ¦¬μ¦˜ 선택

  • ν•™μŠ΅ λͺ©ν‘œμ— 따라 FedAvg (κΈ°λ³Έ) λ˜λŠ” FedAdam (Non-IID νŠΉν™”) μ•Œκ³ λ¦¬μ¦˜μ„ μ„ νƒν•˜μ—¬ μ„Έμ…˜μ„ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • CheXpert κΈ°μ€€ 14개 μ§ˆν™˜ 클래슀λ₯Ό μžλ™μœΌλ‘œ μ„€μ •ν•˜λŠ” 프리셋을 μ œκ³΅ν•©λ‹ˆλ‹€.

2. ν•˜μ΄λΈŒλ¦¬λ“œ 라벨링 (Auto + Manual)

  • μžλ™ 라벨링: 이미지λ₯Ό μ—…λ‘œλ“œν•˜λ©΄ λΈŒλΌμš°μ € λ‚΄μž₯ AIκ°€ 320x320 ν•΄μƒλ„λ‘œ λΆ„μ„ν•˜μ—¬ μ¦‰μ‹œ 라벨을 μ œμ•ˆν•©λ‹ˆλ‹€.
  • μˆ˜λ™ κ²€μˆ˜: μ˜λ£Œμ§„μ΄ AI의 κ²°κ³Όλ₯Ό ν™•μΈν•˜κ³  μˆ˜μ •ν•  수 있으며, ν™•μ •λœ λ°μ΄ν„°λŠ” ν•™μŠ΅μš© ν…μ„œ(Tensor)둜 λ³€ν™˜λ©λ‹ˆλ‹€.

3. μ›Ή 기반 μ—°ν•©ν•™μŠ΅ (Web-FL)

  • 데이터 νŒŒμ΄ν”„λΌμΈ: 이미지(Canvas) β†’ ν…μ„œ λ³€ν™˜(224x224) β†’ μ •κ·œν™” β†’ 배치 처리.
  • ν•™μŠ΅ ν”„λ‘œμ„ΈμŠ€:
    1. μ„œλ²„λ‘œλΆ€ν„° κΈ€λ‘œλ²Œ κ°€μ€‘μΉ˜ μˆ˜μ‹ 
    2. λΈŒλΌμš°μ €(GPU)μ—μ„œ 둜컬 λ°μ΄ν„°λ‘œ ν•™μŠ΅ μˆ˜ν–‰
    3. κ°±μ‹ λœ κ°€μ€‘μΉ˜λ₯Ό μ„œλ²„λ‘œ 전솑
    4. μ‹€μ‹œκ°„ Loss/Accuracy κ·Έλž˜ν”„ μ—…λ°μ΄νŠΈ

4. κ²°κ³Ό 뢄석 및 λͺ¨λΈ ν™œμš©

  • ν•™μŠ΅μ΄ μ™„λ£Œλ˜λ©΄ μ΅œμ’… 정확도와 손싀 값을 ν™•μΈν•˜κ³ , ν•™μŠ΅λœ λͺ¨λΈμ„ λ‹€μš΄λ‘œλ“œν•˜μ—¬ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

⚠️ μ‹€ν–‰ μ‹œ μ£Όμ˜μ‚¬ν•­

  1. λΈŒλΌμš°μ € ν˜Έν™˜μ„±: WebGL 가속을 μœ„ν•΄ Chrome λ˜λŠ” Edge λΈŒλΌμš°μ € μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.
  2. λ©”λͺ¨λ¦¬ 관리: λŒ€λŸ‰μ˜ 이미지(100μž₯ 이상) ν•™μŠ΅ μ‹œ λΈŒλΌμš°μ € λ©”λͺ¨λ¦¬ 보호λ₯Ό μœ„ν•΄ 배치 λ‹¨μœ„ μ²˜λ¦¬κ°€ μ μš©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  3. μ„œλ²„ μ—°κ²°: [μ—°ν•©ν•™μŠ΅ μ‹œμž‘] λ²„νŠΌμ„ λˆ„λ₯΄κΈ° 전에 λ°˜λ“œμ‹œ **Python μ„œλ²„(simple_server.py)**κ°€ 켜져 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” ꡐ윑 및 연ꡬ λͺ©μ μœΌλ‘œ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


HELIOS Team - Connecting Hospitals, Empowering AI πŸ₯✨

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors