У меня возникла интересная дискуссия, основанная на проекте, над которым мы работали: зачем использовать систему визуального осмотра 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 могут быть технологией для работы: для систем, которые требуют трехмерного измерения глубины как части ввода, или любого типа объекта, который может быть деформирован / растянут / сжат, но все еще будет «хорошим» и не дефектный (например, чучело, провода и т. д.). Любопытно услышать ваши мысли :)
Ответы:
Инженер, который предложил традиционные методы CV для вашего приложения, просто сделал это по привычке. Использование сопоставления с шаблоном крайне устарело, и было показано, что оно работает очень плохо. Тем не менее, я думаю, что CNN является избыточным в зависимости от размера вашего набора данных.
Как работает сопоставление с шаблоном?
Сопоставление с шаблоном перемещает окно по вашему изображению, которое обеспечивает процент совпадения с шаблоном. Если процентное совпадение выше определенного предопределенного порога, то предполагается, что оно совпадает. Например, если у вас есть изображение собаки, и вы хотите определить, есть ли на изображении собака, вы бы поместили шаблон собаки по всей области изображения и посмотрели, было ли достаточно большое процентное совпадение. Это, вероятно, приведет к очень низкой производительности, поскольку требует, чтобы шаблон идентично перекрывал изображение . Какова вероятность этого на практике? Не очень высоко
Единственное время, когда сопоставление с шаблоном является достаточной техникой, - это если вы точно знаете, что ищете, и уверены, что оно будет выглядеть почти одинаково в каждом примере данного класса.
Зачем вместо этого использовать машинное обучение?
Методы машинного обучения не являются жесткими. В отличие от того, что сказал stmax, CNN способны очень хорошо обобщать набор данных . Вот почему они такие мощные. Используя пример с собакой, CNN не нужно видеть изображение каждой существующей собаки, чтобы понять, что такое собака. Вы можете показать это, может быть, 1000 изображений из поиска Google, и тогда алгоритм сможет обнаружить, что ваша собака, на самом деле, собака. Тот факт, что алгоритмы машинного обучения обобщают очень хорошо, является причиной того, что они заменили все древние методы CV. Теперь проблема в количестве данных, которые вам нужны для обучения CNN. Они чрезвычайно интенсивно используют данные .
Я не думаю, что 100 точек данных достаточно для обучения надежного CNN. Из-за глубокой сложности модели, чтобы ограничить смещение, вам нужно увеличить количество примеров. Я обычно предлагаю 100 примеров для каждой функции для глубоких моделей и 10 примеров для каждой функции для мелких моделей. Это действительно все зависит от вашего функционального пространства.
Что я предлагаю.
То, что вы действительно делаете, это обнаружение аномалий . У вас есть много примеров печатных плат, которые в остальном находятся в хорошей форме. Вы хотите обнаружить те, которые сломаны. Таким образом, я бы попробовал некоторые методы обнаружения аномалий. Их гораздо проще реализовать, и вы можете получить хорошие результаты, используя мелкие модели, особенно в искаженных наборах данных (1 класс представлен более).
источник
Ответ зависит от задачи. Сопоставление шаблонов может работать для некоторых задач, но не для всех. CNN потенциально могут обобщать на невидимые входные данные, которые не соответствуют ни одному из ваших шаблонов, поэтому потенциально могут обобщаться лучше.
Но удастся ли CNN справиться с соответствием шаблонов, будет зависеть от конкретной задачи и того, что конкретно вы пытаетесь достичь. Это эмпирическая наука; в конечном счете, способ узнать, что работает лучше, - попробовать их обоих - или поучиться у других, которые их попробовали (например, читая литературу). Я не думаю, что вы найдете какую-то теорию или таксономию, которая заменит эмпирическую оценку на реальных данных.
источник
Одна из проблем, с которой вы можете столкнуться при использовании NN (и других методов классификации), заключается в том, что, поскольку вы показали только определенные дефекты, он может не знать, как реагировать на совершенно новые / пока невидимые дефекты, которые могут появиться в будущем.
Вы хотите, чтобы NN выучил «все, что не похоже на исправную печатную плату, является неисправной печатной платой». Но что, если он узнал, что «все, что не похоже на неисправную печатную плату, является неисправной печатной платой»?
Вы можете попытаться изменить некоторые изображения исправных печатных плат, добавив небольшое белое пятно (или другое небольшое возмущение) к ним в случайных местах, и нейронная сеть классифицирует эти измененные изображения. Следует определенно классифицировать их как дефектные, верно? Но он, вероятно, пропустит некоторые (или довольно много), потому что никогда раньше не видел таких дефектов.
Для обнаружения совершенно новых дефектов, методы обнаружения аномалий / классификаторы одного класса могут быть более ... надежными, потому что они должны собирать все, что никогда раньше не видели.
Как сказал DW, вам просто нужно попробовать оба метода и выяснить, какой из них работает лучше. Просто убедитесь, что у вас действительно хороший набор тестов, который также содержит совершенно новые дефекты!
источник