Neuromorphic Vision
Нейроморфное зрение воспринимает сцены подобно сетчатке: событийные камеры фиксируют изменения яркости каждого пикселя с точностью до микросекунд. Разбираем принцип работы и применение событийных камер.
Невроморфное зрение — это подход к компьютерному зрению, который воспринимает и обрабатывает изображения так же, как биологическая сетчатка и мозг. Его ключевое устройство — событийная камера, или датчик динамического зрения (DVS), — имеет независимо работающие пиксели: каждый сообщает об изменении яркости сразу после его возникновения, а не снимает полные кадры с фиксированной частотой. На выходе получается разреженный поток событий с микросекундной точностью по времени, высоким динамическим диапазоном и почти полным отсутствием смазывания при движении; статичная сцена порождает почти нулевой объём данных. Эта область выросла из работ группы Карвера Мида в Caltech по невроморфной инженерии в конце 1980-х: аналоговые микросхемы группы имитировали нейронные цепи, а естественным способом обработки таких данных стали спайковые нейронные сети, вычисляющие с помощью таких же разреженных событий с временными метками.
Как работают событийные камеры#
Каждый пиксель хранит логарифм яркости, зафиксированной при последнем событии. Когда текущий логарифм яркости отличается от этого значения больше, чем на порог контрастности, пиксель выдаёт событие с координатами, временной меткой и полярностью: ON для повышения яркости или OFF для её снижения, а затем сбрасывает сохранённое значение. Работа в логарифмическом пространстве заставляет пиксель реагировать на относительный контраст, поэтому один и тот же датчик справляется и с глубокой тенью, и с прямым солнечным светом: его динамический диапазон составляет около 140 дБ, тогда как у кадровых камер он составляет около 60 дБ.
То же правило можно применить к обычному видео, чтобы увидеть, насколько разреженным получается выход:
import cv2
import numpy as np
# Read a clip of a person exercising in front of a fixed camera
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_pose_demo.mp4")
ok, frame = cap.read()
reference = np.log1p(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY).astype(np.float32))
threshold = 0.2 # contrast threshold on log brightness
events, samples = 0, 0
while True:
ok, frame = cap.read()
if not ok:
break
brightness = np.log1p(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY).astype(np.float32))
# A pixel fires an ON or OFF event only when its brightness changed by more than the threshold
fired = np.abs(brightness - reference) >= threshold
reference[fired] = brightness[fired]
events += fired.sum()
samples += fired.size
print(f"{events:,} events vs {samples:,} pixel values in frames ({100 * events / samples:.2f}%)")Выводится 233,492 events vs 13,593,600 pixel values in frames (1.72%): при неподвижной камере между кадрами меняется только человек, который выполняет упражнения, поэтому поток событий содержит 1,72% значений, которые были бы в полных кадрах. Симуляторы, такие как v2e, так же превращают видео в синтетические обучающие данные с событиями, при необходимости сначала повышая частоту кадров с помощью интерполяции кадров и добавляя несовпадение порогов и шум для отдельных пикселей.
Событийные камеры и кадровые камеры#
Событийные камеры подходят для быстрого движения, сцен с экстремальным освещением и непрерывного наблюдения с помощью периферийного ИИ, когда мало что меняется; их пропускная способность зависит от активности в сцене. Они не записывают абсолютную яркость или цвет: неподвижная камера, наблюдающая за неподвижной сценой, ничего не сообщает, а движущаяся камера заполняет выход событиями от каждого края. Гибридные датчики, например DAVIS от iniVation, также снимают стандартные кадры теми же пикселями; многие системы объединяют событийную и кадровую камеры с помощью слияния данных сенсоров. Стандартные модели, такие как сверточные нейронные сети (CNN), ожидают плотные изображения, поэтому конвейеры либо преобразуют события в плотное представление, либо обрабатывают их напрямую:
- Событийные кадры: Подсчёт событий ON и OFF для каждого пикселя за временное окно даёт двухканальное изображение, которое может обработать любая CNN.
- Временные поверхности и воксельные сетки: Хранение последней временной метки для каждого пикселя или распределение событий по нескольким временным интервалам сохраняет временную информацию, теряемую при простом подсчёте.
- Спайковые сети на невроморфных чипах: Процессоры, например Loihi 2 от Intel, напрямую обрабатывают события как спайки и расходуют энергию только при их поступлении.
- Восстановление интенсивности: Сети, такие как E2VID, восстанавливают из потока событий видео в оттенках серого, поэтому на нём можно запускать модели, работающие с кадрами.
Ultralytics YOLO считывает число входных каналов из ключа channels YAML-файла набора данных, как в 10-канальном наборе данных COCO8-Multispectral, поэтому модель обнаружения объектов YOLO26 может обучаться напрямую на двухканальных событийных кадрах с подсчётами ON и OFF.
Примеры применения в реальных условиях#
- Автомобильное восприятие: В исследовании 2024 года, опубликованном в Nature, цветную камеру с частотой 20 FPS объединили с событийной камерой. Система обнаруживала объекты на дороге с задержкой камеры на 5 000 FPS, используя пропускную способность камеры на 45 FPS.
- Дроны и робототехника: Квадрокоптер с событийной камерой из Цюрихского университета уклонялся от препятствий, брошенных в него с относительной скоростью до 10 метров в секунду; общая задержка составляла 3,5 миллисекунды.
- Промышленный мониторинг: Событийные камеры подсчитывают быстро движущиеся детали, измеряют вибрацию оборудования и отслеживают скоростные процессы. Производители промышленных камер, например IDS, продают событийные модели на базе датчиков Prophesee.










