Files
2nd/10_Wiki/Topic_Programming/AI_and_ML/Object-Detection-Foundations.md
T
Antigravity Agent 9148c358d0 docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
2026-07-05 00:33:48 +09:00

5.3 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-object-detection-foundations Object Detection Foundations 10_Wiki/Topics verified self
Object Detection
Detection Models
YOLO
DETR
Faster R-CNN
none A 0.95 applied
object-detection
yolo
detr
faster-rcnn
sam
ultralytics
vision
2026-05-10 pending
language framework
Python PyTorch/Ultralytics

한 줄

이미지에서 객체의 클래스+박스를 예측하는 태스크로, 2026 현재 YOLOv11/RT-DETR/SAM 기반 open-vocabulary 가 주류이다.

핵심

  • 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, 파라미터 수.

💻 패턴

# 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]
# 2) HuggingFace RT-DETR 추론
from transformers import RTDetrForObjectDetection, RTDetrImageProcessor
import torch
from PIL import Image

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]
# 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)
# 4) YOLO + SAM2 = 검출 후 정밀 분할
from ultralytics import YOLO, SAM
yolo = YOLO("yolo11n.pt")
sam = SAM("sam2_b.pt")

dets = yolo("img.jpg")[0]
boxes = dets.boxes.xyxy.cpu().numpy()
masks = sam("img.jpg", bboxes=boxes)[0].masks.data
# 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)

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
# 6) COCO mAP 평가
# pip install pycocotools
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval

gt = COCO("annotations/instances_val2017.json")
dt = gt.loadRes("predictions.json")
ev = COCOeval(gt, dt, iouType="bbox")
ev.evaluate(); ev.accumulate(); ev.summarize()
# 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

🤖 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 적용