Skip to content
Published on

컴퓨터 비전 프레임워크 2026 완벽 가이드 - OpenCV 4 · MediaPipe · Detectron2 · YOLO v11 · MMDetection · SAM 2 · Grounding DINO 심층 분석

Authors

프롤로그 - 컴퓨터 비전은 "보는 것"이 아니라 "묻는 것"이 되었다

2010년대의 컴퓨터 비전은 분명한 모양이 있었다. SIFT·HOG·Haar로 특징을 뽑고, SVM·랜덤 포레스트로 분류하고, OpenCV가 그 모든 것을 묶었다. 2020년대 초반은 ResNet·EfficientNet·Mask R-CNN의 시대였다 - 데이터셋을 모으고, 모델을 학습시키고, mAP를 끌어올리는 일이 작업의 90%였다.

2026년의 풍경은 다르다. "이 사진에서 빨간 헬멧을 쓴 사람의 자세를 추정해라"라는 한 문장이 Grounding DINO로 박스를 잡고, SAM 2로 마스크를 만들고, MMPose로 키포인트를 뽑는 파이프라인 세 줄로 끝난다. 학습은 거의 하지 않는다. 대신 우리는 "어떤 모델을 어떤 순서로 부를 것인가"를 설계한다.

이 글은 2026년의 컴퓨터 비전 스택을 한 호흡으로 정리한다. OpenCV의 기본기부터 SAM 2와 VLM, DINOv3와 DUSt3R, 그리고 모바일 추론까지 - 어디서 어떤 도구를 쓸지, 그 결정의 기준을 한 페이지에 담았다.


1장 - 2026년 CV 스택의 지도

도구 하나하나에 들어가기 전에, 전체 지도부터 그려보자. 2026년의 컴퓨터 비전은 다섯 개의 층(layer)으로 나뉜다.

[Layer 5] Vision Language Model (VLM)
            GPT-4o, Claude 3.5 Sonnet, Gemini 2.0 Flash
            Qwen2-VL, InternVL 2.5, Pixtral 12B
                       |
[Layer 4] Open-Vocabulary Foundation
            Grounding DINO 1.6, Florence-2, YOLO-World
            SAM 2, DINOv3, CLIP, SigLIP
                       |
[Layer 3] Task-Specific Model
            YOLO v11, Detectron3, MMDetection
            MMPose, DWPose, ByteTrack, Depth Anything v3
                       |
[Layer 2] Inference Runtime
            ONNX Runtime, TensorRT, OpenVINO
            CoreML, TFLite, NCNN, MNN
                       |
[Layer 1] Image I/O & Primitives
            OpenCV 4.10, Pillow-SIMD
            FFmpeg, GStreamer

층이 위로 올라갈수록 "지능"이 올라가지만 지연 시간도 따라 올라간다. VLM은 초당 한두 프레임, YOLO v11은 초당 100프레임 이상. 이 두 끝을 어떻게 조합하느냐가 2026년 비전 엔지니어의 일이다.

한 줄 요약: "VLM으로 질문을 받고, YOLO로 답을 그린다."


2장 - OpenCV 4.10/5.x - 여전히 모든 것의 시작

OpenCV는 죽지 않았다. 오히려 2026년에 더 단단해졌다. 이유는 단순하다 - 이미지를 읽고, 자르고, 색공간을 바꾸고, 비디오 프레임을 디코딩하는 일은 어떤 딥러닝 파이프라인에서도 반드시 필요하다.

2026년 5월 기준 OpenCV 4.10은 LTS이고, 5.0 베타가 활발히 개발 중이다. 변화의 핵심 세 가지를 짚는다.

첫째, DNN 모듈이 ONNX 추론의 기본기가 되었다. PyTorch나 TensorFlow를 거치지 않고도 cv2.dnn.readNetFromONNX() 한 줄로 YOLO·ResNet·ViT를 부른다.

둘째, G-API(Graph API)가 안정화되었다. 입력에서 출력까지를 그래프로 표현하고, OpenCL·CUDA·Vulkan 백엔드 위에서 실행한다. 모바일·임베디드에서 특히 강력하다.

셋째, CUDA·OpenCL 가속이 빌트인이다. cv2.cuda 모듈로 GPU에서 Gaussian blur·optical flow·이미지 워핑을 직접 돌린다.

import cv2

