Algorithmus zur Erkennung von One-Shot-Lernmustern

Einführung


Ich möchte Ihnen das Ergebnis meiner Experimente mit Bilderkennungsalgorithmen mit erstmaligem Lernen (das sogenannte One-Shot-Lernen) vorstellen. Als Ergebnis der Experimente wurden bestimmte Ansätze zur Bildstrukturierung entwickelt, die als Ergebnis in mehreren miteinander verbundenen Algorithmen und einer Testanwendung auf Android enthalten waren, mit der Sie die Qualität und Leistung der Algorithmen überprüfen können.


Mein Ziel war es, einen Algorithmus mit einem klaren Arbeitsprinzip zu erstellen, der beim ersten Mal abstrakte Abhängigkeiten im Bild findet (um zu lernen) und in nachfolgenden Erkennungszyklen eine akzeptable Erkennungsqualität (Suche nach solchen abstrakten Abhängigkeiten) zeigt. Gleichzeitig sollte die Logik der Entscheidungsfindung transparent, analysierbar und näher an einem linearen Algorithmus sein. Auf einer bedingten Skala, bei der sich das Gehirn an einem Ende und am anderen eine CNC-Maschine befindet, ist sie der Maschine viel näher als das neuronale Netzwerk.


Warum nicht ein neuronales Netzwerk?


Derzeit regieren neuronale Netze bei Erkennungsaufgaben, insbesondere CNN ist eine Art Standard für die Mustererkennung. Meiner Meinung nach ist ihre Anwendung jedoch nicht unbegrenzt, und es müssen andere Ansätze gesucht werden.


Ich werde mehrere Gründe gegen neuronale Netze nennen:


  1. Für das Training sind große Datenmengen erforderlich, die möglicherweise einfach nicht verfügbar sind.
  2. Große Lernkraft und große Lernzeit für jedes Bild
  3. Die Opazität des Algorithmus, die Unfähigkeit zu debuggen und direkten Einfluss auf das Ergebnis. Es ist sehr schwierig, wenn nicht unmöglich, die Logik der Gewichtsverteilung zu verstehen. Dies ist sowohl Stärke als auch Schwäche.

Wie funktioniert es?


Die Grundidee ist folgende: Das Bildmuster sollte strukturiert sein, d.h. Die darin enthaltenen Informationen sollten auf das notwendige Minimum reduziert werden, damit die Bedeutung nicht verloren geht. Zum Beispiel zeichnen Künstler Skizzen - in nur wenigen präzisen Linien kann ein Künstler das Gesicht einer Person oder ein Objekt darstellen, und der Betrachter versteht, was dargestellt wird. Ein Foto enthält eine Matrix von N * M Pixeln, jedes Pixel enthält einige Farbinformationsbits, und wenn Sie sich dies alles in Form von Linienparametern vorstellen, nimmt die Informationsmenge stark ab und die Verarbeitung solcher Informationen ist viel einfacher. Der Algorithmus sollte ungefähr dasselbe tun. Er sollte die Hauptdetails im Rahmen hervorheben - die, die die grundlegenden Informationen enthalten, und alles Unnötige verwerfen.



Der Algorithmus findet die Struktur von Vektoren entlang der Grenzen von Objekten in der Probe und dieselbe Struktur im erkannten Bild.



Um einen Vektor zu erhalten, durchläuft ein Bild mehrere Verarbeitungsstufen:


  • Mit der einfachen Formel (Rot + Grün + Blau) / 3 ins Monochrome übersetzt
  • Der Gradient wird für jeden Punkt der Matrix berechnet.
  • Die signifikantesten Gewichtsbereiche des Gradienten werden gefunden
  • Wir suchen nach Vektorketten, die diese Bereiche abdecken
  • Als nächstes werden die Schritte wiederholt, um die minimale Anzahl von Vektoren zu erhalten, die die maximale Information tragen.


