Хабр, привет! Меня зовут Дмитрий, я руководитель проектов ИТ-компании SimbirSoft. Задачи с использованием ML-технологий мы решаем уже более 10 лет, и такие проекты встречаются в разных отраслях – от медицины до ритейла и промышленности. В этой статье хочу поделиться своим опытом и рассказать, какие сложности и нюансы имеют ML-задачи и как эффективно с этим работать с точки зрения управленца.

Можете воспринимать этот туториал как некий чек-лист, который позволит значительно сократить процент возможных ошибок при управлении ML-проектом. Статья будет полезна управленцам в команде разработки: тимлидам и техлидам, руководителям проектов, а также владельцам продуктов.

Что обсудить с заказчиком до старта проекта  

Начинать любой ML-проект рекомендуем с уточнения задач у заказчика, который, в свою очередь, должен предоставить ответы на все интересующие команду вопросы.

1. Объект исследования и задача, которую хочет решить бизнес.

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

2. Потребность в ML для решения поставленной задачи.

Первое, что нужно выяснить – можно ли решить задачу без ML и эмулировать результат людьми или кодом.

Если клиент хочет запустить новый продукт или фичу в существующем продукте, но еще не успел собрать достаточную базу продуктовых метрик, то вы будете иметь дело с продуктовой гипотезой. В таком случае имеет смысл пойти по пути lean startup и провести проверку гипотезы более дешевым способом. Например, за счет ручной эмуляции работы ML-модели. Это позволит убедиться в работоспособности продукта.

3. Экономическое обоснование проекта. 

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

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

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

Технико-экономическое обоснование – простейший источник метрик и целевых значений для оценки качества разрабатываемых моделей и алгоритмов.

4. Особенности разработки ML-алгоритмов.

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

Но если проект предполагает решение уникальной задачи, он практически сразу превращается в НИОКР, а значит требует исследования разных моделей и алгоритмов препроцессинга (то, что подается на вход модели) и постпроцессинга (то, как полученные из модели данные преобразуются для дальнейшего использования в системе).

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

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

5. Требования к данным.

Любая ML-модель обучается на основе данных. Это могут быть фотографии, текст, аудио и видеоматериалы и прочее. Возможность собрать датасет требуемого объема – необходимый пункт при старте ML-проекта. И чем больше этот датасет, тем лучше. Например,  популярная ML модель Segment Anything Model (SAM) обучалась на датасете из 11 млн изображений и более 1 млрд масок. 

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

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

6. Ожидания заказчика от финального результата. 

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

  • Какой точности алгоритма он хочет достигнуть, чем она обусловлена и как рассчитывается? 

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

  • Где должна исполняться ML-модель: в офлайн- или онлайн-режиме, на каком оборудовании, с какими требованиями к скорости обработки данных и т.п.

Окружение, в котором должна исполняться ML-модель, может оказать серьезное влияние на методы достижения результата. Например, вышеупомянутая SAM для стабильной работы требует более 30 Гб оперативной памяти, что не позволяет использовать ее на мобильных устройствах в офлайн-режиме. 

  • Доступны ли на проекте мощные вычислительные ресурсы для обучения ML-модели?

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

Стоимость оборудования может быть значительной. Например, для приобретения GPU NVIDIA TESLA A100 потребуется 1-2 млн рублей в зависимости от конкретной спецификации. Поэтому на старте проекта важно обсудить с заказчиком потребность в таком железе. 

Что учесть при оценке ML-проекта? 

После того, как эти моменты оговорены и согласованы с клиентом, можно приступать к оценке ML-проекта. При этом важно проработать следующие моменты:

  • Необходимый размер датасета и ответственного за его разметку. Важно уточнить, можно ли автоматизировать разметку и кто будет проводить валидацию размеченного датасета? 

  • Обзор имеющихся подходов к решению подобных задач. Как правило, выполняется в ходе первого этапа или на этапе предпроектного исследования. 

  • Количество итераций обучения модели и ориентировочный результат каждой итерации.

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

  • Способы проверки точности алгоритмов и в целом их работы.  

Также в оценку необходимо заложить:

  • Работы по «приземлению» модели и ее оптимизации для использования на конечном оборудовании.

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

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

  • Работы по оптимизации скорости выполнения алгоритма.

  • Работы по дообучению модели на реальных данных в ходе использования ПО. 

С чего начать работу над ML-проектом 

