А вы что, и считать за меня будете?!

Вот удивился бы Вовка, столкнувшись в лесу Тридевятого царства с нашей ML-системой.

Машинное обучение (оно же – machine learning, ML) может применяться в разных сферах, в том числе и в лесной промышленности. Расскажем об одном из проектов, когда мы использовали ML при создании мобильного приложения для работы в полевых условиях – без Интернета и дополнительной подзарядки.

кадр из м/ф “Вовка в Тридевятом царстве”
кадр из м/ф “Вовка в Тридевятом царстве”

Предыстория

Один из наших клиентов обратился с нестандартным запросом – разработать приложение для измерения количества древесины и распознавания её параметров. Заказчик хотел внедрить ML-технологии, чтобы упростить задачу заготовки леса. В этом кейсе важно было не только исследовать возможности применения машинного обучения, но и сократить трудозатраты на реальных объектах, в частности, по фотографии маркировать пиловочник (спиленный лес), определять его размеры и вести подсчет спиленного леса.

кадр из м/ф “Вовка в Тридевятом царстве”
кадр из м/ф “Вовка в Тридевятом царстве”

И стали мы думать, как измерить диаметр ствола дерева? Нужно ли включать в расчет кору дерева? Как быстро измерить все стволы в штабеле, если у лесника на это уходит больше часа рабочего времени? Что делать, если нужно измерить массив леса?

Чтобы ответить на эти вопросы, до старта разработки требовалось проверить гипотезу – можно ли уместить алгоритм в мобильное решение и при этом экономно расходовать объем памяти устройства и заряд батареи. Поскольку все измерения будут проводиться «в поле», вернее, в лесу, специалистам важно иметь под рукой приложение, работающее без подключения к Интернету.

Клиента интересовали две основные задачи:

  • Учет леса – измерение диаметра ствола дерева.
  • Маркировка пиловочника – измерение диаметра спила и маркировка RFID-меткой.

Предпроектные исследования: снижаем неопределенность

Вопросов было больше, чем ответов. Поэтому мы начали с предпроектного исследования и вместе с заказчиком наметили основные задачи:

  • Реализовать модель распознавания пиловочника и его подсчет.
  • Перевести алгоритм с Python на Java для нативного запуска на Android-платформе.
  • Перенести алгоритм в мобильное приложение.

В ходе предпроектных исследований мы создали несколько тестовых образцов меток для деревьев в виде картонных кругов – позже клиент предполагал использовать RFID-метки (Примечание. Они содержали информацию о дереве: тип, размер, диаметр, координаты, а также дату и время сканирования). Сфотографировали деревья в разных ракурсах и начали применять существующие алгоритмы распознавания.

Метки были обнаружены в 80% случаев (Примечание. Это позволило понять, что задача реализуема. Забегая вперед, скажем, что в ходе реализации проекта мы достигли 100%). Алгоритм распознавал центр и радиус метки по количеству пикселей и координатам – в зависимости от качества фотографии.

Приступаем к разработке MVP приложения

После успешных тестов на Python команда проекта приступила к переносу алгоритма в мобильное приложение.

Однако после перевода алгоритма на Java обнаружились «сюрпризы». В частности, цвет метки в мобильном приложении изменился, появились ложные метки, а также изменился размер. Опытным путем мы выяснили причины – при переносе изменился размер фотографии, добавился прозрачный слой, а формат стал не RGB, а BGR (тип субпиксельного макета). В итоге приняли решение продолжить работу и дописывать мобильное приложение, а для корректного отображения с помощью специальных программ конвертировали все изображения в нужный формат.

А вы что, и считать за меня будете?!

Тестируем решение в полевых условиях

На следующем этапе нужно было проверить работу мобильного приложения в реальной практике на устройствах, которые используют лесники – в разное время года при разных типах освещения и на разных породах деревьев.

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

  • учет стоячего леса: на основе фото ствола дерева с эталонной линейкой
  • маркировка пиловочника: на основе фото с меткой на спиле дерева

Для обучения потребовалось около 300 фотографий: по 100 – для обучения, повышения точности и конечной обработки. У каждой должны были быть проведены замеры реального ствола. Это было необходимо, чтобы обучить алгоритм.

Тут мы столкнулись сразу с несколькими проблемами:

  • Снег перекрывал ствол дерева.
  • Большой диаметр ствола – некоторые деревья были настолько огромные, что не попадали на фотографию целиком.
  • Структура и окружность ствола была неровная – поэтому в некоторых случаях нужно было измерять по одному параметру окружности спила, как правило, наименьшему.
  • Перекрытие стволов было нечетким – потребовалось дорисовать некоторые контуры диаметров, поскольку иногда они накладывались друг на друга, и т.п.

Изменение центровки метки на спиле ствола. По технологическим причинам стало невозможно располагать метку в центре ствола и пришлось переобучать алгоритм заново распознавать метку, размещенную в любом месте круга.

А вы что, и считать за меня будете?!

Обучаем алгоритм

Для обучения алгоритма использовали несколько шагов, чтобы получить более точные замеры:

  • Выделение контуров
А вы что, и считать за меня будете?!
  • Сегментация по цвету
