Segmentacja obrazu bez nadzoru


11

Próbuję zaimplementować algorytm, w którym biorąc pod uwagę obraz z kilkoma obiektami na stole w płaszczyźnie, pożądane jest wyjście z masek segmentacji dla każdego obiektu. W przeciwieństwie do CNN, celem jest wykrycie obiektów w nieznanym środowisku. Jakie są najlepsze podejścia do tego problemu? Czy są też jakieś przykłady implementacji dostępne online?

Edytuj: Przykro mi, pytanie mogło być nieco mylące. „Nieznane środowisko” mam na myśli to, że algorytm może nie znać obiektów. Algorytm nie powinien rozumieć, czym jest obiekt, ale powinien jedynie wykrywać obiekt. Jak mam podejść do tego problemu?


„w przeciwieństwie do CNN” nie ma sensu; CNN są rodzajem modelu, a nie rodzajem zadania z celem. Nienadzorowaną segmentację obrazu można również wykonać za pomocą CNN
Nathan

Odpowiedzi:


4

Szybka odpowiedź

Mean Shift LSH, który jest ulepszeniem O(n) słynnego algorytmu Mean Shift w dobrze znany ze swojej zdolności do segmentacji obrazuO(n2))

Kilka wyjaśnień

Jeśli potrzebujesz prawdziwego, nienadzorowanego podejścia do segmentowania obrazów, skorzystaj z algorytmów klastrowania . Faktem jest, że istnieje wiele algorytmów o różnej złożoności i specyficzności czasowej . Weźmy najsłynniejszy, średnie, to jest w O ( n ) tak szybko, ale musisz określić, ile klastrów chcesz, a nie to, co zamierzasz, eksplorując nieznany obraz bez żadnych informacji o tym, ile kształtów jest przedstawia w nim. Co więcej, nawet jeśli przypuszczasz, że wiesz, ile kształtów jest obecnych, możemy przypuszczać, że kształty są losowe, co jest kolejnym punktem, w którym KK.O(n)K.-Środki zawodzą, ponieważ zaprojektowano je w celu znalezienia klastrów eliptycznych, a NIE tych o losowym kształcie.

Przeciwnie, mamy przesunięcie średnie, które jest w stanie automatycznie znaleźć liczbę skupień - co jest przydatne, gdy nie wiesz, czego szukasz - o losowych kształtach .

Oczywiście wymienić parametr K -Means przez innych parametrów Mean Shift, które mogą być trudne do dopracowany ale to nie istnieje narzędzie, które pozwoli Ci zrobić magii, jeśli nie ćwiczycie zrobić magii.K.K.

Porada dotycząca grupowania obrazów w segmenty

Przekształć przestrzeń kolorów z RGB na LUV, co jest lepsze dla odległości euklidesowej.

Średnie vs złożoność czasowa średniej zmiany LSHK.

  • O(α.n)
  • O(β.n)
  • α>β

Mean Shift LSH jest wolniejszy, ale lepiej pasuje do twoich potrzeb. Pozostaje liniowy i jest skalowalny dzięki wspomnianej implementacji.

PS: Moje zdjęcie profilowe jest aplikacją Mean Shift LSH na sobie, jeśli może pomóc zrozumieć, jak to działa.


3

Konieczne może być zapoznanie się z pracą przesłaną i zaakceptowaną do CVPR 2018: Nauka segmentowania każdej rzeczy

W tej pracy próbują segmentować wszystko, nawet obiekty nieznane w sieci. Zastosowano maskę R-CNN, w połączeniu z podsiecią uczącą transferu, uzyskują bardzo dobre wyniki w segmentacji prawie wszystkiego.


2

Najnowocześniejszym (SOTA) rozwiązaniem do segmentacji obrazów byłby Facebook Mask-RCNN .

Chociaż zwykle jest on szkolony na zbiorze danych, takim jak COCO lub Pascal, które zawierają rzeczywiste obiekty, możesz ponownie przeszkolić go na wybranym zbiorze danych, prawdziwym lub nie.

Facebook zapewnia implementację ( Detectron ) na licencji Apache2. Spróbuj!


Właściwie myślę, że zadałem to pytanie w sposób mylący, mój zły. Właśnie opublikowałem zmianę, czy możesz na nią jeszcze raz spojrzeć?
MuhsinFatih

2

W rzeczywistości twoje zadanie jest nadzorowane. Segnetmoże być dobra architektura dla celów którego można się dostać jednym z jego implementacji tutaj . SegNet uczy się przewidywać pikselowe etykiety klas z nadzorowanego uczenia się. Dlatego potrzebujemy zestawu danych wejściowych z odpowiednimi naziemnymi etykietami prawdy. Obrazy etykiet muszą być jednokanałowe, a każdy piksel oznaczony swoją klasą ... .

Spójrz również na w pełni konwergentne sieci które są dobrze dostosowane do twojego zadania.


W oparciu o zmiany wprowadzone w pytaniu dodaję dodatkowe informacje. Istnieje wiele metod, które można zastosować do tego zadania. Zasadniczo najłatwiej jest użyć etykiety tła i sklasyfikować te klasy, których nie znasz jako tło, stosując wspomniane architektury. W ten sposób będziesz mieć etykiety, które mogą nakładać się na klasy tła, co jest prawdopodobnym minusem tego podejścia, ale jego zaletą jest to, że w przypadkach, w których wyuczone etykiety są często używane w danych wejściowych, możesz mieć stosunkowo lekką wersję architektury, która rozpoznaje nieznane klasy.


Właściwie myślę, że zadałem to pytanie w sposób mylący, mój zły. Właśnie opublikowałem zmianę, czy możesz na nią jeszcze raz spojrzeć?
MuhsinFatih

@MuhsinFatih edytowane.
Media

Byłoby to z pewnością łatwiejsze i osiągnąć lepszą wydajność, gdyby było to nadzorowane zadanie, ale możliwa jest również segmentacja obrazu bez nadzoru.
Nathan

@ Natan W tym czasie zasugerowałem własną opinię. Zdecydowanie jest to możliwe.
Media

1

To może być coś, czego szukasz. Ponieważ prosisz o segmentację obrazu, a niesemantic / instance segmentację, zakładam, że nie wymagasz etykietowania dla każdego segmentu obrazu.

Wywoływana jest metoda scene-cut dzieląca obraz na regiony agnostyczne bez nadzoru. Działa to bardzo dobrze w przypadku zagraconego środowiska wewnątrz.

Link do papieru: arxiv

Kod: kod

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.