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

Вот удивился бы Вовка, столкнувшись в лесу Тридевятого царства с нашей 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. Другие кейсы можете посмотреть в нашем портфолио.

0
13 комментариев
Написать комментарий...
Денис С

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

Ответить
Развернуть ветку
Клинышев Дмитрий

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

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

Ответить
Развернуть ветку
Наталья Лысенко

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

Ответить
Развернуть ветку
Клинышев Дмитрий

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

Ответить
Развернуть ветку
Александр Даржаин

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

Ответить
Развернуть ветку
Клинышев Дмитрий

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

Ответить
Развернуть ветку
Elena

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

Ответить
Развернуть ветку
Dimitri

Да, полезно. Благодарю.

Ответить
Развернуть ветку
Konstantin Konov

У вас есть опубликованные кейсы с данными? мл специалистам было бы интересно попробовать порешать ваши задачи или посмотреть решение

Ответить
Развернуть ветку
SimbirSoft

На сайте их не так много https://www.simbirsoft.com/portfolio/tag/machine-learning/ Можете написать в личку ваши контактные данные. Передадим коллегам, они уточнят, что вам было бы интересно узнать и отправят презентацию с описанием кейсами, расскажут, что делали в рамках необходимых вам задач, проанализируют, предложат варианты

Ответить
Развернуть ветку
SimbirSoft

или вы хотели дать задачу для решения вашим коллегам?

Ответить
Развернуть ветку
Konstantin Konov

Иногда компании выставляют свои задачи на ds хакатоны, есть ли у вас в компании такая практика?

Ответить
Развернуть ветку
SimbirSoft

В данном случае мы работали по заказу клиента.

Ответить
Развернуть ветку
10 комментариев
Раскрывать всегда