Chcę przetwarzać automatycznie segmentowane obrazy mikroskopowe w celu wykrycia wadliwych obrazów i / lub wadliwych segmentacji w ramach wysokowydajnego potoku obrazowania. Istnieje wiele parametrów, które można obliczyć dla każdego surowego obrazu i segmentacji, i które stają się „ekstremalne”, gdy obraz jest wadliwy. Na przykład bąbelek na obrazie spowoduje anomalie, takie jak olbrzymi rozmiar w jednej z wykrytych „komórek” lub anomalnie niską liczbę komórek dla całego pola. Szukam skutecznego sposobu na wykrycie tych anomalnych przypadków. Idealnie wolałbym metodę, która ma następujące właściwości (mniej więcej w kolejności pożądania):
nie wymaga uprzednio zdefiniowanych progów bezwzględnych (chociaż wstępnie zdefiniowane wartości procentowe są OK);
nie wymaga posiadania wszystkich danych w pamięci ani nawet obejrzenia wszystkich danych; byłoby w porządku, aby metoda była adaptacyjna i aktualizowała swoje kryteria, gdy widzi więcej danych; (oczywiście z niewielkim prawdopodobieństwem mogą wystąpić anomalie, zanim system zobaczy wystarczającą ilość danych i zostanie pominięty itp.)
jest równoległy: np. w pierwszej rundzie wiele węzłów pracujących równolegle wytwarza pośrednie anomalie kandydujące, które następnie przechodzą jedną sekundę selekcji po zakończeniu pierwszej rundy.
Anomalie, których szukam, nie są subtelne. Są to te, które są oczywiste, jeśli spojrzy się na histogram danych. Ale objętość danych i ostateczny cel wykrycia anomalii w czasie rzeczywistym podczas generowania obrazów wyklucza jakiekolwiek rozwiązanie wymagające kontroli histogramów przez osobę oceniającą.
Dzięki!
Odpowiedzi:
Czy rozważałeś coś takiego jak klasyfikator jednoklasowy?
Potrzebny byłby zestaw szkoleniowy znanych dobrych obrazów, który służy do szkolenia klasyfikatora, który próbuje rozróżnić „obrazy takie jak zestaw treningowy” i wszystko inne. Istnieje teza autorstwa Davida Taxa, która prawdopodobnie zawiera więcej informacji niż faktycznie potrzebujesz na ten temat, ale może być dobrym miejscem do rozpoczęcia.
Poza wymaganiem zestawu szkoleniowego, wygląda na to, że spełniałby twoje wymagania:
Parametry są uczone na podstawie danych (tutaj nie ma reklamowania)
Po uzyskaniu modelu nie trzeba przechowywać danych w pamięci.
Podobnie, wyszkolony klasyfikator może być uruchomiony na tylu węzłach, ile masz.
W zależności od zastosowania może być możliwe jednorazowe przeszkolenie przydatnego klasyfikatora i ponowne użycie go do różnych rodzajów próbek / barwników / plam / floroforów / itp. Alternatywnie możesz być w stanie skłonić użytkowników do ręcznej oceny pierwszej partii każdego uruchomienia - wyobrażam sobie, że człowiek może sprawdzić co najmniej 5-8 przykładów / minutę z dobrym interfejsem.
źródło
Zobacz http://scholar.google.com/scholar?q=stream+outlier+detection
Kilka ustalonych metod, takich jak LOF , zostało zaadaptowanych w kontekście przesyłania strumieniowego. Istnieją również oczywiście metody, które aktualizują histogramy w sposób strumieniowy, a tym samym sygnalizują oczywiste jednowymiarowe wartości odstające. To może być dla Ciebie wystarczające?
źródło
Istnieje wiele możliwych podejść, ale trudno jest wiedzieć, co może być najlepsze w Twojej sytuacji bez dodatkowych informacji.
Wektory cech wszystkich wcześniejszych obrazów wraz z ich klasyfikacją przechowuj na dysku. Okresowo (powiedzmy raz dziennie) trenuj algorytm uczenia się na tych danych i wykorzystuj wynikowy algorytm do klasyfikowania nowych obrazów. Miejsce na dysku jest tanie; to rozwiązanie może być pragmatycznym i skutecznym sposobem na konwersję algorytmu uczenia się offline na taki, który można wykorzystać w ustawieniach online.
Przechowuj wektory cech losowej próbki 1000 (lub 1 000 000) wcześniejszych zdjęć wraz z ich klasyfikacją. Okresowo trenuj algorytm uczenia się na tej podpróbce.
Pamiętaj, że możesz skutecznie aktualizować tę podpróbkę w trybie online przy użyciu standardowych sztuczek . Jest to interesujące tylko, jeśli istnieje jakiś powód, dla którego trudno jest przechowywać wszystkie wektory cech wszystkich wcześniejszych obrazów (co wydaje mi się trudne do wyobrażenia, ale kto wie).
Innymi słowy, utrzymujesz wektor μ średnich, a an μ n σ μja ja σja x | xja- μja| ≥c σja ja μ σ
Podejście to zakłada, że każdy parametr z nieuszkodzonego obrazu ma rozkład Gaussa i parametry są niezależne. Te założenia mogą być optymistyczne. Istnieje wiele bardziej wyrafinowanych wariantów tego schematu, które wyeliminują potrzebę tych założeń lub poprawią wydajność; to tylko prosty przykład, który daje pomysł.
Ogólnie rzecz biorąc, możesz spojrzeć na algorytmy online i algorytmy przesyłania strumieniowego.
źródło
Jeśli wartości odstające są dość oczywiste, prosta sztuczka, która zadziała, jest następująca. Skonstruuj z własnych wektorów funkcję skrótu uwzględniającą lokalizację. (Prosty, losowy skrót, na przykład po której stronie zestawu losowych hiperpłaszczyzn, na które spada wektor), może dać wektor boolowski jako wartość skrótu.) Teraz, gdy otrzymujesz wektory, obliczasz wartość skrótu wektora i przechowujesz wartość skrótu (wektor boolowski w przypadku hiperpłaszczyzn) i liczba w słowniku. Przechowujesz również całkowitą liczbę wektorów widoczną do tej pory. W dowolnym momencie możesz oflagować dany wektor jako wartość odstającą, jeśli łączna liczba wektorów, które zderzają się z nim w haszu, jest mniejsza niż z góry określony procent całości.
Możesz to postrzegać jako tworzenie histogramu w sposób przyrostowy. Ale ponieważ dane nie są jednoznaczne, używamy sztuczki haszującej, aby zachowywała się tak.
źródło