Онлайн обнаружение выбросов


10

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

  1. не требует предопределенных абсолютных пороговых значений (хотя предопределенные проценты в порядке);

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

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

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

Спасибо!


Я прав, что ваша проблема по существу одномерна?
user603

1
Опубликуйте некоторые данные, которые могут помочь мне «увидеть» проблему, которая у вас есть. Мне хорошо знакома гистограмма, выделяющая выбросы, и я мог бы дать вам некоторые рекомендации относительно эффективного способа выявления этих аномальных случаев с использованием статистических методов вместо проверки гистограмм человеком-оценщиком. Смотрите недавнее обсуждение по обнаружению случайности stats.stackexchange.com/questions/12955/… Вы, конечно, пытаетесь обнаружить детерминированные нарушения случайности.
IrishStat

Можете ли вы дать нам больше деталей? Параметры непрерывны или дискретны? Какое распределение имеют параметры для исправных изображений? Gaussian? Являются ли параметры независимыми или коррелированными? Примерно сколько параметров вы извлекаете, для каждого изображения? Сколько изображений в секунду вам нужно уметь обрабатывать (или какая задержка на изображение допустима)? Возможно, вы можете показать некоторые гистограммы для нескольких типичных параметров в большом наборе данных, не имеющих дефектов изображений, а затем показать соответствующую гистограмму для дефектных изображений? Это может помочь найти хорошее решение.
DW

Ответы:


3

Вы рассматривали что-то вроде одноклассного классификатора?

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

Кроме того, что вам не нужен обучающий набор, кажется, что он будет соответствовать вашим требованиям:

  • Параметры извлекаются из данных (здесь нет рекламы)

  • После того, как вы получили модель, нет необходимости хранить данные в памяти.

  • Точно так же обученный классификатор может быть запущен на любом количестве узлов.

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


2

Смотрите http://scholar.google.com/scholar?q=stream+outlier+detection

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


1

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

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

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

  • Сохраните векторы элементов случайной выборки из 1000 (или 1 000 000) предыдущих изображений вместе с их классификацией. Периодически обучайте алгоритм обучения на этой подвыборке.

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

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

    Другими словами, вы сохраняете вектор средних и вектор стандартных отклонений, где - среднее значение го вектора признаков, а - стандартное отклонение этого признака. Когда вы получаете новый вектор элементов , вы проверяете, для любого . Если нет, вы классифицируете его как исправный и обновляете и .μ n σ μ i i σ i x | x i - μ i | c σ i i μ σnμnσμiiσix|xiμi|cσiiμσ

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

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


DW Фильтр / модель ARIMA - это оптимизация «скользящего среднего», где количество слагаемых (N) и конкретные веса, которые должны применяться, эмпирически определены. Одна конкретная и очевидно предполагаемая модель состоит в том, чтобы угадать в «N» количество значений, используемых в «скользящем среднем», и затем сложить бессмысленность, предполагая, что веса равны друг другу.
IrishStat

@IrishStat, не уверен, что понимаю ваш комментарий. В случае, если мое письмо было неясным, я не предлагал ARIMA, хотя это тоже можно рассмотреть. Я предлагал что-то гораздо более простое: отслеживайте среднее значение всех наблюдений и стандартное отклонение. Каждый раз, когда вы видите новое наблюдение, вы можете обновлять среднее и стандартное отклонение (при условии, что вы отслеживали количество наблюдаемых наблюдений) стандартными методами. Это может быть упрощенно, но я не понимаю, почему это было бы глупо.
DW

0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.