xeohyun/Food_Calories

0

stars

13

commits

Python

primary language

Jun 7, 2025

updated

README

๐Ÿง  Food Calories Estimation

์Œ์‹ ์ด๋ฏธ์ง€์—์„œ ์Œ์‹ ๊ฐ์ฒด ๋ถ„๋ฆฌ + LLM ๊ธฐ๋ฐ˜ ์„ค๋ช… ๋ฐ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก ์‹œ์Šคํ…œ

์Œ์‹ ์‚ฌ์ง„ ์† ๊ฐ์ฒด๋ฅผ ๋ถ„ํ• (Segmentation)ํ•˜๊ณ , ๊ฐ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž์—ฐ์–ด ์„ค๋ช…๊ณผ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ธ Demo

FoodSeg Demo
๐Ÿ”— ๋ฐ๋ชจ ์˜์ƒ ๋ณด๊ธฐ (YouTube)


๐Ÿ’ก Motivation

  • base model๋กœ Mask2Former๋ฅผ ์„ ์ •ํ•˜๊ณ , ์Œ์‹์— ํŠนํ™”๋œ dataset์ธ FoodSeg103์œผ๋กœ fine-tuningํ•˜์—ฌ segmentation์„ ์ˆ˜ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿง  What is Segmentation?

Segmentation์€ ์ด๋ฏธ์ง€ ์† ๊ฐ ๊ฐ์ฒด๋ฅผ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•ด, ๊ฐ์ฒด๋ณ„๋กœ ์˜์—ญ์„ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๊ฒฝ๊ณ„๋งŒ ์ถ”์ •ํ•ด ์‚ฌ๊ฐํ˜•์œผ๋กœ ๊ฐ์‹ธ๋Š” Object Detection๊ณผ ๋‹ฌ๋ฆฌ, Segmentation์€ ํ›จ์”ฌ ๋” ์ •๋ฐ€ํ•˜๊ฒŒ **ํ”ฝ์…€ ๋‹จ์œ„ ๋งˆ์Šคํฌ(mask)**๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•œ Semantic Segmentation์€ ์ด๋ฏธ์ง€ ๋‚ด ๊ฐ์ฒด๋“ค์„ ์˜๋ฏธ ์žˆ๋Š” ๋ผ๋ฒจ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ, ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋Š” ๊ฐ™์€ ๋ผ๋ฒจ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ช Model Overview

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Mask2Former๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Œ์‹ ๋ถ„ํ• (Semantic Segmentation)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ฐ˜ ๋ชจ๋ธ: Mask2Former๋…ผ๋ฌธ
  • ๋ฐ์ดํ„ฐ์…‹: FoodSeg103
  • ๊ฒฐ๊ณผ: ์Œ์‹ ๊ฐ์ฒด๋ณ„ segmantation ๋งˆ์Šคํฌ ๋ฐ lable ๋ฐ˜ํ™˜
  • ํ›„์ฒ˜๋ฆฌ: LLM(Gemini)์„ ํ†ตํ•ด ์ž์—ฐ์–ด ์„ค๋ช… ๋ฐ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก

