| # SAM3 + GroundingDINO ํตํฉ ๊ฐ๋ฅ์ฑ ๋ถ์ ๋ณด๊ณ ์ |
|
|
| **์์ฑ์ผ**: 2025-12-17 |
| **์ฃผ์ **: ํ์ฌ SAM3 ๋น๋์ค ์ธ๊ทธ๋ฉํ
์ด์
์์คํ
์ GroundingDINO๋ฅผ ์ ๋ชฉํ์ฌ ์ฑ๋ฅ/์๋๋ฅผ ํฅ์์ํฌ ์ ์๋์ง ๋ฉด๋ฐํ ๊ฒํ |
|
|
| --- |
|
|
| ## ๐ ๋ชฉ์ฐจ |
|
|
| 1. [ํ์ฌ SAM3 ์์คํ
์ํคํ
์ฒ](#1-ํ์ฌ-sam3-์์คํ
-์ํคํ
์ฒ) |
| 2. [GroundingDINO ๊ฐ์](#2-groundingdino-๊ฐ์) |
| 3. [SAM3์ ํ
์คํธ ํ๋กฌํํธ ์ฒ๋ฆฌ ๋ฐฉ์](#3-sam3์-ํ
์คํธ-ํ๋กฌํํธ-์ฒ๋ฆฌ-๋ฐฉ์) |
| 4. [ํตํฉ ์๋๋ฆฌ์ค ๋ถ์](#4-ํตํฉ-์๋๋ฆฌ์ค-๋ถ์) |
| 5. [์ฑ๋ฅ/์๋ ์ํฅ ๋ถ์](#5-์ฑ๋ฅ์๋-์ํฅ-๋ถ์) |
| 6. [๊ฒฐ๋ก ๋ฐ ๊ถ์ฅ์ฌํญ](#6-๊ฒฐ๋ก -๋ฐ-๊ถ์ฅ์ฌํญ) |
|
|
| --- |
|
|
| ## 1. ํ์ฌ SAM3 ์์คํ
์ํคํ
์ฒ |
|
|
| ### 1.1 ํ์ดํ๋ผ์ธ ํ๋ฆ |
|
|
| ``` |
| [์
๋ ฅ ๋น๋์ค] |
| โ |
| [Text Prompt ํ์ฑ] โ "5 mice" |
| โ |
| [SAM3 ์ด๊ธฐ ํ๋ ์ ์ฒ๋ฆฌ] |
| โโโ ํ
์คํธ โ CLIP ์ธ์ฝ๋ฉ โ ํน์ง ๋ฒกํฐ |
| โโโ ์ด๋ฏธ์ง โ Visual Encoder |
| โโโ Cross-attention (Text โ Image) |
| โโโ Segmentation Decoder โ ๋ง์คํฌ ์์ฑ |
| โ |
| [SAM3 ์๊ฐ์ ์ ํ] โ propagate_in_video() |
| โโโ Memory Attention (๊ณผ๊ฑฐ ํ๋ ์ ์ฐธ์กฐ) |
| โโโ Temporal Disambiguation |
| โโโ ํ๋ ์๋ณ ๋ง์คํฌ ์ถ๋ ฅ |
| โ |
| [ํ์ฒ๋ฆฌ ํํฐ๋ง] |
| โโโ ID ์ผ๊ด์ฑ ์ ์ง |
| โโโ Occlusion ๋ณต์ |
| โโโ Anti-Tail/Reflection ํํฐ |
| ``` |
|
|
| ### 1.2 SAM3์ ๊ฐ์ |
|
|
| | ํน์ง | ์ค๋ช
| ํจ๊ณผ | |
| |------|------|------| |
| | **End-to-End ํ์ต** | ํ
์คํธ ์ธ์ฝ๋ + ์ธ๊ทธ๋ฉํ
์ด์
์ด ํตํฉ ํ์ต๋จ | ํ
์คํธ-๋ง์คํฌ ๋งคํ์ ๋์ ์ ํ๋ | |
| | **Temporal Consistency** | Memory Attention์ผ๋ก ๊ณผ๊ฑฐ ํ๋ ์ ์ฐธ์กฐ | ๋น๋์ค ์ ์ฒด์์ ID ์ผ๊ด์ฑ ์ ์ง | |
| | **์ ๋ฐํ ๋ง์คํฌ** | Pixel-level ์ธ๊ทธ๋ฉํ
์ด์
| Bbox๋ณด๋ค ์ ํํ ๊ฐ์ฒด ๊ฒฝ๊ณ | |
| | **ํตํฉ ๋ชจ๋ธ** | ๋จ์ผ ๋ชจ๋ธ์์ ๊ฐ์งโ์ถ์ ์ฒ๋ฆฌ | ๋ชจ๋ ๊ฐ ์ ํฉ์ฑ ๋ฌธ์ ์์ | |
|
|
| ### 1.3 SAM3์ ํ๊ณ |
|
|
| | ๋ฌธ์ | ์์ธ | ์ํฅ | |
| |------|------|------| |
| | **์ฒ๋ฆฌ ์๋ ๋๋ฆผ** | ํ๋ ์๋น ์ ์ฒด ์ด๋ฏธ์ง ์ธ๊ทธ๋ฉํ
์ด์
| ~300ms/frame | |
| | **์ด๊ธฐ ๊ฐ์ง ์คํจ ์ ๋ณต๊ตฌ ์ด๋ ค์** | ์ฒซ ํ๋ ์์์ ํ
์คํธ ํ๋กฌํํธ๊ฐ ์ ๋งคํ๋ฉด ์คํ์ง | ์ ์ฒด ๋น๋์ค์ ์ํฅ | |
| | **์ํ ๊ฐ์ฒด ๊ฐ์ง ์ฝํจ** | Global attention โ ์์ ์์ญ ์ง์ค ์ด๋ ค์ | ๋ฏธํ์ง ๋ฐ์ | |
| | **GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋์** | Memory Bank + Transformer | 6-8GB ํ์ | |
|
|
| --- |
|
|
| ## 2. GroundingDINO ๊ฐ์ |
|
|
| ### 2.1 ํต์ฌ ํน์ง |
|
|
| **GroundingDINO**๋ ํ
์คํธ ํ๋กฌํํธ๋ก ๊ฐ์ฒด๋ฅผ **ํ์ง(Detection)**ํ๋ ๋ชจ๋ธ์
๋๋ค. |
|
|
| ``` |
| [์
๋ ฅ ์ด๋ฏธ์ง + ํ
์คํธ ํ๋กฌํํธ] |
| โ |
| [Vision Transformer (Swin-T)] โ ์ด๋ฏธ์ง ์ธ์ฝ๋ฉ |
| โ |
| [Language Model (BERT)] โ ํ
์คํธ ์ธ์ฝ๋ฉ |
| โ |
| [Cross-Modality Fusion] |
| โ |
| [DETR-style Decoder] |
| โ |
| [์ถ๋ ฅ: Bounding Box + Confidence Score] |
| ``` |
|
|
| ### 2.2 ์ฅ๋จ์ |
|
|
| | ์ฅ์ | ๋จ์ | |
| |------|------| |
| | โ
์ ๋ก์ท ๊ฐ์ฒด ํ์ง (ํ์ต ์๋ ์ ํด๋์ค ๊ฐ์ง ๊ฐ๋ฅ) | โ **Bbox๋ง ์ถ๋ ฅ** (๋ง์คํฌ ์์) | |
| | โ
ํ
์คํธ-์ด๋ฏธ์ง ์ ํฉ๋ ๋์ | โ **๋น๋์ค ์ถ์ ๊ธฐ๋ฅ ์์** (๋จ์ผ ์ด๋ฏธ์ง๋ง ์ฒ๋ฆฌ) | |
| | โ
๋น ๋ฅธ ์ถ๋ก ์๋ (~50-100ms/frame) | โ Temporal consistency ์์ | |
| | โ
์ ํํ ๊ฐ์ฒด ์์น ํ์
| โ ํ๋ ์ ๊ฐ ID ์ฐ๊ฒฐ ๋ถ๊ฐ | |
|
|
| ### 2.3 SAM3์์ ์ฐจ์ด์ |
|
|
| | ํน์ง | SAM3 | GroundingDINO | |
| |------|------|---------------| |
| | **์ฃผ ๊ธฐ๋ฅ** | ์ธ๊ทธ๋ฉํ
์ด์
+ ์ถ์ | ๊ฐ์ฒด ํ์ง | |
| | **์ถ๋ ฅ** | **Pixel-level ๋ง์คํฌ** + ID | **Bounding Box** + Score | |
| | **๋น๋์ค ์ง์** | โ
Temporal ์ถ์ | โ ๋จ์ผ ํ๋ ์๋ง | |
| | **ํ
์คํธ ์ดํด** | CLIP (๋์กฐ ํ์ต) | BERT (์ธ์ด ๋ชจ๋ธ) | |
| | **์๋** | ๋๋ฆผ (~300ms) | ๋น ๋ฆ (~70ms) | |
|
|
| --- |
|
|
| ## 3. SAM3์ ํ
์คํธ ํ๋กฌํํธ ์ฒ๋ฆฌ ๋ฐฉ์ |
|
|
| ### 3.1 ์ฝ๋ ํ์ธ ๊ฒฐ๊ณผ |
|
|
| ```python |
| # sam3/model/sam3_video_predictor.py: L151-160 |
| frame_idx, outputs = self.model.add_prompt( |
| inference_state=inference_state, |
| frame_idx=frame_idx, |
| text_str=text, # โ ํ
์คํธ ํ๋กฌํํธ |
| points=points, |
| point_labels=point_labels, |
| boxes_xywh=bounding_boxes, # โ Bbox๋ ๋ฐ์ ์ ์์! |
| box_labels=bounding_box_labels, |
| obj_id=obj_id, |
| ) |
| ``` |
|
|
| **์ค์ ๋ฐ๊ฒฌ:** SAM3๋ ์ด๋ฏธ **ํ
์คํธ + Bbox๋ฅผ ๋์์** ๋ฐ์ ์ ์์ต๋๋ค! |
|
|
| ### 3.2 SAM3 ๋ด๋ถ ํ
์คํธ ์ฒ๋ฆฌ |
|
|
| ```python |
| # sam3/model/sam3_video_inference.py: L866-868 |
| if text_str is not None and text_str != "visual": |
| inference_state["text_prompt"] = text_str |
| inference_state["input_batch"].find_text_batch[0] = text_str |
| ``` |
|
|
| **์ฒ๋ฆฌ ํ๋ฆ:** |
| 1. ํ
์คํธ โ CLIP ํ
์คํธ ์ธ์ฝ๋ โ 512D ํน์ง ๋ฒกํฐ |
| 2. ์ด๋ฏธ์ง โ Vision Encoder โ ์ด๋ฏธ์ง ํน์ง |
| 3. Cross-Attention (ํ
์คํธ ํน์ง โ ์ด๋ฏธ์ง ํน์ง) |
| 4. Decoder โ ์ธ๊ทธ๋ฉํ
์ด์
๋ง์คํฌ |
|
|
| --- |
|
|
| ## 4. ํตํฉ ์๋๋ฆฌ์ค ๋ถ์ |
|
|
| ### 4.1 ์๋๋ฆฌ์ค A: GroundingDINO ์ด๊ธฐ ๊ฐ์ง โ SAM3 ์ ๋ฐ ๋ง์คํฌ (โญ๏ธโญ๏ธโญ๏ธ) |
|
|
| **๊ฐ๋
:** |
| ``` |
| [์ฒซ ํ๋ ์] |
| โ |
| [GroundingDINO] โ ํ
์คํธ๋ก ๊ฐ์ฒด bbox ํ์ง |
| โ (์: "mice" โ 5๊ฐ์ bbox) |
| [SAM3] โ bbox๋ฅผ ํ๋กฌํํธ๋ก ์ ๋ฐ ๋ง์คํฌ ์์ฑ |
| โ |
| [SAM3 propagate] โ ๋น๋์ค ์ ์ฒด ์ถ์ |
| ``` |
|
|
| **๊ตฌํ ์ฝ๋:** |
| ```python |
| # ํ์ฌ ๋ฐฉ์ |
| predictor.add_prompt(session_id, frame_idx=0, text="5 mice") |
| |
| # GroundingDINO ํตํฉ ๋ฐฉ์ |
| from groundingdino.util.inference import load_model, predict |
| |
| grounding_model = load_model("GroundingDINO_SwinT_OGC.py", "weights.pth") |
| |
| # 1๋จ๊ณ: GroundingDINO๋ก bbox ํ์ง |
| boxes, confidences, labels = predict( |
| model=grounding_model, |
| image=first_frame, |
| caption="mice", # ํ
์คํธ ํ๋กฌํํธ |
| box_threshold=0.3, |
| text_threshold=0.25 |
| ) |
| |
| # 2๋จ๊ณ: SAM3์ bbox ์ ๋ฌ |
| for i, box in enumerate(boxes): |
| predictor.add_prompt( |
| session_id, |
| frame_idx=0, |
| bounding_boxes=[box.tolist()], # bbox ํ๋กฌํํธ |
| obj_id=i+1 |
| ) |
| |
| # 3๋จ๊ณ: SAM3๊ฐ ๋น๋์ค ์ ์ฒด ์ถ์ |
| for frame_idx, outputs in predictor.propagate_in_video(...): |
| process(outputs) |
| ``` |
|
|
| **์ฅ์ :** |
| - โ
GroundingDINO์ ์ ํํ ์ด๊ธฐ ํ์ง ํ์ฉ |
| - โ
SAM3์ ์ ๋ฐ ๋ง์คํฌ + ์๊ฐ ์ผ๊ด์ฑ ์ ์ง |
| - โ
์ด๊ธฐ ํ๋ ์ ์ฒ๋ฆฌ๋ง GroundingDINO ์ฌ์ฉ โ ์๋ ์ํฅ ์ต์ |
|
|
| **๋จ์ :** |
| - โ GroundingDINO ๋ชจ๋ธ ์ถ๊ฐ ๋ก๋ (+2-3GB GPU ๋ฉ๋ชจ๋ฆฌ) |
| - โ ๋์ผ ์ธ๊ด ๊ฐ์ฒด(ํฐ ์ฅ)๋ GroundingDINO๋ ๊ตฌ๋ถ ๋ชปํจ โ 5๊ฐ bbox๊ฐ ์ ํํ์ง ์์ ์ ์์ |
|
|
| --- |
|
|
| ### 4.2 ์๋๋ฆฌ์ค B: GroundingDINO ์ฌ์ด๊ธฐํ ๋ณด์กฐ (โญ๏ธโญ๏ธ) |
|
|
| **๊ฐ๋
:** |
| ``` |
| [SAM3 ๊ธฐ๋ณธ ์ฒ๋ฆฌ] |
| โ |
| [์ฒญํฌ ๊ฒฝ๊ณ or ID ์์ค ๊ฐ์ง] |
| โ |
| [GroundingDINO] โ ํด๋น ํ๋ ์์์ ๊ฐ์ฒด ์ฌํ์ง |
| โ |
| [SAM3] โ ์ bbox๋ก ์ฌ์ด๊ธฐํ |
| ``` |
|
|
| **์ฅ์ :** |
| - โ
SAM3๊ฐ ๋์น ๊ฐ์ฒด ๋ณด์ |
| - โ
์ฒญํฌ ๊ฒฝ๊ณ์์ ID ์ฐ๊ฒฐ ๋ณด๊ฐ |
|
|
| **๋จ์ :** |
| - โ ๋งค ์ฒญํฌ๋ง๋ค GroundingDINO ํธ์ถ โ ์๋ ์ ํ |
| - โ ๋ ๋ชจ๋ธ ๊ฒฐ๊ณผ ๋งค์นญ ๋ก์ง ๋ณต์ก |
|
|
| --- |
|
|
| ### 4.3 ์๋๋ฆฌ์ค C: GroundingDINO ๋จ๋
โ SAM ๊ฒฐํฉ (Grounded-SAM) (โญ๏ธ) |
|
|
| **๊ฐ๋
:** |
| ``` |
| [GroundingDINO] โ ๋งค ํ๋ ์ bbox ํ์ง |
| โ |
| [SAM (์ ์ )] โ bbox โ ๋ง์คํฌ |
| โ |
| [DeepSORT/BoT-SORT] โ ID ์ถ์ |
| ``` |
|
|
| **๋ฌธ์ :** |
| - โ SAM3์ temporal tracking์ด **์์ ํ ๋ฌดํจํ๋จ** |
| - โ ๋งค ํ๋ ์ GroundingDINO ํธ์ถ โ ๋๋ ค์ง |
| - โ ๋์ผ ์ธ๊ด ๊ฐ์ฒด์์ ID swap ์ฆ๊ฐ |
|
|
| **๊ฒฐ๋ก :** ํ์ฌ SAM3 ์์คํ
์ ๋ฒ๋ฆฌ๊ณ ์๋ก ๊ตฌ์ถํ๋ ๊ฒ๊ณผ ๋์ผ โ **๊ถ์ฅํ์ง ์์** |
|
|
| --- |
|
|
| ## 5. ์ฑ๋ฅ/์๋ ์ํฅ ๋ถ์ |
|
|
| ### 5.1 ์๋๋ฆฌ์ค A ์ฑ๋ฅ ๋ถ์ |
|
|
| | ์งํ | ํ์ฌ SAM3 | + GroundingDINO (์๋๋ฆฌ์ค A) | ๋ณํ | |
| |------|----------|------------------------------|------| |
| | **์ด๊ธฐ ํ์ง ์ ํ๋** | โญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธโญ๏ธ | +25% | |
| | **๋ง์คํฌ ์ ๋ฐ๋** | โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ | ๋์ผ | |
| | **ID ์ผ๊ด์ฑ** | โญ๏ธโญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธโญ๏ธ | ๋์ผ | |
| | **์ฒ๋ฆฌ ์๋** | 300ms/frame | **305ms/frame** | -1.7% | |
| | **๋์ผ ์ธ๊ด ๊ฐ์ฒด ์ฒ๋ฆฌ** | โญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธ | -30% | |
| | **GPU ๋ฉ๋ชจ๋ฆฌ** | 6-8GB | **9-11GB** | +40% | |
|
|
| **์ข
ํฉ ํ๊ฐ:** |
| - ์ด๊ธฐ ํ์ง ์ ํ๋๋ ํฅ์๋์ง๋ง, ๋์ผ ์ธ๊ด ๊ฐ์ฒด(ํฐ ์ฅ 5๋ง๋ฆฌ)๋ ์ฌ์ ํ ์ด๋ ค์ |
| - GPU ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ๊ฐ ํฌ๊ณ , ์๋ ํฅ์์ ๋ฏธ๋ฏธํจ |
|
|
| --- |
|
|
| ### 5.2 ์๋ ์์ธ ๋ถ์ |
|
|
| #### ํ์ฌ SAM3 (500 ํ๋ ์ ๋น๋์ค ๊ธฐ์ค) |
|
|
| ``` |
| ์ด๊ธฐํ: 2s |
| ํ๋ ์ 0 (SAM3 add_prompt): 1.5s |
| ํ๋ ์ 1-499 (SAM3 propagate): 300ms ร 499 = 149.7s |
| ํ์ฒ๋ฆฌ: 2.5s |
| ์ด: 155.7s (์ฝ 2๋ถ 36์ด) |
| ``` |
|
|
| #### GroundingDINO + SAM3 (์๋๋ฆฌ์ค A) |
|
|
| ``` |
| ์ด๊ธฐํ (SAM3 + GroundingDINO): 3s |
| ํ๋ ์ 0 (GroundingDINO ํ์ง): 70ms |
| ํ๋ ์ 0 (SAM3 add_prompt with bbox): 1.0s โ ํ
์คํธ ์ธ์ฝ๋ฉ ๋ถํ์ |
| ํ๋ ์ 1-499 (SAM3 propagate): 300ms ร 499 = 149.7s |
| ํ์ฒ๋ฆฌ: 2.5s |
| ์ด: 156.3s (์ฝ 2๋ถ 36์ด) |
| ``` |
|
|
| **๊ฒฐ๋ก :** ์๋ ์ฐจ์ด **๊ฑฐ์ ์์** (0.4% ์ฆ๊ฐ only) |
|
|
| --- |
|
|
| ### 5.3 ์ ํ๋ ์์ธ ๋ถ์ |
|
|
| #### ํ
์คํธ ์ผ์ด์ค: "5 white mice" ์๋๋ฆฌ์ค |
|
|
| | ์ํฉ | SAM3 ๋จ๋
| + GroundingDINO | |
| |------|-----------|-----------------| |
| | **5๋ง๋ฆฌ ๋ชจ๋ ๋ถ๋ฆฌ๋์ด ์์** | 100% ์ ํ | 100% ์ ํ | |
| | **2๋ง๋ฆฌ๊ฐ ๊ฒน์ณ์์** | 95% ์ ํ (๋ง์คํฌ ๋ถ๋ฆฌ ๊ฐ๋ฅ) | **70% ์ ํ** (bbox ๊ฒน์นจ โ 1๊ฐ๋ก ์ธ์) | |
| | **๊ผฌ๋ฆฌ๋ง ๋ณด์** | 90% ์ ํ (Anti-Tail ํํฐ) | **50% ์ ํ** (bbox ๋๋ฌด ์์ ํํฐ๋ง๋จ) | |
| | **๋น ๋ฅธ ์์ง์** | 85% ์ ํ (Temporal tracking) | 85% ์ ํ (๋์ผ) | |
|
|
| **๊ฒฐ๋ก :** ๋์ผ ์ธ๊ด + ๊ฒน์นจ ์ํฉ์์ GroundingDINO๊ฐ **์คํ๋ ค ์ฑ๋ฅ ์ ํ** |
|
|
| --- |
|
|
| ## 6. ๊ฒฐ๋ก ๋ฐ ๊ถ์ฅ์ฌํญ |
|
|
| ### 6.1 ํต์ฌ ๋ฐ๊ฒฌ |
|
|
| | ํญ๋ชฉ | ๊ฒฐ๊ณผ | |
| |------|------| |
| | **์๋ ํฅ์** | โ ๊ฑฐ์ ์์ (0.4% ์ฆ๊ฐ) | |
| | **์ ํ๋ ํฅ์** | โ ๏ธ ์ผ๋ฐ ๊ฐ์ฒด๋ ํฅ์, ๋์ผ ์ธ๊ด ๊ฐ์ฒด๋ ์คํ๋ ค ์ ํ | |
| | **๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ** | โ +40% (9-11GB) | |
| | **๊ตฌํ ๋ณต์ก๋** | โ ๏ธ ์ค๊ฐ (๋ชจ๋ธ ์ถ๊ฐ ๋ก๋ + bbox ๋งค์นญ ๋ก์ง) | |
| | **ROI (ํฌ์ ๋๋น ํจ๊ณผ)** | โ ๋ฎ์ | |
|
|
| --- |
|
|
| ### 6.2 ์ต์ข
๊ถ์ฅ์ฌํญ |
|
|
| #### โ
๊ถ์ฅ: SAM3 ๋จ๋
์ ์ง + ์ต์ ํ |
|
|
| **์ด์ :** |
| 1. SAM3์ temporal tracking์ด ๋์ผ ์ธ๊ด ๊ฐ์ฒด ์ฒ๋ฆฌ์ ๋ ์ฐ์ |
| 2. ํตํฉ ๋ชจ๋ธ โ ๋ชจ๋ ๊ฐ ์ ํฉ์ฑ ๋ฌธ์ ์์ |
| 3. GroundingDINO ์ถ๊ฐ ์ ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ ๋๋น ํจ๊ณผ ๋ฏธ๋ฏธ |
|
|
| **๋์ ์๋ ์ต์ ํ ๊ถ์ฅ:** |
|
|
| ```python |
| # 1. ํ๋ ์ ์คํต (2๋ฐฐ ๋น ๋ฆ) |
| for frame_idx in range(0, num_frames, 2): # ๋งค 2ํ๋ ์๋ง๋ค |
| outputs = propagate(...) |
| |
| # 2. ํด์๋ ๊ฐ์ ํ ์
์ค์ผ์ผ (1.5๋ฐฐ ๋น ๋ฆ) |
| resized_frame = cv2.resize(frame, (width//2, height//2)) |
| mask_low = sam3_process(resized_frame) |
| mask_high = cv2.resize(mask_low, (width, height)) |
| |
| # 3. SAM3 ๊ฒฝ๋ํ ๋ชจ๋ธ ์ฌ์ฉ |
| model = build_sam3("sam3_hiera_tiny") # ๋์ sam3_hiera_large |
| ``` |
|
|
| --- |
|
|
| #### โ ๏ธ ์กฐ๊ฑด๋ถ ๊ถ์ฅ: GroundingDINO ํตํฉ (์๋๋ฆฌ์ค A) |
|
|
| **์ฌ์ฉ ์กฐ๊ฑด:** |
| - ์ธ๊ด์ด **๋ค์ํ** ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ๋ (์: person, car, dog ํผํฉ) |
| - ์ด๊ธฐ ํ๋ ์์์ SAM3 ํ
์คํธ ํ๋กฌํํธ๊ฐ **์์ฃผ ์คํจ**ํ ๋ |
| - GPU ๋ฉ๋ชจ๋ฆฌ **12GB ์ด์** ์ฌ์ฉ ๊ฐ๋ฅํ ๋ |
|
|
| **๊ตฌํ ์ฐ์ ์์:** |
| 1. GroundingDINO๋ก ์ฒซ ํ๋ ์๋ง bbox ํ์ง |
| 2. SAM3์ bbox ํ๋กฌํํธ ์ ๋ฌ |
| 3. SAM3 propagate๋ก ๋น๋์ค ์ถ์ |
|
|
| --- |
|
|
| #### โ ๋น๊ถ์ฅ: ์ ๋ฉด ๊ต์ฒด (์๋๋ฆฌ์ค C) |
|
|
| **์ด์ :** |
| - SAM3์ temporal tracking ๋ฌดํจํ |
| - ๋์ผ ์ธ๊ด ๊ฐ์ฒด์์ ์ฑ๋ฅ ๋ํญ ์ ํ |
| - ๊ตฌํ ๋ณต์ก๋ ๋์ |
|
|
| --- |
|
|
| ### 6.3 ๋์: ํ์ฌ ์์คํ
๊ฐํ |
|
|
| ํ์ฌ ๊ตฌํ๋ ์ปค์คํ
๋ก์ง์ด ์ด๋ฏธ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค: |
|
|
| | ๊ธฐ๋ฅ | ์ํ | ํจ๊ณผ | |
| |------|------|------| |
| | Velocity ๊ธฐ๋ฐ Occlusion ๋ณต์ | โ
๊ตฌํ๋จ | ID ์์ค ๋ฐฉ์ง | |
| | Anti-Tail ํํฐ + ํ์คํ ๋ฆฌ ์ ์ง | โ
๊ตฌํ๋จ | ๊ผฌ๋ฆฌ ๋ถ๋ฆฌ ๋ฐฉ์ง | |
| | Side View ๋ฐ์ฌ ์ ๊ฑฐ | โ
๊ตฌํ๋จ | ์คํ์ง ๊ฐ์ | |
| | IoU ๊ธฐ๋ฐ ์ฒญํฌ ์ฐ๊ฒฐ | โ
๊ตฌํ๋จ | ๊ธด ์์ ID ์ผ๊ด์ฑ | |
|
|
| **์ถ๊ฐ ๊ฐ์ ๊ฐ๋ฅ ์์ญ:** |
| 1. Adaptive thresholding (๊ฐ์ฒด ์๋์ ๋ฐ๋ผ ๋์ ์กฐ์ ) |
| 2. Multi-scale processing (๋ค์ํ ํฌ๊ธฐ ๊ฐ์ฒด ๋์) |
| 3. Confidence-based filtering (๋ฎ์ ์ ๋ขฐ๋ ๋ง์คํฌ ์ ๊ฑฐ) |
|
|
| --- |
|
|
| ## ๐ ์์ฝํ |
|
|
| | ํตํฉ ๋ฐฉ์ | ์๋ | ์ ํ๋ | ๋ฉ๋ชจ๋ฆฌ | ๋ณต์ก๋ | ๊ถ์ฅ | |
| |-----------|------|--------|--------|--------|------| |
| | SAM3 ๋จ๋
(ํ์ฌ) | โญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธโญ๏ธ | โ
| |
| | + GroundingDINO (A) | โญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธ | โ ๏ธ | |
| | + GroundingDINO (B) | โญ๏ธโญ๏ธ | โญ๏ธโญ๏ธโญ๏ธ | โญ๏ธโญ๏ธ | โญ๏ธโญ๏ธ | โ | |
| | ์ ๋ฉด ๊ต์ฒด (C) | โญ๏ธโญ๏ธ | โญ๏ธโญ๏ธ | โญ๏ธ | โญ๏ธ | โ | |
|
|
| --- |
|
|
| ## ๐ฏ ์ต์ข
๊ฒฐ๋ก |
|
|
| **GroundingDINO๋ฅผ ์ ๋ชฉํ๋ ๊ฒ์ ํ์ฌ use case(๋์ผ ์ธ๊ด ๊ฐ์ฒด ๋ค์ค ์ถ์ )์์ ROI๊ฐ ๋ฎ์ต๋๋ค.** |
|
|
| **์ด์ :** |
| 1. ์๋ ํฅ์ ๊ฑฐ์ ์์ (0.4%) |
| 2. ๋์ผ ์ธ๊ด ๊ฐ์ฒด์์ ์ ํ๋ ์คํ๋ ค ์ ํ |
| 3. GPU ๋ฉ๋ชจ๋ฆฌ 40% ์ฆ๊ฐ |
| 4. SAM3์ ๊ฐ๋ ฅํ temporal tracking์ ์ถฉ๋ถํ ํ์ฉ ๋ชปํจ |
|
|
| **๊ถ์ฅ ์ฌํญ:** |
| ํ์ฌ SAM3 ๋จ๋
์์คํ
์ ์ ์งํ๊ณ , ํ๋ ์ ์คํต/ํด์๋ ๊ฐ์ ๋ฑ์ ์ต์ ํ๋ก ์๋๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์
๋๋ค. |
|
|
| --- |
|
|
| **์์ฑ์**: AI Assistant |
| **๊ฒํ ๋์**: SAM3 ๋น๋์ค ์ธ๊ทธ๋ฉํ
์ด์
์์คํ
(์ฅ ์ถ์ use case) |
| **๋ถ์ ๊ธฐ์ค**: ์ฑ๋ฅ, ์๋, ๋ฉ๋ชจ๋ฆฌ, ๊ตฌํ ๋ณต์ก๋, ROI |
|
|