Real-time Inference
실시간 추론은 다음 입력이 도착하기 전에 각 예측을 반환합니다. 예를 들어 30 FPS에서는 프레임당 33ms 이내로 처리합니다. 지연 시간 예산과 속도 향상 방법을 다룹니다.
실시간 추론은 학습된 모델을 라이브 입력에 적용하고 다음 입력이 도착하기 전에 각 예측 결과를 반환하여, 정보가 아직 유효할 때 시스템이 동작할 수 있도록 하는 것입니다. 초당 30프레임(FPS)으로 스트리밍하는 카메라는 이미지 읽기부터 최종 결과 생성까지 프레임당 33.3밀리초를 사용할 수 있으며, 60 FPS에서는 허용 시간이 16.7 ms로 줄어듭니다. 애플리케이션마다 차량 인식 시스템, 컨베이어 벨트 검사 카메라, 영상 통화 배경 필터처럼 각기 다른 시간 예산으로 실시간 처리해야 합니다.
지연 시간 예산#
중요한 것은 프레임 캡처, 크기 조정과 정규화를 포함한 전처리, 모델의 순전파, 박스 디코딩과 비최대 억제(NMS) 등의 후처리를 모두 포함하는 종단 간 추론 지연 시간입니다. 총 처리 시간이 프레임 간격을 초과하면 처리되지 않은 프레임이 쌓이고 출력이 라이브 장면보다 점점 뒤처지므로, 라이브 파이프라인은 보통 오래된 프레임을 버리고 항상 최신 프레임을 처리합니다. 실시간 컴퓨팅에서는 마감 시간 미준수가 실패로 간주되는 에어백 컨트롤러와 같은 하드 실시간 시스템과 간헐적인 마감 시간 미준수를 허용하는 소프트 실시간 시스템을 구분합니다. 대부분의 컴퓨터 비전 애플리케이션은 소프트 실시간입니다. 프레임이 하나 누락되면 출력 품질이 잠시 낮아지지만 다음 프레임에서 회복됩니다.
이 코드 조각은 소형 탐지기로 녹화된 동영상을 스트리밍하고 프레임당 평균 처리 시간을 30 FPS 예산과 비교합니다:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
video = "https://github.com/ultralytics/assets/releases/download/v0.0.0/decelera_portrait_min.mov"
# stream=True yields each frame's result as soon as it is ready
frame_times = []
for result in model(video, stream=True):
# Preprocess, inference, and postprocess time for this frame, in milliseconds
frame_times.append(sum(result.speed.values()))
mean_ms = sum(frame_times) / len(frame_times)
print(f"{mean_ms:.1f} ms per frame ({1000 / mean_ms:.0f} FPS); a 30 FPS camera allows 33.3 ms")평균이 33.3 ms 미만이면 실행에 사용한 하드웨어에서 모델이 30 FPS 카메라의 처리 속도를 따라갈 수 있다는 뜻입니다.
실시간 추론과 배치 추론 비교#
- 실시간(온라인) 추론: 각 입력이 도착하는 즉시, 일반적으로 이미지 한 장씩 처리하며, 각 예측의 지연 시간을 기준으로 평가합니다. 운전자 보조, 로봇 제어, 라이브 비디오 분석에 필요합니다.
- 배치(오프라인) 추론: 다수의 입력을 모아 함께 처리하며, 초당 입력 수로 나타내는 처리량과 비용을 기준으로 평가합니다. 사진 아카이브를 밤새 다시 인덱싱하거나 지난달 영상을 분석하는 작업은 배치 작업이며, 배치 크기가 커지면 GPU 활용률이 높아지는 대신 각 입력은 결과를 더 오래 기다립니다.
여러 카메라 스트림을 처리하는 서버는 두 방식의 중간에 있는 경우가 많습니다. 처리량을 높이기 위해 서로 다른 카메라의 프레임을 작은 배치로 묶으면서도 각 스트림의 프레임 시간 예산을 지킵니다.
실제 적용 사례#
- 자율주행 차량: 시속 100 km로 달리는 차량은 100 ms마다 2.8미터를 이동하므로 인식 지연 시간이 정지 거리에 직접 영향을 줍니다.
- 제조 검사: 컨베이어 위의 카메라는 모든 부품의 결함을 탐지하고, 결함 부품이 지나가기 전에 불량품 배출 장치를 작동시켜야 합니다.
- 로보틱스: 장애물 탐지와 자세 추정은 로봇의 제어 루프 안에서 실행되며, 인식 속도가 느려지면 로봇의 이동도 느려집니다.
- 비디오 효과 및 증강 현실: 영상 통화의 배경 흐림과 AR 오버레이는 모든 프레임에서 세그멘테이션이나 추적을 실행하며, 지연이 발생하면 오버레이가 움직이는 사람을 뒤따라가는 것처럼 보입니다.
모델을 충분히 빠르게 만드는 방법#
- 더 작은 모델 또는 입력 크기: 더 작은 모델 변형은 이미지당 연산 수가 적습니다. 합성곱 연산량은 대략 픽셀 수에 비례하므로 입력 너비와 높이를 절반으로 줄이면 연산량은 약 4분의 1로 감소하지만, 작은 객체에 대한 정확도는 일부 낮아질 수 있습니다.
- 모델 양자화: 가중치와 활성화를 FP32 대신 FP16 또는 INT8로 저장하면 메모리 트래픽이 줄고 더 빠른 연산 장치를 사용할 수 있습니다. INT8은 정확도 손실을 줄이기 위해 보통 보정 이미지 집합이 필요합니다.
- 추론 엔진: 특정 하드웨어 제품군에 맞게 설계된 런타임은 레이어를 융합하고 장치에 최적화된 커널을 선택합니다. 예를 들어 NVIDIA GPU용 TensorRT나 Apple 장치용 Core ML이 있습니다.
- 엣지 AI: 카메라나 임베디드 모듈에서 모델을 실행하면 클라우드 호출에 필요한 네트워크 왕복 시간이 사라집니다. 연결 속도가 느리면 이 시간이 전체 프레임 예산을 초과할 수 있습니다.
런타임과 하드웨어에 따라 지연 시간이 10배 이상 달라집니다. 나노 YOLO26 모델은 CPU에서 ONNX를 사용하면 640픽셀 이미지당 38.9ms, TensorRT를 사용하는 NVIDIA T4 GPU에서는 1.7ms가 걸립니다. Ultralytics 내보내기 모드는 학습된 YOLO26 모델을 TensorRT, OpenVINO, LiteRT 및 기타 형식으로 변환하며, quantize=16 또는 quantize=8 인수는 대상 장치용 FP16 또는 INT8 가중치를 생성합니다.










