๋ค์ํ ์ปดํจํฐ ๋น์ ๋ชจ๋ธ์ ํ ์คํธํ ์ ์๋ ํตํฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ํ์ฌ YOLOv9์ RF-DETR ๋ชจ๋ธ์ ์ง์ํ๋ฉฐ, ONNX Runtime์ ํตํด ์ถ๋ก ์ ์ํํ๊ณ egui ๊ธฐ๋ฐ์ ์ง๊ด์ ์ธ GUI ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํตํฉ ๋ชจ๋ธ ์ง์: YOLOv9 (4๊ฐ์ง ๋ณํ) + RF-DETR
- YOLOv9: GELAN-C, GELAN-E, YOLOv9-C, YOLOv9-E
- RF-DETR: Transformer ๊ธฐ๋ฐ ์ ๋ฐ ๊ฒ์ถ ๋ชจ๋ธ
- COCO ๋ฐ์ดํฐ์ ํด๋์ค ์ง์ (YOLOv9: 80๊ฐ, RF-DETR: 90๊ฐ)
- ๋ชจ๋ธ๋ณ ์ต์ ํ๋ ์ ๋ ฅ ํฌ๊ธฐ (YOLOv9: 640x640, RF-DETR: 560x560)
- ์ ๋ขฐ๋ ์๊ณ๊ฐ ๋ฐ NMS ์๊ณ๊ฐ ์กฐ์ ๊ฐ๋ฅ
- Pre-NMS ๋ฐ์ดํฐ ์บ์ฑ์ผ๋ก ๋น ๋ฅธ ์ฌ์ฒ๋ฆฌ
- ์ ๋ขฐ๋ ๊ธฐ๋ฐ ๋ฐ์ด๋ฉ ๋ฐ์ค ์์ ๋งคํ
- ์ค์๊ฐ ๋ชจ๋ธ ์ ํ ๋ฐ ์ฌ์ถ๋ก
- egui ๊ธฐ๋ฐ์ ํ๋์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
- ์์ฐ๋ก๊ทธ ๊ธฐ๋ฐ ์ธ๋ฐํ ์ค ์ ์ด
- ์ค์๊ฐ ์ด๋ฏธ์ง ์ค ๋ฐ ํจ๋
- ๊ฒ์ถ ๊ฒฐ๊ณผ ํ ์ด๋ธ ํํ ํ์ (์ ๋ ฌ, ํํฐ๋ง)
- ํค๋ณด๋ ๋จ์ถํค ์ง์
- ๋ฐ์ด๋ฉ ๋ฐ์ค ์์ ๋งคํ ๋ชจ๋ ์ ํ
- ์ค์ ํจ๋ (์๊ณ๊ฐ, ์ค, ์์ ๋ชจ๋)
- ๋๋๊ทธ ์ค ๋๋กญ์ผ๋ก ์ด๋ฏธ์ง ๋ก๋
- SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์ถ๋ก ๊ฒฐ๊ณผ ์บ์ฑ
- ์ด๋ฏธ์ง ํด์ ๊ธฐ๋ฐ ์ค๋ณต ๊ฒ์ถ ๋ฐฉ์ง
- ์ค์ ๊ฐ๋ฅํ ์บ์ ์ ๋ฆฌ ์ ์ฑ (30์ผ)
- Pre-NMS ๋ฐ์ดํฐ ์ ์ฅ์ผ๋ก NMS ์ฌ์คํ ์ต์ ํ
- ๊ฐ์ ์ฌ์ถ๋ก ์ต์
- ์ค์ํ๋ ์ค์ ์์คํ
(
CONFIG
์ ์ ์ธ์คํด์ค) - ๋ฐํ์ ์ค์ ๋ณ๊ฒฝ ์ง์
- ๋ชจ๋ํ๋ ์ค์ ๊ตฌ์กฐ
- ์ปดํ์ผ ํ์ ์์ ๊ด๋ฆฌ
- UnifiedInferenceEngine: ๋ฉํฐ ๋ชจ๋ธ ์ถ๋ก ์์ง
- ObjectDetector Trait: ๊ณตํต ์ธํฐํ์ด์ค
- Thread-safe ์ ์ญ ์์ง: OnceLock๊ณผ Mutex ์ฌ์ฉ
- ๋ชจ๋ํ๋ ๊ตฌ์กฐ: models/yolov9, models/rf_detr
- ๊ณตํต ํ์ ์์คํ : Detection, DetectionResult, ModelType
- ๊ณ ์ ์์ ๋ชจ๋: ๋ชจ๋ ๋ฐ์ค๋ฅผ ๋นจ๊ฐ์์ผ๋ก ํ์
- ๋ฒ์๋ณ ์์ ๋ชจ๋: 5๋จ๊ณ ์์ (ํ๋โ์ด๋กโ๋ ธ๋โ์ฃผํฉโ๋นจ๊ฐ)
- ๊ทธ๋ผ๋ฐ์ด์ ๋ชจ๋: ์ ํ ์์ ์ ํ
- HSV ๊ธฐ๋ฐ ๋ชจ๋: ์์ฐ์ค๋ฌ์ด ์์ ์ ํ (๊ธฐ๋ณธ๊ฐ)
yolov9_onnx_test/
โโโ src/
โ โโโ lib.rs # ๋ฉ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํตํฉ API
โ โโโ main.rs # ์ ํ๋ฆฌ์ผ์ด์
์ง์
์
โ โโโ gui.rs # egui ๊ธฐ๋ฐ ํตํฉ GUI
โ โโโ models/ # ๋ชจ๋ธ๋ณ ๊ตฌํ
โ โ โโโ mod.rs # ํตํฉ ์ธํฐํ์ด์ค ๋ฐ ๊ณตํต ํ์
โ โ โโโ yolov9.rs # YOLOv9 ๋ชจ๋ธ ๊ตฌํ
โ โ โโโ rf_detr.rs # RF-DETR ๋ชจ๋ธ ๊ตฌํ
โ โโโ models.rs # ์๋ฒ ๋๋ ๋ชจ๋ธ ๊ด๋ฆฌ
โ โโโ config.rs # ์ค์ ๊ด๋ฆฌ ๋ฐ ๊ตฌ์กฐ์ฒด
โ โโโ error.rs # ์ปค์คํ
์๋ฌ ์ฒ๋ฆฌ (thiserror ์ฌ์ฉ)
โ โโโ utils.rs # ์ ํธ๋ฆฌํฐ ํจ์๋ค
โ โโโ image_utils # ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ ํธ๋ฆฌํฐ
โ โโโ math_utils # ์ํ ๊ณ์ฐ ํจ์๋ค (IoU, ๊ฑฐ๋ฆฌ ๋ฑ)
โ โโโ fs_utils # ํ์ผ ์์คํ
์ ํธ๋ฆฌํฐ
โ โโโ perf_utils # ์ฑ๋ฅ ์ธก์ ๋๊ตฌ
โ โโโ color_utils # ์์ ์ฒ๋ฆฌ ์ ํธ๋ฆฌํฐ
โโโ Cargo.toml # ํ๋ก์ ํธ ์์กด์ฑ
โโโ Cargo.lock # ์์กด์ฑ ์ ๊ธ ํ์ผ
โโโ check.sh # Linux/macOS ์คํ ์คํฌ๋ฆฝํธ
โโโ check.bat # Windows ์คํ ์คํฌ๋ฆฝํธ
โโโ README.md # ํ๋ก์ ํธ ๋ฌธ์
์ค์: assets/models/
ํด๋์ ONNX ํ์ผ์ ์ปดํ์ผ ํ์์ include_dir!
๋งคํฌ๋ก๋ก ๋ฐ์ด๋๋ฆฌ์ ์๋ฒ ๋ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋น๋ ์ ์ ๋ชจ๋ธ ํ์ผ์ assets/models/
์ ๋ด๋ ค๋ฐ์์ผ ํฉ๋๋ค.
- Rust 1.70+
- Windows/macOS/Linux
๋ชจ๋ธ๋ค์ ํ์ ๋ณ๋ก ํ์ ํด๋์ ๊ตฌ์ฑํฉ๋๋ค:
assets/models/
โโโ yolov9/
โ โโโ gelan-c.onnx # YOLOv9 GELAN-C
โ โโโ gelan-e.onnx # YOLOv9 GELAN-E
โ โโโ yolov9-c.onnx # YOLOv9-C
โ โโโ yolov9-e.onnx # YOLOv9-E
โโโ rf-detr/
โโโ rf-detr.onnx # RF-DETR
- ์ถ์ฒ: Hugging Face: Xenova/yolov9-onnx
- ์ค๋ช : COCO 80 ํด๋์ค ๊ฐ์ฒด ๊ฒ์ถ, 640ร640 ์ ๋ ฅ
- ์ถ์ฒ: Hugging Face RF-DETR ONNX ๋ชจ๋ธ ํ์ด์ง
- ์ค๋ช : Transformer ๊ธฐ๋ฐ ๊ณ ์ ๋ฐ ๊ฒ์ถ, COCO 90 ํด๋์ค, 560ร560 ์ ๋ ฅ
# 1) ๋๋ ํ ๋ฆฌ ์์ฑ
mkdir -p assets/models/yolov9 assets/models/rf-detr
# 2) YOLOv9 ๋ชจ๋ธ ๋ค์ด๋ก๋
curl -L -o assets/models/yolov9/gelan-c.onnx https://huggingface.co/Xenova/yolov9-onnx/resolve/main/gelan-c.onnx
curl -L -o assets/models/yolov9/yolov9-c.onnx https://huggingface.co/Xenova/yolov9-onnx/resolve/main/yolov9-c.onnx
# ์ ํ์ ์ผ๋ก ์ถ๊ฐ ๋ค์ด๋ก๋
curl -L -o assets/models/yolov9/gelan-e.onnx https://huggingface.co/Xenova/yolov9-onnx/resolve/main/gelan-e.onnx
curl -L -o assets/models/yolov9/yolov9-e.onnx https://huggingface.co/Xenova/yolov9-onnx/resolve/main/yolov9-e.onnx
# 3) RF-DETR ๋ชจ๋ธ ๋ค์ด๋ก๋
curl -L -o assets/models/rf-detr/rf-detr.onnx https://huggingface.co/onnx-community/rfdetr_base-ONNX/resolve/main/onnx/model.onnx
- ์น ๋ธ๋ผ์ฐ์ : ์ Hugging Face ๋งํฌ์์ ์ง์ ๋ค์ด๋ก๋
- ๋ช
๋ น์ค: ์์
curl
๋ช ๋ น์ด ์ฌ์ฉ - Git LFS: Hugging Face ์ ์ฅ์๋ฅผ ํด๋ก ํ์ฌ ๊ฐ์ ธ์ค๊ธฐ
- RF-DETR ๋ชจ๋ธ ํฌ๊ธฐ: ์ฝ 103MB
- YOLOv9 ๋ชจ๋ธ ํฌ๊ธฐ: 97MB (GELAN-C) ~ 265MB (YOLOv9-E)
- ๋คํธ์ํฌ: ๋ค์ด๋ก๋ ์ ์์ ์ ์ธ ์ธํฐ๋ท ์ฐ๊ฒฐ ํ์
๋น๋ ์ ํด๋น ํ์ผ๋ค์ด ์กด์ฌํด์ผ ์๋ฒ ๋ฉ๋ฉ๋๋ค. ๋ชจ๋ธ ํ์ผ๋ช ์ ๋ณ๊ฒฝํ์ง ๋ง๊ณ ๊ทธ๋๋ก ๋๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๋ชจ๋ธ | ํ์ผ๋ช | ํฌ๊ธฐ | ์ ๋ ฅ ํฌ๊ธฐ | ํด๋์ค ์ | ์๋ | ์ ํ๋ | ๋ฉ๋ชจ๋ฆฌ | ์ถ๋ก ์๊ฐ (M4) | ๊ถ์ฅ ์ฌ์ฉ ์ฌ๋ก |
---|---|---|---|---|---|---|---|---|---|
YOLOv9-GELAN-C | gelan-c.onnx |
97MB | 640ร640 | 80 | ๋งค์ฐ ๋น ๋ฆ | ๋์ | 102MB | 150-200ms | ์ค์๊ฐ, ๋ชจ๋ฐ์ผ, ์๋ฒ ๋๋ |
YOLOv9-GELAN-E | gelan-e.onnx |
222MB | 640ร640 | 80 | ๋น ๋ฆ | ๋์ | 233MB | 300-400ms | ์ผ๋ฐ ์ค์๊ฐ, ์น์บ |
YOLOv9-C | yolov9-c.onnx |
195MB | 640ร640 | 80 | ๋ณดํต | ๋งค์ฐ ๋์ | 205MB | 200-300ms | ์ ํ๋-์๋ ๊ท ํ, ๋ฒ์ฉ |
YOLOv9-E | yolov9-e.onnx |
265MB | 640ร640 | 80 | ๋๋ฆผ | ์ต๊ณ | 278MB | 400-500ms | ๊ณ ์ ๋ฐ, ์ฐ๊ตฌ, ๋ถ์ |
RF-DETR | rf_detr_model.onnx |
103MB | 560ร560 | 90 | ๋ณดํต | ๋งค์ฐ ๋์ | 108MB | 350-450ms | Transformer ์ ๋ฐ ๊ฒ์ถ |
- YOLOv9 ๊ณ์ด: 640ร640 ์ ๋ ฅ, COCO 80 ํด๋์ค, YOLOv9 ์ถ๋ ฅ ํ์
- RF-DETR: 560ร560 ์ ๋ ฅ, COCO 90 ํด๋์ค (1-90, background ์ ์ธ), Transformer ์ถ๋ ฅ
- ์ค์๊ฐ ์ฒ๋ฆฌ (์๋ ์ฐ์ ): GELAN-C > YOLOv9-C > GELAN-E
- ์ ํ๋ ์ฐ์ : YOLOv9-E > RF-DETR > YOLOv9-C > GELAN-E
- ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ํ๊ฒฝ: GELAN-C > RF-DETR > YOLOv9-C
- Transformer ๊ธฐ๋ฐ ๊ณ ์ ๋ฐ: RF-DETR (์ฐ๊ตฌ, ๋ถ์์ฉ)
- ๊ท ํ/๊ธฐ๋ณธ ๊ถ์ฅ: YOLOv9-C (๋ฒ์ฉ), RF-DETR (์ ๋ฐ)
- macOS: CoreML + ANE ๊ฐ์ ๊ฒฝ๋ก ์ฌ์ฉ(๊ฐ๋ฅ ์), CPU fallback ์๋
- ๊ธฐํ OS: CPU Execution Provider ์ฌ์ฉ, ์ค๋ ๋ ์ค์ ์ผ๋ก ์ต์ ํ
- ๋ชจ๋ธ ํ์ผ์ ๋น๋ ์ ์๋ฒ ๋ฉ๋๋ฏ๋ก ํ์ผ ๊ฒฝ๋ก ์์กด ์์ด ๋์
cargo build --release
# Linux/macOS
./check.sh
# Windows
check.bat
# ๋๋ ์ง์ ์คํ
cargo run
- ์ ํ๋ฆฌ์ผ์ด์ ์คํ
- "Select Image" ๋ฒํผ ํด๋ฆญํ์ฌ ์ด๋ฏธ์ง ์ ํ
- ๋ชจ๋ธ ์ ํ (์๋ฒ ๋๋๋ ONNX ํ์ผ)
- ์ ๋ขฐ๋ ๋ฐ NMS ์๊ณ๊ฐ ์กฐ์
- ๋ฐ์ด๋ฉ ๋ฐ์ค ์์ ๋งคํ ๋ชจ๋ ์ ํ
- ๊ฒ์ถ ๊ฒฐ๊ณผ ํ์ธ
- ๋ง์ฐ์ค ํ : ์์ฐ๋ก๊ทธ ๊ธฐ๋ฐ ์ธ๋ฐํ ์ค ์กฐ์ (0.02 ๋ก๊ทธ ๋จ์)
- Ctrl + Plus/Minus: ํค๋ณด๋ ์ค (0.05 ๋ก๊ทธ ๋จ์)
- 0: 100% ์ค์ผ๋ก ๋ฆฌ์
- 1: 50% ์ค
- 2: 200% ์ค
- Fit: ํ๋ฉด์ ๋ง์ถค
- ์ค ๋ฒ์: 0.1x - 20.0x (์์ฐ๋ก๊ทธ ๊ธฐ๋ฐ)
- Confidence Threshold: ๊ฒ์ถ ์ ๋ขฐ๋ ์๊ณ๊ฐ (0.1-1.0)
- NMS Threshold: ์ค๋ณต ์ ๊ฑฐ ์๊ณ๊ฐ (0.05-0.8)
- Image Zoom: ์ด๋ฏธ์ง ํ๋/์ถ์ (์์ฐ๋ก๊ทธ ๊ธฐ๋ฐ ์ฌ๋ผ์ด๋)
- Color Mapping Mode: ๋ฐ์ด๋ฉ ๋ฐ์ค ์์ ๋งคํ ๋ฐฉ์
- ๊ฐ์ ์ฌ์ถ๋ก : ์บ์ ๋ฌด์ํ๊ณ ์๋ก ์ถ๋ก
- Pre-NMS ์บ์ฑ: NMS ์๊ณ๊ฐ ๋ณ๊ฒฝ ์ ๋น ๋ฅธ ์ฌ์ฒ๋ฆฌ
- ํ ์ด๋ธ ์ ๋ ฌ: ์ธ๋ฑ์ค, ํด๋์ค, ID, ์ ๋ขฐ๋๋ณ ์ ๋ ฌ
- ์ ํ์ ํ์: ์ ๋ขฐ๋ ๊ธฐ๋ฐ ๊ฒ์ถ ๊ฒฐ๊ณผ ํํฐ๋ง
pub struct AppConfig {
pub model: ModelConfig, // ๋ชจ๋ธ ๊ด๋ จ ์ค์
pub inference: InferenceConfig, // ์ถ๋ก ๊ด๋ จ ์ค์
pub ui: UiConfig, // UI ๊ด๋ จ ์ค์
pub database: DatabaseConfig, // ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
}
- ๋ชจ๋ธ ์ ๋ ฅ ํฌ๊ธฐ: 640x640
- ๊ธฐ๋ณธ ์ ๋ขฐ๋ ์๊ณ๊ฐ: 0.6
- ๊ธฐ๋ณธ NMS ์๊ณ๊ฐ: 0.2
- ์ต๋ ๊ฒ์ถ ๊ฐ์: 50
- ์ค ๋ฒ์: 0.1x - 20.0x (์์ฐ๋ก๊ทธ ๊ธฐ๋ฐ)
- ๋ง์ฐ์ค ํ ์ค ๋ณํ๋: 0.02 (๋ก๊ทธ ๊ณต๊ฐ)
- ํค๋ณด๋ ์ค ๋ณํ๋: 0.05 (๋ก๊ทธ ๊ณต๊ฐ)
- ๊ธฐ๋ณธ ์์ ๋ชจ๋: HSV ๊ธฐ๋ฐ
- ํ์ฑ ์ต์ ์ ๋ขฐ๋: 0.05 (๊ณ ๊ธ)
CREATE TABLE inference_cache (
id INTEGER PRIMARY KEY AUTOINCREMENT,
image_path TEXT NOT NULL,
image_hash TEXT NOT NULL,
model_file_name TEXT NOT NULL,
model_name TEXT NOT NULL,
image_width INTEGER NOT NULL,
image_height INTEGER NOT NULL,
detections_json TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE(image_path, model_file_name)
);
- ์ด๋ฏธ์ง ํด์ ๊ธฐ๋ฐ ์ค๋ณต ๊ฒ์ถ
- ๋ชจ๋ธ๋ณ ์บ์ ๋ถ๋ฆฌ
- ์๋ ์บ์ ์ ๋ฆฌ (30์ผ)
- ๊ฐ์ ์ฌ์ถ๋ก ์ต์
- Pre-NMS ๋ฐ์ดํฐ ์ ์ฅ์ผ๋ก NMS ์ฌ์คํ ์ต์ ํ
- ์ธ๋ฑ์ค ๊ธฐ๋ฐ ์ฑ๋ฅ ํฅ์ (์:
idx_image_hash
,idx_model_file
)
- ๋ชจ๋ ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ๋นจ๊ฐ์์ผ๋ก ํ์
- ๊ฐ์ฅ ๋จ์ํ ๋ชจ๋
- 5๋จ๊ณ ์์ ๊ตฌ๋ถ:
- 0.0-0.2: ํ๋ (๋ฎ์ ์ ๋ขฐ๋)
- 0.2-0.4: ์ด๋ก
- 0.4-0.6: ๋ ธ๋
- 0.6-0.8: ์ฃผํฉ
- 0.8-1.0: ๋นจ๊ฐ (๋์ ์ ๋ขฐ๋)
- ์ ํ ์์ ์ ํ
- ์ ๋ขฐ๋์ ๋ฐ๋ฅธ ๋ถ๋๋ฌ์ด ์์ ๋ณํ
- HSV ์์ ๊ณต๊ฐ์ ํ์ฉํ ์์ฐ์ค๋ฌ์ด ์ ํ
- ๊ฐ์ฅ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ๋ชจ๋
// ๋ฒ์๋ณ ์์
pub fn get_confidence_color(confidence: f32) -> Rgb<u8>
// ๊ทธ๋ผ๋ฐ์ด์
์์
pub fn get_confidence_color_gradient(confidence: f32) -> Rgb<u8>
// HSV ๊ธฐ๋ฐ ์์
pub fn get_confidence_color_hsv(confidence: f32) -> Rgb<u8>
flowchart TD
A[ํ๋ก๊ทธ๋จ ์์] --> B[GUI ์ด๊ธฐํ]
B --> C[๋ฉ์ธ ์๋์ฐ ์์ฑ]
C --> D[์ข์ธก ํจ๋: ๊ฒ์ถ ๊ฒฐ๊ณผ]
C --> E[์ฐ์ธก ํจ๋: ์ด๋ฏธ์ง ํ์]
F[์ด๋ฏธ์ง ์ ํ ๋ฐฉ๋ฒ] --> G{์ ํ ๋ฐฉ์}
G -->|ํ์ผ ์ ํ ๋ฒํผ| H[ํ์ผ ๋ค์ด์ผ๋ก๊ทธ ์ด๊ธฐ]
G -->|๋๋๊ทธ ์ค ๋๋กญ| I[์ด๋ฏธ์ง ํ์ผ ๋๋กญ]
H --> J[์ด๋ฏธ์ง ํ์ผ ์ ํ]
I --> J
J --> K[์ด๋ฏธ์ง ํ์ผ ์ฝ๊ธฐ]
K --> L{ํ์ผ ์ฝ๊ธฐ ์ฑ๊ณต?}
L -->|์คํจ| M[์๋ฌ ๋ฉ์์ง ํ์]
L -->|์ฑ๊ณต| N[ModelCache ์ด๊ธฐํ]
N --> O{๋ชจ๋ธ ์บ์ ์์ฑ ์ฑ๊ณต?}
O -->|์คํจ| P[์บ์ ์ด๊ธฐํ ์๋ฌ ํ์]
O -->|์ฑ๊ณต| Q[Pre-NMS ์ถ๋ก /๋ก๋]
Q --> R{DB ์บ์ ์กด์ฌ?}
R -->|์์| S[Pre-NMS ๊ฒฐ๊ณผ ๋ก๋]
R -->|์์| T[๋ชจ๋ธ ์ถ๋ก Pre-NMS ์ ์ฅ]
S --> U[NMS ์ ์ฉ]
T --> U[NMS ์ ์ฉ]
U --> V[๋ฐ์ด๋ฉ ๋ฐ์ค ๊ทธ๋ฆฌ๊ธฐ]
V --> W[๊ฒฐ๊ณผ ์ด๋ฏธ์ง ํ์]
M --> X[์ฌ์ฉ์ ์ฌ์๋ ๋๊ธฐ]
P --> X
X --> F
flowchart LR
A[์๋ณธ ์ด๋ฏธ์ง] --> B[์ข
ํก๋น ๊ณ์ฐ]
B --> C[๋ ํฐ๋ฐ์ฑ ๋ฆฌ์ฌ์ด์ง 640x640]
C --> D[ํจ๋ฉ/์ ๊ทํ]
D --> E[HWC โ CHW ๋ณํ]
E --> F[ONNX ์
๋ ฅ ํ
์]
flowchart LR
A[ONNX ์
๋ ฅ] --> B[YOLOv9 GELAN ์ถ๋ก ]
B --> C[์ถ๋ ฅ ํ
์ ํ์ฑ]
C --> D[์ ๋ขฐ๋ ํํฐ๋ง]
D --> E[NMS ์ ์ฉ]
E --> F[๋ฐ์ด๋ฉ ๋ฐ์ค ์์ ๋งคํ]
F --> G[๊ฒฐ๊ณผ ์ด๋ฏธ์ง]
- ONNX Runtime ์ต์ ํ ๋ ๋ฒจ ์ค์ (Level1)
- ํ๋ซํผ๋ณ ์ต์ ํ:
- macOS: CoreML + ANE (Apple Neural Engine) ํ์ฉ
- ๊ธฐํ ํ๋ซํผ: CPU ์ต์ ํ (16 intra-threads, 8 inter-threads)
- ๋ฉ๋ชจ๋ฆฌ ํจํด ์ต์ ํ
- Pre-NMS ๋ฐ์ดํฐ ์บ์ฑ์ผ๋ก NMS ์ฌ์คํ ์ต์ ํ
- ์์ฐ๋ก๊ทธ ๊ธฐ๋ฐ ์ค ์ ์ด (๋งค์ฐ ์ธ๋ฐํ ์กฐ์ )
- ํจ์จ์ ์ธ ์ด๋ฏธ์ง ๋ ๋๋ง
- ๊ฐ์ํ๋ ํ ์ด๋ธ ํ์
- ๋น๋๊ธฐ ์ด๋ฏธ์ง ์ฒ๋ฆฌ
- ์์ ๋งคํ ์ต์ ํ
ImageError
: ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ค๋ฅOrtError
: ONNX ๋ฐํ์ ์ค๋ฅDatabaseError
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฅValidationError
: ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅConfigError
: ์ค์ ์ค๋ฅCacheError
: ์บ์ ์ค๋ฅ
- ํจ๋ ๋ฐฉ์ง: ๋ชจ๋
unwrap()
์ ๊ฑฐ - Graceful degradation
- ์ฌ์ฉ์ ์นํ์ ์๋ฌ ๋ฉ์์ง
- ์๋ ๋ณต๊ตฌ ์๋
- ์์ธํ ๋ก๊น
- ์ปค์คํ ์๋ฌ ํ์ ์ผ๋ก ํ์ ์์ ์ฑ ํ๋ณด
- ์ถ๋ก ์๊ฐ (๋ฐ๋ฆฌ์ด)
- ์ด๋ฏธ์ง ๋ก๋ฉ ์๊ฐ
- GUI ๋ ๋๋ง ์๊ฐ
- ์บ์ ํํธ์จ
- ์์ ์ฒ๋ฆฌ ์ฑ๋ฅ
- SSD ์ฌ์ฉ ๊ถ์ฅ
- ์ถฉ๋ถํ RAM ํ๋ณด (8GB+)
- macOS์์ CoreML + ANE ํ์ฉ
- ์ ๊ธฐ์ ์ธ ์บ์ ์ ๋ฆฌ
- ์์ฐ๋ก๊ทธ ์ค์ผ๋ก ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ
ort
: ONNX Runtimeeframe
/egui
: GUI ํ๋ ์์ํฌimage
/imageproc
: ์ด๋ฏธ์ง ์ฒ๋ฆฌrusqlite
: SQLite ๋ฐ์ดํฐ๋ฒ ์ด์คserde
: ์ง๋ ฌํ/์ญ์ง๋ ฌํthiserror
: ์ปค์คํ ์๋ฌ ์ฒ๋ฆฌonce_cell
: ์ง์ฐ ์ ์ ์ด๊ธฐํndarray
: ์์น ๊ณ์ฐsha2
: ํด์ ๊ณ์ฐinclude_dir
: ์ปดํ์ผ ํ์ ํ์ผ ์๋ฒ ๋ฉ
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
panic = "abort"
- ๋ชจ๋ํ:
config
,error
,utils
๋ชจ๋ ๋ถ๋ฆฌ - ์ค์ํ๋ ์ค์ :
CONFIG
์ ์ ์ธ์คํด์ค - ์ ํธ๋ฆฌํฐ ํจ์ ๋ถ๋ฆฌ: ๊ณตํต ๊ธฐ๋ฅ ๋ชจ๋ํ
- ํ์ ์์ ์ฑ: ์ปค์คํ ์๋ฌ ํ์ ์ฌ์ฉ
- ์ปดํ์ผ ํ์ ์๋ฒ ๋ฉ: ๋ชจ๋ธ ํ์ผ์ ๋ฐ์ด๋๋ฆฌ์ ํฌํจ
- ํ๋ซํผ๋ณ ์ต์ ํ: macOS CoreML, CPU ์ต์ ํ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ผ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค.
๋ฒ๊ทธ ๋ฆฌํฌํธ, ๊ธฐ๋ฅ ์ ์, ํ ๋ฆฌํ์คํธ๋ฅผ ํ์ํฉ๋๋ค!
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด์๋ฅผ ์์ฑํด ์ฃผ์ธ์.