Eine der wichtigen Unteraufgaben der Videoanalyse ist das Verfolgen von Objekten in einem Video. Es ist nicht so primitiv, dass ich auf Pixel-für-Pixel-Ebene gehen musste, aber es ist nicht so komplex, dass eindeutig ein mehrschichtiges neuronales Netzwerk für die Lösung erforderlich ist. Tracking kann sowohl als Selbstzweck als auch als Teil anderer Algorithmen verwendet werden:
- Einzigartige Personen zählen, die eine bestimmte Zone betreten oder die Grenze in einem Rahmen überschritten haben
- Identifizierung typischer Routen von Autos auf einem Parkplatz und Personen in einem Geschäft
- Automatische Drehung der Überwachungskamera, wenn das Objekt verschoben wird
Ohne auch nur die Literatur zu betrachten, kann ich mit Zuversicht sagen, dass der beste Weg zur Lösung des Problems die Verwendung neuronaler Netze ist. Im Allgemeinen können Sie nichts weiter schreiben, aber es ist nicht immer möglich, mit einem Paar GTX 1080Ti eine Aufgabe zu erledigen. Wen interessiert es, wie man Objekte auf dem Video in solchen Fällen verfolgt, bitte unter Katze. Ich werde versuchen, nicht nur zu erklären, wie ASEF- und MOSSE-Tracker funktionieren, sondern Sie zur Lösung zu bringen, damit die Formeln offensichtlich erscheinen.
Zunächst werden wir eine vorläufige Frage beantworten: Warum etwas erfinden, wenn Sie einen Tensorflow-Stapel von Videos füttern und den Computer für ein paar Wochen verlassen können? Neuronale Netzwerkansätze haben einen schwerwiegenden Nachteil: Selbst bei modernen Grafikkarten ist es schwierig, eine gute Feuerrate von Netzwerken zu erzielen. Dies ist kein Problem, wenn wir das aufgenommene Video analysieren, aber es steckt einen Stick in die Räder, wenn Sie in Echtzeit arbeiten möchten. Angenommen, wir möchten Videos von fünf Kameras mit 10 FPS verarbeiten. Selbst bei solch relativ milden Bedingungen sollte ein neuronales Netzwerk eine Inferenzzeit von weniger als haben
frac10005 times10=$2 Millisekunden (unter Bedingungen vollständiger Nichtparallelität). Zum Vergleich kann YoloV3, ein Klassifikator-Netzwerk mit einer relativ einfachen Architektur, ein Bild ausspucken
50 Millisekunden. Darüber hinaus können Lösungen, die auf leistungsstarken Grafikkarten basieren, sehr teuer sein.
In diesem Artikel wird davon ausgegangen, dass Sie sich bereits mit der maschinellen Bildverarbeitung befasst haben, mit den grundlegenden Operationen der linearen Algebra (Faltung, Norm, Matrixinversion) vertraut sind und die Fourier-Transformation im Allgemeinen verstehen.
Im Folgenden:
- A odotB steht für elementweise Matrixmultiplikation A und B
- A otimesB bezeichnet die Faltung von Matrizen A und B
- hatA( omega, nu)= mathcalF(A(x,y)) bedeutet das hatA( omega, nu) - Frequenzmatrix der schnellen Fourier-Transformation, die auf das Bild angewendet wird A .
- parallelA parallel2 - gibt die Summe der Quadrate der Elemente der Matrix an A
Triviale Entscheidung
Auf den ersten Blick scheint die Aufgabe, ein bestimmtes Thema zu verfolgen, nicht so kompliziert zu sein.
Mögen wir haben
T aufeinanderfolgende Videobilder
It die Größe
w auf
h Pixel. Im ersten Frame des Videos
I0 Ein Rechteck ist um ein Objekt herum eingekreist
F0m auf
n . Es ist erforderlich, die Position dieses Körpers in allen anderen Frames zu finden
It .
Wir entfernen das Rauschen in den Bildern und normalisieren sie dann im Bereich von -1 bis 1, damit die allgemeinen Helligkeitsänderungen die Erkennung nicht beeinträchtigen. Nehmen Sie das erste Bild des Videos ohne Markup auf
I1 . Wenn
I0 und
I1 - Bei benachbarten Videobildern mit guter FPS ist es unwahrscheinlich, dass das gewünschte Objekt weit von seiner ursprünglichen Position entfernt ist. Nutzen Sie dies. Ausschneiden
I1 Rechteck
F1 von dem Ort, an dem sich der gewünschte Körper zuvor befand. "Ziehen"
F0 durch
F1 und an jedem Punkt berechnen wir das Quadrat der Summe der Differenzen
GL2(i,j)= parallelF1(i,j)−F0 parallel2,i in[0,m],j in[0,n]
wo berechnet man die Differenz in
GL2(i,j) müssen das Zentrum kombinieren
F0 mit Element
(i,j) in
F1 und die fehlenden Werte auf Null. Danach in der Matrix
GL2 Minimum wird gesucht; seine Position abzüglich der Koordinaten des Zentrums
F1 und wird der Versatz des gewünschten Objekts um sein
I1 .
Damit ein scharfer Übergang zu Null während der Erkennung nicht „klingelt“, ist es besser, das Rechteck zunächst etwas mehr als nötig zu nehmen und die Werte näher an den Rändern sanft auf Null zu reduzieren
F0 und
F1 . Dafür jeder von
F müssen mit der Maske multipliziert werden. Für quadratische Objekte reicht der gute alte Aussteller.
A= exp frac(x−i)2+(y−j)2 sigma2 (wo
(x,y) Ist die Mitte des Fensters), aber im allgemeinen Fall ist es besser, ein zweidimensionales Hanning-Fenster zu nehmen.
Für
I2 das Fenster
F2 von der auf dem Rahmen vorhergesagten Position genommen
I1 , usw.
Stattdessen
L2 Normen können verwendet werden
L1 (
GL1(i,j)=|F1(i,j)−F0| ) und abzüglich der Kreuzkorrelation von Matrizen (
GnCC(i,j)=− sumklF1,kl(i,j)F0,kl,k in[0,m],l in[0,n] ) Beide gelten als etwas schneller als
L2 aber sie haben ihre eigenen Eigenschaften.
L1 nicht differenzierbar und weniger empfindlich gegenüber großen Unterschieden in den Pixelwerten. Eine Kreuzkorrelation kann zu falsch positiven Ergebnissen führen, wenn die Probe einen geringen Kontrast aufweist und das Bild sehr helle oder sehr dunkle Bereiche aufweist.
L2 -Version der Metrik hat keinen solchen Nachteil:
GL2= sum(F1,kl(i,j)−F0,kl)2
= sum(F1,kl(i,j))2−2F1,kl(i,j)F0,kl+(F0,kl)2
= sum(F1,kl(i,j))2− sum2F1,kl(i,j)F0,kl+ sum(F0,kl)2
=EF1(i,j)+2GnCC(i,j)+EF0
EF1(i,j) , Die "Energie" des ausgewählten Ortes auf
It wirkt als ausgleichender Faktor (
EF0 Die Summe der Quadrate der Pixelwerte der Stichprobe ist für alle Fensterpositionen gleich und hat hier keine praktische Bedeutung.
Selbst ein solcher primitiver Algorithmus kommt bei linearen Bewegungen von Objekten (z. B. einer Kamera, die auf das Förderband schaut) ziemlich gut zurecht. Aufgrund der Einfachheit des Modells und der Ausführung weist diese Verfolgungsmethode jedoch mehrere Nachteile auf:
- Eine einfache lineare Bewegung eines Objekts ohne Änderungen in der Natur ist selten. Körper im Sichtfeld der Kamera können in der Regel einige Klassen von Änderungen erfahren. In der Reihenfolge zunehmender Komplexität: Zunahme / Abnahme der Größe, Drehungen, affine Transformationen, projektive Transformationen, nichtlineare Transformationen, Änderungen in einem Objekt. Selbst wenn wir Objektänderungen und nichtlineare Transformationen weglassen, möchten wir, dass der Algorithmus sich von relativ einfachen Rotationen und Größenänderungen erholen kann. Offensichtlich hat das obige Verfahren diese Eigenschaft nicht. Wahrscheinlich F0 Es wird immer noch eine merkliche Reaktion auf das Objekt geben, aber es wird schwierig sein, den genauen Ort der Probe zu bestimmen, und die Spur wird diskontinuierlich sein.
- Wir haben dem Algorithmus nur eine positive Stichprobe gezeigt, es ist schwer zu sagen, welche Antwort es geben wird F0 wenn ein anderes ähnliches Objekt in das Fenster gelangt. Nun, wenn das gewünschte Objekt kontrastiert und eine seltene Struktur hat, aber was ist, wenn wir eine Maschine in einem Strom anderer Maschinen überwachen wollen? Ein Tracker kann unvorhersehbar von einem Auto zum anderen springen.
- Bei jedem Frame verwerfen wir die gesamte Hintergrundgeschichte. Wahrscheinlich sollte es auch irgendwie benutzt werden.
- Außerdem lernen wir nur an einer Stelle im Bild. Es ist besser, wenn der Tracker in der Nähe der richtigen Position des Objekts auch eine gute Antwort gibt. Ein bisschen eingängig, aber denken Sie: Wenn sich der Filter genau an der Stelle des Objekts im Bild befindet (x,y) gibt den besten Wert und in (x+1,y+1) - Etwas Zufälliges, was bedeutet, dass er zu empfindlich für kleine Details ist, die sich leicht ändern können. Umgekehrt, wenn in (x,y) und in (x+1,y+1) ungefähr die gleichen guten Werte, der Filter "hakt" an größeren und hoffentlich dauerhafteren Zeichen.
- Mit der naiven Implementierung der Verfolgungsprozedur multiplizieren wir für jedes Pixel des Rahmens das gesamte Fenster mit dem ausgewählten Element mit dem entsprechenden Teil dieses Rahmens. Die Komplexität dieser Operation ist O(m2n2) . In solchen Fällen ist es nicht sehr schön, Objekte mit 50 bis 50 Pixeln zu verfolgen. Dieses Problem wird teilweise durch Reduzieren der Größe des Videos gelöst. Wenn das Bild jedoch auf weniger als 240 Pixel Breite reduziert wird, gehen sogar große signifikante Details verloren, was den Algorithmus bedeutungslos macht.
ASEF, MOSSE
Trivialer Ansatz ++?
Krempeln Sie die Ärmel hoch und versuchen Sie, die oben genannten Probleme zu lösen.
Erweitern Sie das Originalbild. Wir wenden darauf mehrere milde affine Transformationen an. Sie können auch Rauschen hinzufügen oder das Gamma ändern. Somit wird anstelle eines einzelnen Bildes ein Mikrodatensatz von
P Bilder. Es gab viele Bilder, aber ein Fenster blieb übrig. Jetzt schneiden wir nicht nur ein Rechteck aus dem Bild aus, sondern suchen nach einem Filter
W was geben wird, gab eine gute Antwort für alle
Ip . Wir verwandeln das Problem in ein Minimierungsproblem:
W: minW parallelFp−W parallel2,p in[1,P]
wo
parallelFp−W parallel2 - die Summe der Quadrate der Pixeldifferenzen zwischen
W und den entsprechenden Abschnitt der genauen Position des Objekts auf
p das synthetische Bild, das aus einem Rahmen mit echtem Markup erstellt wurde.
Darüber hinaus können Sie Rechtecke abtasten, die
weit von der Position des verfolgten Objekts entfernt sind, und den oben gezeigten Unterschied
maximieren .
Es ist schwieriger vorzuschlagen, dass der Filter an Punkten nahe der genauen Position des Objekts eine gute Reaktion liefert. Wir wissen das in
(x,y) Filteranwendung mit
L2 -metric sollte 0 geben, next - more, far - noch mehr. Darüber hinaus haben wir keine Vorzugsrichtung, die Antwort sollte in Bezug auf zentral symmetrisch sein
(x,y) . Es sieht so aus, als könnten wir mathematisch ausdrücken, wie die Reaktion eines auf Referenzbilder angewendeten Filters aussehen sollte! Das genaue Erscheinungsbild kann je nach spezifischer Antwortdämpfungsfunktion variieren, aber liebt jeder Gaußsche? Deshalb nehmen wir das an
W angewendet auf
Fp sollte idealerweise ein Ergebnis geben
Gp=1− exp frac(x−i)2+(y−j)2 sigma2 . Daher wird das Minimierungsproblem zu:
Dp(i,j)= parallelFp(i,j)−W parallel2
W: minW parallelDp(i,j)−Gp(i,j) parallel2,p in[1,P]
Jetzt minimieren wir nicht die Antwort an einem Punkt, sondern minimieren die Abweichung der Antwort von der gewünschten.
Moment mal ... Wir haben es geschafft
P timesm timesn Gleichungen mit
m timesn zu minimierende Variablen. Es scheint, wir haben es übertrieben. Gehen wir ein wenig zurück.
Haupttrick
Von allen Problemen ist die Komplexität die größte Schwierigkeit.
O(m2n2) . Ist es möglich, etwas anderes als die schwierige Aufteilung eines Suchfelds in mehrere kleine zu finden oder im Bild in kleiner Auflösung zu suchen und eine Feinabstimmung für hohe Präzision vorzunehmen?
Es stellt sich heraus, dass Sie können! Die Matanalyse sagt uns, dass die Faltung von Funktionen im gewöhnlichen Raum eine Multiplikation ihrer Fourier-Bilder ist. Wir sind in der Lage, eine schnelle Fourier-Transformation auf Bilder anzuwenden, ihre Frequenzen Element für Element zu multiplizieren und das Ergebnis dann wieder in eine Matrix für umzuwandeln
O(mn logmn) Das ist viel schneller als die Matrix ehrlich zu minimieren. Fourier! Wer hätte das gedacht! Im Zeitalter des Tensorflusses kann er uns immer noch beim Computer Vision helfen.
(Dies zeigt übrigens das allgemeine mathematische Prinzip: Wenn Sie das Problem nicht im Raum lösen wollen
X bewege es in den Weltraum
Y , entscheide dich dort und übertrage die Entscheidung zurück. Die Problemumgehung ist oft kürzer als die direkte.)
Wie oben gezeigt, können wir die Kreuzkorrelation verwenden, um die Probe im Bild zu lokalisieren. Kreuzkorrelation ist jedoch eine Faltung mit horizontaler und vertikaler Reflexion
W . Die Matanalyse legt nahe, dass in diesem Fall die Frequenzen multipliziert werden müssen
F auf einer komplexen konjugierten Matrix zu einer Frequenzmatrix
W ::
hatW( omega, nu)= mathcalF(W(x,y))
hatF( omega, nu)= mathcalF(F(x,y))
hatGconv( omega, nu)= mathcalF(Gconv(x,y))
Gconv=F otimesW rightarrow hatGconv= hatF odot hatW∗
wo
Gconv= exp frac(x−i)2+(y−j)2 sigma2 - perfekte Antwortfunktion auf dem Referenzbild. Bitte beachten Sie das
L2 Wir haben die Metrik minimiert und die Faltungsmetrik maximiert. Je größer die Antwort, desto besser.
Wenn wir ein Bild hätten, würden wir die genaue Filterfrequenzmatrix finden:
hatW∗= frac hatGconv hatF
wobei sich die rechte Seite auf die elementweise Unterteilung bezieht. Aber etwas früher haben wir generiert
P Bilder von der Quelle. Wir können sie mit dem Fourier-Ansatz anwenden. Es gibt keinen Filter mit solchen Frequenzen, der idealerweise alle Bilder zufriedenstellt, aber Sie können etwas Gutes bekommen. Es gibt zwei Möglichkeiten, wie Sie das Problem lösen können:
- Sie können eine Reihe idealer Filter finden und diese dann zu einem mitteln. Dies ist der Weg, den die Autoren von Average of Synthetic Exact Filters (ASEF) gehen:
hatW∗= frac1P sumPp=1 hatW∗p= frac1P sumPp=1 frac hatGp hatFp
Hier verwenden wir die Linearitätseigenschaft von Fourier-Bildern. Wenn wir wie oben gezeigt Frequenzen hinzufügen, scheinen wir mehrere Filtergewichte zu mitteln. - Sie können Filterfrequenzen finden, die im Durchschnitt alle Bilder erfüllen, ungefähr wie bei L2 ::
hatW∗: min hatW∗ sumPp=1 parallel hatFp odot hatW∗− hatGp parallel2
Um das Minimum zu finden, müssen Sie die Ableitung der Filterelemente nehmen: frac delta delta hatW∗ sumPp=1 parallel hatFp odot hatW∗− hatGp parallel2=0
Eine ehrliche Erfassung dieser Ableitung findet sich in der visuellen Objektverfolgung mit adaptiven Korrelationsfiltern , die eine minimale Ausgabesumme von quadratischen Fehlerfiltern (MOSSE-Filtern) bietet. Das Ergebnis ist folgendes: hatW∗= frac sumPp=1 hatGp odot hatFp∗ sumPp=1 hatFp odot hatFp∗
Hmm, als ob ähnliche Elemente in die Formeln involviert wären. Bei
P=1 Die Formeln für ASEF und MOSSE sind genau gleich.
hatW∗ für ein Bild kann dargestellt werden als
hatW∗= frac hatGp hatFp= frac hatGp odot hatFp∗ hatFp odot hatFp∗
Ersetzen Sie ASEF durch die Formel und erhalten Sie
hatW∗= sumPp=1 frac hatGp odot hatFp∗ hatFp odot hatFp∗
Ja! Jetzt ist es viel besser zu sehen, dass sich ASEF und MOSSE nur in der Methode der Filtermittelung unterscheiden! Es wird argumentiert, dass MOSSE bessere Filter als ASEF erzeugt. Es klingt logisch: Die Anpassung an das gesamte Bildpaket ist besser als die Mittelwertbildung von Filtern.
Nachdem wir bekommen haben
hatW∗ berechnen wir die Antwort im Frequenzbereich
hatGconv= hatF odot hatW∗ , dann übersetzen wir es in den räumlichen Bereich und suchen das Maximum in der resultierenden Matrix
G . Wo das Maximum ist, gibt es die neue Position des Objekts.
Zusätzliche Punkte
- Die Begriffe in den Nennern der Formeln haben eine interessante physikalische Bedeutung. hatFp odot hatFp∗ Ist das Energiespektrum eines Rechtecks mit p dieses Bild.
- Achten Sie auf interessante Symmetrie. Es war notwendig, die Filterfrequenzen mit den Bildfrequenzen zu multiplizieren, um eine Antwort zu erhalten. Jetzt müssen Sie die Antwortfrequenzen mit den Bildfrequenzen multiplizieren (und normalisieren), um die Filterfrequenzen zu erhalten.
- Im wirklichen Leben kann die elementweise Division eine Division durch Null verursachen, daher wird dem Nenner normalerweise eine Regularisierungskonstante hinzugefügt epsilon . Es wird argumentiert, dass eine solche Regularisierung bewirkt, dass der Filter niedrigen Frequenzen mehr Aufmerksamkeit schenkt, was die Generalisierungsfähigkeit verbessert.
- Bei der Verarbeitung von echtem Video möchten Sie normalerweise Informationen über das verfolgte Objekt speichern, das aus vorherigen Frames erhalten wurde. Wenn Sie zum nächsten Frame wechseln, können Sie nicht berechnen hatW von Grund auf neu und aktualisieren Sie die vorherige. Aktualisierungsformel für ASEF:
hatW∗i= frac etaP sumPp=1 frac hatGp hatFp+(1− eta) hatW∗i−1
Für MOSSE müssen Sie Zähler und Nenner getrennt akkumulieren:Ai= eta sumPp=1 hatGp odot hatFp∗+(1− eta)Ai−1
Bi= eta sumPp=1 hatFp odot hatFp∗+(1− eta)Bi−1
hatW∗i= fracAiBi
wo eta - Lerngeschwindigkeit. - Es ist wichtig zu bedenken, dass die Fourier-Transformation nicht ganz mit der Berechnung übereinstimmt G Ehrlich gesagt, wie am Anfang des Artikels beschrieben. Bei der Berechnung der FFT verschwinden die fehlenden Elemente nicht, sondern werden auf der Rückseite ersetzt, als ob das Bild von rechts nach links und von unten nach oben geschleift wäre. Aber ganz am Anfang des Artikels haben wir uns bereits entschlossen, die Ränder abzudunkeln F Daher wird dieses Problem keine spürbaren Auswirkungen haben.
- Wie oben erwähnt, hat die Kreuzkorrelation ein unangenehmes Merkmal: Im Allgemeinen kann ein Lichtfilter in weißen Bereichen des Bildes eine starke Reaktion hervorrufen, selbst wenn sie in kontrastierenden Bereichen nicht zusammenfallen. Die Probleme sind nicht darauf beschränkt. Selbst ein übereinstimmendes Pixel mit einem stark positiven oder sehr negativen Wert kann den Filter stören, wenn die Probe insgesamt einen geringen Kontrast aufweist. Um diesen Effekt auszugleichen, muss eine nichtlineare Transformation von Bildpixeln in die Vorverarbeitung einbezogen werden, wodurch zu helle und zu dunkle Bereiche in die Mitte „gedrückt“ werden. Aus diesem Grund trägt das Zusammentreffen dieser kontrastierenden Bereiche stärker zur Metrik bei. Die Artikel ASEF und MOSSE verwenden den Logarithmus:
I= logI+1
Wo sind die Pixel? I von 0 bis 255. Meiner Meinung nach ist dies zu hart und ignoriert das Problem der starken Reaktion des Dunkelfilters in schwarzen Bereichen. Ein solches Schema funktioniert besser:I=Zeichen(I−127) sqrt|I−127|
Dann kommt die Normalisierung und es stellt sich heraus, dass die meisten Elemente um Null zentriert sind.
- Wie kann ein solcher Algorithmus feststellen, dass das verfolgte Objekt aus dem Frame verschwunden ist? Eine detailliertere Analyse der Antwort aus dem nächsten Frame hilft hier. Die Entwickler von MOSSE bieten einen PSR-Indikator an - Peak-to-Sidelobe-Verhältnis. Lass gmax - maximales Element G entsprechend der neuen Position des Objekts (x,y) . Wir schließen das Quadrat von der Betrachtung aus 11 mal11 um dieses Maximum. Wir berechnen den Durchschnitt und die Standardabweichung für die verbleibenden Pixel ( musl, sigmasl ) Dann
PSR= fracgmax− musl sigmasl
Wenn dieser Wert über einem bestimmten Schwellenwert liegt, wird die Erkennung als erfolgreich angesehen. Der Schwellenwert wird normalerweise im Bereich zwischen 3 und 10 genommen. Für sichere Erkennungen wird der PSR normalerweise über 20 gehalten.
(Beachten Sie, dass PSR hier überhaupt nicht bedeutet, was es normalerweise in der Signalverarbeitungstheorie bedeutet. googeln Sie es also nicht, es wird nichts Gutes herauskommen.) - Der Algorithmus ist extrem einfach. Das Verfolgungsverfahren auf Core-i7 in Bildern mit 320 x 400 mithilfe der OpenCV-Implementierung dauert je nach Größe des verfolgten Objekts zwischen 0,5 und 2 Millisekunden.
MOSSE-Algorithmus
Alles zusammenfügen.
Allgemeiner Zustand:Filterfrequenzmatrix:
hatWHilfsmatrizen zur Berechnung der Filterfrequenzen:
A,BFrequenzmatrix der gewünschten idealen Antwort:
hatGTrainingsgeschwindigkeit während des Trackings:
etaDas Rechteck der aktuellen Position des Objekts:
RAnzahl der Transformationen:
PAntwortschwelle:
PSRthrHilfsfunktion:
Training . Eingabe: Bild
I aktuelle Lerngeschwindigkeit
etacurrent- Anew:=0,Bnew:=0
- Bis ich es habe P Transformationen:
- Wenden Sie eine kleine zufällige affine Transformation in der Mitte des Bildes an. R
- Aus einem Rechteckbild mit Objekt ausschneiden F
- Wenden Sie eine Maske an, um die Kanten gleichmäßig aufzuheben
- Übersetzen F im Frequenzbereich: hatF
- Anew=Anew+ hatG odot hatF∗
- Bnew=Bnew+ hatF odot hatF∗
- Wenn etacurrent geq1.0 dann ersetzen A und B auf Anew und Bnew . Ansonsten:
B:= etaBnew+(1− eta)B
A:= etaAnew+(1− eta)A
- Filterfrequenzen berechnen:
hatW∗= fracAB
Initialisierung . Eingabe: Bild
I Rechteck um die Position des Objekts
Rinit- R:=Rinit
- Bereiten Sie die gewünschte Antwort vor G . Normalerweise ist dies eine Nullmatrix mit einem kleinen Gaußschen Wert in der Mitte.
- Schulung : I 1,0
- Übersetzen G im Frequenzbereich: hatG
Tracking : Eingabe: Bild
I- Rechteck ausschneiden F von I für die vorhandene vorherige Position des Objekts R
- Wenden Sie eine Maske an, um die Kanten gleichmäßig aufzuheben
- Übersetzen F im Frequenzbereich: hatF
- hatGresponse= hatW odot hatF∗
- Übersetzen hatGresponse zum räumlichen Bereich: GAntwort
- Finden Sie das Maximum in GAntwort :: gmax,(x,y)
- Berechnen Sie die Antwortleistung PSR:= fracgmax− musl sigmasl
- Wenn PSR<PSRthr Beenden fehlgeschlagen
- Position aktualisieren R . Passen Sie R an, wenn es über das Bild hinausgeht oder wenn entschieden wurde, dass das Objekt vergrößert / verkleinert wird.
- Schulung : I , eta
- Zurück R
Implementierungsdetails können variieren. Zum Beispiel
- Nur kann vorverarbeiten F , nicht das ganze Bild.
- G kann für jede Bildtransformation mit variierender Funktion und Antwortbreite neu erstellt werden.
- Sie können mehrere verschiedene Filter gleichzeitig auf mehreren Skalen des Objekts trainieren, um Bewegungen in der Ferne und in der Umgebung zu erfassen.
Wie sieht es aus?
Zunächst einige Beispiele für die zweidimensionale Fourier-Transformation.
Einige einfache BeispieleIch möchte Sie daran erinnern, dass das Ergebnis der Transformation einen komplexen Wert hat. Die folgenden Bilder zeigen die Gruppen „Bild - Absolutwerte des Frequenzbereichs auf einer normalen Skala - Absolutwerte des Frequenzbereichs auf einer logarithmischen Skala“.
Vertikale Linien:



Das Bild ändert sich für jede vertikale Position von links nach rechts. Darüber hinaus erfolgt die Änderung periodisch mit einer klaren Periode und einem klaren Muster. Daher sehen Sie in den Bildern von Frequenzen nur Frequenzen entlang der Achse
x=0 .
Käfig:



Bitte beachten Sie, dass es erwartungsgemäß eine Reihe von Frequenzen entlang der Achsen gibt
x=0 und
y=0 und seltsame Störfrequenzen. Sie erschienen aufgrund der Tatsache, dass zum einen das Bild endlich ist, während das Fourier-Bild nur für ein unendliches periodisches Signal in eine schöne Menge zerlegt wird. Zweitens können Sie sehen, dass das Bild an den Rändern keinen exakten Punkt bildet.
Geneigte Linien:



Auch hier sind sowohl die der Hauptrichtung entsprechenden Frequenzen als auch die Störfrequenzen sichtbar.
Geneigte Linien plus Verzerrung:



Das Bild der Frequenzen zeigt mehrere charakteristische Richtungen, aber es wird bereits schwierig, ein Bild auf ihnen intuitiv darzustellen.
Für Bilder der realen Welt ist es noch schwieriger, ein Bild im Kopf anhand seiner Frequenzen darzustellen:



(Die Frequenzen in der Mitte sind geschlossen, damit sie den Rest des Spektrums nicht „beleuchten“.)
Kommen wir nun zu einem realen Arbeitsbeispiel:
Packung BilderBild mit markiertem Objekt:

Geschnittenes und vorverarbeitetes Objekt, sein Spektrum im üblichen und logarithmischen Maßstab (
F,| hatF|, log| hatF| ):



Gewünschte Antwort (
G ):

Filtern Sie die Frequenzen auf einer regelmäßigen und logarithmischen Skala (
W,| hatW| ):


Explizite Filtergewichte (ohne Transformationen)
F ):

