# Как нейросети используют память за целый месяц для поиска объектов в Context R-CNN

Источник: https://www.youtube.com/watch?v=eI8xTdcZ6VY
Канал: Yannic Kilcher
Опубликовано: 28.06.2020

---

В области компьютерного зрения классическая задача детектирования объектов обычно решается в рамках одного кадра: нейросеть смотрит на картинку и пытается понять, что на ней изображено «здесь и сейчас». Однако для статичных камер, таких как фотоловушки для диких животных или дорожные камеры наблюдения, такой подход игнорирует колоссальный пласт данных — контекст прошлого. В новом видео Янник Кильхер (Yannic Kilcher) подробно разбирает архитектуру **Context R-CNN**, которая позволяет модели «вспоминать» события месячной давности, чтобы безошибочно распознать едва заметный хвост в кустах сегодня.

---

## 📸 Проблема «одинокого кадра» в статичных камерах
[[JUMP:00:00]]

Большинство современных детекторов объектов оптимизированы для работы с независимыми изображениями, но реальные условия эксплуатации камер часто далеки от идеальных. Янник Кильхер поясняет, что в таких сценариях, как фотоловушки в дикой природе, камеры могут стоять неподвижно месяцами. При этом данные поступают крайне неравномерно: камера может молчать неделю, а затем сделать серию из десяти снимков за десять секунд, когда мимо пробегает животное.

Такая специфика делает стандартные инструменты работы с видео, вроде рекуррентных сетей (LSTM) или временных сверток, малоэффективными. Проблема в том, что:

* **Частота дискретизации нестабильна:** временные интервалы между кадрами варьируются от секунд до суток.
* **Огромный временной горизонт:** полезная информация (например, как выглядит это конкретное дерево без жирафа за ним) может находиться в кадре, снятом месяц назад.
* **Сложные условия:** животные часто перекрыты листвой, находятся в тени или движутся на границе кадра.

По мнению ведущего, идея использовать данные из прошлого (и иногда будущего) того же устройства является логичным развитием технологии для камер с фиксированным ракурсом.

---

## 🛠️ Архитектура: как «прокачать» классический Faster R-CNN
[[JUMP:06:50]]



Вместо того чтобы изобретать велосипед, авторы **Context R-CNN** решили «взломать» и дополнить уже существующую и проверенную архитектуру — **Faster R-CNN**. Янник Кильхер описывает этот процесс как «вклинивание» между двумя стадиями классического детектора:

1.  **Стадия 1 (Region Proposal Network):** Модель сканирует кадр и предлагает «регионы интереса» (RoI) — области, где с высокой вероятностью есть объект. Для каждой области извлекается вектор признаков (features).
2.  **Модуль контекста (Новинка):** Именно сюда встраивается Context R-CNN. Он берет признаки из текущего кадра и дополняет их информацией из памяти.
3.  **Стадия 2 (Classification):** Обновленные, «обогащенные» признаки передаются классификатору, который выносит финальный вердикт: «олень», «автобус» или «пусто».

Такой подход позволяет модели не просто смотреть на пиксели в текущем квадрате, но и учитывать накопленный опыт этой конкретной точки наблюдения.

---

## 🧠 Краткосрочная и долгосрочная память: механизм внимания
[[JUMP:09:55]]

Ключевая инновация заключается в разделении памяти на два типа, которые обрабатываются по-разному.

### Краткосрочная память (Short-term)
Она охватывает несколько соседних кадров вокруг ключевого изображения. Поскольку объем данных здесь невелик, вся цепочка остается дифференцируемой. Это означает, что нейросеть можно обучать «сквозным» методом (end-to-end), оптимизируя извлечение признаков специально для этой задачи. Это критически важно, если, например, на одном кадре морда оленя видна четко, а на другом — только ухо.

### Долгосрочная память (Long-term)


Здесь хранятся данные за недели или месяцы. Прогнать такой объем через градиентный спуск невозможно — памяти видеокарты просто не хватит. Поэтому авторы используют хитрость: они берут предобученный детектор (например, на датасете COCO) и замораживают его. Он извлекает признаки из всех прошлых кадров и складывает их в «банк памяти».

Связующим звеном выступает **механизм внимания (Attention)**:

* **Query (Запрос):** Текущий объект, который мы пытаемся распознать.
* **Key (Ключ):** Описание объектов в памяти.
* **Value (Значение):** Полезная информация, которую мы забираем из памяти, если ключ совпал с запросом.

---

## 📈 Результаты и «феномен жирафового дерева»
[[JUMP:20:00]]

Эксперименты на наборах данных дикой природы (Snapshot Serengeti) и городских камер (CityCam) показали, что производительность модели растет пропорционально «глубине памяти». Увеличение горизонта планирования с одной минуты до одного месяца стабильно повышало точность детектирования без добавления новых параметров в саму модель.

Визуализация весов внимания подтвердила догадки: модель действительно находит то же самое животное в кадрах, сделанных в разное время месяца. Более того, сеть научилась учитывать периодичность — она чаще обращается к кадрам, снятым в то же время суток, что и текущий.

**Интересный факт о точности:**
При анализе 100 самых уверенных ошибок модели выяснилось, что в 97 случаях нейросеть была права, а человеческая разметка — нет. Модель находила животных, которых люди-аннотаторы просто не заметили на сложных снимках.

Однако у системы есть и слабое место — «разлитие ошибки». Если модель один раз с очень высокой уверенностью примет дерево странной формы за жирафа, эта информация попадет в долгосрочную память. В последующем, при анализе новых кадров с этим же деревом, механизм внимания будет подтягивать «уверенность в жирафе» из прошлого, заставляя систему ошибаться снова и снова.

---