Ретина, ламина, медулла, лобула, грибовидное тело, веерное тело, центральный комплекс, нисходящие нейроны. Обучение памяти тоннеля и считывания MBON, оценка leave-one-bag-out, полигон дальности, 24 теста. Реальный объект на 55 м — 98.9 % кадров, ложных 7.5 трека на км, кадр обрабатывается за 33 мс на CPU.
29 KiB
Алгоритм
Документ отвечает на вопросы из ТЗ, п. 5: какую проблему решает подход, какие данные использует, как обрабатывается облако, как принимается решение, какие параметры на что влияют и где границы применимости.
1. Какую проблему решаем
Тоннель метро — почти пустое однородное пространство. Классическая схема «обучить детектор классов объектов» здесь не работает: размеченных примеров препятствий нет и быть не может (нормы безопасности метрополитена), а объектом может оказаться что угодно — от кабеля и бутылки до человека.
Значит, задача не «найти человека», а описать нормальный тоннель и заметить всё, что в него не вписывается. Ровно этим занимается зрительная система и грибовидные тела дрозофилы, поэтому архитектура собрана из её вычислительных схем.
Важно: берутся схемы и параметры коннектома, а не спайковая симуляция всех 139 тыс. нейронов. Обоснование — в CONNECTOME.md, раздел «Почему не полная симуляция».
2. Какие данные используются
Только облако точек лидара. Ни одометрии, ни IMU, ни карты, ни разметки.
Измеренные характеристики данных (tools/inspect_bags.py):
- 128 колец, элевация от −25.1° до +14.4°, неравномерная: у горизонта шаг 0.127°, по краям 0.45°;
- азимут: 3600 столбцов на 360° либо 1200 на 120°, шаг 0.1°, два эха на столбец;
- «нет эха» кодируется точным
(0, 0, 0)— 38…62 % лучей кадра; - система координат сенсора: вперёд = −Y, вправо = +X, вверх = +Z.
3. Обработка облака
3.1. RETINA — омматидиальная решётка
Фасеточный глаз — регулярная решётка направлений; вращающийся лидар устроен так же. Облако
переводится в ретинотопический дальностный образ R(кольцо, азимут), и дальше всё считается
в нём, а не в неупорядоченном облаке. Это даёт и скорость (всё — операции над матрицами),
и возможность применять пространственные фильтры.
Три детали, без которых образ получается неверным:
- Слияние эх. Из двух эх берутся ближнее (
r_near) и дальнее (r_far). Различимы они у 0.6…1.6 % лучей, но это как раз тонкие предметы и кромки: разнос p50 ≈ 2.5 м. - Выпрямление скоса. У каждого лазерного канала свой постоянный азимутальный сдвиг,
разброс достигает 15.6° (±78 столбцов). В сыром виде «столбец» не является направлением:
соседние кольца одного столбца смотрят в стороны, разнесённые на градусы, и любой
пространственный фильтр считает мусор. Образ выпрямляется целочисленным сдвигом строк;
остаточная угловая ошибка
p99 = 0.028°— меньше половины шага решётки. - Калибровка по данным. Углы каналов, шаг развёртки и число эх восстанавливаются из первых кадров, а не берутся из паспорта. Поэтому решение работает с обеими раскладками, которые встречаются в датасете.
3.2. HALTERES — стабилизация «взгляда»
Прежде чем обрабатывать картинку, муха стабилизирует голову по сигналам жужжалец и оцеллий. Здесь роль горизонта играет плоскость головок рельсов: она оценивается в каждом кадре робастно (минимум в ячейке сетки → IRLS с мягким Хьюбером → повторная подгонка у найденной плоскости → экспоненциальное сглаживание по кадрам).
Отсюда — система координат пути (d, u, h): вперёд, поперёк, вверх от рельса. Крепление сенсора
не обязано быть жёстким: в датасете высота установки различается (1.31 м и 1.70 м), крен на
кривых доходит до 3° из-за возвышения наружного рельса, и всё это отслеживается покадрово.
Побочный, но важный продукт — ожидаемая дальность до пола для каждого луча:
r_\text{пол} = \frac{c}{d_z + a\,d_y - b\,d_x}
где z = a·d + b·u + c — плоскость пути, (d_x, d_y, d_z) — направление луча. Луч с
отрицательной элевацией обязан закончиться на полотне на строго определённом расстоянии; всё,
что обрывает его раньше, — предмет, стоящий на пути.
3.3. Осевая линия пути
На дальности 150 м кривая радиуса 1300 м уводит путь на 8.6 м вбок. Прямой коридор там давно упёрся бы в стену, и вся дальняя зона превратилась бы в сплошное ложное срабатывание.
Ось оценивается по дрейфу центра сечения тоннеля: по срезам дальности берётся середина между
3-м и 97-м процентилями поперечной координаты, и через эти точки проводится дуга
u(d) = c₁·d + c₂·d², где c₂ ≈ 1/(2R).
Две поправки, которые определяют работоспособность:
- веса срезов равные, а не по числу точек: у ближних срезов точек в сотни раз больше, и взвешивание по количеству полностью подавило бы дальние срезы, где как раз и содержится кривизна;
- за горизонтом наблюдаемой дальности парабола продолжается линейно, по касательной, — экстраполяция кривизны туда, где данных не было, даёт десятки метров ошибки.
Плюс два физических ограничения: радиус круче 300 м на перегоне не встречается, а скорость изменения оси ограничена. Без них платформа станции, делающая свод резко несимметричным, уводит оценку центра, и габарит заезжает прямо на платформу — это был источник почти всех ложных тревог у станций.
3.4. LAMINA — ON/OFF и латеральное торможение
Работа идёт не с дальностью, а с диспаритетом δ = 1/R. Так правильно по двум причинам:
угловой размер предмета пропорционален 1/R, и шум лидара в диспаритете почти однороден,
тогда как в дальности растёт квадратично.
Клетки L1 и L2 расходятся на два канала:
- ON =
max(δ − δ_окружения, 0)— объект ближе окружения, то есть выступ; - OFF =
max(δ_окружения − δ, 0)— провал или отсутствие эха, то есть окклюзионная тень за предметом. Тень часто во много раз крупнее самого предмета — именно она даёт шанс увидеть мелкий объект на большой дальности.
Окружение — кольцо вокруг точки, вычисляемое двумя равномерными фильтрами (большое окно минус вырезанный центр). Оба разделимы и работают за O(N), поэтому стоимость не зависит от размера окна.
Размер предмета в лучах меняется с дальностью на два порядка: человек даёт ~440 лучей на 20 м и ~8 на 120 м. Поэтому окружение берётся на трёх масштабах сразу и отклики объединяются максимумом — как у колонковых нейронов лобулы с разными размерами рецептивных полей, сходящихся на один нисходящий нейрон.
3.5. MEDULLA и LOBULA PLATE — движение
T4/T5 — элементарные детекторы движения, по четыре подтипа на направление; T4 читает ON-канал, T5 — OFF. Вычислительно это коррелятор Хассенштайна–Райхардта: сигнал одного омматидия задерживается и умножается на сигнал соседнего, разность двух таких произведений даёт направленный отклик.
LPTC (HS/VS) суммируют выход тысяч T4/T5 и тем самым измеряют собственное движение. Здесь это критично: колёсной одометрии нет, и скорость поезда неоткуда взять, кроме как из самого потока. Реализовано в три ступени, от дешёвой к точной:
- корреляция продольного профиля тоннеля (гистограмма дальностей, обелённая вычитанием скользящего среднего и без ближней зоны — иначе корреляция залипает на нулевом сдвиге);
- медианное приближение дальних фронтальных поверхностей (стены отбрасываются по градиенту дальности вдоль строки);
- уточнение перепроекцией: точки прошлого кадра сдвигаются вперёд на пробное
Δs, проецируются в решётку текущего кадра, и выбирается сдвиг с максимальной долей совпавших лучей. Это и есть проверка широкопольного потока на согласие с моделью собственного движения — то, чем заняты тангенциальные клетки.
Доля совпавших лучей заодно служит мерой доверия: измеренные 0.76…0.95 означают, что модель движения описывает сцену, а стоящий поезд даёт ровно 0 км/ч.
LPLC2 — детектор надвигания. Его дендриты разложены на четыре слоя так, что клетка отвечает только на поток, расходящийся из центра её рецептивного поля, и подавляется однородным широкопольным потоком, то есть отделяет «на меня что-то летит» от «я сам двигаюсь». Вычислительно — дивергенция поля T4/T5.
3.6. LOBULA — кандидаты (LC11)
LC11 у мухи — детектор мелкого объекта: возбуждается компактным пятном, выделяющимся из фона, и подавляется широкопольным узором. Здесь тем же занимается выделение кандидатов.
Лучи, попавшие в габарит, группируются в связные пятна — но с двумя принципиальными деталями:
- связность с учётом разрыва по глубине. Обычное соседство склеивает предмет со стеной, оказавшейся в том же месте изображения, но на сто метров дальше. Два соседних луча объединяются, только если их дальности близки; допуск растёт с расстоянием, потому что и разрешение, и шум растут так же. Эта одна правка подняла обнаружение реального объекта с 16/20 до 20/20 кадров и дала правильные габариты вместо слипшихся 5 × 4 м;
- кластеризация по расширенной области, проверка членства — по габариту. Вертикальный
лоскут стены, срезанный границей коридора, неотличим от предмета: обрезка сама создаёт
компактное пятно нужного размера. Поэтому пятна ищутся в объёме с запасом, а доля лучей,
оставшихся внутри габарита (
containment), сразу показывает, предмет это целиком или край стены. Расширение идёт в стороны и вверх, но не вниз: полотно проходит под каждым предметом и на большой дальности попало бы в тот же допуск по глубине.
Для каждого кандидата считаются: дальность, смещение от оси, высота нижней точки, габариты, протяжённость вдоль пути, целостность, число лучей и колец, контраст, дефицит до пола, доля тени и интенсивность.
Разрез компоненты, растёкшейся вдоль стены. Допуск по глубине решает задачу «предмет и далёкая стена», но не обратную: вдоль гладкой стены соседние лучи отличаются на сантиметры, и стена оказывается связной от ближнего поля до горизонта. Предмет у такой стены попадает в ту же компоненту и отбрасывается вместе с ней правилом «ни один предмет не тянется на 15 м вдоль пути».
Разорвать такую компоненту по дальности нельзя — предмет и стена рядом с ним стоят на одной
дальности. Зато гладкая стена даёт нулевой центр-окружение по построению: как бы сильно
дальность ни менялась вдоль стены, она меняется плавно, и центр равен окружению. Предмет на
стене — ступенька, и ламина её видит. Поэтому переглубокая компонента не выбрасывается, а
пересобирается по лучам с контрастом выше порога (split_gap, 6 м).
Выносится ровно одна, сильнейшая фигура (split_top). Это не косметика: разрез отрезает
фон, и протяжённость кандидата вдоль пути падает с 6.9 до 0.8 м — вместе с ней выключается
множитель компактности в весе улики, который до того давил протяжённые конструкции вдесятеро.
Ограничение — тот же приём глобального торможения, которым APL оставляет активными считанные
проценты клеток Кеньона. Измерено: одна фигура вместо всех даёт 6.4 ложных трека на километр
против 9.4 при одинаковой дальности обнаружения.
3.7. MUSHROOM BODY — память нормального тоннеля
Геометрия честно сообщает обо всём, что торчит в габарит, и вместе с препятствиями выдаёт кабельные лотки, ниши, гермозатворы, кромки платформ и стрелочные приводы. Разделить их геометрическим правилом нельзя — но можно выучить, что для этого тоннеля привычно.
Схема взята из коннектома почти без изменений:
- PN → KC. Каждая клетка Кеньона получает вход от ~6 проекционных нейронов, выбранных случайно, — разрежённая случайная проекция, поднимающая размерность в десятки раз.
- APL. Один гигантский тормозный нейрон собирает активность всех KC и возвращает торможение всем сразу: «победитель забирает всё», одновременно активны доли процента клеток.
- KC → MBON. Синапсы депрессируются при повторном предъявлении, поэтому знакомый стимул даёт слабый ответ, а новый — сильный. Ответ MBON и есть новизна.
Обучение идёт без единой метки: конвейер прогоняется по проездам пустого тоннеля, все выданные геометрией кандидаты объявляются знакомой обстановкой.
Ключевая тонкость — темп депрессии согласуется с размером выборки. На одну клетку Кеньона
приходится n · n_active / n_kc попаданий; если темп не уменьшать вместе с ростом выборки,
после нескольких десятков тысяч примеров подавлены все синапсы и новым не выглядит уже ничто,
включая настоящее препятствие (проверено: при исходных параметрах новизна реального объекта
падала до 0.001). Темп выбирается так, чтобы типичная клетка ослабла в фиксированное число раз;
тогда шкала новизны отражает частоту обстановки, а не факт «видел хоть раз».
Привыкание внутри проезда — сделано и выключено. Всё вышесказанное работает,
только если память этот тоннель знает; на новом участке ложных треков 21.8 на
километр против 9.1. Попытка закрыть это короткой памятью, гасящей формы, которые
повторяются в разных точках пути, измерена и отвергнута: избирательности у механизма
нет, а видимый эффект оказался насыщением популяции, которое давит предмет сильнее
обстановки. Код и параметры оставлены (enable_habituation), разбор — EXPERIMENTS
п. 10.
3.8. CENTRAL COMPLEX — накопление улик
Кандидат на 150 м — это 5–10 лучей, и по одному кадру он неотличим от шума. Но поезд едет, и настоящий объект остаётся на одном месте в тоннеле, а не в поле зрения.
Эллипсоидное тело мухи держит кольцевой аттрактор: клетки EPG образуют бугор активности, клетки PEN сдвигают его по сигналам собственного вращения, взаимное торможение не даёт возникнуть второму бугру. Здесь тот же механизм: треки живут в координате «путь от начала записи», сдвигаемой оценкой собственного движения (роль PEN), совпадение подкачивает улику (локальное возбуждение), несовпадение — утечка, конкуренция за место гасит дубликаты (глобальное торможение).
Вес одного наблюдения:
$$q = \underbrace{\min!\left(\frac{n_\text{лучей}}{n_\text{ожид}(d)},1\right)}{\text{поддержка}}
\cdot \underbrace{\frac{\Delta R}{3}}{\text{контраст}}
\cdot \underbrace{\frac{c-0.25}{0.45}}{\text{целостность}}
\cdot \underbrace{\left(1.5-\frac{L}{3s}\right)}{\text{компактность}}
\cdot \underbrace{\left(1.25-\frac{h_\text{низ}}{1.2}\right)}{\text{опора снизу}}
\cdot \underbrace{g(\nu)}{\text{новизна}}
Все множители физичны:
- поддержка — число лучей нормируется на ожидаемое для этой дальности: дальний объект даёт мало лучей не потому, что сомнительный, а потому что так устроена решётка;
- компактность — посторонний предмет не тянется на десятки метров вдоль пути, а лоток, стена и полотно тянутся;
- опора снизу — упавший предмет, человек, камень стоят на полотне, а знак, лоток или кронштейн висят на стене, и под ними пусто;
- новизна
g(ν)— резкое отображение ответа MBON с ненулевым полом: даже похожий на привычную конструкцию предмет должен накапливать улику, просто медленнее.
3.9. DESCENDING NEURONS — решение
Весь разбор сцены у мухи сходится на нескольких десятках нисходящих нейронов. Два из них работают по надвигающемуся объекту: гигантское волокно (DNp01) с высоким порогом запускает немедленный аварийный манёвр, DNp02/DNp11 с порогом ниже дают раннюю мягкую реакцию.
Поезду нужна такая же пара уровней: заблаговременное предупреждение с запасом по дальности и экстренное торможение по надёжному близкому объекту. Пороги с гистерезисом — без него трек на границе даёт дребезг, а дребезжащая команда торможения хуже её отсутствия.
Тормозной путь считается как v·t_реакции + v²/(2a) и сравнивается с дистанцией до объекта.
4. Какие параметры на что влияют
| Параметр | Эффект при увеличении |
|---|---|
half_width |
шире габарит → больше находок и больше ложных на кромках платформ |
h_lo |
выше порог → перестают ловиться низкие предметы (кабель, камень), меньше ложных от полотна |
min_rays |
строже → пропадают дальние мелкие объекты, падает поток кандидатов |
fov_deg |
шире сектор → лучше кривые и стрелки, дороже обработка |
gain / leak (CX) |
быстрее подтверждение против устойчивости к шуму |
warn_evidence |
выше → меньше ложных тревог, позже обнаружение |
| темп депрессии MB | выше → сильнее подавление знакомого, но риск заглушить и настоящее |
5. Ограничения метода
Формулируем прямо, потому что скрывать их бессмысленно — они видны на данных.
- Дальность ограничена не алгоритмом, а геометрией. Прямая видимость в предоставленных тоннелях 121–167 м: тоннели кривые, дальше линия взгляда упирается в стену. Паспортные 200 м Pandar128 достижимы только на прямых участках.
- Память знает только то, что видела. На новом участке тоннеля незнакомая штатная конструкция получит высокую новизну. Поэтому новизна входит множителем, а не фильтром, и решение опирается ещё на геометрию и накопление улик.
- Оценка оси пути требует видеть обе стены. В широких залах и на станциях сечение перестаёт быть тубусом вокруг пути; спасают физические ограничения на радиус и скорость изменения оси, но точность там ниже.
- Очень низкие предметы на грани. Кабель Ø 6 см даёт 9 лучей на 20 м и 2 на 40 м — у самой границы разрешения прибора, не алгоритма.
- Скорость оценивается только продольная. Боковой снос и вертикальные колебания компенсируются стабилизацией плоскости, но в модель движения не входят.
- LPLC2 считается, но пока не влияет на решение — канал надвигания подготовлен и визуализируется, его вклад в улику ещё не откалиброван.