# 1) 이미지 읽기 - 색공간은 BGR(주의)
img = cv2.imread('input.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 2) 리사이즈 - INTER_AREA는 축소에 최적
small = cv2.resize(img_rgb, (640, 640), interpolation=cv2.INTER_AREA)

# 3) DNN 추론 - ONNX 모델 직접 로드
net = cv2.dnn.readNetFromONNX('yolov11n.onnx')
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

blob = cv2.dnn.blobFromImage(small, 1/255.0, (640, 640), swapRB=True)
net.setInput(blob)
outputs = net.forward()

기억할 두 가지: OpenCV는 BGR 색공간을 쓴다(PIL/PyTorch와 다름), imread는 실패하면 None을 반환한다(예외를 던지지 않는다). 이 두 가지로 2026년에도 매주 누군가 디버깅 한 시간을 날린다.


3장 - MediaPipe 0.10 / MediaPipe Studio - 모바일 실시간의 새 표준

Google의 MediaPipe는 2024년 후반에 큰 변화가 있었다. 그전까지의 "MediaPipe Solutions API"가 MediaPipe Tasks API로 통합되었고, 노코드 학습/배포 도구인 MediaPipe Studio가 등장했다.

2026년 기준 MediaPipe는 다음 솔루션을 한 줄짜리 API로 제공한다.

  • Hand Landmarker - 21개 손 키포인트
  • Pose Landmarker - 33개 신체 키포인트 + 세그멘테이션 마스크
  • Face Landmarker - 478개 얼굴 메시 + Blendshape
  • Image Embedder - MobileNet-V3 임베딩
  • Object Detector - EfficientDet-Lite
  • Image Segmenter - Selfie segmentation, hair segmentation
  • Gesture Recognizer - 미리 학습된 7가지 제스처
  • Image Classifier - EfficientNet-Lite
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

# Pose Landmarker - 한 줄짜리 인스턴스 생성
options = vision.PoseLandmarkerOptions(
    base_options=python.BaseOptions(model_asset_path='pose_landmarker.task'),
    running_mode=vision.RunningMode.VIDEO,
    num_poses=2,
    min_pose_detection_confidence=0.5,
)
landmarker = vision.PoseLandmarker.create_from_options(options)

# 프레임마다 추론
result = landmarker.detect_for_video(mp_image, timestamp_ms)
for pose in result.pose_landmarks:
    for lm in pose:
        print(lm.x, lm.y, lm.z, lm.visibility)

MediaPipe의 진짜 가치는 모바일에서 30~60 FPS가 보장된다는 점이다. 같은 작업을 PyTorch로 짜면 모바일에서는 5 FPS도 어렵다. CPU/GPU/NPU 자동 디스패치, TFLite 경량화, XNNPACK 백엔드까지 묶여 있는 결과다.

한계도 분명하다 - 미리 정의된 작업이 아니면 쓸 수 없고, 학습을 직접 하려면 MediaPipe Model Maker로 우회해야 한다. "정해진 일을 빠르게"가 MediaPipe의 자리다.


4장 - Detectron2 / Detectron3 - 메타의 정통 검출 툴킷

Meta AI Research의 Detectron2는 2019년 출시 이후 학계의 사실상 표준이었다. 2025년 말 Detectron3가 베타로 나왔고, 2026년 현재 두 가지가 공존한다.

차이를 정리하면 다음과 같다.

항목Detectron2Detectron3
기본 백본ResNet, ViTConvNeXt v2, DINOv3, SAM2 인코더
검출 헤드Mask R-CNN, Cascade R-CNNMask R-CNN, Mask2Former, ViTDet
학습 프레임워크PyTorch 1.x/2.xPyTorch 2.5+, torch.compile 기본
Config 시스템YACS (yaml)LazyConfig (pythonic)
분산 학습DDPFSDP + activation checkpoint

Detectron2 코드 한 조각.

from detectron2 import model_zoo
from detectron2.config import get_cfg
from detectron2.engine import DefaultPredictor

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file(
    "COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"
))
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(
    "COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"
)
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5

predictor = DefaultPredictor(cfg)
outputs = predictor(image)
# outputs["instances"].pred_boxes, pred_masks, pred_classes

Detectron3의 LazyConfig는 yaml 대신 파이썬 객체로 설정을 쓴다. IDE 자동완성·타입체크가 되고, 분기 로직이 들어가도 깔끔하다.

언제 Detectron을 쓰는가? 논문을 재현할 때, COCO/LVIS 벤치마크를 비교할 때, 그리고 "표준" 마스크 R-CNN 베이스라인이 필요할 때. 실제 프로덕션에서는 YOLO나 MMDetection으로 옮겨가는 경우가 많다.


5장 - YOLO 계열 - v8부터 v12까지의 분기

Ultralytics가 관리하는 YOLO 계열은 2024년 v8, 2024년 후반 v9, 2025년 v10, 2025년 후반 v11, 그리고 2026년 초 v12까지 나왔다. 한 회사가 1년에 한두 번씩 메이저를 내는 속도는 다른 어떤 비전 프레임워크도 따라가지 못한다.

핵심을 정리하면 다음과 같다.

버전출시핵심 변화라이선스
YOLOv82023Anchor-free, classification/segmentation 통합AGPL-3.0
YOLOv92024PGI(Programmable Gradient Information), GELANAGPL-3.0
YOLOv102024NMS-free 헤드, end-to-end 학습AGPL-3.0
YOLOv112025C3k2 블록, SPPF + C2PSA, 더 작은 파라미터AGPL-3.0
YOLOv122026Attention-centric 아키텍처, FlashAttention 기반AGPL-3.0

YOLO의 매력은 한 줄로 충분하다.

from ultralytics import YOLO

# 1) 모델 로드 - 8개 작업이 한 가지 API
model = YOLO('yolo11n.pt')         # nano
# model = YOLO('yolo11n-seg.pt')   # segmentation
# model = YOLO('yolo11n-pose.pt')  # pose
# model = YOLO('yolo11n-obb.pt')   # oriented bounding box
# model = YOLO('yolo11n-cls.pt')   # classification

