Human-in-the-loop кейс: подсчет рыбы для гидроэлектростанций и data-centric подход | AiManual
AiManual Logo Ai / Manual.
11 Янв 2026 Гайд

Когда нейросеть ошибается: как мы учили ИИ считать лосося и почему без человека не обойтись

Реальный проект: автоматизация подсчета лосося для FERC с human-in-the-loop. Архитектура, ошибки, управление данными и почему ИИ один не справляется.

Лосось, турбины и федеральные регуляторы

Представьте себе гидроэлектростанцию на северо-западе США. Вода крутит турбины, вырабатывает мегаватты, а параллельно по специальным каналам мигрирует лосось. Федеральная комиссия по регулированию энергетики (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Шаг второй: построить конвейер, а не модель

Рабочий процесс выглядит так:

  1. Видеопоток разбивается на фрагменты по 5 минут.
  2. Детектор-фильтр находит все потенциальные объекты (даже с уверенностью 10%).
  3. Система трекинга группирует детекции в "треки" — предполагаемые траектории движения.
  4. Алгоритм активного обучения выбирает 5% самых "неуверенных" или "аномальных" треков.
  5. Эти треки попадают в веб-интерфейс биолога, который быстро подтверждает или отвергает их.
  6. Новые размеченные данные автоматически добавляются в тренировочный набор.
  7. Каждую ночь запускается инкрементальное дообучение модели.

Через две недели такой работы точность системы на новых условиях (мутная вода, новая камера) выросла с 65% до 94%. При этом биологи тратили не 6 часов в день, а 40 минут. Их работа стала не рутинной проверкой, а интеллектуальным контролем качества.

Где спрятаны настоящие проблемы data-centric проектов

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

Самый частый вопрос заказчика: "А когда мы сможем уволить биологов?" Это ловушка. Цель human-in-the-loop не заменить людей, а сделать их работу в 10 раз эффективнее.

Мы столкнулись с тремя неочевидными проблемами:

  • Юридическая валидация: Отчеты для FERC имеют юридическую силу. Если система ошибется, компания получит штраф. Нам пришлось внедрить механизм цифровой подписи биолога для каждого отчета и вести полный аудит всех действий системы и человека. Каждая детекция, каждое исправление, каждая версия модели — всё фиксировалось в immutable storage.
  • Смещение экспертов: Оказалось, разные биологи по-разному маркируют одни и те же сложные случаи. Один считает размытый силуэт рыбой, другой — нет. Пришлось ввести эталонного эксперта и метрики согласия между аннотаторами (Cohen's kappa).
  • Дрейф данных в реальном времени: Однажды ночью в кадр попала палка, которая плавала кругами три дня. Система сначала классифицировала её как мусор, потом как аномалию, а потом, после нескольких подтверждений биолога, создала новый класс "плавающий мусор". Это потребовало реализации online learning с защитой от катастрофической забывчивости.

Для управления версиями данных, моделей и метаданных мы использовали подход, похожий на тот, что описан в статье про DataHub и MCP, но адаптированный под специфику видеоданных.

Чеклист: как не провалить научный проект с данными

Если вы начинаете похожий проект — в экологии, медицине, промышленности — вот что нужно сделать в первую очередь:

3До первой строчки кода

  1. Проведите хотя бы один день с экспертом-биологом (врачом, технологом). Смотрите, как он работает. Записывайте его неформальные правила.
  2. Спросите о крайних случаях: "Что самое сложное для распознавания? Когда вы чаще всего ошибаетесь?"
  3. Узнайте юридические требования к отчетности. Нужны ли подписи, аудит, определённые форматы?
  4. Соберите данные со всех возможных условий работы (разное время года, разное оборудование, разные места). Если нет — запланируйте сбор.

4При разработке

  1. Начните с простого интерфейса для разметки данных экспертом. Не с модели. Данные важнее архитектуры.
  2. Реализуйте активное обучение с самого начала. Не накапливайте "грязные" данные месяцами.
  3. Постройте конвейер воспроизводимости: каждая версия модели должна быть привязана к конкретной версии данных и коду, как в гайде по Claude Code.
  4. Внедрите мониторинг дрейфа данных: статистика входящих изображений, распределение уверенностей модели, частота обращений к эксперту.

5При внедрении

  1. Не продавайте "полную автоматизацию". Продавайте "10-кратное ускорение работы эксперта".
  2. Проведите слепой тест: сравните результаты системы+эксперта vs эксперт в одиночку. Измерьте время и точность.
  3. Создайте документацию не только для инженеров, но и для экспертов-биологов. На понятном им языке.
  4. Оставьте механизм "вето": эксперт должен иметь возможность отключить автоматику для сложного участка и разметить всё вручную.

Что мы поняли, считая рыбу три года

Прошло три года с момента первого пилота. Система работает на 17 гидроэлектростанциях. Подсчитала больше 2 миллионов рыб. И мы пришли к неочевидным выводам:

  • Лучшая модель — не самая точная, а самая "калиброванная". Модель, которая уверена только когда действительно уверена, лучше модели с максимальным mAP. Потому что она реже беспокоит эксперта понапрасну.
  • Данные устаревают быстрее, чем вы думаете. Мы переобучаем модель раз в неделю, даже если метрики стабильны. Просто потому что появляются новые типы помех, новые условия съемки.
  • Эксперты становятся лучше, работая с системой. Биологи начали замечать закономерности, которые раньше упускали. Система задавала им вопросы (через активное обучение), и они глубже вникали в материал.
  • Юридическая сторона определяет архитектуру. Требования FERC к аудиту заставили нас построить систему, где каждый шаг логируется. Это оказалось лучшей практикой для отладки.

Сейчас мы экспериментируем с добавлением мультимодальности — пытаемся использовать не только видео, но и данные гидродатчиков (скорость течения, температура воды) для улучшения предсказаний. И снова human-in-the-loop: эксперт помогает определить, какие сенсорные данные действительно коррелируют с поведением рыбы.

💡
Если вы делаете похожий проект, спросите себя: что в вашем конвейере делает человек? Если он только ставит галочки "верно/неверно", вы используете 10% его потенциала. Научите систему задавать эксперту умные вопросы.

В мире, где все говорят про автономный ИИ, самый практичный подход часто оказывается гибридным. Не человек для ИИ, и не ИИ для человека. А симбиоз, где каждый делает то, что умеет лучше всего. Компьютер — быстро обрабатывает терабайты данных. Человек — применяет контекст, интуицию, экспертизу. Вместе они считают лосося, диагностируют опухоли, ищут дефекты на производстве. И делают это лучше, чем по отдельности.

А следующий вызов — масштабирование этого подхода. Не 17 станций, а 170. Не 5 экспертов, а 50. И здесь нам пригодятся уроки из статьи про Kubernetes и ИИ — как управлять распределёнными human-in-the-loop системами без потери контроля. Но это уже другая история.