Detección de valores atípicos en línea


10

Quiero procesar imágenes de microscopía segmentadas automáticamente para detectar imágenes defectuosas y / o segmentaciones defectuosas, como parte de una tubería de imágenes de alto rendimiento. Hay una gran cantidad de parámetros que se pueden calcular para cada imagen sin procesar y segmentación, y que se vuelven "extremos" cuando la imagen es defectuosa. Por ejemplo, una burbuja en la imagen dará como resultado anomalías como un tamaño enorme en una de las "células" detectadas, o un recuento de células anormalmente bajo para todo el campo. Estoy buscando una manera eficiente de detectar estos casos anómalos. Idealmente, preferiría un método que tenga las siguientes propiedades (aproximadamente en orden de conveniencia):

  1. no requiere umbrales absolutos predefinidos (aunque los porcentajes predefinidos están bien);

  2. no requiere tener todos los datos en la memoria, o incluso haber visto todos los datos; estaría bien que el método sea adaptativo y actualice sus criterios a medida que vea más datos; (obviamente, con una pequeña probabilidad, pueden ocurrir anomalías antes de que el sistema haya visto suficientes datos y se perderán, etc.)

  3. es paralelizable: por ejemplo, en una primera ronda, muchos nodos que trabajan en paralelo producen anomalías candidatas intermedias, que luego se someten a una segunda ronda de selección una vez completada la primera ronda.

Las anomalías que busco no son sutiles. Son del tipo que es claramente obvio si uno mira un histograma de los datos. Pero el volumen de datos en cuestión, y el objetivo final de realizar esta detección de anomalías en tiempo real a medida que se generan las imágenes, impide cualquier solución que requiera la inspección de histogramas por parte de un evaluador humano.

¡Gracias!


¿Estoy en lo cierto de que su problema es esencialmente univariante?
user603

1
Publique algunos datos ya que eso podría ayudarme a "ver" el problema que tiene. Estoy bastante familiarizado con el histograma que resalta los valores atípicos y podría proporcionarle una guía sobre una forma eficiente de detectar estos casos anómalos utilizando métodos estadísticos en lugar de inspeccionar histogramas por un evaluador humano. Vea una discusión reciente sobre la detección de aleatoriedad stats.stackexchange.com/questions/12955/… Por supuesto, está tratando de detectar violaciones deterministas de aleatoriedad.
IrishStat

¿Nos puede dar más detalles? ¿Los parámetros son continuos o discretos? ¿Qué distribución tienen los parámetros para imágenes no defectuosas? Gaussiano? ¿Son los parámetros independientes o correlacionados? ¿Aproximadamente cuántos parámetros extrae, por imagen? ¿Cuántas imágenes por segundo necesita para poder manejar (o qué latencia por imagen es aceptable)? ¿Quizás pueda mostrar algunos histogramas para algunos parámetros típicos, a través de un gran conjunto de datos de imágenes no defectuosas, y luego mostrar el histograma correspondiente para imágenes defectuosas? Esto puede ayudar a encontrar una buena solución.
DW

Respuestas:


3

¿Has considerado algo así como un clasificador de una clase?

Necesitaría un conjunto de entrenamiento de imágenes bien conocidas, que se utilizan para entrenar un clasificador que trata de distinguir entre "imágenes como su conjunto de entrenamiento" y todo lo demás. Hay una tesis de David Tax que probablemente tenga más información de la que realmente necesita sobre el tema, pero podría ser un buen lugar para comenzar.

Además de requerir un conjunto de entrenamiento, parece que cumpliría con sus requisitos:

  • Los parámetros se aprenden de los datos (no hay ad-hockery aquí)

  • Una vez que tenga el modelo, no es necesario mantener los datos en la memoria.

  • Del mismo modo, el clasificador entrenado podría ejecutarse en tantos nodos como tenga.

Dependiendo de su aplicación, es posible que pueda entrenar un clasificador útil una vez y reutilizarlo para diferentes tipos de muestras / tintes / manchas / floróforos / etc. Alternativamente, es posible que pueda hacer que los usuarios califiquen manualmente algunos de los primeros lotes de cada ejecución; me imagino que un humano podría verificar al menos 5-8 ejemplos / minuto con una buena interfaz.



1

Hay muchos enfoques posibles, pero es difícil saber cuál puede ser mejor en su situación sin más información.

Rn

  • Almacene los vectores de características de todas las imágenes anteriores, junto con su clasificación, en el disco. Periódicamente (digamos, una vez al día) entrene un algoritmo de aprendizaje sobre estos datos y use el algoritmo resultante para clasificar nuevas imágenes. El espacio en disco es barato; Esta solución puede ser pragmática y efectiva para convertir un algoritmo de aprendizaje fuera de línea en uno que pueda usarse en su configuración en línea.

  • Almacene los vectores de características de una muestra aleatoria de 1,000 (o 1,000,000) imágenes anteriores, junto con su clasificación. Entrene periódicamente un algoritmo de aprendizaje en esta submuestra.

    Tenga en cuenta que puede actualizar esta submuestra de manera eficiente en línea utilizando trucos estándar . Esto solo es interesante si hay alguna razón por la cual es difícil almacenar todos los vectores de características de todas las imágenes anteriores (lo cual me parece difícil de imaginar, pero quién sabe).

  • nccn

    nμnσμiiσix|xiμi|cσiiμσ

    Este enfoque supone que cada parámetro de una imagen no defectuosa tiene una distribución gaussiana y que los parámetros son independientes. Esos supuestos pueden ser optimistas. Hay muchas variantes más sofisticadas de este esquema que eliminarán la necesidad de estos supuestos o mejorarán el rendimiento; Este es solo un ejemplo simple para darle una idea.

En general, podría ver algoritmos en línea y algoritmos de transmisión.


DW Un filtro / modelo ARIMA es una optimización de "un promedio móvil" donde el número de términos (N) y los pesos específicos que se aplicarán se identifican empíricamente. Un modelo particular y obviamente presuntivo es adivinar en "N" el número de valores a usar en el "promedio de ejecución" y luego agravar la locura asumiendo que los pesos son iguales entre sí.
IrishStat

@IrishStat, No estoy seguro si entiendo tu comentario. En caso de que mi escritura no fuera clara, no estaba sugiriendo ARIMA, aunque eso es algo que uno podría considerar también. Estaba sugiriendo algo mucho más simple: realizar un seguimiento del promedio de todas las observaciones hasta el momento y la desviación estándar. Cada vez que vea una nueva observación, puede actualizar el promedio y la desviación estándar (siempre que haya realizado un seguimiento del número de observaciones vistas hasta ahora) con métodos estándar. Puede ser simplista, pero no veo por qué esto sería estúpido.
DW

0

Rn

Si los valores atípicos son bastante obvios, un truco simple que funcionaría es el siguiente. Construya una función hash sensible a la localidad a partir de sus vectores. (Un hash aleatorio simple como en qué lado de un conjunto de hiperplanos aleatorios sobre los que cae el vector podría funcionar. Esto produciría un vector booleano como valor hash). Ahora, a medida que recibe vectores, calcula el valor hash del vector y almacena el valor hash (el vector booleano en el caso de los hiperplanos) y los recuentos en un diccionario. También almacena el número total de vectores vistos hasta ahora. En cualquier momento puede marcar un vector dado como un valor atípico si el número total de vectores que colisionan con él en el hash es menor que un porcentaje predefinido del total.

Puede ver esto como construir un histograma de manera incremental. Pero dado que los datos no son univariantes, usamos el truco de hash para que se comporte de esa manera.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.