Real-time Inference
Инференс в реальном времени возвращает каждое предсказание до поступления следующего входного сигнала, например в течение 33 мс на кадр при 30 FPS. Рассматриваются бюджеты задержки и способы ускорения.
Инференс в реальном времени означает запуск обученной модели на поступающих данных и возврат каждого предсказания до появления следующего входного значения, чтобы система могла действовать, пока информация ещё актуальна. При потоковой передаче с камеры со скоростью 30 кадров в секунду (FPS) на всё — от чтения изображения до получения итогового результата — остаётся 33.3 миллисекунды на кадр; при 60 FPS бюджет сокращается до 16.7 мс. Для каждого приложения установлен свой срок: система восприятия автомобиля, камера контроля на конвейере и фильтр фона во время видеозвонка работают в реальном времени, но с разными временными бюджетами.
Бюджет задержки#
Учитывается сквозная задержка инференса: захват кадра, его предварительная обработка — изменение размера и нормализация, прямой проход модели и постобработка, например декодирование рамок и подавление немаксимумов (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 мс означает, что модель успевает обрабатывать видео с камеры со скоростью 30 FPS на оборудовании, на котором она была запущена.
Инференс в реальном времени и пакетный инференс#
- Инференс в реальном времени (онлайн-инференс): обрабатывает каждый входной сигнал по мере поступления, обычно по одному изображению за раз; его оценивают по задержке каждого отдельного предсказания. От него зависят системы помощи водителю, управление роботами и аналитика видео в реальном времени.
- Пакетный инференс (офлайн-инференс): собирает множество входных данных и обрабатывает их вместе; его оценивают по пропускной способности в количестве входных данных в секунду и по стоимости. Ночная переиндексация фотоархива и анализ записей за прошлый месяц — это пакетные задачи. Большие пакеты эффективнее загружают GPU, но обработка каждого входного сигнала занимает больше времени.
Серверы, обрабатывающие потоки со множества камер, часто используют промежуточный вариант: группируют кадры с разных камер в небольшие пакеты, чтобы увеличить пропускную способность и уложиться во временной бюджет каждого потока.
Примеры применения в реальных условиях#
- Автономные транспортные средства: при скорости 100 км/ч автомобиль проходит 2.8 метра за каждые 100 мс, поэтому задержка восприятия напрямую увеличивает тормозной путь.
- Контроль качества на производстве: установленные над конвейером камеры обнаруживают дефекты каждой детали и должны включить механизм отбраковки до того, как дефектная деталь проедет мимо него.
- Робототехника: обнаружение препятствий и оценка позы выполняются в контуре управления роботом, а замедление восприятия вынуждает снижать скорость движения.
- Видеоэффекты и дополненная реальность: размытие фона в видеозвонках и наложения дополненной реальности используют сегментацию или трекинг для каждого кадра; любая задержка приводит к тому, что наложение отстаёт от движущегося человека.
Как добиться достаточной скорости модели#
- Меньшая модель или размер входного изображения: вариант модели меньшего размера выполняет меньше операций на изображение. Поскольку объём вычислений для свёрток примерно пропорционален числу пикселей, уменьшение ширины и высоты входного изображения вдвое сокращает его примерно до четверти, но может снизить точность обнаружения мелких объектов.
- Квантование модели: хранение весов и активаций в формате FP16 или INT8 вместо FP32 снижает объём передачи данных и позволяет использовать более быстрые вычислительные блоки. Для INT8 обычно нужен набор калибровочных изображений, чтобы свести к минимуму потерю точности.
- Движки инференса: среда выполнения, созданная для определённого семейства оборудования, объединяет слои и выбирает ядра, оптимизированные для устройства, например TensorRT для GPU NVIDIA или Core ML для устройств Apple.
- Периферийный ИИ: запуск модели на камере или встроенном модуле исключает задержку при обмене данными с облачным сервисом, которая при медленном соединении может превысить весь временной бюджет кадра.
Среда выполнения и оборудование меняют задержку более чем на порядок: модель nano YOLO26 обрабатывает изображение размером 640 пикселей за 38,9 мс на CPU с ONNX и за 1,7 мс на GPU NVIDIA T4 с TensorRT. Режим экспорта Ultralytics преобразует обученную модель YOLO26 в TensorRT, OpenVINO, LiteRT и другие форматы, а аргумент quantize=16 или quantize=8 создаёт веса FP16 или INT8 для целевого устройства.










