--- id: wiki-2026-0508-object-detection-foundations title: Object Detection Foundations category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Object Detection, Detection Models, YOLO, DETR, Faster R-CNN] duplicate_of: none source_trust_level: A confidence_score: 0.95 verification_status: applied tags: [object-detection, yolo, detr, faster-rcnn, sam, ultralytics, vision] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: { language: Python, framework: 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, 파라미터 수. ## 💻 패턴 ```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] ``` ```python # 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] ``` ```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) ``` ```python # 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 ``` ```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) 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 ``` ```python # 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() ``` ```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]] - 인접: [[Instance Segmentation]], [[OCR]] ## 🤖 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 적용