Wizualne wykrywanie kotów za pomocą detekcji anomalii

17

Mam projekt hobby, który rozważam jako sposób na zwiększenie mojego dotychczasowego ograniczonego doświadczenia w uczeniu maszynowym. Zrobiłem i ukończyłem Coursera MOOC na ten temat. Moje pytanie dotyczy wykonalności projektu.

Zadanie jest następujące:

Sąsiednie koty od czasu do czasu odwiedzają mój ogród, co mi się nie podoba, ponieważ mają tendencję do wypróżniania się na trawniku. Chciałbym mieć system ostrzegania, który ostrzega mnie, gdy jest obecny kot, abym mógł go przegonić za pomocą mojego super namaczacza. Dla uproszczenia powiedz, że dbam tylko o kota o czarno-białej kolorystyce.

Mam skonfigurowane malinowe pi z modułem kamery, który może przechwytywać wideo i / lub zdjęcia części ogrodu.

Przykładowy obraz:

Przykładowy obraz ogrodu

Moim pierwszym pomysłem było wyszkolenie klasyfikatora w zakresie identyfikacji kotów lub obiektów podobnych do kota, ale po uświadomieniu sobie, że nie będę w stanie uzyskać wystarczająco dużej liczby pozytywnych próbek, porzuciłem to na rzecz wykrycia anomalii.

Szacuję, że gdybym robił zdjęcie co sekundę dnia, skończyłbym może pięcioma zdjęciami zawierającymi koty (z około 60 000 ze światłem słonecznym) dziennie.

Czy jest to wykonalne przy użyciu wykrywania anomalii? Jeśli tak, jakie funkcje sugerujesz? Moje dotychczasowe pomysły polegałyby na policzeniu liczby pikseli, które mają określone kolory; wykonaj jakieś wykrywanie plamek / segmentację obrazu (czego nie wiem, a tym samym chciałbym uniknąć) i wykonaj na nich taką samą analizę kolorów.

Mróz
źródło
1
Być może to pytanie lepiej pasuje do strony SE z krzyżową weryfikacją, teraz, gdy o tym myślę. To rozróżnienie jest dla mnie niejasne ...
Frost
4
Myślę, że pytanie bardzo pasuje do tej witryny, ponieważ omawia praktyczne zastosowanie uczenia maszynowego. btw, głupie pytanie, dlaczego tak mało zdjęć kotów? Czy przychodzą tylko na pięć sekund?
insys
@insys, pogłoski o mojej czujności wobec moczownika wydają się rozprzestrzeniać w społeczności kotów. Mają tendencję do pozostawania tak jak kiedyś. Wydaje mi się, że to dobra rzecz w / r / t rzeczywisty cel pozbawienia mojego ogrodu kotów, nawet jeśli komplikuje to moje preferowane, bardziej wyrafinowane rozwiązanie.
Frost
2
Wydaje się, że kolejnym oczywistym krokiem (po uruchomieniu wykrywacza kotów) jest super namaczanie kontrolowane przez Raspberry Pi :-)
Kryten

Odpowiedzi:

8

Możesz znacznie uprościć swój problem, stosując metodę wykrywania ruchu / zmiany. Na przykład, możesz porównać każde zdjęcie / ramkę z jednym z wczesnego czasu (np. Minutę wcześniej), a następnie rozważyć tylko te piksele, które zmieniły się od czasu wcześniejszego. Następnie możesz wyodrębnić prostokątny region zmiany i użyć go jako podstawy do klasyfikacji lub wykrycia anomalii.

Takie podejście może znacznie uprościć klasyfikator i zmniejszyć współczynnik fałszywych celów, ponieważ możesz zignorować wszystko, co nie jest mniej więcej wielkości kota (np. Osoby lub ptaka). Następnie użyłbyś wyodrębnionych regionów zmian, które nie zostały odfiltrowane, aby utworzyć zestaw szkoleniowy dla twojego klasyfikatora (lub detektora anomalii).

