피드로 돌아가기
Real-time object detection on iPhone with YOLO26
Dev.toDev.to
AI/ML

NMS 제거를 통한 YOLO26의 iPhone 30+ FPS 실시간 탐지 구현

Real-time object detection on iPhone with YOLO26

Daisuke Majima2026년 6월 2일6intermediate

Context

기존 YOLO 모델은 추론 후 중복 박스 제거를 위한 Non-Maximum Suppression(NMS) 후처리 과정이 필수적이었음. 이로 인해 CoreML 변환 시 복잡한 파이프라인 구성이 필요했으며, CPU 추론 시 성능 병목이 발생하는 한계가 존재함.

Technical Solution

  • Dual Assignment 기법 적용으로 모델 내부에서 중복 제거를 수행하는 End-to-End 추론 구조 설계
  • NMS 단계를 완전히 제거하여 [1, 300, 6] 형태의 정제된 텐서(x1, y1, x2, y2, confidence, class_id)를 직접 출력
  • CoreML 변환 시 nms=False 설정을 통한 단순 모델 구조 확보 및 파이프라인 오류 원천 차단
  • CAShapeLayer 기반의 렌더링 구조와 CATransaction.setDisableActions(true) 설정을 통한 프레임 지연 및 뷰 재생성 오버헤드 해결
  • computeUnits = .all 설정을 통해 Neural Engine, GPU, CPU 자원을 최적으로 활용하는 런타임 구성

Impact

  • CPU 추론 속도 기존 YOLO11 대비 최대 43% 향상
  • Neural Engine 활용 시 30+ FPS 이상의 실시간 추론 성능 달성
  • YOLO26n 모델 기준 파라미터 수 2.5M, 추론 시간 38.9ms 기록

Key Takeaway

후처리 로직을 모델 아키텍처 내부로 내재화함으로써 엣지 디바이스의 추론 파이프라인을 단순화하고 지연 시간을 획기적으로 단축함.


- coremltools

9.0의 _cast 버그 회피를 위해

8.1 버전 및 numpy

2.x 미만 버전 사용 권장 - 실시간 렌더링 시 SwiftUI ForEach 대신 CAShapeLayer 풀링 및 재사용 구조 적용 - 카메라 출력 orientation과 VNImageRequestHandler의 방향 일치 여부 확인 및 Aspect Fill 비율 보정 로직 구현

원문 읽기