# 2) 추론
results = model('input.jpg')
for r in results:
    print(r.boxes.xyxy)    # 좌표
    print(r.boxes.conf)    # 신뢰도
    print(r.boxes.cls)     # 클래스

# 3) 학습
model.train(data='coco.yaml', epochs=100, imgsz=640)

# 4) 내보내기 - ONNX, TensorRT, CoreML, TFLite 모두 한 줄
model.export(format='onnx')
model.export(format='engine')      # TensorRT
model.export(format='coreml')

AGPL 라이선스 주의. YOLO 모델을 SaaS·웹 서비스에 쓰면 코드 공개 의무가 생긴다. 상용 사용은 Ultralytics Enterprise 라이선스를 구매해야 한다. 이 문제 때문에 일부 회사는 RT-DETR·DAMO-YOLO·D-FINE 같은 Apache-2.0 대안을 쓴다.


6장 - MMDetection / MMCV / OpenMMLab - 가장 넓은 카탈로그

상하이 AI 연구소가 운영하는 OpenMMLab은 비전 분야에서 가장 넓은 모델 카탈로그를 가진다. MMDetection(검출), MMSegmentation(분할), MMPose(자세), MMTracking(추적), MMDetection3D(3D 검출), MMYOLO(YOLO 계열 통합) 등 10개 이상의 서브 프로젝트가 있다.

특징은 두 가지다.

첫째, 모든 모델이 같은 config 시스템을 공유한다. Mask R-CNN을 ConvNeXt 백본으로 바꾸고, FPN을 BiFPN으로 바꾸고, 해드를 DETR로 바꾸는 일이 yaml 몇 줄로 끝난다.

둘째, 벤치마크 재현이 강력하다. 논문 결과가 ±0.3 mAP 안에 들어오는 게 일반적이다. 학계 표준에 가장 가까운 프레임워크다.

from mmdet.apis import init_detector, inference_detector

config = 'configs/yolox/yolox_s_8xb8-300e_coco.py'
checkpoint = 'yolox_s.pth'

model = init_detector(config, checkpoint, device='cuda:0')
result = inference_detector(model, 'demo.jpg')
# result.pred_instances.bboxes, scores, labels

MMDetection의 단점은 러닝 커브가 가파르다. Config 시스템·Registry 패턴·Hook 시스템을 다 이해해야 자기 모델을 끼워 넣을 수 있다. "빠르게 시작"하기보다 "깊게 들어가기"에 어울리는 도구다.


7장 - Roboflow Universe + Supervision - 어노테이션부터 학습까지

Roboflow는 비전 데이터의 GitHub 같은 자리에 있다. 2026년 현재 Roboflow Universe에는 30만 개 이상의 공개 데이터셋과 5만 개 이상의 사전 학습 모델이 호스팅된다.

핵심 도구 두 가지.

Roboflow Annotate - 웹 기반 어노테이션. 박스·폴리곤·키포인트·OBB를 모두 지원한다. Auto-label 기능이 SAM·Grounding DINO를 호출해 초안을 만든다.

Supervision - Roboflow가 오픈소스로 공개한 비전 유틸리티. 시각화·필터링·메트릭·트래커가 한 패키지에 있다.

import supervision as sv
from ultralytics import YOLO

model = YOLO('yolo11n.pt')
results = model('input.jpg')[0]

# Roboflow Supervision의 Detection 객체로 변환
detections = sv.Detections.from_ultralytics(results)

# 시각화 - 박스 + 라벨 한 줄
box_annotator = sv.BoxAnnotator()
label_annotator = sv.LabelAnnotator()

annotated = box_annotator.annotate(scene=image, detections=detections)
annotated = label_annotator.annotate(scene=annotated, detections=detections)

# 추적 - ByteTrack 한 줄
tracker = sv.ByteTrack()
detections = tracker.update_with_detections(detections)

Supervision의 장점은 모델 추론과 시각화/메트릭을 분리한다는 점이다. YOLO·Detectron·MMDetection의 출력을 같은 Detections 객체로 통일시켜준다.


8장 - HuggingFace Transformers Vision - ViT부터 DETR까지

HuggingFace Transformers는 NLP만의 라이브러리가 아니다. 2026년 기준 비전 모델만 200개 이상이 등록되어 있다.

대표 모델 카탈로그.

  • ViT(Vision Transformer) - 분류의 표준
  • DETR / Deformable DETR / DINO - 트랜스포머 기반 검출
  • Mask2Former / OneFormer - 통합 세그멘테이션
  • OWL-ViT / OWLv2 - 오픈 보캐브 검출
  • CLIP / SigLIP / SigLIP 2 - 이미지-텍스트 임베딩
  • DINOv2 / DINOv3 - 자기 지도 학습 백본
  • SAM / SAM 2 - 세그멘테이션
  • Depth Anything v2 / v3 - 깊이 추정
from transformers import pipeline

# 분류 - 한 줄
classifier = pipeline('image-classification', model='google/vit-base-patch16-224')
print(classifier('input.jpg'))

