Машинное зрение: почему вам оно, возможно, не понадобится

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

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

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

Не придумывайте велосипед

Посмотрите на уже готовое. Это банально, но в 90% случаев оно будет. Распознавание лиц. Распознавание номеров. Учёт автомобилей. Распознавание документов. Распознавание товаров в магазинах. Распознавание эмоций. Учёт рабочего времени, проверка безопасности. Гуглите решения. На всё есть коммерческие решения.

Дорого? В большей части случаев цена обоснована. Разработки в ML дорогие (об этом ниже). Потребителей готовых платить не очень много. Если вы не гигант, то это будет ощутимо. Сначала используйте готовое. Если поймете, что для вашего случая можно разработать самим, и оно бьётся по деньгам - разработаете. Но по моему опыту где-то 40% компаний которые разрабатывают решение в продакшн запускают что-то другое/не запускают совсем. Не вкладывайте деньги в разработку до тех пор пока не попробуете использовать уже готовое. Начните с эксперимента.

Системы которую вы хотите сделать нет на рынке? Это повод задуматься почему её нет. Может она принципиально нереализуема. Посмотрите пробовал ли кто-то её создать. Анонсировали два года назад, но до сих пор не продают? Это нормальная ситуация для машинного зрения.

Стоимость разработки

Любая задача машинного зрения - работа с сырыми, бажными, вечно меняющимися фреймворками. С большими данными. С обучающими/распознающими серверами. Это долго. Пока что реально мало людей с руками не из задницы. Я помогал нанимать/собеседовать разработчиков машинного зрения в 3-4 разных компании. Знаком с большим числом руководителей отделов машинного обучения. Наша команда разработала решения для десятка фирм.

По Москве новичка в ML вы сможете нанять за 130-170т.р. Человека с каким-то опытом в 1-2 проекта, но без понимания того как решать проблемы за 180-250. Те товарищи, компетенция которых не вызывает у меня вопросов, кто выстроил несколько систем от начала до конца, либо кто выигрывал на Kaggle, либо кто руководил крупной группой разработчиков - редко хотят меньше 300т.р. И это те кто нанимается на фултайм. Если вы хотите разовую разработку - время человека выйдет дороже.

Думаете вам хватит одного человека? А кто будет писать обвязки/интерфейсы/подготавливать интеграцию с системой? Цену железа включать? Оно нужно топовое.Да, есть способы оптимизировать стоимость. Но они не всегда работают и имеют свои риски.

Кстати, про риски

Любая ML система несёт его в себе огромное их число. Вам нужна точность работы 95%? Никто вам её не будет гарантировать. Да, скорее всего оценят порядок. Но ни один здравый разработчик не пропишет в договор высокие точности в качестве метрики приёма задачи. А кто такое скажет - не компетентен, или вас обманывает. Никто не знает как в продакшне поведёт себя какая-то система, даст она 90% или 95%. У нас бывали проекты где точность была выше и ниже того что планировали.

Да и точность - это не единственный критерий. Даже если вы написали какую-то точность, система её достигает - далеко не факт, что вам её хватит. Любая система машинного зрения несёт интеграционные риски. Если на этапе "A" система генерирует 5% ошибок, а на этапе "B" - ещё 5%, это не значит, что выход "А" поданный в "B" даст вам 10%. Видел примеры когда результат мог быть и 30% ошибок.

Если есть готовая система на рынке - вы хотя бы можете оценить то какие точности достижимы. Можете прикинуть сложность системы. Если вы делаете с нуля - все риски лежат на вас. И да, вернитесь к пункту про велосипед. Может такая система невозможна?

Рабский труд

Простите, но очень часто нанять неквалифицированного разметчика дешевле. Яндекс.Толока имеет цену рабочего часа ~100 рублей. Нанять разметчика где-нибудь в депрессивном городе в России - будет стоить ~20 тысяч рублей в месяц. Знаю фирмы которые организуют разметку данных не в России, а в ближнем зарубежье, где много русскоговорящих. Зарплата в месяц там будет ~13-15 т.р.. Сравнили стоимость с п.2? Там вам лишь аренда одного сервера в эту цену встанет.

