Как стать автором
Обновить

Как мы обучили нейронную сеть классифицировать шурупы

Время на прочтение10 мин
Количество просмотров27K
Всего голосов 88: ↑84 и ↓4+80
Комментарии33

Комментарии 33

А что делать, если нет монетки рядом? А перспективная коррекция положения монетки и болтика?

НЛО прилетело и опубликовало эту надпись здесь
То же самое написал ;-)
Может, на то она и КДВП :)
Зачем RotationNet если в том же Unet можно сделать дополнительные выходы где дать «начало» и «конец» шурупа.Минус сеть — проще пайплайн, быстрее обучать, меньше память, выше точность, и.т.д…

И не вижу графика итоговых точностей. Такое обилие классов и такая длинна пайплайна приводит к накоплению ошибки. На каждом уровне ошибка выше и выше. С какой вероятностью полностью определит выход правильно?
Условно, если вы классифицируете 5 параметров с точностью 90% итоговая точность должна получатсья 0.9^5 = 60%, что достаточно хреновенько…

//Упс, увидел что пост выложил не автор доклада, а Роман (приветствую!). Если авторы тут появляются, то вопрос к ним:)
В докладе (видео в статье спрятано под спойлер) есть довольно большая секция вопросов/ответов. Возможно там есть дополнительная информация по точности.

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

Грубо говоря, если 10% ошибок каждой модели связаны строго с одними и теми же изображениями, то итоговая точность составит те же 90%, а не 60%. Естественно, в реальных условиях будет какой-то промежуточный вариант. Но раз клиент остался доволен — значит не все так плохо.
Кроме Amazona, у нас было два конкурента-стартапа со своими решениями для заказчика.

Космос прямо. Такая жесткая демотивация сразу. Начинаешь читать статью, и первая мысль «хм, до какой только узкой нетривиальной ниши люди не додумаются, чтобы свой голубой не то, что океан, а хотя бы пруд найти?», а тут такое — все придумано до нас, даже пытаться не стоит.

распечатали на принтере много цветных фонов, купили эти 50 болтов и сфотографировали на фонах данные для обучения

интересно, смотрели ли в сторону чего-то вроде 3d max? Уверен, что 3д модели шурупов должны быть в свободном доступе, и, на первый взгляд, нагенерировать миллионы изображений не кажется сложной задачей.
Пробовали обучать сеть на рендерах для похожей задачи, нас подкупила база 3D моделей на каждый предмет (Sku ~1500) — отказались.

Если просто рендерить много углов съемки для многих деталей, то сеть на реальных фото плохо работает(точность ~76%). Добавляли разные тени, блики, фоны, артефакты съемки — прогресс был очень медленный (~81%), при этом мы фотографировали сами и смотрели что нужно имитировать в 3D.
В итоге четыре человека с помощью смартфонов за три обычных рабочих дня, сфотографировали выборку которая дала сразу 89%.

Успешно использовать рендер можно только если:
  • Есть 3D модели или их дешевле сделать чем фотографировать исходник
  • Конечные условия съемки изделий будут «тепличными» и их легко имитировать для обучения сети

Я видел доклад на похожую тему, Иван Дрокин его делал на SmartData (мир праху её) в 2017 году.

Там был конвейер и роботы, которые должны брать детали, сверлить в них дырки и класть обратно. Там кроме теней и бликов (да, это жизненно важно), использовали ещё две техники.

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

И ещё стилевой перенос! Можно брать рендер и с него переносить стиль на реальную картинку на камере (вроде бы именно в эту сторону), и типа огненно работает. Причём визуально картинки до и после переноса не отличаются. =)
Спасибо за наводку, мне грозит в этом году сортировка на конвейере.

У нас же был кейс идентичный статье (Хобби проект на благо родного предприятия).
Розничные клиенты с разовыми покупками фитингов для пневмо линий, гидро линий и т.д. Каталог 1500 фитингов. Клиент может нормально заказать только если знает партномер или точные размеры (у всех производителей разные допуски, даже на общие стандарты) И чу-чуть магии слов: «там насечка косая», «две продольные канавки», «ну итальянский! Что не понятного…»

Решение в итоге не такое технологичное как в статье: Клиент высылают фотку в почту, меседжер или форму на сайте. И менеджер (который раньше просто сливался от таких заказов) Скармливает фотку скрипту, тот выдает первые 5 по вероятности позиции. Все на Python, OpenCV для предобработки, «по учебнику» Xception и RESNET50 (обучали на gtx1080ti сотрудника, поэтому ограничены в ресурсах).
По поводу конвейера: тоже сталкивался. Советую начать с того, чтобы повесить на участке съёмки какие-нибудь шторы и так частично нормализовать освещение и уменьшить запыление.
Вот неоднократно уже слышу он нейроманов что дескать отрендереные данные плохо обучают, плохие… Вам не кажется это странным? Синтетический рендер имеет кучу преимуществ. Даже если они долго рендерятся с фотокачеством — это делает машина! Польностью автоматически, с точно задаными параметрами. И если алгоритм плохо обучается, или еще хуже, плохо распознает такие данные — ну это же однозначно говорит что алгоритм «не видит» той семантики что нужно. Он цепляется бог знает за что только не за те параметры что нужны.

если: Есть 3D модели

ну ну… в наше то время жаловатся на отсутствие 3д модели болтов.
p0b0rchy подсказал хороший доклад Нет данных? Нет проблем! Deep Learning на CGI 5й сверху в статье.
Если рассматривать реальный мир, мало кому нужна точная модель шурупа или болта с точной резьбой и тем более фото реалистичной текстурой и материалом. У нас точно такая же ситуация вышла, есть 1500 моделей в которых только контуры и значимые размеры, финишная отделка вообще не сделана, а это весомые признаки для сети.