# 검출
detector = pipeline('object-detection', model='facebook/detr-resnet-50')

# 오픈 보캐브 검출
detector = pipeline('zero-shot-object-detection', model='google/owlv2-base-patch16-ensemble')
print(detector('input.jpg', candidate_labels=['cat', 'dog', 'person']))

# 세그멘테이션
segmenter = pipeline('image-segmentation', model='facebook/mask2former-swin-large-coco-panoptic')

pipeline() 한 줄로 추론이 끝나는 게 HuggingFace의 매력이다. 모델을 바꾸려면 문자열만 바꾸면 된다. 다만 학습은 다른 도구로 가는 게 좋다 - HF Trainer는 비전에서는 PyTorch Lightning이나 MMDetection보다 어색하다.


9장 - Segment Anything 2 (SAM 2) - 비디오 마스크의 새 표준

Meta의 SAM(Segment Anything Model)은 2023년 4월에 처음 나왔다. 2024년 7월 SAM 2가 출시되면서 이미지뿐 아니라 비디오에 대한 메모리 어텐션이 추가되었다. 한 프레임에서 마스크를 잡으면, 나머지 프레임이 자동으로 추적된다.

2026년 기준 SAM 계열의 가족은 다음과 같다.

모델출시파라미터특징
SAM202391M-636M이미지 세그멘테이션
SAM 2202439M-224M비디오 + 이미지
SAM 2.12024-말동일작은 객체·가림 처리 개선
SAMURAI2024동일칼만 필터 기반 추적 강화
FastSAM202368MYOLOv8-seg 백본, 50x 빠름
MobileSAM20239.8M모바일용 경량화
EfficientSAM202326MKD로 경량화

SAM 2 사용 예시.

from sam2.build_sam import build_sam2_video_predictor

predictor = build_sam2_video_predictor(
    'configs/sam2_hiera_l.yaml',
    'checkpoints/sam2_hiera_large.pt'
)

# 비디오 초기화
state = predictor.init_state(video_path='video.mp4')

# 첫 프레임에서 클릭 한 번 - 마스크 자동 추적
predictor.add_new_points(
    inference_state=state,
    frame_idx=0,
    obj_id=1,
    points=[[210, 350]],
    labels=[1]
)

# 모든 프레임에 대해 마스크 추적
for frame_idx, obj_ids, masks in predictor.propagate_in_video(state):
    # masks shape: (num_objects, H, W)
    pass

SAM 2의 가치는 **"한 번 가르치면 평생 따라간다"**는 점이다. 라벨링 비용이 비디오 길이에 비례하지 않는다. CVAT·Label Studio·Roboflow가 모두 SAM 2 통합을 기본 기능으로 받아들였다.


10장 - Grounding DINO 1.5 / 1.6 - 텍스트로 박스를 그리다

IDEA Research의 Grounding DINO는 "오픈 보캐브 검출"이라는 작업을 표준으로 만든 모델이다. 2023년 1.0이 나왔고, 2024년 1.5 Pro/Edge, 2024년 후반 1.6이 나왔다.

전통적인 YOLO·Detectron은 학습할 때 본 클래스(80개·1203개)만 검출한다. Grounding DINO는 다르다 - "빨간 자동차"·"문 손잡이"·"사람이 들고 있는 우산" 같은 자연어 프롬프트로 박스를 그린다.

from groundingdino.util.inference import load_model, load_image, predict

model = load_model('GroundingDINO_SwinT_OGC.cfg.py', 'groundingdino_swint_ogc.pth')
image_source, image = load_image('input.jpg')

# 자연어 프롬프트 - 명사구를 점(.)으로 구분
TEXT_PROMPT = 'red car. person holding umbrella. door handle.'
BOX_THRESHOLD = 0.35
TEXT_THRESHOLD = 0.25

boxes, logits, phrases = predict(
    model=model,
    image=image,
    caption=TEXT_PROMPT,
    box_threshold=BOX_THRESHOLD,
    text_threshold=TEXT_THRESHOLD,
)

Grounding SAM - Grounding DINO로 박스를 잡고, SAM(또는 SAM 2)으로 그 박스 안의 마스크를 만드는 파이프라인. 2026년 라벨링 시작점의 사실상 표준이다.

# 1) Grounding DINO로 박스
boxes, _, _ = predict(model_gdino, image, 'cat. dog.', 0.35, 0.25)

# 2) SAM으로 마스크
sam_predictor.set_image(image_source)
masks, _, _ = sam_predictor.predict(box=boxes, multimask_output=False)

이 두 줄이 "데이터셋 없이 객체 분할"의 전부다. 1만 장에 박스를 손으로 그리던 일이 30분짜리 스크립트로 끝난다.


11장 - Florence-2, YOLO-World - 또 다른 오픈 보캐브

오픈 보캐브 진영에는 Grounding DINO 말고도 두 가지 강자가 있다.

