Online-Ausreißererkennung

10

Ich möchte automatisch segmentierte Mikroskopbilder als Teil einer Bildgebungspipeline mit hohem Durchsatz verarbeiten, um fehlerhafte Bilder und / oder fehlerhafte Segmentierungen zu erkennen. Es gibt eine Vielzahl von Parametern, die für jedes Rohbild und jede Segmentierung berechnet werden können und die "extrem" werden, wenn das Bild fehlerhaft ist. Beispielsweise führt eine Blase im Bild zu Anomalien wie einer enormen Größe in einer der erkannten "Zellen" oder einer ungewöhnlich niedrigen Zellzahl für das gesamte Feld. Ich suche nach einem effizienten Weg, um diese anomalen Fälle zu erkennen. Idealerweise würde ich eine Methode bevorzugen, die die folgenden Eigenschaften aufweist (ungefähr in der Reihenfolge ihrer Erwünschtheit):

  1. erfordert keine vordefinierten absoluten Schwellenwerte (obwohl vordefinierte Prozentsätze in Ordnung sind);

  2. erfordert nicht, alle Daten im Speicher zu haben oder sogar alle Daten gesehen zu haben; Es wäre in Ordnung, wenn die Methode anpassungsfähig wäre und ihre Kriterien aktualisiert, wenn mehr Daten angezeigt werden. (Offensichtlich können mit geringer Wahrscheinlichkeit Anomalien auftreten, bevor das System genügend Daten gesehen hat und diese übersehen werden usw.)

  3. ist parallelisierbar: z. B. erzeugen in einer ersten Runde viele parallel arbeitende Knoten Zwischenkandidatenanomalien, die nach Abschluss der ersten Runde eine zweite Auswahlrunde durchlaufen.

Die Anomalien, nach denen ich suche, sind nicht subtil. Sie sind die Art, die offensichtlich ist, wenn man sich ein Histogramm der Daten ansieht. Das fragliche Datenvolumen und das letztendliche Ziel, diese Anomalieerkennung in Echtzeit durchzuführen, während die Bilder erzeugt werden, schließen jedoch jede Lösung aus, die eine Überprüfung der Histogramme durch einen menschlichen Bewerter erfordern würde.

Vielen Dank!

kjo
quelle
Stimmt es, dass Ihr Problem im Wesentlichen univariat ist?
user603
1
Veröffentlichen Sie einige Daten, da dies mir helfen könnte, das Problem, das Sie haben, zu "sehen". Ich bin mit dem Histogramm, das den Ausreißer hervorhebt, ziemlich vertraut, und ich kann Ihnen möglicherweise eine Anleitung geben, wie diese anomalen Fälle mithilfe statistischer Methoden effizient erkannt werden können, anstatt Histogramme durch einen menschlichen Bewerter zu untersuchen. Lesen Sie eine aktuelle Diskussion zum Erkennen von Zufälligkeitsstatistiken. Stackexchange.com/questions/12955/… Sie versuchen natürlich, deterministische Verstöße gegen die Zufälligkeit zu erkennen.
IrishStat
Können Sie uns mehr Details geben? Sind die Parameter kontinuierlich oder diskret? Welche Verteilung haben die Parameter für nicht fehlerhafte Bilder? Gauß? Sind die Parameter unabhängig oder korreliert? Wie viele Parameter extrahieren Sie ungefähr pro Bild? Wie viele Bilder pro Sekunde müssen Sie verarbeiten können (oder welche Latenz pro Bild ist akzeptabel)? Vielleicht können Sie einige Histogramme für einige typische Parameter in einem großen Datensatz nicht fehlerhafter Bilder anzeigen und dann das entsprechende Histogramm für fehlerhafte Bilder anzeigen? Dies kann helfen, eine gute Lösung zu finden.
DW

Antworten:

3

Haben Sie so etwas wie einen Ein-Klassen-Klassifikator in Betracht gezogen?

Sie benötigen einen Trainingssatz mit bekanntermaßen guten Bildern, mit denen ein Klassifikator trainiert wird, der versucht, zwischen "Bildern wie Ihrem Trainingssatz" und allem anderen zu unterscheiden. Es gibt eine These von David Tax , die wahrscheinlich mehr Informationen enthält, als Sie tatsächlich zu diesem Thema benötigen, aber möglicherweise ein guter Anfang ist.

Abgesehen davon, dass ein Trainingsset erforderlich ist, scheint es Ihren Anforderungen zu entsprechen:

  • Parameter werden aus den Daten gelernt (hier kein Ad-Hockery)

  • Sobald Sie das Modell haben, müssen Sie die Daten nicht mehr im Speicher behalten.

  • Ebenso kann der trainierte Klassifikator auf so vielen Knoten ausgeführt werden, wie Sie haben.

Abhängig von Ihrer Anwendung können Sie einen wartungsfähigen Klassifikator möglicherweise einmal trainieren und für verschiedene Arten von Proben / Farbstoffen / Flecken / Florophoren / etc. Wiederverwenden. Alternativ können Sie Benutzer möglicherweise dazu bringen, einen Teil der ersten Charge jedes Laufs manuell zu bewerten. Ich kann mir vorstellen, dass ein Mensch mit einer guten Benutzeroberfläche mindestens 5 bis 8 Beispiele pro Minute überprüfen kann.