Я знаю бизнесы где машинное зрение не зашло, было дешевле держать работников. И ещё больше работающих систем, где машинное обучение это лишь способ повысить эффективность работников. Например если в 70% система правильно принимает решение, то вы повышаете эффективность работников на 50-60%. Такие точности встречаются при распознавании чеков, распознавании товаров в супермаркетах. Как я понимаю, автоматически call-центры примерно там же, хотя это не моя тематика.

Если у вас поток обслуживает 50 операторов, а вы хотите сократить расходы на них - вот тут то и повод внедрить машинное обучение. Не забывайте, что без человека который размечает данные - не обойдётся ни одна система машинного обучения. Хотите разработать что-то своё? Сначала наймите оператора, оцените теоретически доступную эффективность, соберите данные для обучения. И лишь потом внедряйте машинное обучение. Где-то оно вытеснит оператора. А где-то точность ML будет ниже продуктового качества и оператора придётся оставить.

Мечты о захвате рынка

Вы думаете что сейчас сделаете удобное решение и захватите рынок? Все будут его использовать? Скорее всего нет. Я видел много систем машинного зрения. И, пожалуй, лишь в биометрии есть востребованность и много заказчиков. Немного есть в распознавании номеров/технических данных. Все остальные системы которые я помогал собирать - в России не нужны. Их использует лишь тот кто разработал под себя.

Минимальное число интеграций по рынку. Да, можно разрабатывать для Долины/для Европы. Там такое проще прокатывает. Но есть куча других сложностей, которые я тут не рассматриваю и в которых я куда менее компетентен.

Поддержка

Думаете вы сделаете готовое решение и всё? Нет. Нейронные сети устаревают. То что вчера стоило X через год будет стоить X/2. Появится больше готовых решений, лучше точность.Вам придётся поддерживать свою систему и конкурировать на рынке. Без поддержки конкуренты сделают что-то лучше. Возможно наняв ту же команду которую вы уволили.

Итого

Несколько ситуаций когда вам нужно разработать что-то своё:

  • У вас есть много денег которые вы способны инвестировать. Или у вашего проекта есть крупный инвестор. Нужно понимать что любой проект может тянуть деньги очень долго прежде чем появится отдача.
  • Ваша задача очень специализированная. Похожих решений нет, но специалисты не видят сложности в том, чтобы реализовать решение/переделать из готового. Обычно это какое-то уникальное направление бизнеса, где вы и так лидер/монополист.
  • У вас уже есть команда без дела, есть люди которым интересно. Я видел пару ситуаций когда такие команды взяли что-то готовое OpenSource, прикрутили куда-то и получили готовый прототип. Из 5-7 таких проектов у 1-2 даже что-то дельное вышло. После того как прототип доработали, вложились, отшлифовали. Но далеко не любая команда согласится работать с незнакомыми технологиями.
    Иногда заходит идея “нанять студентов которым любопытно”. Но риски тоже учитывайте.
  • Вы хотите клонировать уже работающую систему. Обычно это упрощает работы на порядок. Особенно если есть OpenSource. Но помните написанное выше! Не забудьте проверить что решения реально работают/подходят вам и повышают эффективность.
  • Вы разбираетесь в последних трендах ML и знаете как хайпануть сделав очередной маскарад/призму. Но блин, я знаю мало людей у которых это вышло;)

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

66
9 комментариев

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

Индусы, зачастую, дороже русских уже выходят:(
АмазонМеханикалТурк раза в 2-3 дороже Толоки...

Привет Антон, спасибо большое за статью!
Не так давно списывались с тобой по поводу проекта (там распознавание машин, думаю поймёшь о чем речь), опять подкинул порцию сомнений и размышлений для мозга-)
Но и надежду на коммерческий успех идей проектов с cv/ml тоже даёшь этой статьей - на фоне описанной тобой "нашей депрессивной реальности" - есть же ещё западный заказчик, где рынок чуть более "готов"...кстати, про внедрение подобных систем "у них" тоже было бы интересно от тебя почитать-)

Не за что:)
Да, это меня подтолкнуло чтобы дописать статью из загашника:)
На западе я всё же хуже реалии знаю. У нас 3-4 заказчика всего есть, сложно экстраполировать.
И все русскоговорящие.

Очень даже ДА! По всем пунктам.
Всегда крутилось в голове, но не осмеливался озвучить.
Красава!