Object Detection: 개념, 알고리즘 및 작동 방식

저자: IT Sectr 게시일: 2026-07-19 읽는 시간: 9 분

Object Detection은 객체의 클래스(고양이, 자동차, 사람)와 이미지 내 위치를 직사각형 경계 상자(bounding box) 형태로 동시에 결정하는 컴퓨터 비전 작업입니다. Image Labeling과 달리 Object Detection은 단일 프레임에서 여러 클래스의 여러 객체를 찾고 해당 좌표를 표시합니다. 모바일 개발에서 Object Detection은 비디오 감시 시스템, AR 애플리케이션, 자율 드론, 의료 영상 및 소매 분석에 사용됩니다. Google ML Kit, 2025에 따르면 온디바이스 Object Detection은 플래그십 디바이스에서 87% mAP 정확도로 30 FPS를 달성합니다.

핵심 요약

  • Object Detection — 객체 분류 + 위치 파악(bounding box)
  • ML Kit Object Detection — 최대 30 FPS, 87% mAP, 카테고리: fashion, food, home, places
  • YOLOv8-Nano — 2.6M 파라미터, 42% mAP COCO, 10–30 ms 지연 시간
  • SSD MobileNetV2 — 22% mAP COCO, 15–40 ms, 최대 속도
  • On-device real-time — 모든 계산을 로컬에서 수행, 서버로 비디오 전송 불필요

Object Detection이란: 작동 원리

Object Detection은 두 가지 작업을 동시에 해결합니다: 이미지에 무엇이 있는지(분류)와 어디에 있는지(좌표 회귀). 모델은 이미지를 그리드로 나누고 각 셀에 대해 경계 상자(x, y, 너비, 높이)와 클래스 확률을 예측합니다. Non-Maximum Suppression(NMS)은 단일 객체에 대한 중복 상자를 제거하고 가장 신뢰도 높은 예측을 유지합니다. 최신 아키텍처는 2단계(Faster R-CNN — 먼저 영역 제안, 그 다음 분류)와 1단계(YOLO, SSD — 한 번에 모두)로 나뉩니다.

평가 지표: mAP(mean Average Precision) — Object Detection의 주요 품질 지표. mAP@0.5 — IoU 임계값 0.5에서의 정확도, mAP@0.5:0.95 — 0.5에서 0.95까지 임계값의 평균. FPS — 초당 프레임 수(추론 속도). 모바일 애플리케이션의 경우 mAP/FPS 균형이 중요합니다: YOLOv8-Nano는 50+ FPS에서 42% mAP@0.5:0.95를 제공하고, SSD MobileNet은 60+ FPS에서 22% mAP를 제공합니다. 실시간에는 > 20 FPS, 대화형 사용에는 5–15 FPS가 필요합니다.

IoU(Intersection over Union) — 예측된 경계 상자와 실제 경계 상자 간의 중첩을 측정하는 지표. IoU = 교차 영역 / 합집합 영역. NMS의 IoU 임계값은 일반적으로 0.5–0.7입니다. 프레임 간 객체 추적(재식별)에는 IoU 매칭과 함께 Deep SORT 또는 ByteTrack을 사용하십시오. 비디오 내 객체 카운팅에는 BoT-SORT가 85% MOTA(Multiple Object Tracking Accuracy)를 제공합니다.

아키텍처mAP@0.5:0.95지연 시간파라미터크기
YOLOv8-Nano42%10–30 ms2.6M5.9 MB
YOLOv8-Small50%25–60 ms11.2M22 MB
SSD MobileNetV222%15–40 ms5.2M21 MB
EfficientDet-Lite035%20–50 ms3.9M15 MB

Anchor Boxes — 모델이 조정하는 미리 정의된 경계 상자 모양입니다. YOLOv8은 앵커 프리 검출(anchor-free)을 사용하여 학습을 단순화하고 추론을 가속화합니다. SSD 및 이전 YOLO는 데이터세트마다 앵커 조정이 필요합니다. 모바일 개발의 경우 앵커 프리 아키텍처(YOLOv8, FCOS)가 선호됩니다 — 객체 크기에 의존하지 않고 사용자 지정이 더 쉽습니다.

