[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -2,64 +2,158 @@
|
||||
id: wiki-2026-0508-object-detection-foundations
|
||||
title: Object Detection Foundations
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [CV-OBJ-DET-001]
|
||||
aliases: [Object Detection, Detection Models, YOLO, DETR, Faster R-CNN]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 1.0
|
||||
tags: ["Computer Vision|[Computer-Vision", ai, object-detection, yolo, bounding-box, localization]
|
||||
confidence_score: 0.95
|
||||
verification_status: applied
|
||||
tags: [object-detection, yolo, detr, faster-rcnn, sam, ultralytics, vision]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-26
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack: { language: Python, framework: PyTorch/Ultralytics }
|
||||
---
|
||||
|
||||
# Object Detection Foundations (객체 탐지 기초)
|
||||
## 한 줄
|
||||
이미지에서 객체의 클래스+박스를 예측하는 태스크로, 2026 현재 YOLOv11/RT-DETR/SAM 기반 open-vocabulary 가 주류이다.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> "이미지라는 평면 공간에서 사물의 '무엇(What)'과 '어디(Where)'를 동시에 정복하여, 기계가 시각적 세계를 논리적으로 해체하게 하라" — 이미지 내에 존재하는 여러 객체의 종류를 분류(Classification)하고 그 위치를 경계 상자(Bounding Box)로 표시(Localization)하는 컴퓨터 비전 기술.
|
||||
## 핵심
|
||||
- **2-stage**: Faster R-CNN (RPN → ROI → 분류/회귀). 정확하나 느림.
|
||||
- **1-stage**: YOLO 시리즈 (v8/v9/v10/v11), RetinaNet, FCOS. 빠르고 anchor-free 추세.
|
||||
- **Transformer**: DETR, Deformable DETR, RT-DETR — set prediction, NMS 불필요.
|
||||
- **Open-vocabulary**: GroundingDINO, OWLv2, YOLO-World — 텍스트 프롬프트로 검출.
|
||||
- **SAM 기반**: SAM2 + bbox prompt → 정밀 마스크. 검출+분할 결합.
|
||||
- **Loss**: GIoU/CIoU/DFL (분포-focal), VariFocal Loss (v8+).
|
||||
- **Metric**: mAP@[.5:.95] COCO 표준, FPS, 파라미터 수.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **추출된 패턴:** "Feature Pyramid and Anchors" — 다양한 크기의 객체를 잡기 위해 이미지의 여러 해상도에서 특징을 추출하고, 미리 정의된 사각형(Anchors)을 바탕으로 실제 객체의 위치를 미세하게 조정하여 예측하는 패턴.
|
||||
- **주요 아키텍처:**
|
||||
- **One-stage Detectors (YOLO, SSD):** 이미지 전체를 한 번만 훑어 즉시 결과 도출. 매우 빠름.
|
||||
- **Two-stage Detectors (R-CNN, Faster R-CNN):** 후보 영역을 먼저 뽑고 상세 검증. 정밀도가 높음.
|
||||
- **핵심 지표:**
|
||||
- **IoU (Intersection over Union):** 정답 상자와 예측 상자가 얼마나 겹치는지 측정.
|
||||
- **mAP (mean Average Precision):** 모델의 전체적인 탐색 성능을 나타내는 표준 평가지표.
|
||||
- **의의:** 자율주행차의 장애물 인식, CCTV의 이상 행동 감지, 공정 자동화의 불량 검출 등 시각 지능이 필요한 모든 실전 분야의 핵심 기술.
|
||||
## 💻 패턴
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 앵커 박스(Anchors)를 설계하는 수작업의 복잡함을 넘어, 최근에는 앵커 없이 점이나 중심을 기반으로 탐지하는 Anchor-free 방식(CenterNet 등)과 트랜스포머를 활용한 DETR 계열이 주류로 부상함.
|
||||
- **정책 변화:** Antigravity 프로젝트는 에이전트의 시각 인터페이스 분석 시, 저지연 응답을 위해 최적화된 YOLOv8 아키텍처를 기반으로 화면 내의 버튼, 텍스트 입력창 등 UI 요소를 실시간으로 탐지함.
|
||||
```python
|
||||
# 1) Ultralytics YOLOv11 학습/추론
|
||||
from ultralytics import YOLO
|
||||
model = YOLO("yolo11n.pt")
|
||||
model.train(data="coco128.yaml", epochs=50, imgsz=640, batch=16, device=0)
|
||||
results = model("image.jpg", conf=0.25, iou=0.5)
|
||||
results[0].boxes.xyxy # tensor [n, 4]
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- Computer-Vision-Foundations, [[Image-Segmentation|Image-Segmentation]], [[Convolutional-Neural-Networks|Convolutional-Neural-Networks]]-CNN, [[Non-linear-Activation-Functions|Non-linear-Activation-Functions]]
|
||||
- **Raw Source:** 10_Wiki/Topics/AI/Object-Detection-Foundations.md
|
||||
```python
|
||||
# 2) HuggingFace RT-DETR 추론
|
||||
from transformers import RTDetrForObjectDetection, RTDetrImageProcessor
|
||||
import torch
|
||||
from PIL import Image
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
proc = RTDetrImageProcessor.from_pretrained("PekingU/rtdetr_r50vd_coco_o365")
|
||||
model = RTDetrForObjectDetection.from_pretrained("PekingU/rtdetr_r50vd_coco_o365").eval()
|
||||
img = Image.open("img.jpg")
|
||||
inputs = proc(images=img, return_tensors="pt")
|
||||
with torch.no_grad():
|
||||
out = model(**inputs)
|
||||
res = proc.post_process_object_detection(out, target_sizes=torch.tensor([img.size[::-1]]),
|
||||
threshold=0.5)[0]
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
```python
|
||||
# 3) GroundingDINO open-vocabulary 검출
|
||||
from groundingdino.util.inference import load_model, predict, load_image
|
||||
model = load_model("GroundingDINO_SwinT_OGC.cfg", "groundingdino_swint_ogc.pth")
|
||||
image_source, image = load_image("img.jpg")
|
||||
boxes, logits, phrases = predict(model, image, caption="red car . pedestrian",
|
||||
box_threshold=0.35, text_threshold=0.25)
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
```python
|
||||
# 4) YOLO + SAM2 = 검출 후 정밀 분할
|
||||
from ultralytics import YOLO, SAM
|
||||
yolo = YOLO("yolo11n.pt")
|
||||
sam = SAM("sam2_b.pt")
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
dets = yolo("img.jpg")[0]
|
||||
boxes = dets.boxes.xyxy.cpu().numpy()
|
||||
masks = sam("img.jpg", bboxes=boxes)[0].masks.data
|
||||
```
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
```python
|
||||
# 5) IoU + NMS (직접 구현)
|
||||
import torch
|
||||
def box_iou(a, b):
|
||||
A = (a[:, 2] - a[:, 0]) * (a[:, 3] - a[:, 1])
|
||||
B = (b[:, 2] - b[:, 0]) * (b[:, 3] - b[:, 1])
|
||||
lt = torch.max(a[:, None, :2], b[None, :, :2])
|
||||
rb = torch.min(a[:, None, 2:], b[None, :, 2:])
|
||||
inter = (rb - lt).clamp(min=0).prod(-1)
|
||||
return inter / (A[:, None] + B[None, :] - inter + 1e-7)
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
def nms(boxes, scores, iou_thr=0.5):
|
||||
keep, order = [], scores.argsort(descending=True)
|
||||
while order.numel():
|
||||
i = order[0].item(); keep.append(i)
|
||||
if order.numel() == 1: break
|
||||
ious = box_iou(boxes[i:i+1], boxes[order[1:]])[0]
|
||||
order = order[1:][ious <= iou_thr]
|
||||
return keep
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
```python
|
||||
# 6) COCO mAP 평가
|
||||
# pip install pycocotools
|
||||
from pycocotools.coco import COCO
|
||||
from pycocotools.cocoeval import COCOeval
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
gt = COCO("annotations/instances_val2017.json")
|
||||
dt = gt.loadRes("predictions.json")
|
||||
ev = COCOeval(gt, dt, iouType="bbox")
|
||||
ev.evaluate(); ev.accumulate(); ev.summarize()
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
```python
|
||||
# 7) Albumentations로 박스-안전 augmentation
|
||||
import albumentations as A
|
||||
T = A.Compose([
|
||||
A.HorizontalFlip(p=0.5),
|
||||
A.RandomBrightnessContrast(p=0.3),
|
||||
A.Mosaic(p=0.5), # YOLO 표준
|
||||
A.Resize(640, 640),
|
||||
], bbox_params=A.BboxParams(format="yolo", label_fields=["cls"]))
|
||||
out = T(image=img, bboxes=bboxes_yolo, cls=cls)
|
||||
```
|
||||
|
||||
## 결정 기준
|
||||
|
||||
| 상황 | 모델 |
|
||||
|---|---|
|
||||
| 모바일/엣지 RT | YOLOv11n/s |
|
||||
| 서버 RT 고정확 | RT-DETR-L, YOLOv11x |
|
||||
| 텍스트 프롬프트 / zero-shot | GroundingDINO, YOLO-World |
|
||||
| 검출+세그멘테이션 | YOLO + SAM2 |
|
||||
| 작은 객체 많음 | 고해상도 + SAHI 슬라이싱 |
|
||||
| 비디오 추적 | YOLO + ByteTrack/BoT-SORT |
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Computer Vision]], [[Deep Learning]]
|
||||
- 모델: [[YOLO]], [[DETR]], [[Faster R-CNN]], [[SAM]], [[GroundingDINO]]
|
||||
- 인접: [[Instance Segmentation]], [[Object Tracking]], [[OCR]]
|
||||
- 도구: [[Ultralytics]], [[MMDetection]], [[Detectron2]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
- 데이터셋 통계 → 모델/하이퍼파라미터 추천.
|
||||
- 추론 결과 박스 → 자연어 장면 설명.
|
||||
- 오류 분석: false positive 패턴 군집 라벨링.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- mAP만 보고 추론 속도/메모리 무시.
|
||||
- imgsz를 너무 크게 (1280+) → 학습 OOM.
|
||||
- val 데이터로 hyperparam tune (test leak).
|
||||
- NMS iou_thr 0.5 고정 — 밀집 객체에서 큰 박스 누락.
|
||||
- COCO 사전학습 무시하고 small dataset scratch 학습.
|
||||
|
||||
## 🧪 검증
|
||||
- COCO mAP@[.5:.95] + per-class AP.
|
||||
- 실시간성: 대상 하드웨어에서 FPS, latency p95.
|
||||
- robustness: COCO-C, 야간/우중 시나리오.
|
||||
|
||||
## 🕓 Changelog
|
||||
- 2026-05-08 Phase 1 자동 생성
|
||||
- 2026-05-10 Manual cleanup — house style 적용
|
||||
|
||||
Reference in New Issue
Block a user