Das gleiche passiert im analysierten Algorithmus. Als nächstes werden die resultierenden Anordnungen von Vektoren verglichen:


  • Zunächst versucht der Algorithmus, an einigen ähnlichen Teilen (lokalen Clustern) festzuhalten. Zum Beispiel kann er eine Augenbraue ähnlich einer Augenbraue in einer Probe finden und dann eine Nase finden, die wie eine Nase aussieht.
  • Und dann wird eine ähnliche Beziehung zwischen lokalen Clustern gesucht. Zum Beispiel eine Augenbraue + Nase + eine andere Augenbraue. Bereits einen komplexeren Cluster erhalten.
  • Usw. bis Sie ein Bild der Beziehungen zwischen den Clustern erhalten, die alle oder fast alle Bildvektoren sammeln. Das heißt, B. Augenbrauen, Augen, Nase usw. Gesicht wird nicht funktionieren.

Somit sind kleine Details im Gesamtbild enthalten und es erfolgt eine Lawinenmustererkennung.
Die Klassifizierung selbst basiert auf dem Prinzip, das ähnlichste Bild aus dem gespeicherten zu finden. Am ähnlichsten ist der mit der größten Anzahl übereinstimmender Vektoren mit den geringsten Abweichungen in Bezug auf das Gesamtvolumen der Vektoren in der Stichprobe.


Das allgemeine Schema der Funktionsweise der Algorithmen:



Mehrstufiges Training


Trotz der Tatsache, dass der Algorithmus effizient mit einer Probe arbeiten kann, ist es möglich, die Erkennungsgenauigkeit durch Analyse mehrerer Proben zu erhöhen. Es ist in der Demoversion nicht implementiert, daher werde ich nur auf diese Funktion eingehen. Sie ist sehr einfach. Das Prinzip des Trainings an mehreren Proben besteht darin, unnötige Vektoren zu verwerfen. Zusätzliche sind solche, die nicht in einem gemeinsam gefundenen Vektorcluster enthalten sind. Beispielsweise kann sich auf der Probe ein Schatten befinden, der als Rand erkannt wird, auf der nächsten Probe jedoch möglicherweise nicht.


Wenn der Vektor Teil eines Clusters ist, der in der gespeicherten und in der analysierten Probe gefunden wird, erhält er +1 Punkt, und wenn nicht, erhält er nichts. Nach mehreren Trainings werden die Vektoren, die wenig Punkte erzielt haben, aus der gespeicherten Probe entfernt und nicht mehr für die Analyse verwendet.


Sie können auch einen visuellen Editor erstellen, mit dem Sie nach dem ersten Training einfach unerwünschte Vektoren aus dem Frame entfernen können.


Was kann verwendet werden


Ehrlich gesagt habe ich alle meine Bemühungen auf den Algorithmus selbst konzentriert. Obwohl seit Ich arbeite mit der Umgebung von Geschäftslösungen und der Automatisierung der Produktion. Dann sehe ich eine Anwendung - Produkterkennung in Lagern und Produktionslinien - hier gibt es nur keine großen Datensätze - dann muss das Beispiel einmal angezeigt und dann erkannt werden. Als Barcode-Bindung nur ohne Barcode. Im Allgemeinen ist die Anwendung jedoch dieselbe wie bei jedem anderen Erkennungsalgorithmus. Die Anwendung ist auf die Fähigkeiten und Einschränkungen des Algorithmus zurückzuführen.


Anwendung testen



Die Anwendung arbeitet mit einer Matrix von 100 * 100 Pixel und konvertiert das Bild in eine monochrome Matrix dieser Größe. Dem Algorithmus ist es egal, in welchem ​​Winkel sich die Probe befindet und ihre Abmessungen liegen ebenfalls innerhalb bestimmter Grenzen.


Links wird das Ergebnis der Hervorhebung signifikanter Bereiche des aktuellen Bildes und der darin enthaltenen übereinstimmenden Vektoren (grün) angezeigt. Rechts wird die Struktur der gefundenen Vektoren angezeigt, und die am besten geeigneten gespeicherten und ähnlichen Vektoren werden in der gespeicherten Struktur rot hervorgehoben. Somit markieren rot und grün Vektorstrukturen, die der Algorithmus als ähnlich betrachtet.


Sie können mehrere Proben speichern. Wenn der Algorithmus ein neues Bild anzeigt, findet er das am besten geeignete und zeigt ähnliche Teile.

Source: https://habr.com/ru/post/de414425/


All Articles