Второй момент, это сравнение затрат на хорошего специалиста 3D который понимает как приблизить картинку к реальности(про Style Transfer мы не догадались тогда) и на 4х офисных планктонов с телефонами в руках. Большой вопрос от какого кол-ва деталей 3D путь выйдет более рентабельным.

Это не так просто. В индустрии автономного вождения это отдельная ниша--создание синтетических картинок как будто бы из камеры автономного автомобиля. К примеру, очень важно качественно воспроизводить всевозможные заплатки на асфальте, потому что без них сети плохо учатся понимать дорожную разметку. Есть фирмы, которые делают рендер через ray tracing. Есть фирмы, которые делают качественные 3д модели реальных городов и дорог и их динамически меняют (пешеходы, машины, время дня). Но заплатки на асфальте, мусорки, разбитые бордюры, свисающие провода--это все сохраняется.

Ну вот смотрите, обучили вы автопилота, по вашим тестам он круто видит ездит. Я беру и сожу его за NFS (считаем что пилот по камере только водит). И что, из-за того что там другая картинка асфальта все пропало? А где вообще тогда гарантия что этот пилот завтра при определенном освещении еще чтото не увидит? В моем понимании как раз заплатки на асфальте это не главное в модели рендера дороги. И если вы говорите что ваш робот видит дорогу то он ее должен видеть в сотне других представлений, где человек тоже не теряется. В противном случае ваш CV ничего не видит, а просто хорошо запомнил огромное число тестов, зашился на чтото совершенно другое, только не на модель дороги. Более формально так: если алгоритм решает обратную задачу с детализированой моделью то он должен ее решать и для более грубой модели. Только так есть какая то гарантия что у меня действительно надежный алгоритм, а не ужатая в сеть таблица частных решений.
Изучили карту всех признаков и поняли — чтобы описать 15 000 разных шурупов, их требуется всего 50.

Есть подозрение что на шурупы таки должны быть всякие госты-DIN'ы, и даже китайские производители хотящие что-либо продать будут им следовать!
А если представить, что у меня есть 15000 картинок болтов и шурупов и я всё же хочу каждую картинку разметить и описать. Существуют ли какие то системы управления датасетом, через которую можно размечать данные, видеть текущий объем датасета, наблюдать за его приростом, делать какие-то базовые запросы к датасету («покажи какие у меня есть образцы болтов с плоской головкой») и т.п.?
Шазам для еды шурупов.
Не удержался :)

А как можно отличить по фотографии болт М4х20 от болта М5х25, которые отличаются только масштабом, причём несильно? Неужели фотографии с монеткой достаточно для обеспечения приемлемой точности, ведь возможны, например, перспективные искажения.

тип — tip (12 атрибутов);
покрытие резьбы — thread coverage (4 атрибутов).


Перевод неверный, первое явно не тип, а конец шурупа, а второе лучше назвать как «длина резьбы» или даже «отношение длины резьбы к общей длине шурупа».
Спасибо, про tip совсем косяк. Thread coverage сейчас ещё подумаем, как адекватно выразить.
Толщина шурупа идет с шагом 0.2-0.3 мм, как вы это оцениваете с достаточной точностью? ИМХО по нормальному каталогу проще по фильтрам указать. Достаточно иметь дома штангенциркуль. Ну и голова ph или pz (и номер) по фотке сбоку — вообще не понять :) А оно может быть важно, если шурупы видны и заказывается дополнительно к уже имеющимся (например еще одна полочка делается), чтобы все было единообразно. Если делается для домохозяек — то эти кейсы не покрываются, если для профи — то они и так всё знают и фотографировать не нужно.
Расскажите, подробнее как использовался ColorNet из китайской статьи? Вы определили набор классов по цвету, к которым могут относиться шурупы. И с помощью модели ColorNet определяли принадлежностью шурупа к тому или иному классу? А дальше использовали этот предсказанный класс в модели верхнего уровня?
Чем париться с обучением по фоткам с диагональным расположением и перспективой «от шляпки в горизонт», не проще ли встроить в приложение фрейм/линию, вдоль которой нужно расположить саморез для фото? Вы и так делаете огромное одолжение пользователю самим наличием такого приложения, пусть уж потратит две секунды и положит объект ровно.
Скажите, насколько возможно научить сеть распознавать целевые растения и сорняки?
Уже сейчас можно поиском по фотографии в Гугле или Яндексе определить многие растения. Кажется, что научить робота заниматься прополкой в принципе нетрудно. Не факт, что это прямо сейчас рентабельно, но сделать точно можно.
а в чем может быть нерентабельность? код ведь пишется один раз
Этот код же, как я предполагаю, должен не просто на картинках работать, а на каком-то роботе-огороднике. Физически производить и внедрять этого робота запросто может быть нерентабельно. Пока его из Китая через таможню провезёшь, надо пять урожаев снять, чтобы окупить. =) Я утрирую, но смысл моих сомнений именно такой.
Работы мне попадались ещё в конце нулевых, ребята из Inria пытались посчитать, можно ли точечно наносить пестициды/пропалывать. Точность у них была ~80%, но сейчас уже больше 10 лет прошло, так что сейчас наверняка лучше.

Было бы здорово точно так же классифицировать лампочки на lamptest.ru AlexeyNadezhin

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

Просто сфотографируйте потерявшийся шуруп и мы вам поможем!

ЗЫ: Да, я знаю, что обычно метизов больше одного в комплекте. Но.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий