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

StackOverflow https://stackoverflow.com/questions/1441319

Вопрос

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

1) Это приводит к нескольким ложным срабатываниям

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Популярные алгоритмы кластеризации включают k- означает кластеризацию (ДЕМОНСТРАЦИЯ) и иерархическая кластеризация.Эта вторая ссылка также содержит хорошее пошаговое объяснение того, как работает k-means.

Редактировать:Эта статья, написанная некоторыми инженерами Phillips, имеет отношение к тому, что вы пытаетесь сделать:

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

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

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

  • M.Таубенлатт и Дж .Пакетировщик, “Проверка пластин с рисунком с использованием пространственной фильтрации для кластерной среды,” Прикладная оптика, том 1.31, нет.17 июня 1992 г., стр.3354-3362.
  • Ф.-Л.Чен и С.-Ф.Лю, “Нейросетевой подход к распознаванию пространственной структуры дефектов при изготовлении полупроводников.Перевод по стандарту IEEE.Производство полупроводников, т.е.13, нет.3 августа.2000, стр.366-373.
  • G.Эрл, Р.Джонсонбо и С.Jost, Распознавание образов и анализ изображений, Прентис-Холл, Аппер-Седл-Ривер, Нью-Джерси, 1996.

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

  

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

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

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

Предлагаю вам взять любой учебник по обработке изображений и почитать на эту тему. В частности, вас могут заинтересовать морфологические Операции лайк дилатация и Erosion & # 8206; , который дополняет работу детектор краев . Много материалов в сети ...

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

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

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

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

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

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

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

    У тебя есть очень хороший ответ, особенно @ Нейт, и все ссылки и книги, предлагаемые стоит. Однако я удивлен, что никто не предложил одну книгу, которая была бы моим лучшим выбором - Программирование Коллективного Разума . Название может показаться неуместным для вашего вопроса, но, поверьте мне, содержание : одно из наиболее практичных, ориентированных на программистов, охвата интеллектуального анализа данных и «машинного обучения». Я когда-либо видел. Дай ему вращение! -)

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

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

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

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

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

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

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

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

      

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

    Хорошая книга на эту тему: Интеллектуальный анализ данных: практические инструменты и методы машинного обучения

     Data Mining можно купить в Amazon.
    (источник: waikato.ac.nz ) ] ( http://www.amazon.com/Data-Mining -Ian-H-Witten / dp / 3446215336 "ISBN 0-12-088407-0")

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top