ML Kit Object Detection 및 추적

ML Kit Object Detection and Tracking — 디바이스에서 객체 탐지 및 추적을 위한 Google의 라이브러리입니다. 두 가지 모드를 지원합니다: 단일 이미지 감지기(사진용) 및 스트리밍 감지기(비디오용). 스트리밍 모드는 광학 흐름을 사용하여 프레임 간에 자동으로 객체를 추적하며, 초기 감지 후 프레임 간 지연 시간을 5–10 ms로 줄입니다. 카테고리: fashion, food, home, places — 각각 10–20개 클래스.

ML Kit API: ObjectDetector(옵션: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject(trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId를 사용하면 프레임 간에 동일한 객체를 추적할 수 있습니다. MultipleObjects = true — 프레임당 최대 5개 객체 감지. Classification — 객체 카테고리 인식 활성화(속도를 위해 기본값 false). 스트리밍 모드는 실시간에 권장: Pixel 6에서 20–30 FPS.

kotlin
val options = ObjectDetectorOptions.Builder()
    .setDetectorMode(ObjectDetectorOptions.STREAM_MODE)
    .enableClassification()
    .enableMultipleObjects()
    .build()

val detector = ObjectDetection.getClient(options)

detector.process(inputImage)
    .addOnSuccessListener { objects ->
        objects.forEach { obj ->
            val box = obj.boundingBox
            val trackingId = obj.trackingId
            val category = obj.classificationCategory()
            drawBoundingBox(box, trackingId, category)
        }
    }

Object Tracking: 첫 번째 프레임에서 객체를 감지한 후 ML Kit는 재감지 없이 비디오 스트림을 통해 객체를 추적합니다(광학 흐름 + 특징 추적 기반). 이는 CPU/GPU 부하를 줄입니다: 초기 감지 30–60 ms, 후속 추적 프레임 2–5 ms. 객체가 프레임을 벗어나거나 > 30° 회전하면 추적기가 재설정되고 재감지가 필요합니다. TrackingId는 객체가 프레임에 있는 동안 유지됩니다. 고유 객체를 계산하려면 trackingId를 식별자로 사용하십시오.

YOLO: 모바일 디바이스에서의 You Only Look Once

YOLOv8-Nano — 엣지 디바이스용 YOLOv8(Ultralytics)의 가장 작은 버전. 2.6M 파라미터, 5.9 MB(FP16), COCO에서 42% mAP@0.5:0.95. YOLOv8은 앵커 프리 감지 + C2f 백본 + TaskAlignedAssigner를 사용합니다. 모바일 개발을 위해 TFLite(INT8 — 2.0 MB, 지연 시간 8–20 ms) 및 Core ML(4.5 MB, iPhone 15 Pro에서 지연 시간 5–15 ms)로 내보낼 수 있습니다. YOLOv8-Nano는 온디바이스 실시간 Object Detection에 가장 적합한 선택입니다.

YOLOv8을 TFLite로 내보내기: Ultralytics는 CLI를 제공: yolo export model=yolov8n.pt format=tflite int8. 출력은 NNAPI를 통해 GPU Delegate에 최적화된 TFLite INT8 모델입니다. 사용자 지정 데이터세트(자체 클래스, COCO 아님)의 경우 — Ultralytics HUB를 통해 클래스당 50–500개 이미지로 학습. RT-DETR(Real-Time Detection Transformer) — Transformer 아키텍처 기반 대안, NVIDIA Jetson에서 60 FPS, 48% mAP를 제공하지만 모바일 디바이스에서는 속도 면에서 YOLOv8-Nano에 뒤쳐집니다.

python
# YOLOv8 export to TFLite
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)

# Inference with TFLite on Android
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)

모바일 디바이스에서의 YOLO vs ML Kit: ML Kit Object Detection은 통합이 더 쉽고(코드 10줄), ML 전문 지식이 필요 없지만 표준 클래스(fashion, food, home, places)로 제한됩니다. YOLOv8-Nano는 사용자 지정 내보내기가 필요하지만 완전한 제어를 제공: 모든 클래스, 입력 크기, 아키텍처. 빠른 프로토타이핑에는 ML Kit. 비표준 객체가 있는 프로덕션에는 YOLOv8-Nano. iOS의 경우: Ultralytics의 모델 내보내기 + VNCoreMLRequest를 통한 YOLOv8-Core ML.