Florence-2(Microsoft, 2024) - 분류·캡셔닝·검출·분할·OCR을 한 모델로 처리한다. 0.23B와 0.77B 파라미터로 매우 작은데도 성능이 좋다. 자연어 프롬프트가 아니라 태스크 토큰을 쓴다 - <OD>(detection), <DENSE_REGION_CAPTION>, <REFERRING_EXPRESSION_SEGMENTATION> 등.

from transformers import AutoProcessor, AutoModelForCausalLM

processor = AutoProcessor.from_pretrained('microsoft/Florence-2-large', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('microsoft/Florence-2-large', trust_remote_code=True)

prompt = '<OD>'  # Object Detection 태스크 토큰
inputs = processor(text=prompt, images=image, return_tensors='pt')
generated_ids = model.generate(**inputs, max_new_tokens=1024, num_beams=3)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]
parsed = processor.post_process_generation(generated_text, task='<OD>', image_size=(W, H))

YOLO-World(Tencent, 2024) - YOLO 속도에 오픈 보캐브를 얹었다. Grounding DINO보다 10~20배 빠르고, 자연어 프롬프트로 학습 없이 검출한다.

from ultralytics import YOLOWorld

model = YOLOWorld('yolov8x-worldv2.pt')
model.set_classes(['red car', 'door handle', 'person holding umbrella'])
results = model.predict('input.jpg')

언제 어떤 걸 쓰느냐. 품질이 최우선이면 Grounding DINO 1.6, 속도가 최우선이면 YOLO-World, 여러 작업을 한 모델로 묶고 싶으면 Florence-2. 이 세 가지가 2026년 오픈 보캐브의 삼각형이다.


12장 - VLM (Vision Language Model) - "이미지에게 묻는다"

2024년 GPT-4V가 등장한 후, VLM은 컴퓨터 비전의 새 층이 되었다. 2026년 5월 기준 주요 VLM은 다음과 같다.

클로즈드 소스 (API)

  • GPT-4o / GPT-4.5-vision (OpenAI)
  • Claude 3.5 Sonnet / Claude 4 Opus (Anthropic)
  • Gemini 2.0 Flash / Gemini 2.0 Pro (Google)

오픈 소스

  • Qwen2-VL / Qwen2.5-VL (Alibaba) - 2B/7B/72B
  • InternVL 2.5 (OpenGVLab) - 1B/2B/4B/8B/26B/40B/76B
  • Llava-OneVision (Bytedance/UW) - 0.5B/7B/72B
  • CogVLM2 (Zhipu) - 19B
  • Phi-3.5-vision (Microsoft) - 4.2B
  • Pixtral 12B (Mistral) - 12B

VLM의 사용 패턴은 두 가지로 갈린다.

(a) Vision QA - "이 사진에 사람이 몇 명 있어?"

from anthropic import Anthropic
import base64

client = Anthropic()
with open('input.jpg', 'rb') as f:
    img_b64 = base64.standard_b64encode(f.read()).decode('utf-8')

message = client.messages.create(
    model='claude-3-5-sonnet-20241022',
    max_tokens=1024,
    messages=[{
        'role': 'user',
        'content': [
            {'type': 'image', 'source': {'type': 'base64', 'media_type': 'image/jpeg', 'data': img_b64}},
            {'type': 'text', 'text': 'How many people are in this image?'}
        ]
    }]
)

(b) Structured Output - "이 영수증에서 항목·금액을 JSON으로 뽑아라"

# JSON 스키마를 강제하면 OCR + 파싱이 한 호출로 끝난다
schema = {
    'type': 'object',
    'properties': {
        'items': {'type': 'array', 'items': {
            'type': 'object',
            'properties': {
                'name': {'type': 'string'},
                'price': {'type': 'number'},
                'quantity': {'type': 'integer'}
            }
        }},
        'total': {'type': 'number'}
    }
}

VLM의 한계도 분명하다. (1) 좌표가 약하다 - "왼쪽 위에서 세 번째 객체"는 잘 알지만, 정확한 픽셀 좌표는 부정확하다. (2) 비싸고 느리다 - GPT-4o로 1만 장을 처리하면 $10~50, YOLO로는 무료에 1분이다. (3) 결정론적이지 않다 - 같은 질문에 다른 답이 나올 수 있다.

그래서 패턴: VLM으로 "무엇을 찾을지" 묻고, 전통 모델로 "어디에 있는지" 찾는다.


13장 - 3D 비전 - DUSt3R, MASt3R, VGGT

2024~2025년 3D 비전에서 가장 큰 변화는 "두 장의 사진만으로 3D 재구성"이 가능해졌다는 것이다.

DUSt3R(Naver Labs Europe, 2024) - 두 장의 이미지를 받아서 픽셀별 3D 포인트맵을 직접 회귀한다. 카메라 내부 파라미터를 모르고도 동작한다. 전통적인 SfM·MVS의 복잡한 파이프라인을 한 모델로 줄였다.

MASt3R(Naver Labs, 2024) - DUSt3R + 매칭. 두 이미지 사이의 픽셀 대응을 함께 출력한다. SLAM·로컬라이제이션에 직접 쓸 수 있다.

VGGT(Meta, 2025) - Visual Geometry Grounded Transformer. 여러 이미지를 한 번에 받아 카메라 포즈·깊이맵·포인트맵을 동시에 추정한다. DUSt3R의 페어와이즈 한계를 넘었다.