Первые этапы работы над таким проектом должны быть нацелены на снижение неопределенности. Для этого необходимо:

  • убедиться, что задача имеет известное решение 

  • понять, какие модели можно использовать для решения

  • проверить, что модель сможет работать в требуемом окружении.

Другими словами, важно закрыть вопросы, которые имеют наивысший уровень неопределенности.

Например, у нас был проект по разработке мобильного приложения, которое позволяло с помощью ML-алгоритма определять на фото RFID-метку на стволе дерева и размеры ствола. Наибольшую неопределенность у нас вызывали два вопроса:
1. Можно ли решить задачу проекта, используя известные подходы и ML-модели?
2. Можно ли реализовать нативное исполнение алгоритма в мобильном устройстве 

в офлайн-режиме, как этого требовали реальные условия применения решения? 

Чтобы получить ответы на эти вопросы, мы провели предпроектное исследование. Начали с создания прототипов RFID-меток. В нашем случае это были круги из картона с гвоздиком ????. Далее мы прикрепили прототипы к дереву, замерили его и получили информацию о реальном диаметре ствола. 

Для обнаружения метки на стволе и её размеров по фото ML-разработчик использовал готовое решение на основе openCV. Первые тесты показали неплохой результат, алгоритм распознавал метку – центр и окружность. Этот эксперимент позволил сформулировать набор рекомендаций для дальнейших работ. 

Backend-разработчик получил готовый алгоритм на Python и приступил к его адаптации для работы на Java. После переноса алгоритм показал аналогичный результат, а по скорости выполнения оказался даже быстрее. 

Однако при портировании в мобильное приложение всплыли неприятные моменты. В частности, поменялся цвет контура, находились ложные метки и результат расчетов стал отличаться от предыдущих. Дополнительные исследования позволили выяснить, что в мобильном приложении изменялся размер изображения и кодировка цвета. 

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

Как выстроить процесс по реализации ML-проекта в команде?

Здесь важно соблюсти 4 основных момента:

  • Итерации и демо для клиентов

В основе workflow ML-проекта – итеративная работа с обязательной фиксацией промежуточных результатов (то есть у вас должны быть запланированы контрольные точки) и проведением финальных демонстраций клиенту по итогам итераций. 

  • Приоритеты и декомпозиция задач для команды

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

При этом важно четко определить, какие задачи можно делать параллельно и расставить приоритеты. 

  • Отсутствие блокеров в работе

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

Чтобы избежать блокеров, когда работа над проектом может встать без результатов ML-команды, целесообразно заранее эмулировать результат ML-модели и отдать команде разработки. Например, если модель должна сегментировать объекты, можно эмулировать сегментацию, нарисовав сегменты вручную (создаем файл, где указываем координаты сегментов). Также это позволит заранее определить, какой тип данных будет ожидаться на выходе ML-модели. 

  • Контрольные точки

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

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

Как управлять ожиданиями заказчика и доносить результаты? 

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

Во-вторых, визуализируйте результаты. Заказчик «любит глазами», а ML-метрики, как правило, не интерпретируются на понятный бизнесу язык. Поэтому задача команды – внедрить понятную клиенту метрику либо пояснить, на основе каких параметров и коэффициентов формируется ML-метрика

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

Источник  
Источник  

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

Например, можно одновременно проводить несколько экспериментов. Затем их результаты сравниваются и наиболее результативный идет в “прод”. Но эксперимент с менее эффективным результатом тоже будет считаться успешно проведенным, поскольку он позволил команде выбрать более подходящий способ решения задачи. 

Вместо вывода

Если бы меня спросили, что нужно сделать для успешной реализации ML-проекта, то я бы  обязательно перечислил следующие пункты:

  • Определите и четко сформулируйте задачу, которую необходимо решить бизнесу с помощью ML-технологий.

  • Убедитесь в том, что использование ML оправданно и эффективно для решения конкретной задачи.

  • Погрузите заказчика в процессы и особенности ML-разработки. 

  • Зафиксируйте риски, которые могут возникнуть в ходе решения задачи.

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

  • Четко проговорите конечный результат. Убедитесь, что команда и заказчик имеют одинаковое видение. 

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

  • Снижайте неопределенность решения задачи на каждом этапе.

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

  • Определяйте контрольные точки по ходу решения ML-задач.

  • Визуализируйте результаты на понятном для не эксперта уровне.

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

На этом всё! Желаю всем интересных проектов и крутых результатов, которыми вы сможете гордиться! Если есть вопросы, пишите в комментариях, постараюсь ответить.

Больше наших статей по машинному обучению и обработке изображений:

Комментарии (0)