Przed zamontowaniem głowicy laserowej w systemie wykrywania wtargnięcia kotów upewnij się, że poziom fałszywego celu jest wystarczająco niski.

bogatron
źródło
1
To dobry pomysł na kontrolowane środowisko, ale nie jestem pewien, czy można go zastosować w tym przypadku, ponieważ mamy do czynienia ze środowiskiem naturalnym, w którym zachodzą ciągłe zmiany, tj. Zmiana pogody, położenia słońca, roślin i drzew z powodu wiatr, pory roku itp. Uważam, że region zmian, który opisujesz, w każdym razie zbliżyłby się do wielkości całego obrazu.
insys
@insys - Rozumiem twój punkt widzenia, ale nie zgadzam się - uważam, że dzięki temu detektor jest bardziej odporny na zmiany. Różnica czasu między względnymi ramkami powinna być niewielka (~ sekund do minuty), więc słońce, pora roku, pogoda powinny być znikome. Zgadzam się, że wiatr spowoduje ruch roślin, ale krok klasyfikacji może ich uniknąć, ponieważ ich rozmiar / kształt / kolor są inne niż u kota. Ponadto użycie dwóch klatek w podobnym czasie umożliwia normalizację intensywności pikseli w celu lepszego radzenia sobie ze zmiennymi warunkami oświetlenia (np. Kotem w dzień słoneczny i pochmurny).
bogatron
Właściwie jestem bardziej zdezorientowany w związku z twoją odpowiedzią, kiedy przeczytałem twój komentarz :) Być może źle zrozumiałem, ale jeśli faktycznie używasz „wyodrębnionych regionów zmian” do formowania pozytywnych próbek, jak wspomniano w pytaniu, w jaki sposób możesz nawet zrobić na pewno są to koty? Mogą być wszystkim. Jako taki, twój krok klasyfikacji nie wykryłby niczego poza tym, czego nauczymy się wykrywać - to znaczy zmianami wszelkiego rodzaju. Więc faktycznie powtarza to zadanie detektora „zmiany”.
insys
Co więcej, warunki oświetlenia są zdecydowanie niepokojące, ale jeśli dobrze zrozumiem, nie jest jasne, jakie dwa podobne zdjęcia wykonane z różnicą 1 minuty mogłyby pomóc w normalizacji intensywności pikseli?
insys
Wyodrębnione regiony mogą reprezentować pozytywne lub negatywne przykłady - są one tym, czego użyłbyś do szkolenia klasyfikatora kotów. Jeśli chodzi o intensywności, załóżmy, że klasyfikator jest szkolony z regionów wydobytych głównie ze zdjęć słonecznych. Klasyfikator może wtedy łatwo znaleźć koty z jasnym białym futrem, ale to nie zadziała później w pochmurny dzień (gdy białe futro nie jest już tak jasne) lub o zmierzchu. Przeprowadzenie normalizacji dwóch obrazów pomaga złagodzić ten problem (tj. Para jasnych obrazów i para słabych obrazów wyglądałyby podobnie do klasyfikatora).
bogatron
4

To ciekawy, a także dość ambitny projekt :)

Nie jestem pewien, czy wykrycie anomalii (przynajmniej w sensie opisanym w kursie, który podążałeś) byłoby w tym przypadku bardzo odpowiednim algorytmem.

Rozważałbym bardziej realne podejście do tego, co zostało omówione na końcu tego kursu, w którym pokazano przepływ pracy Photo OCR.

Podejście polegałoby na podzieleniu obrazu na mniejsze „bloki” i przejrzeniu ich jeden po drugim za pomocą nadzorowanego algorytmu uczenia się i próbie sklasyfikowania każdego bloku według tego, czy zawiera on kota, czy nie. Jeśli jeden blok zawiera kota, alarm się włączy. Jako bonus dostajesz również pozycję kota, dzięki czemu możesz pomyśleć o włączeniu „automatycznej” reakcji jako przyszłego kroku do swojego projektu.