Spann3R(2024) - 메모리 토큰을 통해 시퀀셜 3D 재구성을 한다. 비디오 SLAM에 가까운 결과를 얻는다.

from dust3r.inference import inference
from dust3r.model import AsymmetricCroCo3DStereo

model = AsymmetricCroCo3DStereo.from_pretrained('naver/DUSt3R_ViTLarge_BaseDecoder_512_dpt')

images = load_images(['img1.jpg', 'img2.jpg'], size=512)
pairs = make_pairs(images, scene_graph='complete', prefilter=None, symmetrize=True)
output = inference(pairs, model, device='cuda', batch_size=1)
# output에서 pointmap, confidence, depth 추출

3D 비전 분야의 한국 기여가 큰 곳이다. Naver Labs Europe의 그르노블 팀이 DUSt3R·MASt3R·CroCo를 모두 만들었다.


14장 - Depth Anything v2/v3, Marigold, DepthPro

단안 깊이 추정은 2024~2025년에 폭발적으로 발전했다.

Depth Anything v2(HKU, 2024) - 6200만 장의 미라벨 이미지로 학습한 강력한 깊이 추정 모델. Small(24M)·Base(97M)·Large(335M)·Giant(1.3B) 네 사이즈. Depth Anything v3(2025)는 비디오 일관성과 메트릭 깊이를 강화했다.

Marigold(ETH Zürich, 2024) - Stable Diffusion을 깊이 추정으로 파인튜닝. 디퓨전 기반이라 디테일이 좋지만 느리다.

DepthPro(Apple, 2024) - 한 장에서 메트릭 깊이를 0.3초 안에 추정. iPhone의 LiDAR 없는 깊이 추정의 기반이다.

from transformers import pipeline

pipe = pipeline(task='depth-estimation', model='depth-anything/Depth-Anything-V2-Large-hf')
depth = pipe('input.jpg')['depth']  # PIL Image

언제 어떤 걸 쓰느냐. 상대 깊이로 충분하면 Depth Anything, 메트릭 깊이가 필요하면 DepthPro, 디테일이 최우선이면 Marigold.


15장 - 자세 추정 - MMPose, OpenPose, AlphaPose, DWPose

자세 추정(Pose Estimation)은 키포인트를 찾는 작업이다. 2026년의 표준 카탈로그.

도구키포인트특징
MediaPipe Pose33모바일 실시간
OpenPose25(BODY_25)멀티 퍼슨, 오래된 표준
AlphaPose17(COCO)Top-down 정확도
MMPose17~133가장 넓은 모델 카탈로그
DWPose133(전신+얼굴+손)ControlNet 자세 조건의 표준
RTMPose17모바일 실시간, MMPose 소속

DWPose가 2024~2026년 자세 분야의 사실상 표준이 되었다. 이유는 단순하다 - ControlNet·AnimateDiff·Stable Video Diffusion이 모두 DWPose 키포인트를 조건으로 받는다. 생성형 AI의 자세 조건은 거의 DWPose다.

from mmpose.apis import inference_topdown, init_model

config = 'configs/wholebody_2d_keypoint/rtmpose/cocktail14/rtmw-x_8xb320-270e_cocktail14-384x288.py'
checkpoint = 'rtmw-x_simcc-cocktail14_pt-ucoco_270e-384x288.pth'

model = init_model(config, checkpoint, device='cuda')
results = inference_topdown(model, 'input.jpg', bboxes=person_boxes)
# results[i].pred_instances.keypoints, keypoint_scores

16장 - 객체 추적 - ByteTrack, BoT-SORT, OC-SORT, DEVA

비디오에서 같은 객체에 같은 ID를 부여하는 일이 추적(tracking)이다. 2026년의 표준은 네 가지로 좁혀진다.

추적기입력특징
ByteTrack(2022)박스 + 신뢰도낮은 신뢰도 박스도 두 단계 매칭. 가장 널리 쓰임
BoT-SORT(2022)박스 + ReID 임베딩카메라 움직임 보상
OC-SORT(2023)박스관측 중심, 가림 강건
DEVA(2023)박스 + 마스크SAM과 짝, 비디오 세그멘테이션 추적

ByteTrack은 Roboflow Supervision에 통합되어 있어 한 줄이면 끝난다.

import supervision as sv

tracker = sv.ByteTrack(track_thresh=0.5, track_buffer=30)

for frame, detections in stream():
    detections = tracker.update_with_detections(detections)
    # detections.tracker_id에 ID가 들어 있음

SAM 2 자체가 추적기 역할을 한다는 점도 기억해두자. 한 프레임에서 클릭하면 비디오 전체에서 마스크가 따라온다. 추적과 분할이 한 모델로 합쳐졌다.


17장 - 디퓨전 기반 비전 - ControlNet, IP-Adapter

생성형 비전은 더 이상 "다른 분야"가 아니다. ControlNet·IP-Adapter는 검출/분할 결과를 입력 조건으로 받아 새 이미지를 생성한다.

  • ControlNet - Canny edge, depth, pose(DWPose), segmentation, normal 등을 조건으로 받음
  • IP-Adapter - 이미지 자체를 스타일/내용 조건으로 받음
  • T2I-Adapter - 더 가벼운 ControlNet 대안
