ํ๋ ์ค ์์ฐ ๋ผ์ธ์ ์ ํ ํ๋ณ ์์ธก ์ฉ YOLO ๋ชจ๋ธ ์นด๋
๋ชจ๋ธ ์ธ๋ถ์ฌํญ
๋ชจ๋ธ ์ค๋ช
์ด ๋ชจ๋ธ์ ์์ฐ ๋ผ์ธ์์ ์ ํ์ ์ธ์ํ์ฌ ์์ฐ๋ ์ ํ์ ์๋ฅผ ์ถ์ ํ๊ณ , ์ฌ๊ณ ์์ค์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
YOLOv7 ๋ฐ YOLOv10 ๋ชจ๋ธ์ ๊ณ ์ ๊ฐ์ฒด ์ธ์ ๋ฐ ๋ถ๋ฅ๋ฅผ ์ํด ์ค๊ณ๋์ด, ์ค์๊ฐ์ผ๋ก ์ ํ์ ๊ฐ์งํ๊ณ ๊ฐ์๋ฅผ ์
์ผ๋ก์จ ์์ฐ๋๊ณผ ์ฌ๊ณ ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- Developed by: ๋ฐ์ง์
- Funded by: 4INLAB INC.
- Shared by: None
- Model type: YOLOv7, YOLOv10 (Object Detection)
- Language(s): Python, PyTorch
- License: Apache 2.0, MIT, GPL-3.0
๊ธฐ์ ์ ์ ํ์ฌํญ
- ์ด ๋ชจ๋ธ์ ์ ํ์ ์ธ์ํ๋ ๋ฐ ์ ์ ํ ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํฉ๋๋ค. ํ๋ จ ๋ฐ์ดํฐ์ ์ด ๋ถ์กฑํ๊ฑฐ๋ ๋ถ๊ท ํํ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
- ์ค์๊ฐ ์ธ์ ์ฑ๋ฅ์ ํ๋์จ์ด ์ฌ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ผ๋ฉฐ, ๋์ ํด์๋์์์ ์ธ์ ์ ํ๋๊ฐ ๋จ์ด์ง ์ ์์ต๋๋ค.
- ์ ํ ๊ฐ์ ์ ์ฌ์ฑ์ด ๋งค์ฐ ๋๊ฑฐ๋ ๊ฒน์นจ์ด ์์ ๊ฒฝ์ฐ ์ ํ๋๊ฐ ๋ฎ์์ง ์ ์์ต๋๋ค.
ํ์ต ์ธ๋ถ์ฌํญ
Hardware
- CPU: Intel Core i9-13900K (24 Cores, 32 Threads)
- RAM: 64GB DDR5
- GPU: NVIDIA RTX 4090Ti 24GB
- Storage: 1TB NVMe SSD + 2TB HDD
- Operating System: Windows 11 pro
๋ฐ์ดํฐ์ ์ ๋ณด
์ด ๋ชจ๋ธ์ ํ๋ ์ค ์์ฐ ๋ผ์ธ์์ ์ดฌ์๋ ์์ ๋ฐ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ต๋์์ต๋๋ค. ๊ฐ ์ด๋ฏธ์ง์๋ ์ ํ์ ์์น์ ํด๋์ค(์ ์/๋ถ๋ ๋ฑ)๊ฐ ๋ผ๋ฒจ๋ง๋์ด ์์ผ๋ฉฐ, YOLO ํ์(.txt)์ผ๋ก ์ด๋ ธํ ์ด์ ๋์ด ์์ต๋๋ค. ๋ฐ์ดํฐ๋ OpenCV ๋ฐ Albumentations ๊ธฐ๋ฐ์ ์ ์ฒ๋ฆฌ์ ๋ฐ์ดํฐ ์ฆ๊ฐ(ํ์ , ๋ฐ๊ธฐ ์กฐ์ , ๋ ธ์ด์ฆ ์ถ๊ฐ ๋ฑ) ๊ณผ์ ์ ๊ฑฐ์ณ YOLOv7 ๋ฐ YOLOv10 ๋ชจ๋ธ์ ์ ๋ ฅ ํฌ๊ธฐ(640ร640)์ ๋ง๊ฒ ์ ๊ทํ๋ฉ๋๋ค.
ํ์ต๋ ๋ชจ๋ธ์ ๊ฐ์ฒด ํ์ง๋ฅผ ํตํด ์์ฐ๋ ์ ํ ์๋์ ์๋์ผ๋ก ์ฐ์ถํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์๊ฐ ์ฌ๊ณ ์์ค ์ถ์ ๋ฐ ์์ฐ๋ ๋ถ์์ ํ์ฉ๋ฉ๋๋ค.
- Data sources: https://huggingface.co/datasets/quandao92/vision-inventory-prediction-data
- Training size:
- Time-step: 5~7์ด
YOLOv7 Model Architecture
- model:
-input_layer:
- image_size: [640, 640, 3] # Standard input size -backbone:
- name: CSPDarknet53 # Backbone for feature extraction
- filters: [32, 64, 128, 256, 512, 1024] # Filters for each layer -neck:
- name: PANet # Path Aggregation Network for feature fusion
- name: SPP # Spatial Pyramid Pooling for multi-scale context -head:
- name: YOLOv7 Detection Head # Final detection layer
- outputs:
- boxes: 4 # Bounding box prediction (x, y, width, height)
- classes: N # Number of object classes
YOLOv10 Model Architecture
model:
input_layer:
- image_size: [640, 640, 3] # ํ์ค ์ ๋ ฅ ํฌ๊ธฐ
backbone:
- name: C2f-Backbone # YOLOv10 ๊ณ์ด์ ๊ฒฝ๋/๊ณ ํจ์จ C2f ๋ชจ๋ ๊ธฐ๋ฐ ๋ฐฑ๋ณธ
- stem: CBS(3, 32, k=3, s=2) # Conv-BN-SiLU ์์
- stages:
- {depth: 1, out_channels: 64, module: C2f} # P2 (stride=4) - ์ต์
- {depth: 2, out_channels: 128, module: C2f} # P3 (stride=8)
- {depth: 2, out_channels: 256, module: C2f} # P4 (stride=16)
- {depth: 1, out_channels: 512, module: C2f} # P5 (stride=32)
- extras:
- {name: SPPF, out_channels: 512} # ํ์ ์ ์ฌ์ฉ(๊ฒฝ๋ SPPF)
neck:
- name: PAN-FPN # ๊ฒฝ๋ก ์ง๊ณ + FPN ๊ฒฐํฉ(์/ํํฅ ํผ์ฒ ์ตํฉ)
- connections:
- P3 <-> P4 <-> P5 # ์ํฅ/ํํฅ ๊ฒฝ๋ก ์ฐ๊ฒฐ
- ops: [Concat, CBS, C2f] # ์ตํฉ ์ดํ ๊ฒฝ๋ ๋ธ๋ก
head:
- stride: [8, 16, 32] # ๊ฐ ํผ์ฒ ๋งต์ ๋์
- branches:
- cls_branch: [CBS, CBS] # ํด๋์ค ์์ธก ๊ฒฝ๋ก
- box_branch: [CBS, CBS] # ๋ฐ์ค ํ๊ท ๊ฒฝ๋ก (dx, dy, dw, dh)
- obj_branch: [CBS] # ๊ฐ์ฒด์ฑ(ํ์ ์)
- outputs:
- boxes: 4 # (cx, cy, w, h) ๋๋ ์คํ์ ํ๋ผ๋ฏธํฐ
- classes: N # ํด๋์ค ์
- objectness: 1 # ์ ํ์ (์ค์ ์ ๋ฐ๋ผ ์ฌ์ฉ/๋ฏธ์ฌ์ฉ)
์ฐธ๊ณ : YOLOv10์ NMS-free/anchor-free ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ฉฐ,
Optimizer and Loss Function
- training:
- optimizer:
- name: AdamW # Adam optimizer with weight decay
- lr: 0.001 # Learning rate
- loss:
- classification_loss: 1.0 # Loss for classification (cross-entropy)
- localization_loss: 1.0 # Loss for bounding box regression (MSE)
- objectness_loss: 1.0 # Loss for objectness score (binary cross-entropy)
- optimizer:
Metrics
- metrics:
- Precision # Precision metric for evaluation
- Recall # Recall metric for evaluation
- mAP # Mean Average Precision for object detection
- F1-Score # F1-Score for a balanced evaluation
Training Parameters
ํ์ดํผํ๋ผ๋ฏธํฐ ์ค์
- Learning Rate: 0.001.
- Batch Size: 1.
- Epochs: 200.
Data Parameters
โ ๋ฐ์ดํฐ ์ฆ๊ฐ
- ํ์ ์ ์ ์ฉํ์ฌ ๋ชจ๋ธ์ ์ผ๋ฐํ ์ฑ๋ฅ ๊ฐํ.
Evaluation Parameters
- F1-score: 95%์ด์.
ํ์ต ์ฑ๋ฅ ๋ฐ ํ ์คํธ ๊ฒฐ๊ณผ
ํ์ต ๊ฒฐ๊ณผํ:
ํ์ต ๊ฒฐ๊ณผ ๋ฒ์ 1
ํ์ต ๊ฒฐ๊ณผ ๋ฒ์ 2
ํ์ต ๊ฒฐ๊ณผ ๋ฒ์ 3
๋ชจ๋ธ ์ด๋ ฅ
ํ์ต ๋ฐ ํ ์คํธ ํ์๋ผ์ธ
| ๋ ์ง | ๋ฒ์ | ์์ง | ์ฃผ์ ๋ณ๊ฒฝ | ๋ชฉํ |
|---|---|---|---|---|
| 2024-09-01 | v0.1 | YOLOv7 | ์ด๊ธฐ ๋ฒ ์ด์ค๋ผ์ธ ์๋ฆฝ, ๋ฐ์ดํฐ์ v1 ๊ตฌ์ฑ | mAP@0.5 โฅ 0.85 |
| 2024-10-05 | v0.2 | YOLOv7 | ์ฆ๊ฐ(rotate/HSV), ์ต์ปค ์ฌ์กฐ์ | F1 โฅ 0.90 |
| 2024-11-18 | v0.3 | YOLOv7 | ํด๋์ค ๋ถ๊ท ํ ๋ณด์ , Hard negative ์ํ ์ถ๊ฐ | ์คํ ๊ฐ์ |
| 2025-01-12 | v0.4 | YOLOv7 | SPPF ๊ฒฝ๋ํ, FP16 ์ถ๋ก | Latency ๊ฐ์ |
| 2025-03-01 | v1.0 (YOLOv7-Final) | YOLOv7 | ํ๋ก๋์ ํ๊น , ์์ ํ ๋ฐฐํฌ | ์ด์ ์ด๊ด |
| 2025-03-20 | v1.1 | YOLOv10 | C2f ๋ฐฑ๋ณธ/Anchor-free ์ ํ, ์ฌํ์ต | mAP@0.5 +2~3% |
| 2025-04-22 | v1.2 | YOLOv10 | PAN-FPN ํ๋, Conf Threshold ์กฐ์ | F1 โฅ 0.95 |
| 2025-05-28 | v1.3 | YOLOv10 | ์ฑ๋ ํ๋ฃจ๋, TensorRT ์ต์ ํ | FPS โฅ 30 |
| 2025-06-25 | v2.0 (YOLOv10-Final) | YOLOv10 | ๊ณ ๊ฐ PoC ์๋ฃ, ๋ฌธ์ํ ๋ฐ ์์นด์ด๋ธ | ์์ ํ |
๋ฒ์ ๊ฐ ๋น๊ต ์์ฝ
| ํญ๋ชฉ | YOLOv7-Final (v1.0) | YOLOv10-Final (v2.0) | ์ฐจ์ด |
|---|---|---|---|
| mAP@0.5 | 0.90 | 0.96 | +0.06 |
| mAP@0.5:0.95 | 0.63 | 0.74 | +0.11 |
| F1-score | 0.94 | โฅ0.95 | + |
| Latency (ms/frame) | 5.6 | 3.9 | -30% |
| Params (M) | 37.2 | 22.5 | ๊ฒฝ๋ํ |
| FLOPs (G) | 120 | 85 | ํจ์จ ํฅ์ |
| FPS (4090 ๊ธฐ์ค) | 190 | 260 | +36% |
์ค์น ๋ฐ ์คํ ๊ฐ์ด๋ผ์ธ
์ด ๋ชจ๋ธ์ ์คํํ๋ ค๋ฉด Python๊ณผ ํจ๊ป ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค:
- numpy: ์์น ์ฐ์ฐ.
- torch: ๋ฅ๋ฌ๋ ๋ชจ๋ธ ํ์ต์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- torch.distributed: ๋ถ์ฐ ํ์ต์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- torch.nn: ์ ๊ฒฝ๋ง ๊ตฌ์ฑ ๋ฐ ํ์ต์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- torch.optim: ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- torch.utils.data: ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฐ ์ฒ๋ฆฌ.
- yaml: ์ค์ ํ์ผ์ ์ฒ๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- tqdm: ํ๋ จ ์งํ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ํ์.
- test: ๋ชจ๋ธ ํ๊ฐ๋ฅผ ์ํ ์ฝ๋ (mAP ๊ณ์ฐ).
- models.experimental: YOLO ๋ชจ๋ธ ๋ก๋ ๋ฐ ์ค์ .
- models.yolo: YOLO ๋ชจ๋ธ ํด๋์ค ์ ์.
- utils.autoanchor: ์ต์ปค ๋ฐ์ค ์ฒดํฌ ํจ์.
- utils.datasets: ๋ฐ์ดํฐ ๋ก๋ ์์ฑ.
- utils.general: ๋ฐ์ดํฐ์ ํ์ธ, ์๊ตฌ์ฌํญ ์ ๊ฒ ๋ฑ ์ ํธ๋ฆฌํฐ ํจ์.
- utils.google_utils: ๋ชจ๋ธ ๋ค์ด๋ก๋ ๊ธฐ๋ฅ.
- utils.loss: ์์ค ํจ์ ๊ณ์ฐ.
- utils.plots: ํ์ต ๊ฒฐ๊ณผ ์๊ฐํ ํจ์.
- utils.torch_utils: ๋ชจ๋ธ ์ ์ฅ, ๋ถ์ฐ ํ์ต ๊ด๋ จ ์ ํธ๋ฆฌํฐ.
- utils.wandb_logging.wandb_utils: WandB์ ๊ด๋ จ๋ ๋ก๊น ์ ํธ๋ฆฌํฐ.
๋ชจ๋ธ ์คํ ๋จ๊ณ:
1. ํ์ํ ํจํค์ง ์ค์น
pip์ ํตํด YOLOv7, YOLOv10์ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
pip install torch torchvision matplotlib opencv-python
2. ๋ฐ์ดํฐ ๋ก๋
- OpenCV ๋๋ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ ๋ก๋ํฉ๋๋ค.
- YOLOv7 ๋ชจ๋ธ์ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ธ์ํ๋ฏ๋ก, ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ YOLO ํ์์ ๋ง๊ฒ ๋ผ๋ฒจ๋งํด์ผ ํฉ๋๋ค.
3. ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
- ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋ชจ๋ธ์ ๋ง๊ฒ ๋ฆฌ์ฌ์ด์งํฉ๋๋ค. YOLOv7, v10 ๋ชจ๋ธ์ ์ผ๋ฐ์ ์ผ๋ก 640x640 ํฌ๊ธฐ์ ์ ๋ ฅ์ ๋ฐ์ต๋๋ค.
- ๋ผ๋ฒจ๋ง๋ ๋ฐ์ดํฐ๊ฐ YOLO ํ์์ผ๋ก ๋์ด ์๋์ง ํ์ธํฉ๋๋ค (๊ฐ๊ฐ์ ๊ฐ์ฒด์ ๋ํด ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ํฌํจํ ํ ์คํธ ํ์ผ).
4. ์คํฌ๋ฆฝํธ ์คํ
- ๋ฐ์ดํฐ์ ์ ํ๋ จ ์ธํธ์ ํ ์คํธ ์ธํธ๋ก ๋ถํ ํฉ๋๋ค.
- YOLOv7 ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๊ณ , ํ๋ จํ ์ค๋น๋ฅผ ํฉ๋๋ค.
- ๋ชจ๋ธ์ ํ๋ จ์ํค๊ณ , ํ ์คํธ ๋ฐ์ดํฐ์์ ์ฑ๋ฅ์ ํ๊ฐํฉ๋๋ค.
5. ๋ชจ๋ธ ์ฑ๋ฅ ์ต์ ํ ๋ฐ ํ๋
- ๋ชจ๋ธ ํ๋ จ ํ, ์ฑ๋ฅ์ด ๋ฏธ๋นํ ๊ฒฝ์ฐ, ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋์ ํตํด ๋ชจ๋ธ์ ์ต์ ํํ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, ํ์ต๋ฅ , ๋ฐฐ์น ํฌ๊ธฐ, ๋๋ ๋คํธ์ํฌ ๊ตฌ์กฐ๋ฅผ ์กฐ์ ํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณด์ยท๋ผ์ด์ ์ค ์ํ ๊ด๋ฆฌ ์ฒด๊ณ
๋ณธ ํ๋ก์ ํธ๋ YOLOv7 ๊ธฐ๋ฐ ์ ํ ํ๋ณ ์์ธก ๋ชจ๋ธ๋ก, Python ๋ฐ PyTorch ํ๊ฒฝ์์ ๋ค์์ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ๋ฌธ์๋ ํด๋น ์คํ์์ค ๊ตฌ์ฑ์์์ ๋ณด์ยท๋ผ์ด์ ์ค ๋ฆฌ์คํฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ ์ฐจ์ ์ค์ ์ฌํญ์ ์ ์ํฉ๋๋ค.
๋ด๋ถ๋ง(On-premise) ํ๊ฒฝ์ด๋ผ๋, ๊ณต๊ธ๋ง(Supply Chain) ์ทจ์ฝ์ ๊ณผ ๋ผ์ด์ ์ค ๋ถ์ดํ์ ๋ฒ์ ๋ถ์ ๋ฐ ์๋น์ค ์ค๋จ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
1. ์ํ ์ง์ (Risk Statement)
- ๋ณด์ ์ํ: ์ธ๋ถ ํจํค์ง(PyTorch, OpenCV ๋ฑ) ๋๋ ์ ์ด ์ข ์์ฑ์์ ๋ฐ๊ฒฌ๋๋ CVE ์ทจ์ฝ์ ์ผ๋ก ์ธํ ์ ์ฑ ์ฝ๋ ์ฝ์ , ์๊ฒฉ ์ฝ๋ ์คํ, ๋ฐ์ดํฐ ์ ์ถ ์ํ.
- ๋ฒ์ ์ํ: Apache 2.0, MIT, GPL-3.0 ๋ฑ ๋ผ์ด์ ์ค ์กฐ๊ฑด์ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ,
์์ค ๊ณต๊ฐยท๋ฐฐํฌ ์ ํยท์ํด๋ฐฐ์ยท๋ฒ์ ๋ถ์ ๋ฐ์ ๊ฐ๋ฅ. - ์ด์ ์ํ: SBOM ๋ฏธ์์ฑ, ๋ฒ์ ๊ด๋ฆฌ ๋ถ์ฌ, ์น์ธ ์๋ ์คํ์์ค ๋ฐ์
์ผ๋ก ์ธํด
์ฌํ์ฑ ๋ฐ ๊ฐ์ฌ ๋์ ์คํจ, ๊ณต๊ธ๋ง ์ํ ๋ฐ์ ๊ฐ๋ฅ.
2. ์ ์ฉ ๋ฒ์ (Scope)
| ๊ตฌ๋ถ | ๋ด์ฉ |
|---|---|
| ์ฝ๋ | YOLOv7 ํ์ต ๋ฐ ์ถ๋ก ์คํฌ๋ฆฝํธ (train.py, detect.py, models/*.py, utils/*.py) |
| ๋ชจ๋ธ | ํ์ต๋ YOLOv7 ๊ฐ์ค์น ํ์ผ (.pt) |
| ๋ฐ์ดํฐ | ๋ผ๋ฒจ๋ง ์ด๋ฏธ์ง ๋ฐ์ดํฐ, YOLO ํ์์ ์ด๋ ธํ ์ด์ ํ ์คํธ |
| ํ๊ฒฝ | ๋ด๋ถ๋ง ์๋ฒ (GPU ํ์ต์ฉ, API ์๋ฒ, ๋ฐฐํฌ ์๋ฒ) |
| ๋ฌธ์ | ๋ชจ๋ธ ์นด๋, ๋งค๋ด์ผ, SBOM, LICENSE, THIRD_PARTY_NOTICES.txt |
3. ๊ฑฐ๋ฒ๋์ค ์ ์ฑ (Governance Policy)
โ ํ์ฉ ๋ผ์ด์ ์ค
- Apache 2.0, MIT, BSD-2/3-Clause โ ์ ์๊ถ/๋ผ์ด์ ์ค ๊ณ ์ง ํ์, Apache๋ NOTICE ํฌํจ.
- PSF License, CC-BY โ ์ถ์ฒ ๋ฐ ์์ ์์ ๋ช ์.
โ ๏ธ ์กฐ๊ฑด๋ถ ํ์ฉ
- LGPL, MPL-2.0, EPL-2.0 โ ์์ ์ ๊ณต๊ฐ ์๋ฌด ํ์ธ ํ์.
- Creative Commons SA โ ๋์ผ์กฐ๊ฑด๋ฐฐํฌ(Share-Alike) ์ค์ ํ์.
โ ๊ธ์ง ๋ผ์ด์ ์ค
- GPL-2.0, GPL-3.0, AGPL-3.0
- ์ธ๋ถ ๋ฐฐํฌ ๋๋ ๋คํธ์ํฌ ์๋น์ค ์ ๊ณต ์ ์์ค ๊ณต๊ฐ ์๋ฌด ๋ฐ์.
- ๋ด๋ถ๋ง์ด๋ผ๋ ์ฌ๋ฐฐํฌ/์๋น์ค ์ ๊ณต ๊ฐ๋ฅ์ฑ์ด ์์ ๊ฒฝ์ฐ ์ฌ์ฉ ๊ธ์ง.
- ๋จ์ ๋ด๋ถ ์คํ ๋ชฉ์ (๋น๋ฐฐํฌํ)์ ํํด ์์ธ์ ๊ฒํ ๊ฐ๋ฅ.
4. ์คํ์์ค ๋ฐ์ ๋ฐ ๊ฒ์ฆ ์ ์ฐจ
๐ A. ๋ฐ์ ๋จ๊ณ
- ๋ฑ๋ก ์์ฒญ:
- ํจํค์ง๋ช , ๋ฒ์ , ์ถ์ฒ(URL), ์ฉ๋, ๋ผ์ด์ ์ค ๋ช ์
- ๋ณด์ ์ ๊ฒ:
OSV-Scanner,Trivy,Grype๋ฑ์ผ๋ก CVE ์ค์บ ์ํ
- ๋ผ์ด์ ์ค ๊ฒํ :
- SPDX ์๋ณ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฉ/์กฐ๊ฑด๋ถ/๊ฑฐ์ ๋ถ๋ฅ
- ์น์ธ ๋ฐ ๊ธฐ๋ก:
- ํ์ฉ๋ ํจํค์ง๋ง ์ฌ๋ด ๋ฏธ๋ฌ(PyPI, Conda, Torch Hub Mirror)์ ๋ฑ๋ก
โ๏ธ B. ๊ฐ๋ฐ ๋ฐ ํ์ต ๋จ๊ณ
requirements.txt,environment.yml๋ด ๋ฒ์ ๊ณ ์ (์:torch==2.1.2)- ๊ฐ์ค์น ํ์ผ ํด์(SHA256) ๊ธฐ๋ก
- ํ์ต ๋ก๊ทธ์ ํ๋ ์์ํฌ ๋ฒ์ ์๋ ๊ธฐ๋ก
๐ C. ๋ฐฐํฌ ๋จ๊ณ
- SBOM(Software Bill of Materials) ์์ฑ (ํ์: CycloneDX JSON)
- THIRD_PARTY_NOTICES.txt ํฌํจ
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋๋ ๋ชจ๋ธ ํจํค์ง์ LICENSE / NOTICE ์ฒจ๋ถ
๐ D. ์ด์ ๋จ๊ณ
- ์ 1ํ SCA ์ฌ์ค์บ ๋ฐ ๋ณด์ ์ ๋ฐ์ดํธ ๋ฐ์
- CVSS 7.0 ์ด์ ๊ณ ์ํ ์ทจ์ฝ์ โ ์ฆ์ ๋ฒ์ ์ ๋๋ ์ฐจ๋จ
- ์กฐ์น ๋ด์ญ
/logs/security_patch_history.txt์ ์ฅ
5. Library requirements.txt ๋ฒ์ ์ด๋ ฅ ๊ด๋ฆฌ
๋ณธ ํ๋ก์ ํธ๋ ์์กด์ฑ ์ฌํ์ฑ๊ณผ ๊ณต๊ธ๋ง ๋ณด์์ ์ํด requirements.in โ requirements.txt(ํด์ ํฌํจ) โ SBOM ์์ผ๋ก
์ ๊ธ(lock) + ์ด๋ ฅ(History) + ๊ฐ์ฌ(Traceability) ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
1) ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ
/configs/dependency/
โโ base/
โ โโ requirements.in
โ โโ requirements.txt # ํด์ ํฌํจ (pip-compile ์์ฑ)
โโ dev/
โ โโ requirements-dev.in
โ โโ requirements-dev.txt
โโ constraints.txt # ํ ๊ณตํต ์ ์ฝ(์ถฉ๋ ๋ฐฉ์ง/์ยทํํ)
โโ CHANGELOG_requirements.md # ์์กด์ฑ ๋ณ๊ฒฝ ์ด๋ ฅ
2) ๋ธ๋์น/ํ๊ทธ ๊ท์น
- ๋ธ๋์น:
dep/upgrade-YYYYMMDD(์:dep/upgrade-20251021) - ํ๊ทธ:
deps-vMAJOR.MINOR.PATCH(์:deps-v1.4.2) - ์ปค๋ฐ ๋ฉ์์ง ๊ท์น:
deps(lock): pin versions (TF 2.15.0, numpy 1.26.4) + hashesdeps(upgrade): pandas 2.2.1 โ 2.2.2 (CVE-XXXX fix)deps(revert): rollback to deps-v1.3.0 due to perf regression
3) ์ด๋ ฅ(CHANGELOG) ํ๊ธฐ
/configs/dependency/CHANGELOG_requirements.md ์ ๊ธฐ๋ก:
| ๋ ์ง | ํ๊ทธ | ๋ณ๊ฒฝ ์ ํ | ์ฃผ์ ๋ณ๊ฒฝ | ๊ทผ๊ฑฐ/๋งํฌ | ์ํฅ |
|---|---|---|---|---|---|
| 2024-09-25 (์) | deps-v0.1.0 | initial / pin | ์ด๊ธฐ ์ ๊ธ: requirements.in โ requirements.txt ์์ฑ (--generate-hashes) โ torch==1.13.1, torchvision, opencv-python, numpy, pandas ๋ฑ ๊ธฐ๋ณธ ์์กด์ฑ ๊ณ ์ ๋ฐ ํด์ ํฌํจ |
์ด๊ธฐ ๋ณด์์ ์ฑ ยทํ๋ก์ ํธ ์ ์ | ์์กด์ฑ ์ฌํ์ฑ ํ๋ณด, ์ ๊ท ํ๊ฒฝ ์ค์น ์ ๋์ผ์ฑ ๋ณด์ฅ |
| 2024-11-18 (์) | deps-v0.2.0 | security upgrade | SCA ๋์: OpenCV / urllib3 / PyYAML ๋ณด์ ํจ์น ๋ฐ์(๋ฒ์ ์ ) ๋ฐ pip-compile ์ฌ์์ฑ. Ultralytics/YOLO ๊ด๋ จ ์ข ์์ฑ ๋ผ์ด์ ์ค(AGPL ์ฌ๋ถ) ๊ฒํ ๊ธฐ๋ก ์ถ๊ฐ | SCA ๋ฆฌํฌํธ 2024-11 (OSV/Trivy) | ๊ณ ์ํ CVE ์ํ, ๋ผ์ด์ ์ค ๋ฆฌ์คํฌ ๊ฒํ ํ์(AGPL ๋์) |
| 2025-01-14 (ํ) | deps-v0.3.0 | policy / constraints | constraints.txt ๋์
(protobuf, grpcio ๋ฑ ์ยทํํ ์ ์ฝ), requirements-dev.txt ๋ถ๋ฆฌ, THIRD_PARTY_NOTICES.txt ํ
ํ๋ฆฟ ์ถ๊ฐ ๋ฐ ๊ฐ์ค์น(.pt) ํด์ ์ ์ฑ
๋ช
๋ฌธํ |
๋ด๋ถ ๊ฑฐ๋ฒ๋์ค ํ์ 2025-01 | Dev/Staging ์ผ๊ด์ฑ ๊ฐํ, ๋ฒ์ ์ฆ๋น ์ค๋น |
| 2025-04-15 (ํ) | deps-v1.0.0 | upgrade (major) | PyTorch ๋ฒ์ (1.x โ 2.1.x ๊ณ์ด) ๋ฐ ๊ด๋ จ CUDA ํด์ฒด์ธ ์ ๋ฐ์ดํธ ๋ฐ์; SBOM(CycloneDX) ์๋์์ฑ ํ์ดํ๋ผ์ธ ์ถ๊ฐ; SCA ์ฌ๊ฒ์ฆ(๊ณ ์ํ CVE ํจ์น) | OSV/Trivy 2025-04 ๋ณด๊ณ ์ | ์ฑ๋ฅยท๋ณด์ ๊ฐ์ , Staging์์ ์ฌํ๋ จยท๊ฒ์ฆ ํ์ (GPU ๋๋ผ์ด๋ฒ/์ปจํ ์ด๋ ์ํฅ) |
| 2025-07-23 (์) | deps-v1.1.0 | stabilization / pin | ์์ ํ ์กฐ์น: ์ผ๋ถ ํจํค์ง(์: numpy, torchvision) ๋ฒ์ ์ฌํ ๋ฐ ํด์ ์ฌ์์ฑ; THIRD_PARTY_NOTICES ์ ๋ฐ์ดํธ(AGPL ํ๊ธฐ ํฌํจ); ๋ฐฐํฌ์ฉ ์ปจํ ์ด๋์ LICENSE/NOTICE ๋๋ด ๊ท์ ํ์ | ์ฑ๋ฅ/๋ผ์ด์ ์ค ๊ฒ์ฆ ๊ฒฐ๊ณผ(2025-06~07) | ํ๋ก๋์ ๋ฐฐํฌ ์ค๋น ์๋ฃ, ๋ฒ๋ฌดยท๋ณด์ ๊ฐ์ฌ ๋์ ์ฒด๊ณ ๋ง๋ จ |
์์น: ๋ชจ๋ ๋ณ๊ฒฝ์ ์ ๋ฐ๊พธ์๋์ง(๊ทผ๊ฑฐ) ์ ์ํฅ๋ ๋ฅผ ๊ฐ์ด ๋จ๊น๋๋ค.
4) ์น๊ฒฉ(DevโStagingโProd) ์ํฌํ๋ก
- Dev ์ ๊ธ:
pip-compile --generate-hashes -o base/requirements.txt base/requirements.in - SCA ์ค์บ: OSV-Scanner/Trivy๋ก CVE ํ์ธ โ ๊ฒฐ๊ณผ ์ฒจ๋ถ
- Staging ๊ฒ์ฆ: ์ฌํ์ต ์ค๋ชจํฌ ํ
์คํธ(์ํ ๋ฐ์ดํฐ),
pip check๋ฌด๊ฒฐ์ฑ ํ์ธ - SBOM ์์ฑ:
cyclonedx-py -o sbom_cyclonedx.json - Prod ์น๊ฒฉ: ํ๊ทธ(
deps-vX.Y.Z) ๋ฌ๊ณ CHANGELOG ๊ธฐ๋ก, ์ํฐํฉํธ ๋ณด๊ด
5) ๋กค๋ฐฑ ์ ์ฑ
- ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ๋ก ์ด์ ํ๊ทธ์ lockfile๋ก ๋๋๋ฆฝ๋๋ค.
- ์คํ:
git checkout tags/deps-v1.3.0 -- configs/dependency/base/requirements.txt pip install --require-hashes -r configs/dependency/base/requirements.txt
6) ์์ฑ/์ ๊ทธ๋ ์ด๋ ์ปค๋งจ๋
# ๋๊ตฌ ์ค์น
pip install pip-tools==7.4.1
# (์ ํ) ์ ์ฝ ํ์ผ ์ฌ์ฉ
# constraints.txt ๋ด ๊ณตํต ์ ์ฝ ๊ด๋ฆฌ (์: protobuf<5)
# 1) ์ ๊ธํ์ผ ์์ฑ(ํด์ ํฌํจ)
pip-compile \
--generate-hashes \
--resolver=backtracking \
--output-file configs/dependency/base/requirements.txt \
configs/dependency/base/requirements.in
# 2) ์ค์น ์ ํด์ ๊ฒ์ฆ
pip install --require-hashes -r configs/dependency/base/requirements.txt
# 3) ์์กด์ฑ ์ถฉ๋ ๊ฒ์ฌ
pip check
# 4) SBOM ์์ฑ (๊ฐ์ฌ/๊ฐ๋ฆฌ ๋์)
cyclonedx-py -o artifacts/sbom/sbom_cyclonedx_$(date +%F).json
5. SBOM ๋ฐ NOTICE
๐ SBOM ํ๋
| ํญ๋ชฉ | ์์ |
|---|---|
| Name | torch |
| Version | 2.1.2 |
| License | BSD-3-Clause |
| Hash | sha256:62ad4b6f9d8d2e10c6... |
| Supplier | PyTorch Foundation |
| Source URL | https://pypi.org/project/torch/ |
๐ THIRD_PARTY_NOTICES.txt
This product includes the following open-source components:
- Ultralytics 8.x - AGPL-3.0
- PyTorch 2.1.2 โ BSD-3-Clause
- OpenCV 4.9.0 โ Apache-2.0
- NumPy 1.26.4 โ BSD-3-Clause
- Matplotlib 3.8.x โ PSF License
- tqdm 4.66.2 โ MPL-2.0
- PyYAML 6.0 โ MIT License All copyrights belong to their respective owners.
6. ์ทจ์ฝ์ ๋ฐ ๋ฒ์ ๋ฆฌ์คํฌ ๋์ ์๋๋ฆฌ์ค
| ์๋๋ฆฌ์ค | ์ํฅ | ๋์ | ์ฆ์ |
|---|---|---|---|
| CVE ๊ณ ์ํ ํจํค์ง ๋ฐ๊ฒฌ | ์๊ฒฉ ์ฝ๋ ์คํ, ์์คํ ์นจํด | ๋ฒ์ ์ ๊ทธ๋ ์ด๋, ๊ต์ฒด, ์ํฅ ๋ถ์ ๋ณด๊ณ ์ ์์ฑ | SCA ๊ฒฐ๊ณผ ๋ฆฌํฌํธ |
| GPL/AGPL ์ฝ๋ ํผ์ | ์์ค ๊ณต๊ฐ ์๊ตฌ, ๋ฐฐํฌ ์ฐจ๋จ | ๋์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ํ | ๋ผ์ด์ ์ค ๊ฒํ ์ |
| ๋ฐ์ดํฐ ์ฝ๊ด ์๋ฐ | ๋ฒ์ ๋ถ์, ๋ฐ์ดํฐ ์ฌ์ฉ ์ ํ | ์ถ์ฒ ๋ช ์, ์ฝ๊ด ํ์ธ, ๋์ฒด ๋ฐ์ดํฐ ํ๋ณด | ๋ฐ์ดํฐ ์ฌ์ฉ ๋ก๊ทธ |
| SBOM ๋ฏธ์์ฑ | ๊ฐ์ฌ ๋ฐ RCA ์คํจ | ์ฆ์ SBOM ์์ฑ, ๊ฒ์ฆ ํ๋ก์ธ์ค ๊ฐํ | SBOM ํ์ผ |
7. ๊ฐ๋ฐ์ ์ฒดํฌ๋ฆฌ์คํธ
- [โ] YOLOv10 ํ์ต ํ๊ฒฝ ๊ตฌ์ฑ (RTX 4090 / CUDA 12.3)
- [โ] ๊ธฐ์กด YOLOv7 ๊ฐ์ค์น โ YOLOv10 ์ ์ด ํ์ต(finetune) ์ ์ฉ
- [โ]
requirements.txt๋ฒ์ ๊ณ ์ ๋ฐ ํด์ ๊ธฐ๋ก - [โ] SBOM ๋ฐ THIRD_PARTY_NOTICES.txt ํฌํจ
- [โ] SCA/๋ผ์ด์ ์ค ์ค์บ ํต๊ณผ ๋ฆฌํฌํธ ์ฒจ๋ถ
- [โ] ๋ฐ์ดํฐยท๋ชจ๋ธ ์ถ์ฒ ๋ฐ ๊ถ๋ฆฌ ๋ช ์
- [โ] ๋ฐฐํฌ ์ LICENSE / NOTICE ๋๋ด
- [โ] ์ด์ ๋ก๊ทธ์ ๋ฒ์ ๋ฐ ํด์ ๊ธฐ๋ก
8. ์ญํ ๋ฐ ์ฑ ์ (Roles & Responsibility)
| ์ญํ | ์ฑ ์ |
|---|---|
| ๊ฐ๋ฐํ | ์คํ์์ค ๊ฒ์ฆ, SBOM ์์ฑ, ๋ผ์ด์ ์ค ๊ด๋ฆฌ |
| ๋ณด์๊ด๋ฆฌ์ | ์ทจ์ฝ์ ๋ถ์, ํจ์น ๊ณํ ์๋ฆฝ |
| ๋ฒ๋ฌดํ | ๋ผ์ด์ ์ค ํด์ ๋ฐ ๋ถ์ ๋์ |
| ์ด์ํ | ๋ก๊ทธ ๊ด๋ฆฌ, ๋ฐฐํฌ ๊ฒ์ฆ, SBOM ๋ณด๊ด |





