Два часа ночи: на камере в переулке кто-то бросил банку и исчез. Компьютер находит человека среди миллионов чисел на экране, превращает его в человечка-палочку с 13 суставами, сжимает движение человечка до нескольких чисел (признаков) и решает: «выброс это или нет?» Мы проследим до конца, где правила, придуманные человеком, дают себя обмануть, что исправляет обучение и почему самая важная улика — «куда упала банка».
В диспетчерской видеонаблюдения десятки экранов. Человек не может всю ночь следить за каждым из них. Лаборатория получила одну миссию: сделать так, чтобы ИИ первым замечал «движение» выброса мусора.
Находим человека среди 6 миллионов чисел и сжимаем позу до 26 чисел
Сводим движение за 46 кадров к 4 признакам и сравниваем правила с обучением
Оценка в реальном времени, воздержание от решения и случаи, когда этот метод ошибается
Компьютер получает не фотографию, а интенсивность красного, зелёного и синего (0–255) для каждой клетки. Переключите режим просмотра и наведите мышь на изображение.
Один кадр камеры Full HD — это 1 920 клеток по ширине × 1 080 по высоте, и в каждой клетке три числа: красный, зелёный и синий. 1 920 × 1 080 × 3 = 6 220 800. При 30 кадрах в секунду это 186,62 миллиона чисел за одну секунду. Нигде среди этих чисел нет подписи «человек» или «мусорный бак». Поэтому первый шаг — найти в груде чисел, что и где находится. Как фотография становится матрицей чисел, подробно разобрано в 4-2.
Здесь два шага. Сначала обнаружение объектов находит прямоугольники (ограничивающие рамки) человека, мусорного бака и банки. Затем оценка позы находит внутри рамки человека координаты 13 суставов. Включайте и выключайте слои.
Координаты суставов считаны вручную с рисунка (1402 × 1122). Левый верхний угол — (0, 0), и чем ниже, тем больше y. Мы смотрим на человека лицом к лицу, поэтому рука слева на экране — это его «правая рука».
Для обнаружения объектов широко используется семейство YOLO [R3], для оценки позы — OpenPose [R1] или MediaPipe [R5]. Фактическим стандартом нумерации суставов служат 17 точек датасета COCO [R2]. На этой странице из 17 точек COCO убраны две точки глаз и две точки ушей, а голова заменена одной точкой носа — получается 13 точек.
Выброс — это не один кадр, а движение в течение 3 секунд. Выберите одну из шести сцен. Жёлтый пунктир — траектория правого запястья, график внизу — скорость запястья и состояние банки.
Шесть сцен — это не настоящее видео, а синтетические данные, созданные изменением углов суставов во времени. Единица измерения — рост человека, принятый за 1 (исходя из роста 1,7 м), а брошенная банка летит по параболе под действием силы тяжести. Функция из Кода 1 и этот рисунок выполняют одно и то же вычисление. Для настоящего видео эти координаты в каждом кадре дала бы оценка позы из раздела 3.
Сжимаем 1 196 чисел до 4 признаков, выбранных человеком. Затем принимаем решение двумя способами: по правилу, заданному человеком, и с помощью модели, обученной на данных. Сдвигайте пороговое значение и найдите, где правило ошибается.
Изменяя в шести сценах скорость (×0,8–1,25), положение и размах движения (×0,75–1,25), мы получили 600 обучающих и 300 тестовых сцен и добавили к координатам суставов дрожание (ошибку оценки позы). Правильный ответ определяется по результату: если банка осталась на земле вне бака — это выброс. Поэтому даже «бросить далеко» считается нормой, если банку бросили сильно и она попала в бак (из тестовых бросков выбросом оказались только 52%). Число в клетке — доля случаев, когда сцена была признана выбросом; если оно отличается от правильного ответа больше чем на 5 п. п., клетка выделена красным.
Правило 1 (60,7%): 94% взмахов рукой были приняты за выброс (ложная тревога). А 98% выбросов, когда банку медленно роняют, оно пропустило.
Правило 2 (76,7%): после добавления условия «отпустил ли» ложные тревоги на взмахах рукой исчезли. Но роняние по-прежнему пропускается, а нормальные сцены, где банку забросили в бак, тоже принимаются за выброс.
4 признака + логистическая регрессия (99,7%): обученные веса — [скорость −0,33, отпускание 1,16, расстояние от бака 3,93, удаление 1,19]. Скорость запястья даже получила небольшой отрицательный вес. Самая сильная улика, которую выбрала модель, — «осталась ли банка на земле вне бака».
MLP на сырых координатах (92,3%): «форму» броска он выучил, но поднимал тревогу и на броски, попавшие в бак (19 ложных тревог). Добавление 2 координат предмета не помогло. Среди 1 288 чисел трудно по всего 600 обучающим примерам найти условие «координата x банки в последнем кадре — вне бака».
Здесь используются те же веса, которые выучила логистическая регрессия в Коде 2. По уже просмотренным кадрам 4 признака вычисляются заново, и выставляется оценка. 0,6 и выше — тревога, от 0,4 до 0,6 — воздержание от решения: сцена передаётся человеку.
Ложная тревога заставляет подозревать невиновного, а пропуск делает контроль бессильным. Цена этих двух ошибок разная, поэтому трудно выбрать один порог. Поэтому в зоне неуверенных оценок (здесь 0,4–0,6) решение автоматически не принимается — видео сам просматривает оператор диспетчерской. ИИ используется только для того, чтобы определить порядок — «какой экран смотреть первым», а окончательное решение и ответственность остаются за человеком. Понажимайте несколько раз «Случайная сцена» и найдите броски, попавшие в бак, и слабые броски.
Человечек-палочка и 4 признака просты для понимания и лёгки. Но и то, что они упускают, тоже очевидно.
Оба кода используют только библиотеки, установленные в Colab по умолчанию. Нажмите «Скачать ноутбук (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового ноутбука.
Вычисляет функцию (fk), рисующую человечка-палочку по углам суставов, шесть сцен и 4 признака. Получаются те же числа, что и в верхней таблице раздела 5. Чтобы перейти на свои данные, подставьте на место координат суставов, которые возвращает clip(), координаты из инструмента оценки позы и разделите их так, чтобы рост человека был равен 1.
Изменяя сцены, создаёт 600 обучающих и 300 тестовых примеров и сравнивает 2 правила, логистическую регрессию и 2 MLP. Экспериментальная таблица раздела 5 и веса для диспетчерской из раздела 6 берутся прямо из этого вывода.
Эти промпты нужно вставлять в ИИ-помощники вроде ChatGPT, Qwen или Claude. При нажатии «Копировать» после промпта добавляется выбранный код. Замените текст в 〔 〕 на свою ситуацию.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если вы используете видео с реальными людьми, сначала убедитесь в наличии согласия на съёмку и соблюдении правил обработки персональных данных.
Это тот же словарь, что и у терминов с жёлтым пунктирным подчёркиванием в тексте. Нажмите на название раздела, чтобы перейти туда, где термин встретился впервые.
Аналогия — первый шаг к пониманию, но и семя заблуждения. У аналогий с человеческим восприятием указана сила соответствия. Прямая — есть данные, что это действительно делает то же самое · Частичная — похожи лишь некоторые свойства · Нет — соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с восприятием человека | Где аналогия не работает |
|---|---|---|---|
| Обнаружение объектов | Наклеить стикер на каждого человека на фото | Частичная С одного взгляда понять: «вон там человек» | Стикеры человек наклеивает точно, а детектор вместе с уверенностью выдаёт и ошибочные рамки |
| Оценка позы | Наложить на фото проволочную куклу | Частичная Способность узнать идущего человека лишь по движению нескольких точек (point-light walker) | Человек догадывается о положении скрытой руки, а оценка позы при перекрытии ставит точку не туда или пропускает её |
| Признак | Пункты фоторобота преступника: «рост, одежда, походка» | Нет | Пункты фоторобота выбирает человек. Модель, обучаемая на сырых координатах, сама создаёт себе пункты (MLP из раздела 5) |
| На основе правил | Прикидка охранника: «бегущий человек подозрителен» | Нет | Охранник поправляет свою прикидку с учётом контекста, а правило так и ошибается в сценах за пределами заданных условий |
| Воздержание от решения | Судья запрашивает видеопросмотр | Нет | Видеопросмотр используют редко, а если расширить зону воздержания, работы у операторов диспетчерской снова станет больше |
E-1 Об авторе · E-2 Научные источники · E-3 Источники рисунков и чисел
Методическая памятка для преподавателей, наставников по обучению на рабочем месте (OJT) и тьюторов. Время указано ориентировочно — подстройте его под своё занятие.
| Для кого | Студенты и работающие специалисты, впервые знакомящиеся с ИИ для видео. Практики, которые рассматривают внедрение анализа CCTV в сфере общественной безопасности, эксплуатации объектов или управления магазинами |
|---|---|
| Что нужно знать заранее | Что фотография — это матрица чисел (4-2), координаты и вычисление расстояний (теорема Пифагора), что такое точность |
| Цели обучения | ① Объяснить цепочку «видео CCTV → обнаружение объектов → оценка позы → признаки → решение» ② Привести примеры сцен, в которых ошибаются правила и в которых ошибается обучение ③ Предложить порядок эксплуатации, учитывающий сразу ложные тревоги и пропуски, воздержание от решения и защиту персональных данных |
| Ориентировочное время | Чтение 35–45 мин · демонстрация анимаций 20 мин · практика в Colab 25 мин (Код 1 — 10 мин, Код 2 — 1 мин запуска + 14 мин разбора) |
Вступление 5 мин (сообщение из раздела 1) → разделы 2·3: от экрана до стик-фигуры 12 мин → раздел 4: шесть сцен 8 мин → раздел 5: эксперимент с порогом правила 10 мин → раздел 6: диспетчерская 10 мин → проверочные вопросы 5 мин.
Разделы 1·3 — 15 мин → перечитать таблицу эксперимента из раздела 5 через стоимость ложных тревог на вашем объекте — 20 мин → обсуждение: где задать зону воздержания от решения (раздел 6) — 15 мин → составить чек-лист по законодательству и предвзятости (раздел 7) — 15 мин → запуск и разбор Кода 2 — 25 мин.
Новичкам — только разделы 2, 3, верхняя таблица раздела 5 и раздел 6. Учащиеся среднего уровня сначала вручную прослеживают функцию features из Кода 1, затем добавляют ещё один признак (например, минимальное расстояние от руки до урны) и сравнивают результаты в Коде 2.
| Раздел | Вопрос, на котором стоит остановиться | Совет по управлению |
|---|---|---|
| 2 Экран — это числа | «Где среди 6 миллионов чисел человек?» | В режиме «Смотреть в числах» уменьшите размер клетки с 64 до 16 |
| 3 Найти человека | «Что мы теряем и что сохраняем, оставив только палочки?» | Переходите к следующему разделу, не выключая режим приватности |
| 4 Во времени | «Чем отличаются графики взмаха рукой и броска?» | Переключайтесь между двумя сценами и сравнивайте высоту жёлтой линии |
| 5 Правила против обучения | «Где поставить порог, чтобы верно определить все шесть сцен?» | Проведите ползунок до конца, убедитесь, что такого порога «нет», и переходите к таблице эксперимента |
| 6 Диспетчерская | «Что произошло в кадре, где оценка резко выросла?» | Запустите сцену «уронить» и остановите её в момент, когда банка касается земли |
| 7 Ограничения | «Если ИИ поднял тревогу, можно ли сразу выписывать штраф?» | Свяжите воздержание от решения с окончательной проверкой человеком |
| Заблуждение | Правильное объяснение | Что показать |
|---|---|---|
| ИИ «видит» изображение с CCTV так же, как человек | Он получает сетку чисел и шаг за шагом считает. Метки «человек» и «урна» ставит модель обнаружения | Раздел 2, «Смотреть в числах» |
| Резкий взмах руки — значит, выброс мусора | Взмах рукой в приветствии тоже быстрый, а «уронить под ноги» — медленное. Результат (где остался предмет) — более сильная подсказка | Раздел 5, правило 1 |
| Если точность 99.7%, то и на реальном объекте будет 99.7% | Это результат на синтетических данных. На реальном видео точность падает из-за перекрытий, темноты и нескольких людей в кадре | Раздел 5, пояснение 3 внизу |
| Глубокое обучение на «сырых» координатах всегда лучше | Когда данных мало, несколько удачно выбранных признаков могут победить | Две строки MLP в таблице эксперимента раздела 5 |
| Если хранить только стик-фигуру, проблем с персональными данными нет | Это снижает риск, но не устраняет его. Человека можно узнать по походке, а правила установки камер и хранения записей по-прежнему нужно соблюдать | Режим приватности в разделе 3, раздел 7 |
1920 × 1080 × 3 = 6 220 800 чисел. В стик-фигуре 13 × 2 = 26 чисел, поэтому 6 220 800 ÷ 26 ≈ 239 262 — примерно в 240 тысяч раз меньше.
Расстояние = √(0.12² + 0.08²) ≈ 0.144. Это за 1/15 с, значит 0.144 × 15 ≈ 2.16 рост/с. Это выше порога 2.0 правила 1.
Пропуск: «уронить под ноги» (запястье движется медленно). Ложная тревога: сильный бросок, при котором банка попала в урну (быстро и предмет отпущен, но это не выброс).
Нет. Это доля скорости при условии, что в модели есть и другие признаки (особенно расстояние вне урны). Расстояние вне урны уже почти полностью объясняет выброс, поэтому за скоростью осталась лишь роль немного «придавить» быстрые, но нормальные сцены вроде взмаха рукой. Нельзя толковать один вес в отрыве от остальных.
Это зона воздержания от решения (0.4–0.6), поэтому система не выносит решение автоматически, а передаёт видео оператору. При одном пороге 0.52 сразу стало бы тревогой о выбросе, и ложные тревоги в неоднозначных сценах доставались бы людям без фильтра.
Добавьте в Код 1 пятый признак — «горизонтальное расстояние между рукой и урной в момент, когда банка отпущена». Сведите его значения для шести сцен в таблицу и в двух предложениях объясните, помогает ли он отличить «бросить в урну» от «уронить под ноги».
В функции make_dataset Кода 2 измените число обучающих сцен: 100 → 25 → 400 — и сравните точность на тесте у логистической регрессии и у «суставы + объект + MLP». Покажите на графике, как разница между двумя подходами меняется с объёмом данных.
| Новичкам | В графиках раздела 4 и таблице эксперимента раздела 5 достаточно увидеть только «в какой сцене ошибка» |
|---|---|
| Углублённо | Пусть учащиеся извлекут с помощью MediaPipe координаты суставов из короткого собственного видео (постановочная сцена с согласия участников) и подадут их в features из Кода 1 |
| Следующая часть | 5-2 От распознавания к созданию — в той же таблице признаков стрелку разворачивают в обратную сторону и создают движение |
Вы дочитали часть «5-1 CCTV: выброс мусора» до конца. Команда лаборатории подводит итоги — каждый по одной фразе.