SSD 및 기타 온디바이스 아키텍처

SSD(Single Shot Multibox Detector) — 모바일 디바이스를 위한 고전적인 1단계 아키텍처. SSD MobileNetV2 — 2020–2023년의 사실상 표준: COCO에서 22% mAP@0.5:0.95, Pixel 6에서 15–40 ms. SSD는 특징 피라미드(다양한 크기의 객체를 감지하기 위한 다양한 MobileNet 레이어)와 각 특징 맵 셀에 대한 기본 상자(앵커 상자)를 사용합니다. 장점: 당시로서는 최대 속도. 단점: 작은 객체(10–30 px)에서 낮은 정확도.

EfficientDet-Lite — Google(2020+)의 제품군으로 TFLite에 최적화됨. EfficientDet-Lite0: 3.9M 파라미터, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. EfficientDet는 다중 스케일 특징 융합을 위해 BiFPN(Bidirectional Feature Pyramid Network)을 사용 — 지연 시간 증가 없이 2–4% mAP 향상을 제공합니다. 모바일 개발을 위해 Google은 TFLite Task Vision의 기본 감지기로 EfficientDet-Lite를 권장합니다.

MediaPipe Object Detector — MediaPipe Tasks Vision의 일부로 EfficientDet-Lite 기반의 즉시 사용 가능한 구현. Android, iOS, Python, Web을 위한 통합 API를 제공합니다. MediaPipe Object Detector는 COCO 클래스(80개 클래스), 사용자 지정 모델, 스트리밍 모드 및 CPU/GPU 델리게이트를 지원합니다. 크로스 플랫폼 프로젝트에 Object Detection을 빠르게 통합하려면 MediaPipe가 최적의 선택: 모든 플랫폼에 하나의 코드.

kotlin
// MediaPipe Object Detection
val options = ObjectDetectorOptions.Builder()
    .setBaseOptions(BaseOptions.builder()
        .setDelegate(BaseOptions.Delegate.GPU)
        .build())
    .setMaxResults(5)
    .setScoreThreshold(0.5f)
    .build()

val detector = ObjectDetector.createFromOptions(context, options)

val image = MPImage.fromBitmap(bitmap)
val result = detector.detect(image)
result.detections.forEach { detection ->
    val box = detection.boundingBox
    val category = detection.categories.first()
}

모바일 애플리케이션을 위한 아키텍처 선택: 중간급 디바이스에서 > 30 FPS — YOLOv8-Nano(INT8) 또는 SSD MobileNetV2. > 40% mAP 정확도 — YOLOv8-Small(11.2M) 또는 EfficientDet-Lite2(8.1M). 크로스 플랫폼 — MediaPipe Object Detector. 단순성 — ML Kit. iOS 우선 — Core ML + YOLOv8 .mlpackage. Android 우선 — TFLite Task Vision(ObjectDetector API). 학습: Roboflow(데이터세트) + Ultralytics YOLOv8(학습) + TFLite/Core ML로 내보내기.

TensorFlow Lite Task Vision API

TFLite Task Vision ObjectDetector — Android 및 iOS에서 Object Detection 모델을 실행하기 위한 Google의 통합 API. Task API는 이미지 전처리(크기 조정, 정규화, 색 공간 변환) 및 후처리(NMS, 임계값 처리)를 자동으로 처리합니다. 개발자는 .tflite 모델만 전달하고 bounding box + 카테고리 + 점수가 포함된 Detections 목록을 받으면 됩니다. Task API는 COCO 호환 모델(80개 클래스)을 지원합니다.

사용자 지정 모델을 Task API로 변환: TFLite 모델은 입력[1, height, width, 3](float32/uint8)과 출력: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1]이 있어야 합니다. 후처리 ops(SSD Postprocess)가 포함된 TensorFlow Object Detection API에서 내보내기. YOLOv8의 경우 — ops-compat을 통해 NMS가 포함된 TFLite 내보내기. iOS의 Task API는 ANE에서 가속을 위해 Core ML Delegate를 사용합니다.

