피드로 돌아가기
Dev.toAI/ML
원문 읽기
NMS 제거를 통한 YOLO26의 iPhone 30+ FPS 실시간 탐지 구현
Real-time object detection on iPhone with YOLO26
AI 요약
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 비율 보정 로직 구현