λ³Έ 리ν¬μ§ν 리λ DearBellyμ μ½ μ΄λ―Έμ§ μΈμ κΈ°λ°μ μμ°λΆ λ³΅μ© μλ¬Έ μμ€ν μ ꡬνν κ²μ λλ€.
κ²½κ΅¬μ½ μ΄λ―Έμ§λ₯Ό λΆλ₯νμ¬ μ½νλͺ μ μλ³νκ³ , κ·Έ κ²°κ³Όλ₯Ό λ°νμΌλ‘ LLMμ ν΅ν΄ μμ°λΆ λ³΅μ© κ°λ₯ μ¬λΆμ μ£Όμμ¬νμ μλ΄ν©λλ€.
μ 체 κ°λ° νμ΄νλΌμΈμ λ°μ΄ν° μ μ²λ¦¬ β λ°μ΄ν° μ¦κ° β λͺ¨λΈ νμ΅(SimpleCNN/LightCNN/EfficientNet-B3) β μΆλ‘ β LLM μλ¬Έ(OpenAI API) μμΌλ‘ ꡬμ±νμμ΅λλ€.
μ΄λ―Έμ§ λ°μ΄ν°μ
μ μ²λ¦¬λΆν° CNN νμ΅, μΆλ‘ , μ νΈλ¦¬ν° ν
μ€νΈκΉμ§ νλμ κ΅¬μ‘°λ‘ ν΅ν©λμ΄ μμΌλ©°,
Google Colab / λ‘컬 νκ²½μμ λμΌνκ² μ¬ν κ°λ₯ν©λλ€.
| κ΅¬λΆ | μ€λͺ |
|---|---|
| λ°μ΄ν° μ μ²λ¦¬(data_prep) | ZIP ν΄μ , μ΄λ―Έμ§ κ°μ κ²μ¬, μ€μ ν¬λ‘ λ° λ¦¬μ¬μ΄μ¦ μλν |
| λ°μ΄ν° μ¦κ°(data_augmentation) | λ Έμ΄μ¦ μΆκ°, Shear, λ°κΈ° μ‘°μ λ± μ΄λ―Έμ§ λ€μν κΈ°λ₯ |
| λ°μ΄ν°μ λ‘λ(dataset_precomputed.py) | JSON κΈ°λ° μ΄λ―Έμ§Β·λΌλ²¨ λ§€ν μλ μμ± λ° PyTorch Dataset κ΅¬μ± |
| λͺ¨λΈ(models) | SimpleCNN, LightCNN, EfficientNet-B3 λ± λ€μ€ λ°±λ³Έ λͺ¨λΈ μ§μ |
| νμ΅(trainers) | LightCNN / EfficientNet / TIMM λ°±λ³Έλ³ νμ΅ λ£¨ν λ° ArcFace, Mixup μ΅μ μ 곡 |
| μ΅ν°λ§μ΄μ (optimizer) | SGD / Momentum / Adam λ± λΉκ΅ μ€νμ© μ΅μ ν λͺ¨λ ν¬ν¨ |
| μΆλ‘ (inference/predict.py) | νμ΅λ λͺ¨λΈλ‘ λ¨μΌ μ΄λ―Έμ§ μμΈ‘ λ° Top-k νλ₯ μΆλ ₯ |
| ν΅ν© μ€ν(predict_and_advise.py) | μ΄λ―Έμ§ μΆλ‘ ν LLM κΈ°λ° λ³΅μ© μλ¬ΈκΉμ§ ν λ²μ μ€ν |
| μλΉμ€(services/pregnancy_advice.py) | LLM(OpenAI API) κΈ°λ° μμ°λΆ λ³΅μ© κ°λ₯ μ¬λΆ λ° μ£Όμμ¬ν μλ΄ |
| ν μ€νΈ(tests/test_training_smoke.py) | λͺ¨λΈ νμ΅ λ° μΆλ‘ μ€λͺ¨ν¬ ν μ€νΈ |
| μ νΈ(utils) | μλ κ³ μ (seed), κ²½λ‘ κ΄λ¦¬(paths), λΌλ²¨ λ§€ν(idx2label), EarlyStopping λ± κ³΅ν΅ μ νΈ |
ai_modules/
βββ src/
β βββ data_prep/
β β βββ dataset_precomputed.py # JSON κΈ°λ° λ°μ΄ν°μ
λ‘λ (image_path + label)
β β βββ extract_archives.py # ZIP μμΆ μλ ν΄μ μ€ν¬λ¦½νΈ
β β βββ count_images.py # ν΄λλ³ μ΄λ―Έμ§ κ°μ κ²μ¬
β β βββ center_crop_resize.py # μ€μ ν¬λ‘ λ° λ¦¬μ¬μ΄μ¦ μλν
β β
β βββ data_augmentation/ # λ°μ΄ν° μ¦κ° (κ°λ³ μ€νν)
β β βββ add_noise.py # κ°μ°μμ λ
Έμ΄μ¦ μΆκ°
β β βββ shear_images.py # Shear(κΈ°μΈμ΄κΈ°) λ³ν
β β βββ adjust_brightness.py # λ°κΈ° μ‘°μ
β β
β βββ models/
β β βββ simple_cnn.py # 2 conv + 2 fc κΈ°λ° κ²½λ CNN
β β βββ model_lightcnn.py # LightCNN (AdaptiveAvgPool ν¬ν¨)
β β βββ efficientnet_baseline.py # EfficientNet-B3 λ°±λ³Έ λͺ¨λΈ
β β
β βββ trainers/
β β βββ train_light_cnn.py # LightCNN νμ΅/νκ° λ£¨ν
β β βββ train_efficientnet_baseline.py# EfficientNet-B3 λ² μ΄μ€λΌμΈ νμ΅ μ€ν¬λ¦½νΈ
β β βββ train_timm.py # TIMM λ°±λ³Έ νμ΅ (ArcFace/Mixup μ΅μ
μ§μ)
β β
β βββ optimizer/
β β βββ __init__.py
β β βββ optim_experiment.py # run_experiment_for, plot_from_csvs λ± κ³΅ν΅ λ‘μ§
β β βββ main_lightcnn_optim.py # SGD/Momentum/Adam λΉκ΅ μ€ν μνΈλ¦¬
β β
β βββ inference/
β β βββ predict.py # λ¨μΌ μ΄λ―Έμ§ μΆλ‘ (Top-k κ²°κ³Ό μΆλ ₯)
β β
β βββ services/
β β βββ pregnancy_advice.py # LLM κΈ°λ° μμ°λΆ λ³΅μ© μλ¬Έ λͺ¨λ (OpenAI API)
β β
β βββ utils/
β β βββ seed.py # μλ κ³ μ μ νΈ
β β βββ paths.py # κ²½λ‘ κ΄λ¦¬ ν΄λμ€
β β βββ idx2label.py # λΌλ²¨ λ§€ν μ νΈ
β β βββ early_stopping.py # EarlyStopping ν΄λμ€
β β
β βββ predict_and_advise.py # CNN μΆλ‘ + LLM μλ¬Έ ν΅ν© μ€ν μ€ν¬λ¦½νΈ
β βββ README.md # μλΈλͺ¨λμ© μ€λͺ
λ¬Έμ
β
βββ configs/
β βββ baseline.yaml # νμ΅ κΈ°λ³Έ μ€μ (κ²½λ‘, λ°°μΉ, μν, λ¬λλ μ΄νΈ λ±)
β
βββ tests/
β βββ test_training_smoke.py # λͺ¨λΈ νμ΅ κ²μ¦μ© μ€λͺ¨ν¬ ν
μ€νΈ
β
βββ README.md # 리ν¬μ§ν 리 μ 체 λ¬Έμ (λ³Έ νμΌ)
βββ requirements.txt # μμ‘΄ ν¨ν€μ§ 리μ€νΈ
βββ .gitignore # 무μ μ€μ
βββ __init__.py pip install -r requirements.txt
μμΆλ TS/TL λ°μ΄ν°λ₯Ό μλμΌλ‘ ν΄μ νκ³ ν¬λ‘/리μ¬μ΄μ¦λ₯Ό μνν¨.
# μμΆ ν΄μ
python -m ai_modules.wound_analysis.src.data_prep.extract_archives \
--img-zip-base "/path/to/μμ²λ°μ΄ν°/λ¨μΌκ²½κ΅¬μ½μ 5000μ’
" \
--lbl-zip-base "/path/to/λΌλ²¨λ§λ°μ΄ν°/λ¨μΌκ²½κ΅¬μ½μ 5000μ’
" \
--targets 39,41,42,43,46,48,51,54
# μ΄λ―Έμ§ κ°μ νμΈ
python -m ai_modules.wound_analysis.src.data_prep.count_images \
--root "/path/to/TS_57_λ¨μΌ"
# μ€μ ν¬λ‘ ν 리μ¬μ΄μ¦
python -m ai_modules.wound_analysis.src.data_prep.center_crop_resize \
--input "/path/to/TS_54_λ¨μΌ" \
--output "/path/to/TS_54_λ¨μΌcrop128" \
--crop-size 512 --resize-size 128
python -m ai_modules.wound_analysis.src.train \
--config ai_modules/wound_analysis/configs/baseline.yaml
baseline.yaml μμ
image_root: "/content/gdrive/MyDrive/.../TS_81_λ¨μΌcrop128"
label_root: "/content/gdrive/MyDrive/.../TL_81_λ¨μΌ"
label_key: "dl_name"
img_size: 128
batch_size: 32
epochs: 5
lr: 0.001
save_dir: "runs/exp001"
seed: 42
python -m ai_modules.wound_analysis.src.inference.predict \
--weights runs/exp001/best.pt \
--image path/to/sample.jpg \
--num-classes 492 \
--img-size 128
μΆλ ₯ μμ:
{'pred_index': 27, 'probs_top5': [0.99, 0.87, 0.12, 0.08, 0.05]}
λ³Έ λͺ¨λμ μ½λλ νμ΅ λ° κ°μΈ νλ‘μ νΈ λͺ©μ μΌλ‘ 곡κ°λλ©°,
μ€μ μλ£ μ§λ¨/μ²λ°©μλ μ¬μ©ν μ μμ.
Β© 2025 DearBelly Project (Mom4U)
Author: hjjummy ,sangeun