kotlin
// TFLite Task Vision Object Detector
val options = ObjectDetectorOptions.Builder()
    .setScoreThreshold(0.5f)
    .setMaxResults(10)
    .setDelegate(Delegate.GPU)
    .build()

val detector = ObjectDetector.createFromFileAndOptions(
    context, "custom_model.tflite", options
)

val image = TensorImage.fromBitmap(bitmap)
val results = detector.detect(image)
results.forEach { detection ->
    onObjectDetected(
        detection.boundingBox,
        detection.categories.first().label,
        detection.categories.first().score
    )
}

Task API 성능: Android의 GPU Delegate는 CPU(XNNPACK) 대비 3–5배 가속을 제공. NPU가 있는 디바이스(Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300)의 NNAPI Delegate — 추가 1.5–2배. Hexagon, DSP — DSP 가속기에서 최대 10배. iOS의 경우 Core ML Delegate — CPU 대비 4–6배. Task API는 사용 가능한 하드웨어 가속기를 자동으로 선택하지만 DetectorOptions를 통해 델리게이트를 강제 지정할 수 있습니다.

모바일 애플리케이션에서의 Object Detection 활용

사람 및 객체 계수 — 소매 분석: 매장 방문자 감지, 대기열 계수, 선반 재고 수준 결정. 프레임 내 Object Detection 인원 계수기는 보행자 통행량과 전환율을 추정하는 데 도움이 됩니다. ML Kit Object Detector는 최대 30 FPS 제공 — 실시간 계수에 충분. 영역 교차의 경우 Object Detection + ByteTrack 추적 조합. 계수 정확도: 양호한 조명 조건에서 92–95%.

제조 결함 감지 — Object Detection이 컨베이어의 결함(흠집, 칩, 균열, 잘못된 조립)을 식별합니다. 사용자 지정 YOLOv8-Nano(INT8) 모델이 USB 카메라에 연결된 Android 태블릿에서 실행됩니다. 지연 시간: 프레임당 20–40 ms(25–50 FPS). 복잡한 결함(미세 균열)의 경우 입력 해상도를 640x640으로 높이십시오(지연 시간 40–80 ms). 학습: Roboflow — 200–1000개 결함 이미지 데이터세트 + Ultralytics YOLOv8.

실시간 AR 객체 마킹 — ARCore(Android) 및 ARKit(iOS)은 Object Detection을 사용하여 평평한 표면, 수직 평면 및 3D 객체를 인식합니다. ML Kit Object Detection + ARCore Scene Semantics는 객체 세분화를 제공: 벽, 바닥, 천장, 가구. 사용자 지정 AR 마킹(예: 특정 소파 모델 인식 및 AR 정보 오버레이)의 경우 — YOLOv8-Nano + SceneKit/SceneForm. 실시간 요구 사항: > 20 FPS.

swift
// ARKit + Object Detection
let request = VNCoreMLRequest(model: objectDetector) { req, _ in
    guard let results = req.results as? [VNDetectedObjectObservation] else { return }
    for result in results where result.confidence > 0.6 {
        let rect = result.boundingBox
        let worldPos = arView.hitTest(rect.center)
        arView.addAnchor(ARAnchor(name: label, transform: worldPos))
    }
}

의료 영상 — X-ray, MRI, CT 스캔 분석을 위한 Object Detection. 의사의 모바일 디바이스에서 종양, 골절, 병변 감지. Android 태블릿의 YOLOv8-Nano는 15–30 ms 내에 폐 결절을 감지하며 민감도 89%, 특이도 93%를 달성(NIH ChestX-ray14 데이터). 요구 사항: INT8 양자화(데이터 프라이버시), 높은 재현율(병변 누락이 오탐보다 위험), 신뢰도 임계값 < 0.4. 온디바이스 처리는 의료 데이터 프라이버시를 보장합니다.

자주 묻는 질문

Object Detection과 Image Segmentation의 차이점은 무엇인가요?

