Каков наилучший подход к распознаванию шаблонов в данных и как лучше узнать больше по теме? - PullRequest
19 голосов
/ 18 сентября 2009

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

1) Выдает несколько ложных срабатываний

2) Если он находит трещину, он находит ее только небольшие участки и обозначает эти участки как отдельные трещины.

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

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

РЕДАКТИРОВАТЬ Мой вопрос больше о том, как заметить закономерности в данных моего коллеги и идентифицировать эти узоры как настоящие трещины. Меня интересует логика более высокого уровня, а не логика низкого уровня.

РЕДАКТИРОВАТЬ В действительности, для получения точного представления данных, с которыми я работаю, потребуется по меньшей мере 20 образцов изображений. Это сильно варьируется. Но у меня есть образец здесь , здесь и здесь . Эти изображения уже были обработаны моим коллегой. Красные, синие и зеленые данные - это то, что я должен классифицировать (красный обозначает темную трещину, синий обозначает светлую трещину, а зеленый обозначает широкую / запечатанную трещину).

Ответы [ 12 ]

16 голосов
/ 23 сентября 2009

В дополнение к полезным комментариям об обработке изображений, это также звучит так, как будто вы имеете дело с проблемой кластеризации .

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

Например, на рисунке ниже показано, как алгоритм кластеризации может сгруппировать группу точек в 7 кластеров (обозначены кружками и цветом):

k-means
(источник: natekohl.net )

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

Популярные алгоритмы кластеризации включают k-средних кластеров ( демо ) и иерархических кластеров . Эта вторая ссылка также имеет хорошее пошаговое объяснение того, как работает k-means.

РЕДАКТИРОВАТЬ : Эта статья, написанная некоторыми инженерами из Phillips, выглядит актуальной для того, что вы пытаетесь сделать:

  • Ченн-Юнг Хуанг, Чуа-Чин Ван, Чи-Фенг Ву, " Методы обработки изображений для идентификации кластера дефектов пластин ," IEEE Design and Test of Computers, vol. 19, нет 2, стр. 44-48, март / апрель 2002 г.

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

Вот некоторые связанные с ними документы / книги, которые они цитируют, которые могут быть полезны:

  • M. Таубенлатт и Дж. Батчелдер, « Инспекция по шаблонной пластине с использованием пространственной фильтрации для кластерной среды », Applied Optics, vol. 31, нет. 17 июня 1992 г., стр. 3354-3362.
  • F.-L. Чен и С.-Ф. Лю, « Нейросетевой подход к распознаванию дефектного пространственного рисунка при изготовлении полупроводников. » IEEE Trans. Производство полупроводников, вып. 13, нет. 3 августа 2000 г., стр. 366-373.
  • G. Earl, R. Johnsonbaugh и S. Jost, Распознавание образов и анализ изображений , Prentice Hall, Upper Saddle River, N.J., 1996.
3 голосов
/ 18 сентября 2009

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

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

Вы также хотите удалить как можно больше ненужных данных из ваших тренировочных наборов. Вместо непосредственной работы с изображением, возможно, вы могли бы использовать извлечение кромок (например, обнаружение кромок Канни). Это удалит весь «шум» с изображения, оставляя только края. Затем упражнение сводится к определению, какие края являются трещинами, а какие - естественным покрытием.

Если вы хотите быстро перейти к решению, тогда я предлагаю вам сначала испытать удачу с Convolutional Neural Net , который может выполнить довольно хорошую классификацию изображений с минимумом предварительной обработки и норализации. Он довольно хорошо известен в распознавании рукописного ввода и может быть правильным для того, что вы делаете.

2 голосов
/ 23 сентября 2009

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

https://www.mturk.com/mturk/welcome

2 голосов
/ 18 сентября 2009

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

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

2 голосов
/ 18 сентября 2009

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

Кроме того, я думаю, что это проблема обнаружения краев , а не проблема классификации. Если детектор краев в порядке, то ваши проблемы исчезнут.

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

1 голос
/ 28 сентября 2009

Каков наилучший подход к распознаванию шаблонов в данных и как лучше узнать больше по теме?

Лучший подход заключается в изучении распознавания образов и машинного обучения. Я бы начал с Классификации образцов Дуды и использовал в качестве эталона Бишопа Распознавание образов и машинное обучение . Это займет некоторое время, чтобы материал впитался, но базовое понимание распознавания образов и основные подходы к проблеме классификации должны дать вам направление. Я могу сидеть здесь и делать некоторые предположения о ваших данных, но, честно говоря, вы, вероятно, имеете лучшее представление о наборе данных, поскольку вы имели дело с ним больше, чем кто-либо. Например, некоторые полезные приемы могут быть машина опорных векторов и повышение .

Редактировать : Интересное приложение для повышения - это распознавание лица в реальном времени. См. Viola / Jones's Rapid Object Detection с использованием расширенного каскада простых Особенности (pdf). Также, глядя на примеры изображений, я бы сказал, что вам следует немного улучшить обнаружение краев. Может быть, сглаживание изображения с помощью гауссовского и более агрессивное обнаружение краев может увеличить обнаружение более мелких трещин.

1 голос
/ 18 сентября 2009

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

1 голос
/ 18 сентября 2009

Я ни в коем случае не эксперт, но попробуйте посмотреть на Каскад Хаара . Вы также можете поэкспериментировать с инструментарием OpenCV. Эти две вещи вместе выполняют обнаружение лица и другие задачи обнаружения объекта.

Возможно, вам придется пройти "обучение", чтобы разработать каскад Хаара для трещин в дорожном покрытии.

0 голосов
/ 28 сентября 2009

Это немного похоже на проблему в Rock Mechanics, где в массиве горных пород есть стыки, и эти стыки должны быть сгруппированы в «наборы» по ориентации, длине и другим свойствам. В этом случае один из методов, который хорошо работает, - это кластеризация, хотя у классических K-средних действительно есть несколько проблем, с которыми я сталкивался в прошлом, используя генетический алгоритм для запуска интерактивного решения.

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

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

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

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

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

Удачи, мне кажется, у тебя есть настоящий вызов.

0 голосов
/ 27 сентября 2009

Вы получили очень хороший ответ, особенно @ Нейт, и все ссылки и книги, предлагаемые стоит. Однако я удивлен, что никто не предложил одну книгу, которая была бы моим лучшим выбором - O'Reilly's Programming Collective Intelligence . Название может показаться неуместным для вашего вопроса, но, поверьте мне, содержание : одно из наиболее практичных, ориентированных на программистов, охвата интеллектуального анализа данных и «машинного обучения», которое я когда-либо видел. Дай ему спину! -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...