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):
no requiere umbrales absolutos predefinidos (aunque los porcentajes predefinidos están bien);
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.)
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!
Respuestas:
¿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.
fuente
Ver http://scholar.google.com/scholar?q=stream+outlier+detection
Se han adoptado un par de métodos establecidos, como LOF, en un contexto de transmisión. Por supuesto, también hay métodos que actualizan los histogramas de forma continua y, por lo tanto, señalan valores atípicos unidimensionales evidentes. ¿Eso podría ser suficiente para ti?
fuente
Hay muchos enfoques posibles, pero es difícil saber cuál puede ser mejor en su situación sin más información.
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).
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.
fuente
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.
fuente