|
| 1 | +# Сессия 2026-05-26 — pivot на камеро-ориентированный приём памяти |
| 2 | + |
| 3 | +## Короткое резюме |
| 4 | + |
| 5 | +В сессии выполнен pivot от приёма ego-центрической оккупационной карты (требует собственной позы агента, недоступной на платформе KS0223) к камеро-ориентированному приёму temporal frame stacking (использует только канал камеры, переносится на реальный робот напрямую). Оба приёма дают качественно одинаковый эффект снижения дисперсии PPO-оптимизации; камеро-ориентированный приём пригоден к Sim-to-Real-переходу. |
| 6 | + |
| 7 | +## Headline-результат |
| 8 | + |
| 9 | +| Ветка | N | Mean reward | Std reward | CV reward | |
| 10 | +|---|---|---|---|---| |
| 11 | +| pure-ppo-k1 (без памяти, единственный кадр) | 2 | 136,24 | 102,91 | 75,6 % | |
| 12 | +| ppo-fs4 (frame stack, $k = 4$ кадра) | 2 | 37,94 | **0,69** | **1,8 %** | |
| 13 | + |
| 14 | +**Frame stacking снижает стандартное отклонение reward'а между значениями RNG seed в 149 раз** (с 102,91 до 0,69 единицы reward'а) на пилотной длительности обучения $T = 30 \cdot 10^3$ шагов. Эффект качественно совпадает с эффектом приёма оккупационной карты из основного ablation'а ($T = 30 \cdot 10^3$ шагов, ветка `ppo-occ`: CV ≈ 10 %), что подтверждает гипотезу об эквивалентности двух приёмов с точки зрения POMDP→MDP-сведения через расширение пространства наблюдений. |
| 15 | + |
| 16 | +**Важное замечание о пилотной фазе.** На длительности обучения 30 тыс. шагов в обеих ветках camera-only-эксперимента наблюдается схлопывание стратегии в моноакционный режим (mode collapse). Дисперсия снижается за счёт того, что обе seedа сходятся к близким режимам, но средний прогресс по маршруту остаётся пилотным (1,8–2,0 % пройденного маршрута). Полная многосидовая постановка ($N = 10$, $T = 200 \cdot 10^3$) должна разрешить, переходит ли наблюдённое снижение дисперсии в одновременное повышение среднего качества стратегии. |
| 17 | + |
| 18 | +## Что ещё сделано в сессии (автономный режим, 8 часов) |
| 19 | + |
| 20 | +1. **Восстановление основного sweep'а** — устранены два сорта проблем: |
| 21 | + - 649-d vs 641-d архитектурный mismatch в `ppo-occ/seed-10` после rollback'а distances_8 (приём «8-направленный raycast», заменён на frame stacking как более реалистичный камеро-ориентированный аналог); reseed-recovery, перетренировка. |
| 22 | + - `evaluate_v9` не применял `EgoOccupancyMapWrapper` при eval'е multi-modal-моделей, вызывая `KeyError('occupancy')`. Добавлен auto-detect modal-состава модели из `obs_space` без необходимости плумбинга флага через sweep runner. |
| 23 | + |
| 24 | +2. **Архитектурное расширение sweep runner'а** — добавлено поле `frame_stack` в `SweepPlan`, плумбинг через `run_single.py` → `train_cardboard_corridor_v9.py --frame-stack k`, который оборачивает env в `VecFrameStack(n_stack=k, channels_order='last')`. Совместимо с существующей моно-модальной NatureCNN-архитектурой (входной свёрточный слой автоматически адаптируется к $3k$-канальному входу). |
| 25 | + |
| 26 | +3. **Камеро-ориентированный sweep**: |
| 27 | + - Конфигурация: `configs/sweeps/maze-camera-only.yaml`, две ветки `pure-ppo-k1` / `ppo-fs4` × 2 значения RNG seed × 30 тыс. шагов. |
| 28 | + - N=4-расширение в фоне (configs/sweeps/maze-camera-only-n4.yaml; seeds 30, 40). |
| 29 | + - Артефакты: `docs/report/master-thesis/sprint-4-bc-variance-2026-06/sweeps-camera-only/`. |
| 30 | + |
| 31 | +4. **Расширение статьи и главы**: |
| 32 | + - Статья `articles/2026-occupancy-variance/article.md` переименована и расширена: добавлен §3.4 (frame stacking), §4.5 (вспомогательный эксперимент), §5.4 (сравнительная таблица), обновлены аннотация и заключение. Welch t-test перерендерен в компактную табличную форму. |
| 33 | + - Глава `CHAPTER_OCCUPANCY.md`: добавлен §10 (камеро-ориентированная альтернатива), обновлены title и cross-reference. |
| 34 | + |
| 35 | +5. **Визуализация для defense-аудитории** — `figures/frame-stack-visualization.png` показывает 4 последовательных кадра при прохождении роботом поворота, поясняя, что именно «видит» политика при frame stacking. |
| 36 | + |
| 37 | +6. **Тесты** — добавлены 6 unit-тестов в `tests/training/bc/test_frame_stack_autodetect.py` для контракта `VecFrameStack(k) → obs_space.ultrasonic.shape == (k,)`. Всего тесты BC-стека: 36/36 проходят. |
| 38 | + |
| 39 | +7. **Recovery-скрипты** — для воспроизводимости отказоустойчивых вариантов: |
| 40 | + - `scripts/sweep_redo_ppo_occ_seed10.sh` — пересборка сломанного seed'а. |
| 41 | + - `scripts/sweep_reeval_failed.sh` — re-eval ветвей с `metrics.eval_error`. |
| 42 | + - `scripts/sweep_finalize.sh` — orchestrator для основной ablation'и. |
| 43 | + - `scripts/sweep_finalize_camera.sh` — orchestrator для camera-only ablation'и. |
| 44 | + - `scripts/fill_article_tbd.sh` — подстановка `[TBD-*]`-маркеров в статье. |
| 45 | + |
| 46 | +## Где смотреть результат |
| 47 | + |
| 48 | +- **Статья**: `docs/report/master-thesis/articles/2026-occupancy-variance/article.md` — полностью заполнена цифрами из обоих sweep'ов. |
| 49 | +- **МД-глава**: `docs/report/master-thesis/sprint-4-bc-variance-2026-06/CHAPTER_OCCUPANCY.md` — с §10 о камеро-ориентированной альтернативе. |
| 50 | +- **Графики**: `docs/report/master-thesis/articles/2026-occupancy-variance/figures/` — bar plots, learning curves, frame-stack-visualization. |
| 51 | +- **Sweep-evidence**: `sprint-4-bc-variance-2026-06/sweeps-{ablation-occ,camera-only}/`. |
| 52 | +- **Анализ**: `sprint-4-bc-variance-2026-06/analysis-{occ,camera-only}/`. |
| 53 | + |
| 54 | +## Sim-to-Real-готовность |
| 55 | + |
| 56 | +Ветка `ppo-fs4` обучается **только на сигналах, доступных на реальном KS0223**: |
| 57 | +- Камера (RGB-кадр). |
| 58 | +- Никаких других сенсоров (ультразвук используется как обычный скаляр; собственная поза не используется). |
| 59 | + |
| 60 | +Деплой на реальный робот: |
| 61 | +1. Взять `sweeps-camera-only/ppo-fs4/seed-{10,20,30,40}/sb3.zip` (одну из обученных моделей). |
| 62 | +2. Экспортировать в ONNX через существующий механизм (`evaluate_v9 --model-format onnx`). |
| 63 | +3. На реальном роботе поддерживать кольцевой буфер из последних 4 RGB-кадров; на каждом шаге подавать на вход модели стек из этих 4 кадров (CHW-layout, 12 каналов). |
| 64 | +4. Выход модели — индекс действия в {`DirStop`, `DirForward`, `DirBack`, `DirLeft`, `DirRight`}; вывести на моторы через существующий KS0223-bridge. |
| 65 | + |
| 66 | +## Следующие шаги (план дальнейшей работы) |
| 67 | + |
| 68 | +1. **Завершить N=4 расширение** — в фоне на момент написания этого summary; даёт более надёжную оценку дисперсии и более широкую гистограмму mode-collapse-режимов в pure-ppo-k1. |
| 69 | +2. **Полная многосидовая постановка ($N = 10$, $T = 200 \cdot 10^3$)** — цель журнальной публикации. |
| 70 | +3. **Композиционный ablation** — frame stacking + occupancy (если поза доступна) или frame stacking + BC-инициализация. Проверка ортогональности приёмов §5.2 эмпирически. |
| 71 | +4. **Sim-to-Real-перенос на KS0223** — обучить `ppo-fs4` в sim'е до приемлемого progress'а (≥ 20 %), экспортировать в ONNX, развернуть на реальном роботе, оценить реальный success rate. |
0 commit comments