Korzyścią jest to, że nie będziesz musiał trenować algorytmu przy użyciu zestawu danych specyficznego dla Twojego ogrodu (który, jak wspomniałeś, jest trudny do utworzenia), ale możesz użyć zdjęć kotów zdjętych z sieci (np. Możesz wyszukać „kot na trawie” lub coś w tym rodzaju) i być może łatki zdjęć z (lub innych) ogrodów. Dlatego nie musisz tracić czasu na zbieranie zdjęć z aparatu i unikasz ryzyka posiadania bardzo małej (porównywalnej) próbki pozytywów (tj. Kotów).

Oczywiście, jak łatwo zbudować dokładny wykrywacz kotów, to kolejny temat ...

insys
źródło
A co by się stało, gdyby Twój blok podzielił cięcie na dwa lub więcej plasterków? Strategia blokowania jest bardzo powszechnym podejściem, ale kiedy kamera jest całkowicie przymocowana do określonej pozycji, wykrywanie ruchu jest moim zdaniem lepszym i mniej czasochłonnym podejściem.
adesantos
@adesantos - To, co mówisz, może być prawdą, a przewidywanie różnicowania części ruchomych i nieruchliwych ma swoje zalety. Ale w przypadku treningu, w sposób opisany przez bogatron, nie jest jasne, jakie korzyści przynosi on do stołu. Ogólnie moim zdaniem dodaje to złożoności, co znacznie wydłuża czas debugowania. Zaletą przesuwania okna jest jego prostota.
insys
Btw, jeśli chodzi o wspomniany podział, oczywistą strategią jest umożliwienie nakładania się okien, aby podział nie wpływał na klasyfikator.
insys
Dodałbym do mojej propozycji (detekcja ruchu) użycie algorytmu SIFT z teksturą kota. Metodę SIFT można również stosować w przypadku strategii bloków, ale w takim przypadku porównasz więcej bloków niż jest to wymagane. Zauważ, że kot się porusza, ale drzewo lub krzak nie za bardzo.
adesantos
3

Strategia wykrywania ruchu / zmiany jest z pewnością odpowiednia, ale dodałbym dodatkową operację. Wykryłbym te regiony, które prawdopodobnie zostaną zmienione, na przykład drabina wydaje się miejscem, w którym mogą być ludzie (także koty) i trawa, gdzie mogą być psy, koty lub ludzie.

Przechwyciłbym mapę z rozmiarem obiektu i trajektorii, a dzięki temu stworzyłbym klaster w celu wykrycia obiektu (o określonej wielkości w obrazie pod względem pikseli), który porusza się z określoną prędkością i trajektorią.

Możesz to osiągnąć za pomocą R lub sugerowałbym OpenCV w celu wykrycia ruchu i śledzenia różnych obiektów.

adesantos
źródło
2

Odejmowanie tła przez OpenCV spowoduje znalezienie obiektów poruszających się po twojej harden. Następnie możesz użyć klasyfikatora lub analizy kształtu, aby rozróżnić koty, ludzi, drzewa itp.

vrfsdbelbeml
źródło
1

Czy to ptak? Czy to jest kot? Mamy czarno-biały kot wielkości! sroki tutaj. więc to się nie powiedzie.

Pierwszą rzeczą byłoby wykluczenie wszystkich obszarów, które są zielone, koty rzadko są zielone.

Następnie porównaj resztę z obrazem odniesienia, aby usunąć przedmioty statyczne, takie jak kamienie i schody.

Wykrywanie obiektów o minimalnym rozmiarze powinno być możliwe, ale dla klasyfikacji rozdzielczość jest zbyt niska. Może to być również twój sąsiad testujący swój nowy zdalnie sterowany dron.

Za pomocą dwóch kamer można wykonać mapowanie obiektów w 3D i wyeliminować obiekty latające.

użytkownik1164
źródło