YOLO и Redis: как кэшировать результаты детекции видео
YOLO обрабатывает видео, но при сбое сети или камеры всё начинается сначала — GPU пахает впустую. Кэширование в Redis запоминает результаты детекции для каждого

При обработке видеопотока YOLO встречаешься с неприятной проблемой: запускаешь видео на сорок минут, модель честно находит людей, машины, собак на каждом кадре. На двадцатой минуте падает сеть, выходит из строя камера наблюдения или просто отключается электричество. Перезапускаешь систему. И вот беда: YOLO начинает обрабатывать видео заново, от самого начала. Все двадцать минут инференса повторяются, GPU молотит впустую, таким образом теряется время и электроресурсы.
Почему это больно Каждый проход YOLO через видеокадр требует вычислительной мощности.
На GPU это стоит дорого — в буквальном смысле расходуется энергия, в переносном — зависает обработка и отстаёт расписание. Без кэширования система не помнит, что она уже вычислила. Это как пересчитывать с нуля: если обработка была на кадре 1200, а потом упал сервер, при перезапуске начнёшь с кадра 0 и снова найдёшь людей и машины в первых 1200 кадрах. Параллельно теряешь информацию о трекинге — ID объектов на этом отрезке видео. Если нужно отследить конкретного человека через всё видео, потеря данных означает разрыв траектории и смешивание ID между объектами. Проблема усугубляется масштабом: на полусуточном видеонаблюдении, где в день обрабатывается 100+ часов материала, потеря прогресса означает кратный рост затрат.
Кэширование в Redis Redis — in-memory хранилище, которое работает быстро (задержка миллисекунды).
Идея: запомнить результаты детекции для каждого кадра и восстановиться при перезапуске. Система кэширует: Результаты детекции для каждого кадра (список объектов, их координаты, класс) Трек-ID для каждого объекта между кадрами (связь между одним и тем же объектом в соседних кадрах) Временные метки обработки (когда был обработан каждый кадр) Статус обработки (какой кадр был последним завершённым) При перезапуске система проверит Redis, найдёт последний обработанный кадр и продолжит с того же момента. GPU не тратит время на повторный инференс для старых кадров, только для новых.
Практический выход
Статья предлагает готовые сниппеты Python, которые можно скопировать и использовать сразу. Код решает три задачи: Кэширование результата YOLO в Redis с ключом вида `video:{video_id}:frame:{frame_num}` и TTL для очистки старых данных Восстановление при перезапуске: система проверяет Redis, пропускает уже обработанные кадры, начинает с нового * Отслеживание ID объектов между кадрами с запоминанием связей в кэше Автор делится опытом реальной работы: система становится отказоустойчивой, видео обрабатывается без потерь данных о траекториях объектов. На практике GPU экономит 30–50% времени на долгих видео благодаря пропуску повторного инференса.
Что это значит Для production-систем видеоаналитики это критично.
Камеры наблюдения, спортивная аналитика, автономные системы — везде YOLO + Redis экономит время и деньги на электричество и вычисления. Просто добавь Redis в архитектуру, и сбои сети станут забытой проблемой.