Лосось, турбины и федеральные регуляторы
Представьте себе гидроэлектростанцию на северо-западе США. Вода крутит турбины, вырабатывает мегаватты, а параллельно по специальным каналам мигрирует лосось. Федеральная комиссия по регулированию энергетики (FERC) требует от операторов станций отчитываться: сколько рыбы прошло через их сооружения. Раньше биологи сидели перед мониторами и вручную кликали на каждую рыбу на видео. Шесть часов в день, месяц за месяцем. Скучно, дорого, люди устают и ошибаются.
Наш заказчик — компания, которая мониторит десятки таких станций. Они пришли с вопросом: "Можем ли мы автоматизировать подсчет?" Ответ "да, конечно" был наивным. Мы думали, что достаточно взять готовую модель для детекции объектов (YOLO, Detectron2) и обучить её на размеченных данных. Иллюзия разбилась о реальность в первый же день тестирования.
Главная ошибка новичков в data-centric проектах: думать, что проблема — в модели. На самом деле проблема почти всегда — в данных, в процессе их сбора и в том, как в этот процесс встроен человек.
Почему ИИ видит призраков в мутной воде
Первая же модель, обученная на тысячах размеченных кадров, начала детектировать рыбу там, где её не было. Пузырьки воздуха, блики на воде, тени, мусор — всё это она уверенно классифицировала как "лосось". Точность по метрикам (mAP) была приличной — 92%. На тестовом наборе. В реальном потоке с новой камеры — катастрофа.
Мы столкнулись с классической проблемой domain shift. Данные для обучения собирались летом, при хорошем освещении. Система же должна работать круглый год: осенью вода мутная, зимой — лед, весной — паводок с илом. Каждая новая камера давала свой цветовой профиль, свой угол, своё искажение.
1Шаг первый: признать поражение модели
Вместо того чтобы месяцами тюнить гиперпараметры и пробовать новые архитектуры (именно так делает большинство команд), мы остановились. Собрали всех: data scientist'ов, биологов-экспертов, инженеров по видеонаблюдению. Спросили: "Что именно видит человек, когда отличает рыбу от пузыря?"
Оказалось, биологи смотрят не на один кадр. Они отслеживают движение. Рыба плывет по определённой траектории, с определенной скоростью. Пузырь всплывает иначе. Тень статична. Эти эвристики мы не могли закодировать в правила — слишком много исключений. Но мы могли использовать их для создания лучшего конвейера данных.
Архитектура, где человек не проверяет, а учит
Мы отказались от идеи "полная автоматизация". Вместо этого построили human-in-the-loop систему, где ИИ и человек работают в симбиозе. Ключевое отличие: человек здесь не исправляет ошибки ИИ постфактум. Он активно участвует в улучшении модели на лету.
| Компонент | Роль | Технологии |
|---|---|---|
| Детектор-фильтр | Находит ВСЕ похожие на рыбу объекты (высокий recall) | YOLOv8 с низким порогом уверенности |
| Интерфейс разметки | Показывает биологу спорные случаи | Custom Vue.js + WebSocket |
| Трекинг | Следит за объектами между кадрами | ByteTrack + кастомные правила |
| Активное обучение | Выбирает, какие данные показать эксперту | Uncertainty sampling (на основе энтропии) |
| Конвейер переобучения | Автоматически обновляет модель | Airflow + MLflow, аналогично подходу из статьи про автономных агентов |
2Шаг второй: построить конвейер, а не модель
Рабочий процесс выглядит так:
- Видеопоток разбивается на фрагменты по 5 минут.
- Детектор-фильтр находит все потенциальные объекты (даже с уверенностью 10%).
- Система трекинга группирует детекции в "треки" — предполагаемые траектории движения.
- Алгоритм активного обучения выбирает 5% самых "неуверенных" или "аномальных" треков.
- Эти треки попадают в веб-интерфейс биолога, который быстро подтверждает или отвергает их.
- Новые размеченные данные автоматически добавляются в тренировочный набор.
- Каждую ночь запускается инкрементальное дообучение модели.
Через две недели такой работы точность системы на новых условиях (мутная вода, новая камера) выросла с 65% до 94%. При этом биологи тратили не 6 часов в день, а 40 минут. Их работа стала не рутинной проверкой, а интеллектуальным контролем качества.
Где спрятаны настоящие проблемы data-centric проектов
Техническая часть — это только верхушка айсберга. Основные сложности начинаются, когда вы пытаетесь внедрить это в реальную организацию.
Самый частый вопрос заказчика: "А когда мы сможем уволить биологов?" Это ловушка. Цель human-in-the-loop не заменить людей, а сделать их работу в 10 раз эффективнее.
Мы столкнулись с тремя неочевидными проблемами:
- Юридическая валидация: Отчеты для FERC имеют юридическую силу. Если система ошибется, компания получит штраф. Нам пришлось внедрить механизм цифровой подписи биолога для каждого отчета и вести полный аудит всех действий системы и человека. Каждая детекция, каждое исправление, каждая версия модели — всё фиксировалось в immutable storage.
- Смещение экспертов: Оказалось, разные биологи по-разному маркируют одни и те же сложные случаи. Один считает размытый силуэт рыбой, другой — нет. Пришлось ввести эталонного эксперта и метрики согласия между аннотаторами (Cohen's kappa).
- Дрейф данных в реальном времени: Однажды ночью в кадр попала палка, которая плавала кругами три дня. Система сначала классифицировала её как мусор, потом как аномалию, а потом, после нескольких подтверждений биолога, создала новый класс "плавающий мусор". Это потребовало реализации online learning с защитой от катастрофической забывчивости.
Для управления версиями данных, моделей и метаданных мы использовали подход, похожий на тот, что описан в статье про DataHub и MCP, но адаптированный под специфику видеоданных.
Чеклист: как не провалить научный проект с данными
Если вы начинаете похожий проект — в экологии, медицине, промышленности — вот что нужно сделать в первую очередь:
3До первой строчки кода
- Проведите хотя бы один день с экспертом-биологом (врачом, технологом). Смотрите, как он работает. Записывайте его неформальные правила.
- Спросите о крайних случаях: "Что самое сложное для распознавания? Когда вы чаще всего ошибаетесь?"
- Узнайте юридические требования к отчетности. Нужны ли подписи, аудит, определённые форматы?
- Соберите данные со всех возможных условий работы (разное время года, разное оборудование, разные места). Если нет — запланируйте сбор.
4При разработке
- Начните с простого интерфейса для разметки данных экспертом. Не с модели. Данные важнее архитектуры.
- Реализуйте активное обучение с самого начала. Не накапливайте "грязные" данные месяцами.
- Постройте конвейер воспроизводимости: каждая версия модели должна быть привязана к конкретной версии данных и коду, как в гайде по Claude Code.
- Внедрите мониторинг дрейфа данных: статистика входящих изображений, распределение уверенностей модели, частота обращений к эксперту.
5При внедрении
- Не продавайте "полную автоматизацию". Продавайте "10-кратное ускорение работы эксперта".
- Проведите слепой тест: сравните результаты системы+эксперта vs эксперт в одиночку. Измерьте время и точность.
- Создайте документацию не только для инженеров, но и для экспертов-биологов. На понятном им языке.
- Оставьте механизм "вето": эксперт должен иметь возможность отключить автоматику для сложного участка и разметить всё вручную.
Что мы поняли, считая рыбу три года
Прошло три года с момента первого пилота. Система работает на 17 гидроэлектростанциях. Подсчитала больше 2 миллионов рыб. И мы пришли к неочевидным выводам:
- Лучшая модель — не самая точная, а самая "калиброванная". Модель, которая уверена только когда действительно уверена, лучше модели с максимальным mAP. Потому что она реже беспокоит эксперта понапрасну.
- Данные устаревают быстрее, чем вы думаете. Мы переобучаем модель раз в неделю, даже если метрики стабильны. Просто потому что появляются новые типы помех, новые условия съемки.
- Эксперты становятся лучше, работая с системой. Биологи начали замечать закономерности, которые раньше упускали. Система задавала им вопросы (через активное обучение), и они глубже вникали в материал.
- Юридическая сторона определяет архитектуру. Требования FERC к аудиту заставили нас построить систему, где каждый шаг логируется. Это оказалось лучшей практикой для отладки.
Сейчас мы экспериментируем с добавлением мультимодальности — пытаемся использовать не только видео, но и данные гидродатчиков (скорость течения, температура воды) для улучшения предсказаний. И снова human-in-the-loop: эксперт помогает определить, какие сенсорные данные действительно коррелируют с поведением рыбы.
В мире, где все говорят про автономный ИИ, самый практичный подход часто оказывается гибридным. Не человек для ИИ, и не ИИ для человека. А симбиоз, где каждый делает то, что умеет лучше всего. Компьютер — быстро обрабатывает терабайты данных. Человек — применяет контекст, интуицию, экспертизу. Вместе они считают лосося, диагностируют опухоли, ищут дефекты на производстве. И делают это лучше, чем по отдельности.
А следующий вызов — масштабирование этого подхода. Не 17 станций, а 170. Не 5 экспертов, а 50. И здесь нам пригодятся уроки из статьи про Kubernetes и ИИ — как управлять распределёнными human-in-the-loop системами без потери контроля. Но это уже другая история.