Ich versuche, einen Algorithmus zu implementieren, bei dem bei einem gegebenen Bild mit mehreren Objekten auf einer Ebenentabelle die Ausgabe von Segmentierungsmasken für jedes Objekt erwünscht ist. Im Gegensatz zu CNNs besteht das Ziel hier darin, Objekte in einer unbekannten Umgebung zu erkennen. Was sind die besten Ansätze für dieses Problem? Gibt es auch Online-Implementierungsbeispiele?
Edit: Es tut mir leid, die Frage war vielleicht etwas irreführend. Was ich unter "unbekannter Umgebung" verstanden habe, ist, dass Objekte dem Algorithmus möglicherweise unbekannt sind. Der Algorithmus sollte nicht verstehen müssen, was das Objekt ist, sondern sollte nur das Objekt erkennen. Wie soll ich dieses Problem angehen?
Antworten:
Schnelle Antwort
Mean Shift LSH , ein Upgrade inO ( n ) des berühmten Mean Shift-Algorithmus in , ist für seine Bildsegmentierungsfähigkeit bekanntO ( n2)
Einige Erklärungen
Im Gegenteil, wir haben die mittlere Verschiebung, die automatisch die Anzahl der Cluster mit zufälligen Formen ermitteln kann - was nützlich ist, wenn Sie nicht wissen, wonach Sie suchen .
Ein Hinweis zum Clustering von Bildsegmentierungen
Transformieren Sie Ihren Farbraum von RGB zu LUV, was für euklidische Entfernungen besser ist.
Mean Shift LSH ist langsamer, passt aber besser zu Ihren Anforderungen. Es bleibt weiterhin linear und ist mit der genannten Implementierung auch skalierbar .
PS: Mein Profilbild ist eine Anwendung des Mean Shift LSH auf mich selbst, wenn es helfen kann, herauszufinden, wie es funktioniert.
quelle
Möglicherweise müssen Sie sich diese Arbeit ansehen, die für CVPR 2018 eingereicht und akzeptiert wurde: Lernen, alles zu segmentieren
In dieser Arbeit versuchen sie, alles zu segmentieren, auch Objekte, die dem Netzwerk nicht bekannt sind. Die Maske R-CNN wurde verwendet, kombiniert mit einem Subnetz für das Transferlernen. Sie erzielen sehr gute Ergebnisse bei der Segmentierung von fast allem.
quelle
Der Stand der Technik (SOTA) für die Bildsegmentierung wäre Facebooks Mask-RCNN .
Während es normalerweise für Datensätze wie COCO oder Pascal trainiert wird, die reale Objekte enthalten, können Sie es für einen Datensatz Ihrer Wahl neu trainieren, ob real oder nicht.
Facebook bietet eine Implementierung ( Detectron ) unter der Apache2-Lizenz. Versuche es!
quelle
Eigentlich wird Ihre Aufgabe überwacht.
Segnet
kann eine gute Architektur für Ihren Zweck sein, auf die eine ihrer Implementierungen hier zugegriffen werden kann . SegNet lernt, pixelweise Klassenbezeichnungen aus überwachtem Lernen vorherzusagen. Daher benötigen wir einen Datensatz mit Eingabebildern mit entsprechenden Grundwahrheitsbezeichnungen. Beschriftungsbilder müssen einkanalig sein, wobei jedes Pixel mit seiner Klasse .... beschriftet ist .Schauen Sie sich auch Fully Convolutional Networks an, die für Ihre Aufgabe gut geeignet sind.
Basierend auf den Änderungen in der Frage füge ich zusätzliche Informationen hinzu. Es gibt zahlreiche Methoden, die für diese Aufgabe angewendet werden können. Grundsätzlich ist es am einfachsten, eine Hintergrundbezeichnung zu verwenden und die Klassen, die Sie nicht als Hintergrund kennen , mithilfe der genannten Architekturen zu klassifizieren. Auf diese Weise erhalten Sie Beschriftungen, die sich für die Hintergrundklasse überlappen können. Dies ist ein wahrscheinlicher Nachteil dieses Ansatzes. Der Vorteil besteht jedoch darin, dass Sie in Fällen, in denen Ihre trainierten Beschriftungen häufig in den Eingaben verwendet werden, eine relativ leichte Version der Architektur haben können erkennt die unbekannten Klassen.
quelle
Dies könnte etwas sein, das Sie suchen. Da Sie nach Bildsegmentierung und nicht nach
semantic / instance
Segmentierung fragen , benötigen Sie vermutlich nicht die Beschriftung für jedes Segment im Bild.Es wird die Methode aufgerufen,
scene-cut
die ein Bild unbeaufsichtigt in klassenunabhängige Regionen segmentiert. Dies funktioniert sehr gut in Innenräumen.Papierlink: arxiv
Code: Code
quelle