Bitte beachten Sie, dass sie nirgendwo am Algorithmus teilnehmen - sie können nur aus Gründen des Interesses gezählt werden. Beachten Sie auch, dass der
Filter verdammt noch mal so aussieht . Man würde erwarten, dass der Filter dem Originalbild ähnlich ist, aber dies ist keineswegs immer wahr. Ein dem Bild selbst ähnlicher Filter würde kaum die gewünschte Gaußsche Antwort liefern.
Die Antwort aus dem nächsten Frame:

Obwohl es nicht so sauber ist wie die gewünschte Antwort, ist es einfach, das Maximum darauf zu bestimmen.
Das gleiche Beispiel mit einer engeren gewünschten Antwort:
Packung BilderSchon:
W ::

Mehr schon:
W ::

Mit einem sehr engen Maximum auf dem Filter anstelle eines schwarzen Flecks wird das Auge deutlich sichtbar.
W für die vorherigen drei Fälle
G bei Verwendung zum Trainieren von 16 Transformationen des Eingabebildes:
Noch ein paar BilderBreites Maximum:

Durchschnittliches Maximum:

Schmales Maximum:

Je mehr Transformationen, desto weniger haftet der Filter an zufälligen Elementen. Besonders deutlich ist zu erkennen, dass zufällige Schwarz-Weiß-Flecken aus der Mitte verschwunden sind
W . Auf der anderen Seite kann das Training in mehreren Bildern für einen schmalen Gaußschen ein Minus sein: Sehen Sie sich das „Klingeln“ an, das im Filter um das Auge gebildet wird.
Wenn Sie sehen möchten, wie es live aussieht, laden Sie
hier mein Test-Repository mit der Implementierung von MOSSE mit der Ausgabe von Debugging-Bildern herunter. Weitere MOSSE-
Optionen finden Sie
auf dem Github. Darüber hinaus ist es in
OpenCV .
Fazit
Vielen Dank für Ihre Aufmerksamkeit, Habrovsk. MOSSE- und ASEF-Tracking sind nicht die komplexesten Algorithmen der Welt. Je einfacher es ist, sie nicht nur effektiv anzuwenden, sondern auch zu verstehen, wie ihre Schöpfer geführt wurden. Ich hoffe, dass meine Erklärung Ihnen geholfen hat, in den Kopf der Forscher zu gelangen, um den Verlauf ihrer Gedanken zu verfolgen. Dies kann nützlich sein: Maschinelles Lernen ist kein statisches Wissensfeld, es gibt einen Platz für Kreativität und Forschung. Versuchen Sie, tiefer in einen etablierten Algorithmus einzudringen: Sägen Sie unnötige Gliedmaßen zur Beschleunigung ab oder fügen Sie ein paar hinzu, damit es in Ihrem speziellen Fall besser funktioniert. Du wirst es mögen!
Dieser Artikel wurde mit Unterstützung von DSSL geschrieben.