from diffusers import StableDiffusionXLControlNetPipeline, ControlNetModel
import torch

controlnet = ControlNetModel.from_pretrained('thibaud/controlnet-openpose-sdxl-1.0', torch_dtype=torch.float16)
pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
    'stabilityai/stable-diffusion-xl-base-1.0',
    controlnet=controlnet,
    torch_dtype=torch.float16
).to('cuda')

pose_image = compute_dwpose(input_image)  # DWPose 키포인트 이미지
image = pipe('a person dancing in the rain', image=pose_image).images[0]

이 코드 한 토막이 "비전 인식 -> 비전 생성" 파이프라인의 표준이다. 검출과 생성이 같은 도구 체인 안에 들어왔다.


18장 - 임베딩 모델 - CLIP, SigLIP, DINOv2, DINOv3

이미지를 벡터로 바꾸는 도구는 2026년 가장 많이 호출되는 컴퓨터 비전 모델이다. 이미지 검색·중복 제거·클러스터링·제로샷 분류가 모두 임베딩 위에서 동작한다.

모델학습 신호차원강점
CLIP(2021)이미지-텍스트 페어512/768텍스트와 정렬
OpenCLIP동일, 더 큰 데이터동일더 강한 베이스라인
SigLIP(2023)Sigmoid loss동일CLIP보다 효율
SigLIP 2(2024)다중 작업동일OCR·문서 강함
DINOv2(2023)자기지도(SSL)768/1024/1536텍스트 비의존, 강한 특징
DINOv3(2025)자기지도, 더 큼동일DINOv2 후속

언제 어떤 임베딩을 쓰느냐.

  • 텍스트로 이미지 검색 -> CLIP / SigLIP 2
  • 이미지로 이미지 검색 -> DINOv3
  • 다운스트림 분류 헤드 학습 -> DINOv3
  • OCR·문서 작업 -> SigLIP 2
from transformers import AutoModel, AutoProcessor
import torch

model = AutoModel.from_pretrained('facebook/dinov3-vitl-pretrain-lvd1689m')
processor = AutoProcessor.from_pretrained('facebook/dinov3-vitl-pretrain-lvd1689m')

inputs = processor(images=image, return_tensors='pt')
with torch.no_grad():
    outputs = model(**inputs)

embedding = outputs.last_hidden_state.mean(dim=1)  # (1, 1024)

19장 - 어노테이션 도구 - CVAT, Label Studio, Roboflow, VIA

라벨링 도구는 2026년 한 가지 공통점을 공유한다 - AI-assist가 기본이다. SAM·Grounding DINO·YOLO가 도구 안에서 직접 호출된다.

도구라이선스강점
CVATMIT, 오픈소스가장 넓은 형식 지원, 비디오 강함
Label StudioApache 2.0NLP/오디오/이미지 통합, ML 백엔드
Roboflow Annotate상용 SaaSSAM/Grounding DINO 통합, 협업
VIABSD, 오픈소스가볍고 단일 HTML 파일

팀 단위 작업이라면 Roboflow나 CVAT, 모델 통합이 중요하면 Label Studio, 5분 안에 시작해야 하면 VIA.


20장 - 추론 런타임 - ONNX Runtime, TensorRT, OpenVINO

학습된 모델을 빠르게 실행하는 것이 추론 런타임의 일이다. 2026년의 선택지.

런타임타겟강점
ONNX Runtime크로스 플랫폼CPU/GPU/NPU 모두, 가장 표준
TensorRTNVIDIA GPU최고 속도, INT8/FP8 양자화
OpenVINOIntel CPU/iGPU/NPUx86 PC 최강
CoreMLApple SiliconiOS/macOS, ANE 활용
TFLite모바일 (Android)XNNPACK, Hexagon
NCNN모바일/임베디드Tencent, ARM 최적화
MNN모바일/임베디드Alibaba, OpenCL 강함

YOLO 한 줄로 모두 내보낼 수 있다.

from ultralytics import YOLO
model = YOLO('yolo11n.pt')

model.export(format='onnx', dynamic=True, simplify=True)
model.export(format='engine', half=True)        # TensorRT FP16
model.export(format='openvino', int8=True)      # OpenVINO INT8
model.export(format='coreml', nms=True)         # CoreML
model.export(format='tflite', int8=True)        # TFLite INT8
model.export(format='ncnn')                     # NCNN

선택 규칙. NVIDIA GPU 서버 -> TensorRT. Intel PC -> OpenVINO. iOS/macOS -> CoreML. Android -> TFLite. 잘 모르겠으면 -> ONNX Runtime.


21장 - 모바일 비전 - ML Kit, Vision Framework, MNN

모바일 앱에서 비전을 쓴다면 네이티브 프레임워크가 가장 안전하다.

Google ML Kit (Android/iOS) - 얼굴·바코드·텍스트·랜드마크·번역·자세를 모두 제공. 디바이스 온디바이스/서버 옵션.