๐Ÿ“‚ ๋ฐ์ดํ„ฐ์…‹ ๊ตฌ์„ฑ

  • ์ด๋ฆ„: FoodSeg103 (HuggingFace์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

  • Train ๋ฐ์ดํ„ฐ ์ˆ˜: ์•ฝ 6,000์žฅ

  • Validation ๋ฐ์ดํ„ฐ ์ˆ˜: ์•ฝ 1,600์žฅ

  • ์ด ํด๋ž˜์Šค ์ˆ˜: 104๊ฐœ (์Œ์‹ ์ข…๋ฅ˜๋ณ„ ๊ณ ์œ  ๋ผ๋ฒจ ํฌํ•จ)

๐Ÿท๏ธ ๋ผ๋ฒจ (id2label ํฌ๋งท)

FoodSeg103 ๋ฐ์ดํ„ฐ์…‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์˜ ๋ผ๋ฒจ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

  • 0: background

  • 1: apple

  • 2: banana

  • 3: fried rice

...

  • 103: yogurt

๊ฐ ์ด๋ฏธ์ง€์˜ ํ”ฝ์…€์€ ์ด ๋ผ๋ฒจ ID์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, .json ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ผ๋ฒจ ๋งคํ•‘ ํŒŒ์ผ(id2label.json)์„ ํ†ตํ•ด ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ผ๋ฒจ๋ช…์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ: id2label[3] โ†’ "fried rice"


๐Ÿ”ง Model Architecture: Mask2Former

Mask2Former๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

Model Architecture

  • Backbone: Swin Transformer ๊ธฐ๋ฐ˜์œผ๋กœ hierarchicalํ•˜๊ฒŒ feature๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • Pixel Decoder: multi-scale feature๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  upsampleํ•˜์—ฌ segmentation head๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Transformer Decoder: object query๋ฅผ ํ•™์Šตํ•˜๋ฉฐ, ํ•™์Šต๋œ query์— ๋Œ€ํ•ด mask prediction์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Segmentation Head: binary mask ์˜ˆ์ธก๊ณผ class ์˜ˆ์ธก์„ ํ†ตํ•ด ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฃผ์š” ๊ธฐ๋Šฅ

  • Semantic Segmentation: Mask2Former ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ๋‚ด ์Œ์‹ ๋ถ„ํ• 
  • Gradio UI: ์›น ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ
  • Gemini API ์—ฐ๋™: ๋ถ„ํ•  ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜ ์ž์—ฐ์–ด ์„ค๋ช… ์ƒ์„ฑ
  • ๋ชจ๋ธ ํ•™์Šต ๊ธฐ๋Šฅ: Custom ํ•™์Šต ๊ฐ€๋Šฅ, yaml ๊ธฐ๋ฐ˜ ์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉ
  • ๋ชจ๋“ˆํ™”๋œ ๊ตฌ์กฐ: ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๊ธฐ๋Šฅ ํ™•์žฅ์ด ์‰ฌ์šด ๊ตฌ์กฐ๋กœ ์„ค๊ณ„

๐Ÿš€ Project PipeLine

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์Œ์‹ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„, ๊ฐ์ฒด ๋ถ„ํ• , ๋ผ๋ฒจ ์ถ”์ถœ, LLM ๊ธฐ๋ฐ˜ ์„ค๋ช… ๋ฐ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก๊นŒ์ง€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

1๏ธโƒฃ ์ด๋ฏธ์ง€ ์ž…๋ ฅ (Gradio UI)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์›น์—์„œ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋˜๋Š” ๋“œ๋ž˜๊ทธ&๋“œ๋กญ
  • ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ predict_masks() ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋จ

2๏ธโƒฃ ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ

  • albumentations ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด Resize(512x512), Normalize ์ˆ˜ํ–‰
  • OpenCV โ†’ NumPy โ†’ PyTorch Tensor ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜

3๏ธโƒฃ Segmentation ๋ชจ๋ธ ์ถ”๋ก  (Mask2Former)

  • Fine-tuned Mask2Former ๋ชจ๋ธ์„ ๋กœ๋”ฉํ•˜์—ฌ ์ถ”๋ก  ์ˆ˜ํ–‰
  • ์ถœ๋ ฅ: segmentation mask + segments_info + label_id

4๏ธโƒฃ ์‹œ๊ฐํ™” ์ฒ˜๋ฆฌ

  • ๊ฐ ๋ผ๋ฒจ์— ๋งž๋Š” ์ƒ‰์ƒ์œผ๋กœ ๋งˆ์Šคํฌ ์˜ค๋ฒ„๋ ˆ์ด ์ƒ์„ฑ
  • PIL ์ด๋ฏธ์ง€ ๊ฐ์ฒด์— ํ…์ŠคํŠธ(label name)๊นŒ์ง€ ๊ทธ๋ ค์„œ ์ถœ๋ ฅ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

5๏ธโƒฃ ๋ผ๋ฒจ ์ถ”์ถœ

  • segments_info์—์„œ ๊ณ ์œ  label_id๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ค‘๋ณต ์ œ๊ฑฐ
  • id2label์„ ํ†ตํ•ด ์ตœ์ข… ๋ผ๋ฒจ ์ด๋ฆ„ ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ

6๏ธโƒฃ Gemini API ํ˜ธ์ถœ

  • ๊ฐ์ง€๋œ ์Œ์‹ ๋ผ๋ฒจ์„ prompt์— ์‚ฝ์ž…
  • Gemini-1.5-flash ๋ชจ๋ธ์— ์ž์—ฐ์–ด๋กœ ์งˆ์˜
  • ๊ฒฐ๊ณผ: ์Œ์‹ ์ข…๋ฅ˜ ์ถ”๋ก  + ํ‰๊ท  ์นผ๋กœ๋ฆฌ ํฌํ•จ๋œ ํ…์ŠคํŠธ ์ƒ์„ฑ

7๏ธโƒฃ ์ตœ์ข… ์ถœ๋ ฅ

  • Gradio UI์— ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€(๋งˆ์Šคํฌ ํฌํ•จ) + Gemini ์‘๋‹ต ํ…์ŠคํŠธ ํ•จ๊ป˜ ์ถœ๋ ฅ

๐Ÿ“Œ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

[Input Image]
     โ†“
[Preprocessing]
     โ†“
[Mask2Former Inference]
     โ†“
[Segmentation Mask + Label Extraction]
     โ†“
[LLM Prompt (Gemini)]
     โ†“
[Food Name + Estimated Calorie]
     โ†“
[Gradio UI Output]

๐Ÿ”ง ์‚ฌ์šฉ๋ฒ•

1. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

FoodSeg/
โ”œโ”€โ”€ gradio_app/
โ”‚   โ”œโ”€โ”€ app.py                  # Gradio UI
โ”‚   โ””โ”€โ”€ model_inference.py      # mask ์˜ˆ์ธก ํ•จ์ˆ˜
โ”œโ”€โ”€ scripts/
โ”‚   โ””โ”€โ”€ train.py                # SegmentationTrainer ์ •์˜ (ํ•™์Šต ๋กœ์ง)
โ”‚   โ””โ”€โ”€ run_training.py         # ๋ชจ๋ธ ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ config.yaml                 # ํ•™์Šต ์„ค์ •
โ”œโ”€โ”€ foodseg_result/             # (ํ•™์Šต๋œ ๋ชจ๋ธ ์ €์žฅ ๊ฒฝ๋กœ)
โ””โ”€โ”€ README.md

2. ํ•™์Šต

python -m scripts.run_training --config configs/semantic/pipeline.yaml

Checkpoint๋Š” foodseg_result/ ํ•˜์œ„์— .pth ํŒŒ์ผ๋กœ ์ €์žฅ๋จ

3. ์‹คํ–‰

python gradio_app/app.py

Gradio UI๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ์ž…๋ ฅ ์‹œ ๋งˆ์Šคํฌ ๊ฒฐ๊ณผ + ์ž์—ฐ์–ด ์„ค๋ช… + ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก๊นŒ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ


๐Ÿงช ์ฝ”๋“œ ๊ตฌ์„ฑ ๋ฐ ์„ค๋ช…

1. gradio_app/model_inference.py

  • ๋ชฉ์ : ์‚ฌ์šฉ์ž ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์‹œ segmentation ์˜ˆ์ธก + Gemini ์„ค๋ช… ์ƒ์„ฑ
  • ๊ตฌ์„ฑ ๊ธฐ๋Šฅ:
    • load_model_and_processor(): ๊ฐ€์žฅ ์ตœ์‹  checkpoint ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    • predict_masks(): ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ, ๋ชจ๋ธ ์ถ”๋ก , ๋งˆ์Šคํฌ ์‹œ๊ฐํ™” ์ˆ˜ํ–‰
    • generate_caption_from_labels_with_calories(): ์ธ์‹๋œ ๋ผ๋ฒจ์„ ๊ธฐ๋ฐ˜์œผ๋กœ Gemini API ํ˜ธ์ถœํ•˜์—ฌ ํ…์ŠคํŠธ ์ƒ์„ฑ

2. scripts/run_training.py

  • ๋ชฉ์ : ํ•™์Šต ์„ค์ •์„ ๋‹ด์€ config.yaml์„ ๋ถˆ๋Ÿฌ์™€ FoodSeg103 ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ Mask2Former ๋ชจ๋ธ ํ•™์Šต ์ˆ˜ํ–‰
  • ์ฃผ์š” ๊ธฐ๋Šฅ:
    • load_config(): yaml ๋กœ๋ถ€ํ„ฐ ์„ค์ • ๋กœ๋”ฉ
    • HuggingFace Hub์—์„œ id2label ๋ฐ train/val dataset ๋‹ค์šด๋กœ๋“œ
    • SegmentationTrainer ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ํ•™์Šต ์‹œ์ž‘

3. scripts/train.py

  • ๋ชฉ์ : ํ•™์Šต ๋กœ์ง์ด ์ •์˜๋œ ํด๋ž˜์Šค SegmentationTrainer ๊ตฌํ˜„
  • ์ฃผ์š” ๊ธฐ๋Šฅ:
    ๊ธฐ๋Šฅ์„ค๋ช…
    ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ์ „์ฒ˜๋ฆฌAlbumentations ์ด์šฉํ•ด Resize, Normalize, Flip ๋“ฑ ์ ์šฉ
    ๋ชจ๋ธ ์ดˆ๊ธฐํ™”์‚ฌ์ „ํ•™์Šต๋œ mask2former-swin-small-ade-semantic ๋ถˆ๋Ÿฌ์˜ด
    ํ•™์Šต ๋ฃจํ”„Epoch๋ณ„ ํ•™์Šต, Loss ๊ธฐ๋ก, Validation ํฌํ•จ
    ํ‰๊ฐ€ ์ง€ํ‘œmean IoU(evaluate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ์‚ฌ์šฉ
    ๋ชจ๋ธ ์ €์žฅsave_pretrained() + .pth ๋กœ ์ €์žฅ
    ์‹œ๊ฐํ™”tensorboard ์—ฐ๋™ ๋กœ๊ทธ ์ €์žฅ

๐Ÿ“ˆ Training Performance Summary

EpochAvg Training LossValidation LossMean IoU
145.783636.52470.1157
231.004229.85340.1727
324.704126.10800.2254
421.272424.28010.2612
519.004624.16690.2853
617.448823.89300.3119
715.718823.62580.3249
814.408323.07350.3544
913.527824.07610.3561
1012.642023.86190.3682
1111.851224.06980.3666
1211.068825.35150.3584
139.522624.18380.3879
149.023724.40870.3961
  • Model Checkpoints Saved: Epoch 1 ~ 14
  • ๐Ÿ“Œ Best Epoch: Epoch 8 โ€” Lowest Validation Loss 23.0735 with high IoU 0.3544

๐Ÿ“Š Loss ๋ฐ IoU ์‹œ๊ฐํ™” ๊ฒฐ๊ณผ

Training Progress

  • ์ขŒ์ธก ๊ทธ๋ž˜ํ”„๋Š” Training Loss vs Validation Loss์˜ ๋ณ€ํ™”๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์šฐ์ธก์€ Mean IoU๊ฐ€ Epoch๋ณ„๋กœ ์ ์ง„์ ์œผ๋กœ ์ƒ์Šนํ•˜๋Š” ์–‘์ƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • Epoch 1๋ถ€ํ„ฐ ๋น ๋ฅด๊ฒŒ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜๋ฉฐ, Epoch 8์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ Validation Loss์™€ ๋†’์€ IoU ์„ฑ๋Šฅ์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

โš ๏ธ ํ•œ๊ณ„์  (Limitation)

  • ์ •ํ™•ํ•œ ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ์„ ์œ„ํ•ด์„œ๋Š” ์‹ค์ œ ๋ฌผ๋ฆฌ ํฌ๊ธฐ๋‚˜ ๋ฌด๊ฒŒ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ,
    ํ˜„์žฌ๋Š” ๋‹จ์ˆœ ๋ผ๋ฒจ ๊ธฐ๋ฐ˜ ๋Œ€๋žต ์˜ˆ์ธก ์ˆ˜์ค€
  • Segmentation์˜ pixel ๊ฐ’๊ณผ depthmap์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์‹ค์ œ ์Œ์‹ ํฌ๊ธฐ๋ฅผ ์ถ”์ •ํ•˜๊ณ  ์นผ๋กœ๋ฆฌ๋ฅผ ์˜ˆ์ธกํ•˜๋ ค ํ–ˆ์œผ๋‚˜,
    ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ๋Š” ์ •ํ™•ํ•œ depth ์ •๋ณด์™€์˜ ์ •ํ•ฉ์ด ์–ด๋ ค์› ์Œ
  • ๋ผ๋ฒจ ํด๋ž˜์Šค ์ˆ˜๊ฐ€ ์ œํ•œ์ ์ž„ (์ด 104๊ฐœ ํด๋ž˜์Šค)
    โ†’ ์‹ค์ œ ์กด์žฌํ•˜๋Š” ์ˆ˜์ฒœ ๊ฐ€์ง€ ์Œ์‹ ์ข…๋ฅ˜๋ฅผ ๋ชจ๋‘ ์ปค๋ฒ„ํ•˜์ง€ ๋ชปํ•จ
    โ†’ ์˜ˆ: ๊น€์น˜์ฐŒ๊ฐœ, ๋–ก๋ณถ์ด, ์žก์ฑ„ ๋“ฑ์˜ ์ผ์ƒ์  ํ•œ๊ตญ ์Œ์‹์€ ๋ฏธํฌํ•จ
    โ†’ ์ด๋กœ ์ธํ•ด ๋ถ„๋ฅ˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋ถ€์ •ํ™•ํ•œ ์˜ˆ์ธก์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • Mean IoU๊ฐ€ ์•ฝ 0.39 ์ˆ˜์ค€์œผ๋กœ, ๋ณต์žกํ•œ ์Œ์‹ ๊ฐ„ ๊ฒฝ๊ณ„ ๊ตฌ๋ถ„์—๋Š” ์•„์ง ๋ถ€์กฑํ•จ โ†’ ์ด๋Š” ๊ฐ™์€ ์ƒ‰์ƒ ๊ณ„์—ด์ด๋‚˜ ์งˆ๊ฐ์ด ์œ ์‚ฌํ•œ ์Œ์‹ ๊ฐ„ ๊ตฌ๋ถ„์ด ์–ด๋ ค์›Œ์ง€๋Š” ๋ฌธ์ œ์—์„œ ๊ธฐ์ธํ•จ โ†’ ํŠนํžˆ ์—ฌ๋Ÿฌ ์Œ์‹์ด ๊ฒน์ณ ์žˆ๊ฑฐ๋‚˜ ํฌ์žฅ์ง€, ๊ทธ๋ฆผ์ž ๋“ฑ์˜ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง

๐Ÿšง ํ–ฅํ›„ ๊ณ„ํš (Future Plans)

  • ๐Ÿ“ˆ Fine-Tuning ์ „๋žต ๊ฐœ์„ 
    • ํด๋ž˜์Šค ๋ถˆ๊ท ํ˜• ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ฐ€์ค‘์น˜ ์ ์šฉ
    • Backbone ๊ณ ์ • + Transformer Decoder ์ค‘์‹ฌ ํ•™์Šต ์‹คํ—˜
    • Augmentation ๋‹ค์–‘ํ™” ๋ฐ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™”
  • ๐Ÿ” ํ‰๊ฐ€ ์ง€ํ‘œ ๋ณด๊ฐ•
    • Mean IoU ์™ธ์—๋„ pixel accuracy, class-wise IoU ๋“ฑ์„ ์ถ”๊ฐ€ ๋„์ž…ํ•˜์—ฌ ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ๋‹ค๊ฐ๋„๋กœ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿง  ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก ์ •๋ฐ€ํ™”
    • Segmentation mask์™€ depth map์„ ํ•จ๊ป˜ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ ์Œ์‹ ๋ถ€ํ”ผ ์ถ”์ • ํ›„ ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ
    • ์†์ด๋‚˜ ์‹๊ธฐ๋ฅ˜๋ฅผ ์ฐธ์กฐ ์Šค์ผ€์ผ๋กœ ์ž๋™ ์ธ์‹ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ณ ๋ ค
  • ๐Ÿงช ๋ฐ์ดํ„ฐ์…‹ ํ™•์žฅ
    • FoodSeg103 ์™ธ ์ปค์Šคํ…€ ์Œ์‹ ์ด๋ฏธ์ง€ ์ˆ˜์ง‘ ๋ฐ ๋ผ๋ฒจ๋ง ์ง„ํ–‰
    • ๋‹ค์–‘ํ•œ ์ดฌ์˜ ํ™˜๊ฒฝ(์กฐ๋ช…, ๊ฐ๋„, ๊ธฐ๊ธฐ ๋“ฑ)์—์„œ๋„ ์ž˜ ๋™์ž‘ํ•˜๋„๋ก ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ ๊ฐœ์„ 
  • ๐Ÿงฉ LLM + Zero-Shot Vision ๋ชจ๋ธ ๊ฒฐํ•ฉ
    • SAM๊ณผ ๊ฐ™์€ Zero-Shot segmentation ๋ชจ๋ธ๊ณผ LLM์„ ๊ฒฐํ•ฉํ•ด ๋‹ค์–‘ํ•œ ์Œ์‹ ์ข…๋ฅ˜์— ๋Œ€ํ•œ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก ์ˆ˜ํ–‰

Contributors

xeohyun

13 commits

xeohyun/Food_Calories

0

stars

13

commits

Python

primary language

Jun 7, 2025

updated

README

๐Ÿง  Food Calories Estimation

์Œ์‹ ์ด๋ฏธ์ง€์—์„œ ์Œ์‹ ๊ฐ์ฒด ๋ถ„๋ฆฌ + LLM ๊ธฐ๋ฐ˜ ์„ค๋ช… ๋ฐ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก ์‹œ์Šคํ…œ

์Œ์‹ ์‚ฌ์ง„ ์† ๊ฐ์ฒด๋ฅผ ๋ถ„ํ• (Segmentation)ํ•˜๊ณ , ๊ฐ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž์—ฐ์–ด ์„ค๋ช…๊ณผ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ธ Demo

FoodSeg Demo
๐Ÿ”— ๋ฐ๋ชจ ์˜์ƒ ๋ณด๊ธฐ (YouTube)


๐Ÿ’ก Motivation

  • base model๋กœ Mask2Former๋ฅผ ์„ ์ •ํ•˜๊ณ , ์Œ์‹์— ํŠนํ™”๋œ dataset์ธ FoodSeg103์œผ๋กœ fine-tuningํ•˜์—ฌ segmentation์„ ์ˆ˜ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿง  What is Segmentation?

Segmentation์€ ์ด๋ฏธ์ง€ ์† ๊ฐ ๊ฐ์ฒด๋ฅผ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•ด, ๊ฐ์ฒด๋ณ„๋กœ ์˜์—ญ์„ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๊ฒฝ๊ณ„๋งŒ ์ถ”์ •ํ•ด ์‚ฌ๊ฐํ˜•์œผ๋กœ ๊ฐ์‹ธ๋Š” Object Detection๊ณผ ๋‹ฌ๋ฆฌ, Segmentation์€ ํ›จ์”ฌ ๋” ์ •๋ฐ€ํ•˜๊ฒŒ **ํ”ฝ์…€ ๋‹จ์œ„ ๋งˆ์Šคํฌ(mask)**๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•œ Semantic Segmentation์€ ์ด๋ฏธ์ง€ ๋‚ด ๊ฐ์ฒด๋“ค์„ ์˜๋ฏธ ์žˆ๋Š” ๋ผ๋ฒจ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ, ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋Š” ๊ฐ™์€ ๋ผ๋ฒจ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ช Model Overview

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Mask2Former๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Œ์‹ ๋ถ„ํ• (Semantic Segmentation)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ฐ˜ ๋ชจ๋ธ: Mask2Former๋…ผ๋ฌธ
  • ๋ฐ์ดํ„ฐ์…‹: FoodSeg103
  • ๊ฒฐ๊ณผ: ์Œ์‹ ๊ฐ์ฒด๋ณ„ segmantation ๋งˆ์Šคํฌ ๋ฐ lable ๋ฐ˜ํ™˜
  • ํ›„์ฒ˜๋ฆฌ: LLM(Gemini)์„ ํ†ตํ•ด ์ž์—ฐ์–ด ์„ค๋ช… ๋ฐ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก

๐Ÿ“‚ ๋ฐ์ดํ„ฐ์…‹ ๊ตฌ์„ฑ

  • ์ด๋ฆ„: FoodSeg103 (HuggingFace์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

  • Train ๋ฐ์ดํ„ฐ ์ˆ˜: ์•ฝ 6,000์žฅ

  • Validation ๋ฐ์ดํ„ฐ ์ˆ˜: ์•ฝ 1,600์žฅ

  • ์ด ํด๋ž˜์Šค ์ˆ˜: 104๊ฐœ (์Œ์‹ ์ข…๋ฅ˜๋ณ„ ๊ณ ์œ  ๋ผ๋ฒจ ํฌํ•จ)

๐Ÿท๏ธ ๋ผ๋ฒจ (id2label ํฌ๋งท)

FoodSeg103 ๋ฐ์ดํ„ฐ์…‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์˜ ๋ผ๋ฒจ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

  • 0: background

  • 1: apple

  • 2: banana

  • 3: fried rice

...

  • 103: yogurt

๊ฐ ์ด๋ฏธ์ง€์˜ ํ”ฝ์…€์€ ์ด ๋ผ๋ฒจ ID์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, .json ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ผ๋ฒจ ๋งคํ•‘ ํŒŒ์ผ(id2label.json)์„ ํ†ตํ•ด ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ผ๋ฒจ๋ช…์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ: id2label[3] โ†’ "fried rice"


๐Ÿ”ง Model Architecture: Mask2Former

Mask2Former๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

Model Architecture

  • Backbone: Swin Transformer ๊ธฐ๋ฐ˜์œผ๋กœ hierarchicalํ•˜๊ฒŒ feature๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • Pixel Decoder: multi-scale feature๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  upsampleํ•˜์—ฌ segmentation head๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Transformer Decoder: object query๋ฅผ ํ•™์Šตํ•˜๋ฉฐ, ํ•™์Šต๋œ query์— ๋Œ€ํ•ด mask prediction์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Segmentation Head: binary mask ์˜ˆ์ธก๊ณผ class ์˜ˆ์ธก์„ ํ†ตํ•ด ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฃผ์š” ๊ธฐ๋Šฅ

  • Semantic Segmentation: Mask2Former ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ๋‚ด ์Œ์‹ ๋ถ„ํ• 
  • Gradio UI: ์›น ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ
  • Gemini API ์—ฐ๋™: ๋ถ„ํ•  ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜ ์ž์—ฐ์–ด ์„ค๋ช… ์ƒ์„ฑ
  • ๋ชจ๋ธ ํ•™์Šต ๊ธฐ๋Šฅ: Custom ํ•™์Šต ๊ฐ€๋Šฅ, yaml ๊ธฐ๋ฐ˜ ์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉ
  • ๋ชจ๋“ˆํ™”๋œ ๊ตฌ์กฐ: ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๊ธฐ๋Šฅ ํ™•์žฅ์ด ์‰ฌ์šด ๊ตฌ์กฐ๋กœ ์„ค๊ณ„

๐Ÿš€ Project PipeLine

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์Œ์‹ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„, ๊ฐ์ฒด ๋ถ„ํ• , ๋ผ๋ฒจ ์ถ”์ถœ, LLM ๊ธฐ๋ฐ˜ ์„ค๋ช… ๋ฐ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก๊นŒ์ง€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

1๏ธโƒฃ ์ด๋ฏธ์ง€ ์ž…๋ ฅ (Gradio UI)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์›น์—์„œ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋˜๋Š” ๋“œ๋ž˜๊ทธ&๋“œ๋กญ
  • ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ predict_masks() ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋จ

2๏ธโƒฃ ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ

  • albumentations ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด Resize(512x512), Normalize ์ˆ˜ํ–‰
  • OpenCV โ†’ NumPy โ†’ PyTorch Tensor ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜

3๏ธโƒฃ Segmentation ๋ชจ๋ธ ์ถ”๋ก  (Mask2Former)

  • Fine-tuned Mask2Former ๋ชจ๋ธ์„ ๋กœ๋”ฉํ•˜์—ฌ ์ถ”๋ก  ์ˆ˜ํ–‰
  • ์ถœ๋ ฅ: segmentation mask + segments_info + label_id

4๏ธโƒฃ ์‹œ๊ฐํ™” ์ฒ˜๋ฆฌ

  • ๊ฐ ๋ผ๋ฒจ์— ๋งž๋Š” ์ƒ‰์ƒ์œผ๋กœ ๋งˆ์Šคํฌ ์˜ค๋ฒ„๋ ˆ์ด ์ƒ์„ฑ
  • PIL ์ด๋ฏธ์ง€ ๊ฐ์ฒด์— ํ…์ŠคํŠธ(label name)๊นŒ์ง€ ๊ทธ๋ ค์„œ ์ถœ๋ ฅ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

5๏ธโƒฃ ๋ผ๋ฒจ ์ถ”์ถœ

  • segments_info์—์„œ ๊ณ ์œ  label_id๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ค‘๋ณต ์ œ๊ฑฐ
  • id2label์„ ํ†ตํ•ด ์ตœ์ข… ๋ผ๋ฒจ ์ด๋ฆ„ ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ

6๏ธโƒฃ Gemini API ํ˜ธ์ถœ

  • ๊ฐ์ง€๋œ ์Œ์‹ ๋ผ๋ฒจ์„ prompt์— ์‚ฝ์ž…
  • Gemini-1.5-flash ๋ชจ๋ธ์— ์ž์—ฐ์–ด๋กœ ์งˆ์˜
  • ๊ฒฐ๊ณผ: ์Œ์‹ ์ข…๋ฅ˜ ์ถ”๋ก  + ํ‰๊ท  ์นผ๋กœ๋ฆฌ ํฌํ•จ๋œ ํ…์ŠคํŠธ ์ƒ์„ฑ

7๏ธโƒฃ ์ตœ์ข… ์ถœ๋ ฅ

  • Gradio UI์— ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€(๋งˆ์Šคํฌ ํฌํ•จ) + Gemini ์‘๋‹ต ํ…์ŠคํŠธ ํ•จ๊ป˜ ์ถœ๋ ฅ

๐Ÿ“Œ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

[Input Image]
     โ†“
[Preprocessing]
     โ†“
[Mask2Former Inference]
     โ†“
[Segmentation Mask + Label Extraction]
     โ†“
[LLM Prompt (Gemini)]
     โ†“
[Food Name + Estimated Calorie]
     โ†“
[Gradio UI Output]

๐Ÿ”ง ์‚ฌ์šฉ๋ฒ•

1. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

FoodSeg/
โ”œโ”€โ”€ gradio_app/
โ”‚   โ”œโ”€โ”€ app.py                  # Gradio UI
โ”‚   โ””โ”€โ”€ model_inference.py      # mask ์˜ˆ์ธก ํ•จ์ˆ˜
โ”œโ”€โ”€ scripts/
โ”‚   โ””โ”€โ”€ train.py                # SegmentationTrainer ์ •์˜ (ํ•™์Šต ๋กœ์ง)
โ”‚   โ””โ”€โ”€ run_training.py         # ๋ชจ๋ธ ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ config.yaml                 # ํ•™์Šต ์„ค์ •
โ”œโ”€โ”€ foodseg_result/             # (ํ•™์Šต๋œ ๋ชจ๋ธ ์ €์žฅ ๊ฒฝ๋กœ)
โ””โ”€โ”€ README.md

2. ํ•™์Šต

python -m scripts.run_training --config configs/semantic/pipeline.yaml

Checkpoint๋Š” foodseg_result/ ํ•˜์œ„์— .pth ํŒŒ์ผ๋กœ ์ €์žฅ๋จ

3. ์‹คํ–‰

python gradio_app/app.py

Gradio UI๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ์ž…๋ ฅ ์‹œ ๋งˆ์Šคํฌ ๊ฒฐ๊ณผ + ์ž์—ฐ์–ด ์„ค๋ช… + ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก๊นŒ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ


๐Ÿงช ์ฝ”๋“œ ๊ตฌ์„ฑ ๋ฐ ์„ค๋ช…

1. gradio_app/model_inference.py

  • ๋ชฉ์ : ์‚ฌ์šฉ์ž ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์‹œ segmentation ์˜ˆ์ธก + Gemini ์„ค๋ช… ์ƒ์„ฑ
  • ๊ตฌ์„ฑ ๊ธฐ๋Šฅ:
    • load_model_and_processor(): ๊ฐ€์žฅ ์ตœ์‹  checkpoint ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    • predict_masks(): ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ, ๋ชจ๋ธ ์ถ”๋ก , ๋งˆ์Šคํฌ ์‹œ๊ฐํ™” ์ˆ˜ํ–‰
    • generate_caption_from_labels_with_calories(): ์ธ์‹๋œ ๋ผ๋ฒจ์„ ๊ธฐ๋ฐ˜์œผ๋กœ Gemini API ํ˜ธ์ถœํ•˜์—ฌ ํ…์ŠคํŠธ ์ƒ์„ฑ

2. scripts/run_training.py

  • ๋ชฉ์ : ํ•™์Šต ์„ค์ •์„ ๋‹ด์€ config.yaml์„ ๋ถˆ๋Ÿฌ์™€ FoodSeg103 ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ Mask2Former ๋ชจ๋ธ ํ•™์Šต ์ˆ˜ํ–‰
  • ์ฃผ์š” ๊ธฐ๋Šฅ:
    • load_config(): yaml ๋กœ๋ถ€ํ„ฐ ์„ค์ • ๋กœ๋”ฉ
    • HuggingFace Hub์—์„œ id2label ๋ฐ train/val dataset ๋‹ค์šด๋กœ๋“œ
    • SegmentationTrainer ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ํ•™์Šต ์‹œ์ž‘

3. scripts/train.py

  • ๋ชฉ์ : ํ•™์Šต ๋กœ์ง์ด ์ •์˜๋œ ํด๋ž˜์Šค SegmentationTrainer ๊ตฌํ˜„
  • ์ฃผ์š” ๊ธฐ๋Šฅ:
    ๊ธฐ๋Šฅ์„ค๋ช…
    ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ์ „์ฒ˜๋ฆฌAlbumentations ์ด์šฉํ•ด Resize, Normalize, Flip ๋“ฑ ์ ์šฉ
    ๋ชจ๋ธ ์ดˆ๊ธฐํ™”์‚ฌ์ „ํ•™์Šต๋œ mask2former-swin-small-ade-semantic ๋ถˆ๋Ÿฌ์˜ด
    ํ•™์Šต ๋ฃจํ”„Epoch๋ณ„ ํ•™์Šต, Loss ๊ธฐ๋ก, Validation ํฌํ•จ
    ํ‰๊ฐ€ ์ง€ํ‘œmean IoU(evaluate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ์‚ฌ์šฉ
    ๋ชจ๋ธ ์ €์žฅsave_pretrained() + .pth ๋กœ ์ €์žฅ
    ์‹œ๊ฐํ™”tensorboard ์—ฐ๋™ ๋กœ๊ทธ ์ €์žฅ

๐Ÿ“ˆ Training Performance Summary

EpochAvg Training LossValidation LossMean IoU
145.783636.52470.1157
231.004229.85340.1727
324.704126.10800.2254
421.272424.28010.2612
519.004624.16690.2853
617.448823.89300.3119
715.718823.62580.3249
814.408323.07350.3544
913.527824.07610.3561
1012.642023.86190.3682
1111.851224.06980.3666
1211.068825.35150.3584
139.522624.18380.3879
149.023724.40870.3961
  • Model Checkpoints Saved: Epoch 1 ~ 14
  • ๐Ÿ“Œ Best Epoch: Epoch 8 โ€” Lowest Validation Loss 23.0735 with high IoU 0.3544

๐Ÿ“Š Loss ๋ฐ IoU ์‹œ๊ฐํ™” ๊ฒฐ๊ณผ

Training Progress

  • ์ขŒ์ธก ๊ทธ๋ž˜ํ”„๋Š” Training Loss vs Validation Loss์˜ ๋ณ€ํ™”๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์šฐ์ธก์€ Mean IoU๊ฐ€ Epoch๋ณ„๋กœ ์ ์ง„์ ์œผ๋กœ ์ƒ์Šนํ•˜๋Š” ์–‘์ƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • Epoch 1๋ถ€ํ„ฐ ๋น ๋ฅด๊ฒŒ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜๋ฉฐ, Epoch 8์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ Validation Loss์™€ ๋†’์€ IoU ์„ฑ๋Šฅ์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

โš ๏ธ ํ•œ๊ณ„์  (Limitation)

  • ์ •ํ™•ํ•œ ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ์„ ์œ„ํ•ด์„œ๋Š” ์‹ค์ œ ๋ฌผ๋ฆฌ ํฌ๊ธฐ๋‚˜ ๋ฌด๊ฒŒ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ,
    ํ˜„์žฌ๋Š” ๋‹จ์ˆœ ๋ผ๋ฒจ ๊ธฐ๋ฐ˜ ๋Œ€๋žต ์˜ˆ์ธก ์ˆ˜์ค€
  • Segmentation์˜ pixel ๊ฐ’๊ณผ depthmap์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์‹ค์ œ ์Œ์‹ ํฌ๊ธฐ๋ฅผ ์ถ”์ •ํ•˜๊ณ  ์นผ๋กœ๋ฆฌ๋ฅผ ์˜ˆ์ธกํ•˜๋ ค ํ–ˆ์œผ๋‚˜,
    ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ๋Š” ์ •ํ™•ํ•œ depth ์ •๋ณด์™€์˜ ์ •ํ•ฉ์ด ์–ด๋ ค์› ์Œ
  • ๋ผ๋ฒจ ํด๋ž˜์Šค ์ˆ˜๊ฐ€ ์ œํ•œ์ ์ž„ (์ด 104๊ฐœ ํด๋ž˜์Šค)
    โ†’ ์‹ค์ œ ์กด์žฌํ•˜๋Š” ์ˆ˜์ฒœ ๊ฐ€์ง€ ์Œ์‹ ์ข…๋ฅ˜๋ฅผ ๋ชจ๋‘ ์ปค๋ฒ„ํ•˜์ง€ ๋ชปํ•จ
    โ†’ ์˜ˆ: ๊น€์น˜์ฐŒ๊ฐœ, ๋–ก๋ณถ์ด, ์žก์ฑ„ ๋“ฑ์˜ ์ผ์ƒ์  ํ•œ๊ตญ ์Œ์‹์€ ๋ฏธํฌํ•จ
    โ†’ ์ด๋กœ ์ธํ•ด ๋ถ„๋ฅ˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋ถ€์ •ํ™•ํ•œ ์˜ˆ์ธก์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • Mean IoU๊ฐ€ ์•ฝ 0.39 ์ˆ˜์ค€์œผ๋กœ, ๋ณต์žกํ•œ ์Œ์‹ ๊ฐ„ ๊ฒฝ๊ณ„ ๊ตฌ๋ถ„์—๋Š” ์•„์ง ๋ถ€์กฑํ•จ โ†’ ์ด๋Š” ๊ฐ™์€ ์ƒ‰์ƒ ๊ณ„์—ด์ด๋‚˜ ์งˆ๊ฐ์ด ์œ ์‚ฌํ•œ ์Œ์‹ ๊ฐ„ ๊ตฌ๋ถ„์ด ์–ด๋ ค์›Œ์ง€๋Š” ๋ฌธ์ œ์—์„œ ๊ธฐ์ธํ•จ โ†’ ํŠนํžˆ ์—ฌ๋Ÿฌ ์Œ์‹์ด ๊ฒน์ณ ์žˆ๊ฑฐ๋‚˜ ํฌ์žฅ์ง€, ๊ทธ๋ฆผ์ž ๋“ฑ์˜ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง

๐Ÿšง ํ–ฅํ›„ ๊ณ„ํš (Future Plans)

  • ๐Ÿ“ˆ Fine-Tuning ์ „๋žต ๊ฐœ์„ 
    • ํด๋ž˜์Šค ๋ถˆ๊ท ํ˜• ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ฐ€์ค‘์น˜ ์ ์šฉ
    • Backbone ๊ณ ์ • + Transformer Decoder ์ค‘์‹ฌ ํ•™์Šต ์‹คํ—˜
    • Augmentation ๋‹ค์–‘ํ™” ๋ฐ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™”
  • ๐Ÿ” ํ‰๊ฐ€ ์ง€ํ‘œ ๋ณด๊ฐ•
    • Mean IoU ์™ธ์—๋„ pixel accuracy, class-wise IoU ๋“ฑ์„ ์ถ”๊ฐ€ ๋„์ž…ํ•˜์—ฌ ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ๋‹ค๊ฐ๋„๋กœ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿง  ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก ์ •๋ฐ€ํ™”
    • Segmentation mask์™€ depth map์„ ํ•จ๊ป˜ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ ์Œ์‹ ๋ถ€ํ”ผ ์ถ”์ • ํ›„ ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ
    • ์†์ด๋‚˜ ์‹๊ธฐ๋ฅ˜๋ฅผ ์ฐธ์กฐ ์Šค์ผ€์ผ๋กœ ์ž๋™ ์ธ์‹ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ณ ๋ ค
  • ๐Ÿงช ๋ฐ์ดํ„ฐ์…‹ ํ™•์žฅ
    • FoodSeg103 ์™ธ ์ปค์Šคํ…€ ์Œ์‹ ์ด๋ฏธ์ง€ ์ˆ˜์ง‘ ๋ฐ ๋ผ๋ฒจ๋ง ์ง„ํ–‰
    • ๋‹ค์–‘ํ•œ ์ดฌ์˜ ํ™˜๊ฒฝ(์กฐ๋ช…, ๊ฐ๋„, ๊ธฐ๊ธฐ ๋“ฑ)์—์„œ๋„ ์ž˜ ๋™์ž‘ํ•˜๋„๋ก ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ ๊ฐœ์„ 
  • ๐Ÿงฉ LLM + Zero-Shot Vision ๋ชจ๋ธ ๊ฒฐํ•ฉ
    • SAM๊ณผ ๊ฐ™์€ Zero-Shot segmentation ๋ชจ๋ธ๊ณผ LLM์„ ๊ฒฐํ•ฉํ•ด ๋‹ค์–‘ํ•œ ์Œ์‹ ์ข…๋ฅ˜์— ๋Œ€ํ•œ ์นผ๋กœ๋ฆฌ ์˜ˆ์ธก ์ˆ˜ํ–‰

Contributors

xeohyun

13 commits

Languages

Python

100.0%