company_banner

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

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



    Проблема интернет-магазина шурупов — в ассортименте. Тысячи или десятки тысяч моделей. У каждого шурупа свое описание и характеристики, поэтому на фильтры нет надежды. Что делать? Искать вручную или искать в гипермаркете на полках? В обоих случаях это потеря времени. В итоге клиент устанет и пойдет забивать гвоздь. Чтобы помочь ему, воспользуемся нейросетью. Если она может находить котиков или диваны, то пусть занимается чем-то полезным — подбирает шурупы и болты. Как научить нейросеть подбирать для пользователя шурупы быстро и точно, расскажем в расшифровке доклада Марии Мацкевичус, которая в компании Grid Dynamics занимается анализом данных и машинным обучением.

    Короткая демоверсия того, что получилось

    Проблемы покупателя


    Представьте — мы купили стол, но потерялся один маленький шуруп, и стол без него не собрать. Мы идем в интернет-магазин в поисках, и видим 15 000 уникальных позиций, каждая из которых — возможно, наш шуруп. 

    Мы идем в фильтры — их около 10, у каждого из которых от 5 до 100 атрибутов. Выбираем тип шляпки и цвет: плоская шляпка — Flat и желтая медь — Brass. Получаем выдачу.



    Что это? Мы не это искали. Увольте человека, который отвечает за выдачу!

    Спустя время все-таки выбираем 2 подходящих шурупа для стола. 



    Осталось самое простое — расшифровать описание и характеристики. Каждый производитель описывает шурупы по-своему. Для описания параметров определенной модели нет конкретных требований.

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



    Сложности реализации


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

    Шурупы похожи друг на друга. Посмотрите на фотографии.



    Это разные шурупы. Если перевернуть фотографии, то видно, что отличается важная характеристика — head.



    А на этой фотографии?



    Здесь модели одинаковые. Освещение разное, но на обеих фотографиях одна модель шурупа.

    Есть редкие разновидности, которые требуют классификации. Например, с «ушками» или кольцом.



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



    Приложение должно работать в реальном времени. Пользователь ждет результат здесь и сейчас.

    Конкуренты. Недавно Amazon — конкурент нашего заказчика — запустил свой Part Finder. Это приложение, которое ищет шурупы и болты по фотографии.



    Кроме Amazona, у нас было два конкурента-стартапа со своими решениями для заказчика. Нам нужно было побить не только Amazon, но и стартапы, что было не сложно. Один из конкурентов предложил идею взять 20 самых популярных болтов и натренировать object detection на них. Но на вопрос, что будет, когда нейросети дадут 100, 1000 или все 15 000 шурупов с сайта заказчика, как будет работать object detection и где взять так много данных, конкурент не нашел, что ответить.

    Решение


    Должно быть масштабируемым и не зависеть от количества разновидностей шурупов и размера каталога. Чтобы решить задачу, мы решили рассмотреть шуруп как набор характеристик или признаков. Каждый признак — это набор атрибутов.



    Выбрали следующие характеристики:

    • шляпка — head (32 атрибута);
    • внешнее покрытие — finish (15 атрибутов);
    • острие — tip (12 атрибутов);
    • покрытие резьбы — thread coverage (4 атрибутов).

    Изучили карту всех признаков и поняли — чтобы описать 15 000 разных шурупов, их требуется всего 50. Они будут составлять комбинацию различных признаков с различными атрибутами. Требуется 50 шурупов и одна монетка, для измерения масштаба шурупа на фотографии.

    Так и решили. С идеей определились. Дальше требуются данные.

    Данные


    Мы получили данные от заказчика и немного расстроились. Каталожные данные — фотографии объектов на белом фоне.



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

    Тогда мы решили последовать совету Ричарда Сокера.

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

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



    После сбора данных следующий этап — понять, в каком месте на картинке находится болт, если вообще присутствует.

    Локализация


    Мы рассмотрели два подхода к локализации: object detection и семантическая сегментация.



    Object detection возвращает бокс минимальной площади вокруг объекта. Семантическая сегментация возвращает маску. В нашем случае маска больше подходит. Она сохраняет форму, убирает фон, лишние тени и позволяет в дальнейшем классифицировать шурупы лучше, чем object detection.



    Задача семантической сегментации — вернуть на каждый пиксель вероятность принадлежности его к классу. Чтобы обучить такую модель, требуются размеченные данные. Мы воспользовались приложением «labelme», с помощью которого разметили выборку. Получили около тысячи масок с монеткой и шурупом.



    Модель


    Мы взяли U-Net. Эту сеть очень любят на Kaggle и мы теперь тоже.



    U-Net — это успешная реализация encoder-decoder.

    • Конструирующий путь или encoder. Это та часть U-Net, которая пытается всю совокупность данных, представить в виде векторного представления в более сжатом пространстве. Она выучивает эти признаки и находит наиболее существенные.
    • Расширяющийся путь или decoder. Пытается декодировать карту признаков и понять, в каком месте находится объект на картинке.

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

    Loss-функция 


    Классический вариант для сегментации — Dice coefficient:

    $D(P, G)=\frac{2|P\cdot G|}{|P|+|G|}$



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



    Фона всегда много, а самого объекта мало. Поэтому модель будет всегда отдавать очень высокий precision и очень низкий recall. Чтобы по-разному взвешивать ошибки первого и второго рода, мы решили взять Tversky index:

    $$display$$S(P, G, α, β)=\frac{|P\cdot G|}{|P\cdot G|+α|P/G|+β|G/P|}$$display$$



    У Tversky index два коэффициента, α и β по-разному взвешивает эти две ошибки. Если взять α=β=0,5, получаем тот же самый Dice coefficient. Если выбрать другие параметры, получим Jaccard index — одна из мер схожести объектов. При α=β=1 — Tversky index равен Jaccard index.

    Также можно получить Fβ-score. При α+β=1 Tversky index соответствует Fβ-score.

    Чтобы подобрать α и β, мы провели несколько экспериментов. Выдвинули гипотезу — сильнее штрафовать модель за ошибки второго рода. Не так страшно, когда модель классифицирует пиксель фона, как пиксель объекта. Если вокруг объекта будет небольшая рамочка фона — это нормально. Но когда модель классифицирует пиксель шурупа, как пиксель фона — на шурупе появляются дырки, он становится неровным, и это мешает нашей классификации.

    Поэтому мы решили повысить параметр β и приблизить его к 1, а параметр α — к 0.



    На картинке видно, что лучшая маска получилась при β=0,7 и α=0,3. На этом решили остановиться, и обучить модель на всех наших данных.

    Обучение


    Стратегия обучения довольно хитрая. Так как данные мы размечали вручную в личное время, то решили воспользоваться одной особенностью U-Net. Каждый новый класс она сегментирует на новом канале — добавляет новый канал и на нем локализуется объект.

    Поэтому у нас в обучении не было ни одной картинки, которая содержит одновременно и монетку, и болт. Все картинки содержали один класс: 10% — монетки, 90% — шурупы.



    Это позволило правильно распределить усилия и сэкономить время на монетку — она одна, а форма простая. Мы легко научились ее сегментировать, что позволило перекинуть 90% усилий именно на шурупы. Они имеют разные формы и цвета, и важно научиться их сегментировать.

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



    Классификация


    Это следующий этап после локализации объекта. Мало кто обучает сверточные нейронные сети для классификации объектов, чаще используют Transfer learning. Посмотрим на архитектуру сверточной нейронной сети, а потом кратко напомню, что такое Transfer learning.



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

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



    После того, как определились с общей технологией Transfer learning, нужно выбрать заранее натренированную модель.

    Выбор модели


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



    В Xception вместо обыкновенной свёртки — Convolution — используется Separable Convolution. Поэтому Xception легче остальных сетей, например, с VGG.



    Обыкновенный Convolution делает одновременно межканальную и межпространственную свёртку. А Separable Convolution разделяет: сначала межпространственная свёртка — Depthwise, а потом межканальная. Результаты объединяет.

    Xception выполняет separable Convolution, при этом выдает такой же хороший результат, как и обыкновенный Convolution, но параметров меньше.



    Подставим в формулы расчёта параметров значения, например, для 16 фильтров. Для обыкновенного Convolution нужно рассчитать параметров в 7 раз больше, чем для Separable Convolution. За счет этого Xception получается точнее и меньше.



    Обучение


    Сначала решили построить некоторый baseline и обучили модель на исходной картинке. У нас было 4 классификатора и каждый отвечал за конкретный признак. Результат получился неудовлетворительным.



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



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



    В этот момент мы еще не знаем, с какой стороны у шурупа head и tip. Чтобы узнать — распилили бокс пополам и посмотрели на площади.



    Площадь, которая содержит head, всегда больше, чем та, которая содержит tip. Сравнивая площади, определяем в какой части, какая из частей шурупа. Это сработало, но не для всех случаев.



    Когда длина шурупа сравнима с диаметром шляпки, вместо прямоугольника получается квадрат. Когда его поворачиваем, получаем картинку, как под номером 3. Модель такой вариант плохо классифицирует.

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



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



    Но с Finish почему-то не взлетело. Изучили ошибки и увидели картинку.



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

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



    В качестве решения китайские ученые создали неглубокую сеть. Ее особенность в двух ветках, которые конкатенируются в конце. Такая архитектура называется ColorNet.



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



    У нас было всего 4 классификатора на 4 признака, а есть еще много других. Значит, необходимо создать какой-то фильтр, который будет брать данные каталога и фильтровать их определенным образом.

    Фильтрация


    Каждый классификатор возвращает soft-метку и класс. Мы взяли значения soft-меток и нашу базу данных, посчитали некоторый score — перемножение всех меток для каждого признака.



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

    Pipeline


    Получилось такое приложение.



    • Input: начинаем с сырой картинки.
    • Локализация: определяем, где находится болт или шуруп, а где монетка.
    • Трансформация и ротация.
    • Классификация: все аккуратно обрезаем, классифицируем и определяем размеры.
    • Фильтрация.
    • Выход на конкретную позицию SKU.

    Как реализовать сложный проект


    Ешьте слона по частям. Разделите большую проблему на части.

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

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

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

    Рассказ о нашем Visual Search приложении не только про классификацию шурупов. Он о том, как сделать сложный проект, у которого нет аналогов, но даже если есть — они не удовлетворяют требованиям, которые мы предъявляем к приложению.

    Подробнее о проектах Grid Dynamics и других вызовах, с которыми сталкивается команда Data Science, смотрите в техноблоге компании.

    Доклады с таким уклоном — применение алгоритмов машинного обучения в реальных нестандартных проектах — мы как раз и ищем для UseData Conf. Здесь подробнее о том, какие сферы нам интереснее всего.

    Присылайте заявки, если знаете, как подшаманить модели, чтобы они полетели. Если знаете, что сходимость не гарантирует скорости работы, и готовы рассказать, на что важнее обратить внимание — ждем вас 16 сентября.
    Конференции Олега Бунина (Онтико)
    759,83
    Конференции Олега Бунина
    Поделиться публикацией

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

      +1

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

        +5
        Похоже не того поймали в сети. На КДПВ фотография шурупа, а определено как болт.

        Поменяйте надпись, а то доверие к сеткам упадёт катострофически.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

                                              Самое читаемое