Matt Krause
quelle
2

Siehe http://scholar.google.com/scholar?q=stream+outlier+detection

Einige etablierte Methoden wie LOF wurden in einen Streaming-Kontext übernommen. Es gibt natürlich auch Methoden, die Histogramme auf Streaming-Weise aktualisieren und so offensichtliche eindimensionale Ausreißer kennzeichnen. Das könnte dir eigentlich genügen?

Hat aufgehört - Anony-Mousse
quelle
1

Es gibt viele mögliche Ansätze, aber es ist schwer zu wissen, was in Ihrer Situation ohne weitere Informationen am besten ist.

Rn

  • Speichern Sie die Merkmalsvektoren aller vorherigen Bilder zusammen mit ihrer Klassifizierung auf der Festplatte. Trainieren Sie regelmäßig (z. B. einmal am Tag) einen Lernalgorithmus für diese Daten und verwenden Sie den resultierenden Algorithmus, um neue Bilder zu klassifizieren. Speicherplatz ist billig; Diese Lösung kann pragmatisch und effektiv sein, um einen Offline-Lernalgorithmus in einen zu konvertieren, der in Ihrer Online-Umgebung verwendet werden kann.

  • Speichern Sie die Merkmalsvektoren einer Zufallsstichprobe von 1.000 (oder 1.000.000) vorherigen Bildern zusammen mit ihrer Klassifizierung. Trainieren Sie regelmäßig einen Lernalgorithmus für diese Teilstichprobe.

    Beachten Sie, dass Sie dieses Teilbeispiel mithilfe von Standardtricks effizient online aktualisieren können . Dies ist nur dann interessant, wenn es einen Grund gibt, warum es schwierig ist, alle Merkmalsvektoren aller vorherigen Bilder zu speichern (was für mich schwer vorstellbar erscheint, aber wer weiß).

  • nccn

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

    Bei diesem Ansatz wird davon ausgegangen, dass jeder Parameter aus einem nicht fehlerhaften Bild eine Gaußsche Verteilung aufweist und dass die Parameter unabhängig sind. Diese Annahmen können optimistisch sein. Es gibt viel komplexere Varianten dieses Schemas, die diese Annahmen überflüssig machen oder die Leistung verbessern. Dies ist nur ein einfaches Beispiel, um Ihnen eine Idee zu geben.

Im Allgemeinen können Sie sich Online-Algorithmen und Streaming-Algorithmen ansehen.

DW
quelle
DW Ein ARIMA-Filter / Modell ist eine Optimierung eines "laufenden Durchschnitts", bei der die Anzahl der Terme (N) und die anzuwendenden spezifischen Gewichte empirisch identifiziert werden. Ein besonderes und offensichtlich mutmaßliches Modell besteht darin, die Anzahl der im "laufenden Durchschnitt" zu verwendenden Werte auf "N" zu erraten und dann den Irrsinn zu verschärfen, indem angenommen wird, dass die Gewichte gleich sind.
IrishStat
@IrishStat, Ich bin mir nicht sicher, ob ich Ihren Kommentar verstehe. Für den Fall, dass mein Schreiben unklar war, schlug ich ARIMA nicht vor, obwohl man das auch in Betracht ziehen könnte. Ich schlug etwas viel Einfacheres vor: Verfolgen Sie den Durchschnitt aller bisherigen Beobachtungen und die Standardabweichung. Jedes Mal, wenn Sie eine neue Beobachtung sehen, können Sie den Durchschnitt und die Standardabweichung (sofern Sie die Anzahl der bisher beobachteten Beobachtungen verfolgt haben) mit Standardmethoden aktualisieren. Es mag simpel sein, aber ich verstehe nicht, warum dies verrückt wäre.
DW
0

Rn

Wenn die Ausreißer ziemlich offensichtlich sind, ist ein einfacher Trick, der funktionieren würde, der folgende. Erstellen Sie aus Ihren Vektoren eine lokalitätssensitive Hash-Funktion. (Ein einfacher randomisierter Hash wie die Seite eines Satzes zufälliger Hyperebenen, auf die der Vektor fällt, könnte funktionieren. Dies würde einen booleschen Vektor als Hashwert ergeben.) Wenn Sie nun Vektoren empfangen, berechnen Sie den Hashwert des Vektors und speichern ihn der Hash-Wert (der Boolesche Vektor bei Hyperebenen) und die Anzahl in einem Wörterbuch. Sie speichern auch die Gesamtzahl der bisher gesehenen Vektoren. Sie können einen bestimmten Vektor jederzeit als Ausreißer markieren, wenn die Gesamtzahl der Vektoren, die im Hash mit ihm kollidieren, weniger als einen vordefinierten Prozentsatz der Gesamtzahl beträgt.

Sie können dies als inkrementelles Erstellen eines Histogramms ansehen. Da die Daten jedoch nicht univariat sind, verwenden wir den Hashing-Trick, damit sie sich so verhalten.

Innuo
quelle