Подтвердить что ты не робот

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

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

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

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

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

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

ИЗМЕНИТЬ. Мой вопрос - это больше о том, как заметить шаблоны в данных моих коллег и идентифицировать эти шаблоны как реальные трещины. Это логика более высокого уровня, с которой я связан, не столько логика низкого уровня.

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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

  • М. Таубенлатт и Дж. Батчелдер, "Шаблонная проверка пластин с использованием пространственной фильтрации для кластерной среды ", Прикладная оптика, вып. 31, нет. 17 июня 1992 г., стр. 3354-3362.
  • F. -L. Чен и С. -F. Лю, " Нейросетевой подход к распознаванию дефектных пространственных структур при изготовлении полупроводников ". IEEE Trans. Производство полупроводников, вып. 13, нет. 3 августа 2000 г., с. 366-373.
  • G. Earl, R. Johnsonbaugh и S. Jost, Распознавание образов и анализ изображений, Prentice Hall, Upper Saddle River, NJ, 1996.

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 8

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

Наилучшим подходом является изучение распознавания образов и машинного обучения. Я бы начал с Duda Pattern Classification и использовал в качестве эталона епископское распознавание образов и машинное обучение. Это займет некоторое время, чтобы материал впитался, но базовое понимание распознавания образов и основные подходы к проблеме классификации должны дать вам направление. Я могу сидеть здесь и делать некоторые предположения о ваших данных, но, честно говоря, вы, вероятно, имеете лучшее представление о наборе данных, поскольку вы имели дело с ним больше, чем кто-либо. Например, некоторые полезные техники могут быть опорными векторами и бустингом.

Редактировать: интересное приложение повышения - распознавание лиц в реальном времени. См. Быстрое обнаружение объектов Viola/Jones с использованием расширенного каскада простых функций (pdf). Также, глядя на примеры изображений, я бы сказал, что вам следует немного улучшить обнаружение краев. Возможно, сглаживание изображения с помощью гауссовского режима и более агрессивное обнаружение краев может увеличить обнаружение небольших трещин.

Ответ 9

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

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

  • Начните с одного (любого) пикселя в трещине, затем "следуйте", чтобы сделать многоточечную линию из трещины - сохраните точки, составляющие линию. Вы можете удалить некоторые промежуточные точки, если они лежат близко к прямой. Сделайте это со всеми пикселями трещины. Если у вас звездообразная трещина, не беспокойтесь об этом. Просто следуйте пикселям в одном (или двух) направлениях, чтобы составить линию, а затем удалите эти пиксели из набора пикселей трещины. Другие ноги звезды будут распознаны как отдельные линии (на данный момент).

  • Вы можете выполнить некоторое прореживание на пикселях трещины до шага 1. Другими словами, проверьте соседние пиксели, и если их слишком много, то игнорируйте этот пиксель. (Это упрощение - вы можете найти несколько алгоритмов для этого.) Еще одним шагом предварительной обработки может быть удаление всех линий, которые слишком тонкие или два слабых. Это может помочь с ложными срабатываниями.

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

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

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

Ответ 10

Вы должны прочитать о интеллектуальном анализе данных, особенно шаблонном анализе.

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

Хорошая книга на эту тему - Data Mining: практические инструменты и методы машинного обучения.

Data Mining can be bought in Amazon.
(источник: waikato.ac.nz) ] (http://www.amazon.com/Data-Mining-Ian-H-Witten/dp/3446215336 "ISBN 0-12-088407-0")

По сути, вам нужно применить статистические инструменты и методологии к вашим наборам данных. Наиболее часто используемыми методологиями сравнения являются t-критерий Стьюдента и критерий Хи-квадрат, чтобы определить, связаны ли две не связанные переменные с некоторой достоверностью.

Ответ 11

У тебя есть очень хороший ответ, особенно. @Nate's, и все ссылки и книги, предложенные, заслуживают внимания. Тем не менее, я удивлен, что никто не предложил одну книгу, которая была бы my top pick - O'Reilly Программирование коллективного интеллекта. Название может показаться нелогичным для вашего вопроса, но, поверьте, содержимое : один из наиболее практичных, ориентированных на программистов охват интеллектуального анализа данных и "машинного обучения", который я когда-либо видел. Дайте ему вращение! -)

Ответ 12

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

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

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

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

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

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

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