В мае Rusbase публиковал колонку о том, как с помощью нейронной сети найти потерявшегося в лесу человека. Мы продолжаем простым языком рассказывать об обучении нейронок — на этот раз поговорим о том, как технология применяется в агропромышленном комплексе. Кейсом по автоматизации учета свиней поделился Фарид Нигматуллин, генеральный директор компании «ВидеоМатрикс».
Задача
Наша компания занимается разработкой ПО и промышленной видеоаналитикой — это когда видеокамеры в сочетании с софтом автоматизируют процессы контроля и управления на крупных предприятиях. Более 20 лет исследований и работы с CV, AI, ML принесли нам опыт, которым мы готовы делиться.
Наши продукты не применяются для распознавания номеров машин, чтобы открывать шлагбаум. Они решают более сложные, а подчас нереальные задачи. Одна из таких случилась с нами относительно недавно.
Заказчик, крупный агрохолдинг, пришел с просьбой автоматизировать учет свиней во время приемки на мясокомбинат. При этом целевая точность подсчета была на отметке 99,9%. Кто-то тяжело вздохнул и отказался, а мы тяжело вздохнули и взялись за работу. Как это было и что из этого вышло — рассказываем впервые.
Для выполнения задачи мы использовали специально обученную нейронную сеть и инструмент трекинга — слежения за каждой свинкой персонально. Концепция такова: над коридором, где проходят животные из транспортировщика в ангар, устанавливается видеокамера. Сверху компьютерное зрение видит движение, распознает в нем каждую свинью в отдельности и следит за ее траекторией движения. Если хрюша прошла от левой части экрана в правую и окончательно исчезла из кадра — срабатывает счетчик.
Важно обратить внимание, что свиньи не двигаются линейно по прямой слева направо, это то еще броуновское движение. Поэтому использовали именно трекинг и отказались от идеи подсчета животного по факту пересечения условной линии в центре кадра. Пересечение могло быть неоднократным — туда-сюда, и это все один и тот же свин.
Инструменты реализации
Распознавала в кадре свинью специально обученная нейронная сеть. Выбор ее архитектуры, фреймворка для обучения делался на этапе планирования. При этом учитывались знания разработчика о том, как обучать и настраивать ту или иную нейронную сеть, нужные гиперпараметры.
Гиперпараметры — это набор параметров для алгоритмов машинного обучения, которые определяют общие свойства. Например, размерность входного слоя нейросети, скорость обучения. В процессе нейронной моделью определяется функция стоимости.
Это функция от набора данных, которые в текущий момент обрабатываются. При анализе ошибки потерь функции, можно сделать вывод, качественно мы обучаемся или нет. Цель — минимизация этой ошибки. Чем ниже потери, тем меньше расхождения данных от сети и размеченных данных.
Сначала мы выбрали Single Shot Detector 300х300, дающий примерную точность на старте 50%. Этот детектор смог потянуть CPU на сервере заказчика, GPU был приобретен уже позже. Разница между центральным и графическим процессором — как минимум в скорости обработки кадра. Условно: на CPU один кадр обрабатывается 30 секунд, на GPU — секунду.
Для совершенствования сети использовался алгоритм обучения с учителем. Традиционный атрибут данных при этом — разметка. Выбранный фреймворк должен быть единым для всех разработчиков, потому что его библиотеки прокидываются на уровень проекта, трекера, им нужно хорошо взаимодействовать между собой.
Если будем каждый раз размечать картинку и обучать сеть на новом, то просто не хватит времени разработки — перестраиваться с одного фреймворка на другой и обратно. Для SSD-детектора используется XML-разметка. Она представляет из себя документ, в котором для каждого изображения указаны координаты описывающего прямоугольника и различные параметры изображения (ширина, высота, прочее). Такой учебник для нейронной сети.
Пример файла разметки
Кроме XML, есть JSON-разметки (для сетей PyTorch, TensorFlow), есть просто текстовые файлы (для сети YOLO, мы их тоже иногда используем). Есть экзотические форматы разметок для работы в MATLAB, но они специфические и мало популярные.
Основа выбрана. Дальше начинается циклический процесс: разметить на картинке свиней — дать посмотреть разметку нейронной сети — запустить ее на тестовом видео от заказчика — посмотреть результат — найти причины ошибок — скорректировать — повторить цикл. И так до точности 99%.
Первый шаг
После первой разметки и этапа обучения нейронная сеть показала точность 60%. Работы предстояло еще немало.
Пример кучности свиней — попробуй различить кто-где
Сеть прекрасно видела одну-две свиньи в кадре, но как только их набегала толкающаяся хаотичная толпа, нейронная модель «сдавалась». При этом функционал трекера делал упор именно на обработку скоплений, что в дальнейшем сильно помогло.
Тестировщики увидели первые видео и естественную скорость движения большого количества животных одновременно, заподозрили — тестирование ПО будет не из простых.
Второй шаг. Есть счастье в GPU
Надо сказать отдельное спасибо заказчику, который безукоризненно поставлял новые объемы видеосъемки с производства для обучения и тестирования нейросети, а вскоре и приобрел GPU. Так мы смогли перейти на модель большей размерности — SSD 512.
После очередной итерации обучения, как различать в массиве одинаковых спин каждую отдельную свинью, нейронная сеть показала результат 95%. Оставалось чуть-чуть и одновременно очень много — еще 4% до цели.
Главное, понять, где ошибается сеть. Скорректировать ее ошибки и увеличить точность до необходимой можно на новых размеченных данных.
Сеть в рамках своих знаний-умений обрабатывает кадры. Затем на основе признаков изображения расставляет весовые коэффициенты для каждых данных. Сравнивает свои результаты с результатами, которые были даны ей человеком на разметке. Сопоставляет, а затем с использованием специальных механизмов начинает обратное распространение ошибки, чтобы ее минимизировать.
Тестировщики усердно вычисляли свиней, на которых происходит ошибка, находили закономерности и причины.
Третий шаг. Человек — не свинья
Нейронная сеть «смотрит» примитивами — геометрическими фигурами. Для нее здание — это прямоугольник, изыски архитектурного декора она уже не оценит. Розовая свинка — это светлый овал. И когда в кадре появился сотрудник в белом халате, нейросеть радостно причислила его к тому же классу. А иногда и делала ложные срабатывания на каски и лопатки, которыми направляли животных.
В погоне за точностью мы выставляли высокие пороги достоверности. Порог 0,8 означает: если нейросеть уверена, что определила именно свинью на 80% и более — данные отображались, если меньше 80% — игнорировались.
Человек в белой спецодежде, с точки зрения нейронной сети, очень похож на целевой объект
Более того, как бы ни была печальна реальность — не все свиньи попадали в колбасу. Часть из-за своего физического состояния отказывалась двигаться в потоке, а иногда и двигаться вообще. Умерших и забитых вручную в коридоре свиней нужно было также удалять фильтрацией. Тут вводили специальные пороги для трекера. Они учитывали ситуацию и отсекали неподвижную хрюшу, которую утащили за пределы зоны коридора.
Тестировщики принесли на рабочее место валерьянку и пустырник.
Четвертый шаг. Хрюши бывают разные
Взяли новое видео. Прогнали данные. Нейронная сеть показала себя «свиным расистом» и не считала за хрюш тех, кто не чисто розовый. Надо сказать, что чистыми в принципе свиньи бывают не каждый раз, а у некоторых — порода от рождения подразумевает разный цвет, а то и черную шерсть.
Добавляем новый объем репрезентативных изображений в дата-сет — теперь с разноцветными, грязными и мохнатыми животными. Отправляем нейросеть учить матчасть заново.
Свинья с бурыми пятнами
Тестировщики вместо овец на ночь начали считать свиней.
Пятый шаг. Свинское поведение
Нейронная сеть хорошо решает задачу детекции и классификации — увидеть и сказать: «Это свинья». Однако задача касалась именно учета — «сколько точно вешать в граммах». Хрюши ведут себя по-свински. Это плотное, хаотичное движение бок о бок, рыло о рыло, иногда выход за кадр и появление обратно раз 15.
Здесь на помощь пришел трекинг. Мы разработали ПО, которое изучает цвет, размер объекта и его баллистические характеристики: скорость движения, вектор, инерционность. Если объект исчезает из кадра, эти данные позволяют предугадать, где он появится в следующий момент, с высокой вероятностью.
Учить софт быть Вангой тоже пришлось в несколько итераций. В свинячьем случае просто продлить вектор по прямой не получится. Сначала делали расчет близости объектов, затем уже принимались во внимание скорость, ускорения, инерционность, допустимый сектор движения, предикативность, радиус возможной посадки. И так до достижения необходимой нам точности.
Здесь вы можете посочувствовать нашим окончательно «усвинячевшимся» тестировщикам. Они вынуждены были смотреть видео по нескольку раз и считать снова и снова, покадрово листая и считая вручную животных, сбиваясь в хаосе туш, изобретая новые формулировки в русском языке.
Посчитать хрюш в движении с первого раза было очень непросто
Цифры и факты
На презентации пилота заказчику нейронная сеть показала точность 98%. Достичь этой планки позволила скрупулезная работа над показателем на каждом этапе задачи. Невозможно доработать до максимальной детекции, но не протречить, или хорошо протречить, но использовать посредственный детектор.
Для достигнутых нами в окончательном итоге 99,9% нельзя компенсировать одно другим, срабатывает только суммарный синергетический эффект всех составляющих.
Учеба нашей нейросети была основательной. У нас ушло около 10 терабайт видеоматериалов, шесть месяцев времени, а дата-сет состоял из более 110 тысяч изображений самых различных свиней.
Ни один тестировщик не пострадал.
«Свинку жалко»
Задача автоматического учета приемки животных на АПК стоит в нашем опыте на особенном месте.
- Во-первых, озадачила точность в 99,9% при абсолютной однотипности и кучности считаемых объектов. Многие просто не верили, что это реально.
- Во-вторых, эти однотипные объекты не двигались ни по алгоритму, ни по команде, а как захотелось.
- В-третьих, некоторые разработчики просто отказывались работать с контентом по морально-этическим причинам. Одно дело видеть на столе колбасу и копченый окорок, другое — смотреть на живых свиней и производственный процесс.
Конкретно эту обученную нейронную сеть не получится масштабировать на учет других животных. Разве что попытаться считать схожих по размеру и цвету овец и быть готовым к снижению точности результата. Но наработанные принципы, алгоритмы работы и трекинг прекрасно ложатся в новые похожие задачи. После хрюш нам любая задача по плечу.
Нашли опечатку? Выделите текст и нажмите Ctrl + Enter
Материалы по теме
- Пройти курс «Как заработать на продажaх»
- 1 Словарь: чем различаются машинное и глубокое обучение
- 2 В сети появилось приложение, «раздевающее» женщин с помощью нейросети
- 3 Нейросеть научили генерировать случайные резюме
- 4 Как Uber применяет в бизнесе машинное обучение
- 5 Дышащие куклы, VR и нейросети-сценаристы — как технологии меняют индустрию кино
ВОЗМОЖНОСТИ
11 ноября 2024
12 ноября 2024
13 ноября 2024
13 ноября 2024