Apple Vision Framework (iOS/macOS) - VNDetectFaceRectangles·VNDetectHumanBodyPoseRequest 등 100개 이상의 비전 요청. 2024년 추가된 VNGenerateForegroundInstanceMaskRequest는 모바일 SAM이다.

MNN (Alibaba) - 중국 모바일 생태계의 사실상 표준. 알리바바·핀둬둬·바이트댄스 앱에 들어가 있다.

// Swift / Apple Vision
import Vision

let request = VNDetectHumanBodyPoseRequest { request, error in
    guard let obs = request.results as? [VNHumanBodyPoseObservation] else { return }
    for observation in obs {
        let points = try? observation.recognizedPoints(.all)
        // points에 키포인트가 들어 있음
    }
}
let handler = VNImageRequestHandler(cgImage: cgImage)
try? handler.perform([request])

규칙. 단순한 ML 기능(얼굴·텍스트·바코드)은 네이티브 -> 빠르고 무료. 커스텀 모델은 CoreML(iOS) / TFLite(Android) -> 자기 모델 배포.


22장 - 한국 비전 생태계

한국의 컴퓨터 비전 기여는 학계와 산업 양쪽에서 굵직하다.

Naver Labs Europe - DUSt3R·MASt3R·CroCo의 그르노블 팀. 3D 비전에서 세계 최전선.

KAIST CVLab - 박은병·권인소·노용만 교수 그룹. CVPR·ICCV 정기 발표.

Lunit - 의료 영상 AI. 흉부 X선·맘모그래피·디지털 병리에서 FDA·CE 승인을 다수 획득. INSIGHT CXR·MMG·BCC가 주력.

Seerslab - AR/VR/비전. Naver Z의 자회사로 ZEPETO·SNOW의 얼굴 인식·필터 엔진 담당.

VUNO - 의료 영상 AI. DeepASR·DeepCT·DeepBrain.

MakinaRocks - 산업 비전 이상탐지. 반도체·디스플레이 검사.

Riiid / Trinity / Innospace - 교육·국방 영역.

한국 학계의 강점은 얼굴·OCR·자율주행·의료 영상에 집중되어 있다. CVPR 발표 수에서 한국은 세계 4~5위권이다.


23장 - 일본 비전 생태계

Preferred Networks(PFN) - 일본 최대 AI 회사. 자체 비전 라이브러리 PFN-Vision, 화학·소재·로보틱스 비전.

ABEJA - 도쿄 기반 비전 SaaS. 소매·제조 분야의 점포 분석.

Recruit Holdings - 잡스루·인디드 등 자회사 통해 비전 채용 시스템.

ALBERT(현 Accenture 일본) - 산업 AI/비전 컨설팅.

Nikon AI - 의료 영상·산업 검사. 카메라 회사가 비전 AI로 확장.

LeapMind - 양자화 추론 엔진 Blueoil로 임베디드 비전 강세.

SoftBank Robotics - Pepper·NAO의 비전 시스템.

Fast Retailing(UNIQLO) - 자체 비전 라이브러리로 매장 카메라 분석.

일본 학계는 OCR·문서 비전·로보틱스 비전에 강하다. 도쿄대 IIS·京大·名大·東工大가 정기적으로 CVPR 발표를 낸다.


24장 - 2026년 컴퓨터 비전 엔지니어의 자세

지금까지 정리한 24장의 결론을 한 페이지로 줄이면 이렇다.

(1) 학습은 가급적 피하라. 사전 학습 모델·오픈 보캐브·VLM의 조합으로 80%는 끝난다. 데이터 1만 장을 모으는 시간보다 Grounding DINO 프롬프트를 다듬는 시간이 짧다.

(2) 파이프라인을 설계하라, 모델을 학습하지 말라. 2026년의 일은 "어떤 모델을 어떤 순서로 부를 것인가"이지, "어떤 손실 함수로 학습할 것인가"가 아니다.

(3) VLM과 전통 모델을 분업시켜라. VLM에 "무엇을 찾을지" 묻고, 전통 모델에 "어디에 있는지" 묻는다. 이게 2026년 비전 시스템의 표준 형태다.

(4) 추론 런타임을 가볍게 보지 말라. PyTorch에서 30 FPS가 나오는 모델이 TensorRT에서 200 FPS가 나온다. 6배 차이는 사용자 경험에서 다른 제품이다.

(5) 라이선스를 챙겨라. YOLO 계열은 AGPL이다. 회사 제품에 그대로 넣으면 코드 공개 의무가 생긴다. RT-DETR·D-FINE·MMDetection을 대안으로 알아둬라.

(6) "픽셀의 일"은 OpenCV에 맡겨라. 색공간·리사이즈·디코딩·인코딩은 여전히 OpenCV가 가장 빠르고 안정적이다.

(7) 데이터셋보다 라벨링 도구가 먼저다. SAM 2 통합된 CVAT/Roboflow로 시작하라. 손으로 박스를 그리는 시대는 끝났다.

비전 엔지니어의 미래는 **"모델을 만드는 사람"이 아니라 "모델을 묶는 사람"**이다. 도구는 많다. 줄을 잘 서야 한다.


References