Object Detection은 각 객체에 대한 경계 상자를 반환합니다 — 객체를 둘러싸는 직사각형 프레임. Image Segmentation(의미론적 또는 인스턴스)은 객체의 정확한 윤곽선을 반환합니다 — 픽셀 수준 마스크. 세분화가 더 정확하지만 더 느립니다(감지의 10–30 ms 대비 50–300 ms). 객체 형태가 중요한 작업(의료, AR)에서는 세분화를 사용하십시오. 위치와 존재가 중요한 작업(계수, 검토)에서는 감지를 사용하십시오. MobileViT는 두 작업을 모두 해결하는 아키텍처입니다.

모바일 디바이스에서 Object Detection은 몇 개의 클래스를 인식할 수 있나요?

YOLOv8-Nano는 COCO(80개 클래스)로 학습됩니다. ML Kit Object Detection — 40+ 클래스(fashion, food, home, places). 사용자 지정 모델은 성능 저하 없이 모바일 디바이스에서 최대 100개 클래스까지 감지할 수 있습니다. 100개 클래스를 초과하면 지연 시간이 증가하고 mAP가 떨어집니다. 1000+ 클래스 애플리케이션의 경우 계층적 분류를 사용: 먼저 광범위한 카테고리(10개 클래스), 그 다음 세부(100개 하위 클래스). EfficientNet + YOLO — 50 ms 미만 지연 시간으로 1000+ 클래스를 처리하는 계층적 접근 방식.

Object Detection을 프레임 간 객체 추적에 사용할 수 있나요?

예, ML Kit Object Detection에는 내장 추적이 포함됩니다: 첫 번째 프레임에서 감지 후 재감지 없이 비디오 스트림을 통해 객체가 추적됩니다. 더 복잡한 추적(객체 교차, 프레임 이탈)의 경우 ByteTrack 또는 BoT-SORT를 사용하십시오. ByteTrack은 인접 프레임의 경계 상자 간 IoU(intersection over union)를 기반으로 작동 — MOT17에서 85% MOTA. BoT-SORT는 추가로 재식별(ReID)을 사용하여 손실된 객체를 복구 — 90% MOTA.

iOS에 YOLOv8을 배포하려면 어떻게 해야 하나요?

YOLOv8을 Core ML로 내보내기: yolo export model=yolov8n.pt format=coreml int8. 결과 .mlpackage는 VNCoreMLRequest(Vision Framework)를 통해 통합됩니다. 대안: YOLOv8 → TFLite → Core ML Delegate(iOS TFLite API). Ultralytics YOLOv8 Core ML 내보내기는 iOS 16+, ANE 가속, FP16 및 INT8 양자화를 지원합니다. 스트리밍의 경우 반복 VNImageRequestHandler 성능 요청과 함께 AVFoundation + Vision을 사용하십시오. 실시간: iPhone 14 Pro에서 20–30 FPS.

모바일 디바이스에서 Object Detection 정확도를 어떻게 개선할 수 있나요?

데이터세트 다양성 증가(각도, 조명, 배경) — 클래스당 500+ 이미지. 데이터 증강 사용: mosaic, mixup, random perspective(Ultralytics YOLOv8 증강 — 2–5% mAP 향상). 입력 크기를 640x640으로 증가(320x320 대신) — +4–8% mAP, 하지만 지연 시간 ×2. 학습 후 FP16 또는 INT8 양자화 사용 — +0–1% mAP 손실, 4배 압축. iOS의 경우 Core ML Delegate를 통해 ANE(Neural Engine) 사용 — CPU 대비 3–5배 가속.

요약

  • Object Detection — 경계 상자를 통한 객체 분류 + 위치 파악
  • ML Kit — 최대 30 FPS, 40+ 클래스, 내장 객체 추적
  • YOLOv8-Nano — 2.6M 파라미터, 42% mAP, 10–30 ms, 온디바이스에 최적
  • SSD / EfficientDet — TFLite를 위한 고전적 및 현대적 대안
  • Task Vision API — GPU/ANE 가속을 지원하는 통합 TFLite API
  • On-device — 데이터 프라이버시, 제로 지연 시간, 인터넷 불필요
  • 응용 분야 — 소매 분석, AR, 의료, 결함 감지, 객체 계수

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기