А вы что, и считать за меня будете?!
  • Сегментация на супер пиксели
А вы что, и считать за меня будете?!

Каждая доработка алгоритма добавляла «вес» приложению, но при этом мы старались добиться точного измерения диаметра ствола.

Комбинация методов и упор на качестве позволили обучить алгоритм измерять диаметры стволов со средней ошибкой в 2 см от реального размера, измеренного вручную.

В начале проекта заказчик и команда были уверены в использовании круглых RFID-меток для подсчета леса, но в процессе обучения клиент предложил использовать длинную линейку. Выглядело бы это так: лесник прикладывает к стволу дерева линейку, делает фото, а система определяет диаметр.

Но и в этом случае без ошибок не обошлось – в некоторых случаях качество фото не позволяло сделать замеры. В результате мы создали для лесников рекомендации, чтобы в кадр не попадали лишние предметы и руки, а фото было не размытым. Так алгоритм мог определить ствол.

А вы что, и считать за меня будете?!

Чуть позже за основу измерений было принято решение брать самое узкое место. Это позволило после нескольких тестов получать результат измерения диаметра ствола с помощью одного мобильного устройства. При этом вся информация сразу же сохранялась в память телефона и при наличии Сети отправлялась на веб-сервер заказчика.

Предварительные результаты

За 3,5 месяца клиент получил MVP приложения, которое помогло:

  • Получить полный контроль за жизненным циклом древесины (учет стоячего леса – сруб – учет пиловочника – маркировка – транспортировка – сканирование спиленного пиловочника на КПП – контроль за перемещением). Вся информация оцифрована и постоянно обновляется.
  • Автоматизировать рутинный труд и снизить количество ошибок.
  • Сократить процент потерь.
кадр из м/ф “Вовка в Тридевятом царстве”
кадр из м/ф “Вовка в Тридевятом царстве”

В планах продолжить работать над новыми задачами:

  • Использовать ML для определения породы дерева (кедр, сосна и т.п) и его состояния (норма, гниль и т.п.): сейчас лесники выполняют эту работу вручную.
  • Использовать лазер для измерения высоты дерева.
  • Использовать частоту RFID-метки для улучшения точности распознавания за счет определения расстояния до метки на дереве по частоте ее излучения.
  • Использовать метки для учета массива леса (сколько на этой территории промаркированного леса).

Если предпочитаете видеоформат, об этом кейсе рассказывали тут.

Еще немного про ML

В начале мы говорили про использование ML в разных сферах. Вот некоторые примеры использования машинного обучения для реализации некоторых задач:

  • Распознавание объектов или фрагментов объектов (аудио, видео и изображений).

Наша команда разработала систему по распознаванию текста газет, изданных в XIX веке – приложение для поиска родственников и составления генеалогического древа. Команда проекта обработала в общей сложности около 650 млн газетных страниц и создала 7 ML-моделей. Подробнее рассказывали здесь.

  • Преобразование результатов распознавания, например, перевод текста с бумажных носителей в цифровой формат.

Для одной из страховых компаний создали решение по автоматизации процесса работы с пациентом c помощью машинного обучения. Заказчик получил систему, которая помогает выявлять нестраховые случаи, дает рекомендации для пациента после выписки, прогнозирует его состояние и самочувствие спустя 30, 60 и 90 дней.

  • Предиктивная аналитика негативных сценариев на основе распознанных данных.

Наша команда работала над системой, которая может подсказывать и предотвращать инциденты за 10-15 минут до их наступления и предупреждать персонал. Это помогает клиенту обеспечить стабильную работу сервиса.

Подробнее про ML и областях его использования рассказывали здесь. Если остались вопросы, пишите нам в Telegram. Другие кейсы можете посмотреть в нашем портфолио.

2424
13 комментариев

Обычно тяжелые алгоритмы в телефоне жрут батарейку. Как решали эту проблему?

1
Ответить

Принимая во внимание тот факт, что алгоритм должен работать на мобильном устройстве оффлайн, мы подбирали вычислительную сложность модели таким образом, чтобы она и училась хорошо, и не была слишком сложной и требовательной к ресурсам.

Так же мы оптимизировали размер пакета с алгоритмом в рамках мобильного приложения, что позволило сократить размер приложения и нагрузку на уровень заряда.

3
Ответить

Очень интересная работа! Скажите, для распознавания контуров и сегментации изображений вы использовали готовые алгоритмы или создавали их сами под данную задачу?

1
Ответить

Начали с того, что в целом убедились, что задача имеет известное решение. Затем самостоятельно разработали алгоритмы и итеративно их улучшали для получения необходимой точности.

2
Ответить

Вы пишете, что для обучение потребовалось 300 фотографий. Обычно для машинного обучения требуются гораздо больше данных. Разве трехсот фотографий хватило?

1
Ответить

Мы использовали семантическую сегментацию для распознавания дерева. В этом случае классифицируется каждый пиксель (дерево/фон) и для таких задач, как правило, достаточен небольшой набор данных

1
Ответить

Очень интересная стать. Подробно описали все свои гипотизы и результат. 👍

1
Ответить