Зачем использовать сверточные NN для задачи визуального осмотра по сравнению с классическим сопоставлением шаблонов CV?

9

У меня возникла интересная дискуссия, основанная на проекте, над которым мы работали: зачем использовать систему визуального осмотра CNN поверх алгоритма сопоставления шаблонов?

Справочная информация: я продемонстрировал демонстрацию простой системы видеонаблюдения CNN (веб-камера + ноутбук), которая обнаружила, был ли объект определенного типа «сломан» / неисправен или нет - в данном случае это печатная плата на печатной плате. На моей модели CNN были показаны примеры правильных и разорванных плат (около 100 изображений на каждой) на статическом фоне. В нашей модели использовались первые несколько слоев conv / maxpool предварительно обученного VGG16 (на imagenet), а затем мы добавили еще несколько обучаемых конвусов / пулов с несколькими денсами, что привело к получению горячего кодированного вектора dim-3 с одним горячим кодированием для классификации. : (is_empty, has_good_product, has_defective_product).

Модель обучалась довольно легко и достигла 99% проверки без проблем; мы также тренировались с различными дополнениями данных, так как мы знаем, что наш набор данных был маленьким. На практике это сработало примерно в 9 раз из 10, но несколько случайных перемещений / поворотов одной и той же печатной платы иногда приводили к тому, что она находилась в противоположном классе. Возможно, более агрессивное увеличение данных помогло бы. В любом случае, для концепции проекта прототипа мы были счастливы.

Теперь мы представляли другому инженеру и его коллеге, и он привел аргумент, что для этого NN излишни, следует просто использовать сопоставление с шаблоном, зачем кому-то делать CNN?

У нас не было хорошего ответа на вопрос, почему наш подход может быть лучше в определенных приложениях (например, в других частях для проверки). Некоторые моменты, которые мы подняли:

1) Более устойчивы к инвариантности (например, через увеличение данных)

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

3) Нет необходимости устанавливать пороговые значения, как в классических алгоритмах компьютерного зрения. Как вы думаете, есть ли у системы CNN больше преимуществ для такого рода задач проверки? В каких случаях это будет лучше, чем сопоставление с шаблоном?

Еще несколько случайных идей о том, когда глубокие NN могут быть технологией для работы: для систем, которые требуют трехмерного измерения глубины как части ввода, или любого типа объекта, который может быть деформирован / растянут / сжат, но все еще будет «хорошим» и не дефектный (например, чучело, провода и т. д.). Любопытно услышать ваши мысли :)

JDS
источник
Мне нравятся подходы глубокого обучения, и я знаю, что они - будущее. Однако, когда вам нужны результаты с высокой точностью, скажем, точное вращение и точный масштаб, сопоставление с шаблоном все же дает лучшие результаты. Я говорю о 0,1 градуса / ошибка коэффициента масштабирования или менее. Глубокое обучение продолжает давать вам «вероятность» того, что, вероятно, является «лучшим» результатом, поэтому недостаточно, когда требуется высокая точность, я хотел бы найти способ получить такую ​​точность, используя глубокое обучение, но я все еще не могу найти какой-либо алгоритм для высокоточное сопоставление шаблонов с использованием глубокого обучения. Я открыт для любого мнения / предложения или
Пабло Гонсалес

Ответы:

3

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

Как работает сопоставление с шаблоном?

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

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

Зачем вместо этого использовать машинное обучение?

Методы машинного обучения не являются жесткими. В отличие от того, что сказал stmax, CNN способны очень хорошо обобщать набор данных . Вот почему они такие мощные. Используя пример с собакой, CNN не нужно видеть изображение каждой существующей собаки, чтобы понять, что такое собака. Вы можете показать это, может быть, 1000 изображений из поиска Google, и тогда алгоритм сможет обнаружить, что ваша собака, на самом деле, собака. Тот факт, что алгоритмы машинного обучения обобщают очень хорошо, является причиной того, что они заменили все древние методы CV. Теперь проблема в количестве данных, которые вам нужны для обучения CNN. Они чрезвычайно интенсивно используют данные .

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

Что я предлагаю.

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

JahKnows
источник
Спасибо за исчерпывающий комментарий! Можете ли вы привести примеры проектов или статей, которые объясняют (и, возможно, демо) обнаружение аномалий? Приветствия
JDS
1
Вот обзор литературы по обнаружению аномалий В. Чандола, А. Банерджи и В. Кумар, «Обнаружение аномалий: опрос», ACM Computing Surveys, vol. 41, нет. 3, с. 15, 2009.
JahKnows
5

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

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

DW
источник
5

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

Вы хотите, чтобы NN выучил «все, что не похоже на исправную печатную плату, является неисправной печатной платой». Но что, если он узнал, что «все, что не похоже на неисправную печатную плату, является неисправной печатной платой»?

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

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

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

stmax
источник