Wir verstehen weiterhin moderne Magie (Computer Vision). Teil 2 bedeutet nicht, dass Sie zuerst Teil 1 lesen müssen. Teil 2 bedeutet, dass jetzt alles ernst ist - wir möchten die volle Leistung neuronaler Netze im Sehen verstehen. Erkennung, Verfolgung, Segmentierung, Haltungsbewertung, Aktionserkennung ... Die modischsten und coolsten Architekturen, Hunderte von Ebenen und Dutzende brillanter Ideen warten bereits unter dem Schnitt auf Sie!

In der letzten Serie
Ich möchte Sie daran erinnern, dass wir uns im
ersten Teil mit Faltungs-Neuronalen Netzen und deren Visualisierung sowie mit den Aufgaben der Klassifizierung von Bildern und der Konstruktion ihrer effektiven Darstellungen (Einbettungen) vertraut gemacht haben. Wir haben sogar die Aufgaben der Gesichtserkennung und Neuidentifizierung von Personen besprochen.
Selbst im vorherigen Artikel haben wir über verschiedene Arten von Architekturen gesprochen (ja, dieselben Tablets
, die ich einen Monat lang erstellt habe ), und hier hat Google keine Zeit verschwendet: Sie haben eine weitere extrem schnelle und genaue
EfficientNet- Architektur veröffentlicht. Sie haben es mit dem
NAS und dem speziellen Compound Scaling-Verfahren erstellt. Schauen Sie sich den
Artikel an , es lohnt sich.
In der Zwischenzeit
animieren einige Forscher
Gesichter und
suchen in Filmen nach Küssen . Wir werden uns mit dringlicheren Problemen befassen.
Hier sagen die Leute: "Bilderkennung". Aber was ist „Anerkennung“? Was ist "Verstehen (Szene)"? Meiner Meinung nach hängen die Antworten auf diese Fragen davon ab, was genau wir „erkennen“ und was genau wir „verstehen“ wollen. Wenn wir künstliche Intelligenz aufbauen, die Informationen über die Welt aus dem visuellen Strom genauso effizient (oder sogar besser) wie Menschen extrahiert, müssen wir von Aufgaben, von Bedürfnissen ausgehen. Historisch gesehen kann die moderne „Erkennung“ und das „Verständnis der Szene“ in mehrere spezifische Aufgaben unterteilt werden: Klassifizierung, Erkennung, Verfolgung, Bewertung von Körperhaltungen und Gesichtspunkten, Segmentierung, Erkennung von Aktionen auf dem Video und Beschreibung des Bildes im Text. Dieser Artikel konzentriert sich auf die ersten beiden Aufgaben aus der Liste (Ups, Spoiler des dritten Teils). Der aktuelle Plan lautet also wie folgt:
- Finde mich, wenn du kannst: Objekterkennung
- Gesichtserkennung: Nicht gefangen - kein Dieb
- Viele Buchstaben: Texterkennung (und Erkennung)
- Video und Tracking: in einem Stream
Lass uns rocken, Superstars!
Finde mich, wenn du kannst: Objekterkennung
Die Aufgabe klingt also einfach - es wird ein Bild gegeben, auf dem Sie Objekte vordefinierter Klassen finden müssen (Person, Buch, Apfel, artesisch-normannischer Basset-Griffon usw.). Um dieses Problem mit Hilfe neuronaler Netze zu lösen, stellen wir es in Bezug auf Tensoren und maschinelles Lernen.
Wir erinnern uns, dass ein Farbbild ein Tensor ist (H, W, 3) (wenn wir uns nicht erinnern, dh
Teil 1 ). Früher wussten wir nur, wie man das gesamte Bild klassifiziert, aber jetzt ist es unser Ziel, die Positionen von interessierenden Objekten (Pixelkoordinaten) im Bild und deren Klassen vorherzusagen.
Die Schlüsselidee dabei ist, zwei Probleme gleichzeitig zu lösen - Klassifizierung und Regression. Wir verwenden ein neuronales Netzwerk, um die Koordinaten zu regressieren und die darin enthaltenen Objekte zu klassifizieren.
Klassifizierung? Regression?Ich möchte Sie daran erinnern, dass wir über die Aufgaben des maschinellen Lernens sprechen. Im
Klassifizierungsproblem fungieren
Klassenbeschriftungen als Qualität von echten Beschriftungen für Objekte, und wir sagen die Klasse des Objekts voraus. Im
Regressionsproblem sind
reelle Zahlen reelle Zahlen , und wir sagen die Zahl voraus (zum Beispiel: Gewicht, Größe, Gehalt, Anzahl der Charaktere, die in der nächsten Serie des Game of Thrones sterben ...). Im Detail - Sie sind
herzlich willkommen zur 3. Vorlesung der DLSchool (FPMI MIPT) .
Die Koordinaten des Objekts können jedoch im Allgemeinen auf verschiedene Arten formalisiert werden. In DL gibt es drei Hauptmethoden:
Erkennung (
Kästchen mit Objekten),
Bewertung der Körperhaltung (Schlüsselpunkte von Objekten) und
Segmentierung („Masken“ von Objekten).
Lassen Sie uns nun über die Vorhersage präziser
Begrenzungsrahmen , Punkte und Segmentierung sprechen.
Grundsätzlich sind Erkennungsdatensätze mit Kästchen im Format gekennzeichnet: „Koordinaten der oberen linken und unteren rechten Ecke für jedes Objekt in jedem Bild“ (dieses Format wird auch als
oben links, unten rechts bezeichnet ), und die meisten neuronalen Netzwerkansätze sagen diese Koordinaten voraus.
Informationen zu Datensätzen und Metriken im ErkennungsproblemNach dem Festlegen der Aufgabe ist es am besten zu sehen, welche Daten für das Training verfügbar sind und welche Metriken zur Messung der Qualität verwendet werden. Darüber spreche ich langsam in der ersten Hälfte der
13. Vorlesung der Deep Learning School (bei x2.0 ist es die höchste).
Bevor wir uns mit den Arten neuronaler Netze zur Erkennung befassen, überlegen wir uns gemeinsam, wie das Problem der Erkennung von Bildern gelöst werden kann. Wenn wir ein bestimmtes Objekt im Bild finden möchten, wissen wir wahrscheinlich ungefähr, wie es aussieht und welchen Bereich das Bild einnehmen soll (obwohl es sich ändern kann).
Erkennung von Grund auf neu erfindenDer naive und einfachste Ansatz wäre, einfach einen "Vorlagensuch" -Algorithmus zu erstellen: Lassen Sie das Bild 100 x 100 Pixel groß sein, und wir suchen nach einem Fußball. Es sei ein Kugelmuster von 20x20 Pixel. Nehmen Sie diese Vorlage und wir werden sie wie eine Faltung im gesamten Bild durchgehen und den Unterschied von Pixel zu Pixel zählen. So funktioniert
Template Matching (häufig wird eine Art Korrelation anstelle eines pixelweisen Unterschieds verwendet).
Wenn es keine Vorlage gibt, aber einen Klassifikator für neuronale Netze, können wir dies tun: Wir gehen durch ein Fenster fester Größe im Bild und sagen die Klasse des aktuellen Bildbereichs voraus. Dann sagen wir einfach, dass die wahrscheinlichsten Bereiche der Objekte diejenigen sind, in denen der Klassifikator sicher geantwortet hat. Auf diese Weise können wir das Problem lösen, dass das Objekt anders aussieht (da es darauf trainiert wurde, eine sehr unterschiedliche Stichprobe zu klassifizieren).
Aber dann taucht ein Problem auf - die Objekte auf den Bildern haben unterschiedliche Größen. Der gleiche Fußball kann sich in der gesamten Höhe / Breite des Bildes befinden oder weit am Ziel liegen und nur 10 bis 20 Pixel von 1000 nehmen. Ich möchte den Brute-Force-Algorithmus schreiben: Wir durchlaufen einfach die Fenstergrößen. Angenommen, wir haben 100x200 Pixel, dann gehen wir zu einem 2x2-, 2X3-, 3x2-, 2x4-, 4x2-, 3x3-Fenster ..., 3x4, 4x3 ... Ich denke, Sie verstehen, dass die Anzahl der möglichen Fenster 100 * 200 beträgt und jedes von uns durch das Bild geht Durchführen von Klassifizierungsoperationen (100-W_window) * (200-H_window), was viel Zeit in Anspruch nimmt. Ich fürchte, wir werden nicht warten, bis ein solcher Algorithmus funktioniert.
Sie können natürlich je nach Objekt die charakteristischsten Fenster auswählen, aber es funktioniert auch sehr lange, und wenn es schnell ist, ist es unwahrscheinlich, dass es genau ist - in realen Anwendungen gibt es wahnsinnig viele Variationen in der Größe von Objekten in den Bildern.
Außerdem werde ich mich manchmal auf eine
neue Überprüfung des Erkennungsbereichs ab Januar 2019 verlassen (Bilder werden auch davon stammen). Dies ist nur ein Muss, wenn Sie schnell einen möglichst umfassenden Einblick in DL bei der Erkennung erhalten möchten.
Einer der ersten Artikel zur Erkennung und Lokalisierung mit CNN war
Overfeat . Die Autoren behaupten, dass sie zuerst ein neuronales Netzwerk zur Erkennung in ImageNet verwendet haben, um das Problem neu zu formulieren und den Verlust zu ändern. Der Ansatz war übrigens fast durchgehend (siehe unten das Überfeature-Schema).
Die nächste wichtige Architektur war das
auf Regionen basierende Convolutional Neural Network (
RCNN ), das 2014 von Forschern von
FAIR erfunden wurde. Das Wesentliche ist, dass es zunächst viele der sogenannten „Regionen von Interesse“ (RoIs) vorhersagt, in denen sich möglicherweise Objekte befinden können (mithilfe des Selective Search-Algorithmus), diese klassifiziert und die Koordinaten der Boxen mithilfe von CNN verfeinert.
Eine solche Pipeline hat zwar das gesamte System verlangsamt, da wir jede Region durch das neuronale Netzwerk geführt haben (wir haben tausende Male weitergeleitet). Ein Jahr später rüstete derselbe FAIR Ross Girshick RCNN auf
Fast-RCNN auf . Hier bestand die Idee darin, die selektive Suche und die Netzwerkvorhersage auszutauschen: Zuerst leiten wir das gesamte Bild durch ein vorab trainiertes neuronales Netzwerk und dann prognostizieren wir interessierende Regionen über die vom Backbone-Netzwerk ausgegebene Feature-Map (z. B. unter Verwendung derselben selektiven Suche, aber es gibt
andere Algorithmen ). Es war immer noch ziemlich langsam, viel langsamer als in Echtzeit (im Moment gehen wir davon aus, dass Echtzeit weniger als 40 Millisekunden pro Bild beträgt).
Die Geschwindigkeit wurde vor allem nicht von CNN, sondern vom Box-Generierungsalgorithmus selbst beeinflusst. Daher wurde beschlossen, ihn durch ein zweites neuronales Netzwerk zu ersetzen - das Region Proposal Network (
RPN ) -, das trainiert wird, um die interessierenden Regionen von Objekten vorherzusagen. So
erschien Faster-RCNN (ja, sie haben offensichtlich lange nicht an den Namen gedacht). Schema:
Dann gab es eine weitere Verbesserung in Form von
R-FCN , wir werden nicht im Detail darüber sprechen, aber ich möchte
Mask-RCNN erwähnen . Mask-RCNN ist ein einzigartiges Netzwerk, das erste neuronale Netzwerk, das gleichzeitig das
Problem der Erkennung und Instanzsegmentierung löst. Es sagt die genauen Masken (Silhouetten) von Objekten in Begrenzungsrahmen voraus. Ihre Idee ist eigentlich recht einfach: Es gibt zwei Zweige: zur Erkennung und zur Segmentierung, und Sie müssen das Netzwerk für beide Aufgaben gleichzeitig trainieren. Die Hauptsache ist, Daten markiert zu haben. Mask-RCNN selbst ist Faster-RCNN sehr ähnlich: Das Backbone ist das gleiche, aber am Ende gibt es zwei
„Köpfe“ (wie die
letzten Schichten des neuronalen Netzwerks oft genannt werden) für zwei verschiedene Aufgaben.
Dies waren die sogenannten
zweistufigen (oder
regionalen ) Ansätze. Parallel dazu wurden Analoga für die DL-Detektion entwickelt -
einstufige Ansätze. Dazu gehören neuronale Netze wie: SSD (Single-Shot Detector), YOLO (You Only Look Once), DSOD (Deeply Supervised Object Detector), RFBNet (Receptive Field Block Network) und viele andere (siehe Karte unten) von
dieses Repository ).
Einstufige Ansätze verwenden im Gegensatz zu zweistufigen Ansätzen keinen separaten Algorithmus zum Erzeugen von Boxen, sondern sagen einfach mehrere Boxkoordinaten für jede Feature-Map voraus, die von einem Faltungs-Neuronalen Netzwerk erzeugt wird. YOLO verhält sich ähnlich, SSD ist etwas anders, aber es gibt nur eine Idee: Eine 1x1-Faltung sagt viele Zahlen aus den empfangenen Feature-Maps detailliert voraus, wir sind uns jedoch im Voraus einig, welche Zahl dies bedeutet.
Zum Beispiel sagen wir aus einer Feature-Map voraus, dass die Größe von 13x13x256 eine Feature-Map mit 13x13x (4 * (5 + 80)) Zahlen ist, wobei wir in der Tiefe 85 Zahlen für 4 Boxen vorhersagen: Die ersten 4 Zahlen in der Sequenz sind immer die Koordinaten der Box, die 5 .. - Vertrauen in das Boxen und 80 Zahlen - die Wahrscheinlichkeiten jeder der Klassen (Klassifikation). Dies ist notwendig, um dann die notwendigen Zahlen den notwendigen Verlusten zu unterwerfen und das neuronale Netz richtig zu trainieren.
Ich möchte darauf aufmerksam machen, dass die Qualität der Arbeit des Detektors von der Qualität des neuronalen Netzwerks abhängt, um Merkmale (
dh ein neuronales Backbone-Netzwerk ) zu extrahieren. Normalerweise wird diese Rolle von einer der Architekturen gespielt, über die ich in einem
früheren Artikel gesprochen habe (ResNet, SENet usw.), aber manchmal entwickeln Autoren ihre eigenen optimaleren Architekturen (z. B. Darknet-53 in YOLOv3) oder Modifikationen (z. B.
Feature Pyramid Pooling) (FPN)).
Ich stelle erneut fest, dass wir das Netzwerk gleichzeitig auf Klassifizierung und Regression trainieren. In der Community wird dies als Verlust mehrerer Aufgaben bezeichnet: Die Summe der Verluste für mehrere Aufgaben (mit einigen Koeffizienten) wird in einem Verlust angezeigt.
Nachrichten mit führendem Multitask-VerlustBei
Machines Can See 2019 verwendete einer der Redner den Multi-Task-Verlust für 7 Aufgaben gleichzeitig
, Carl . Es stellte sich heraus, dass einige Aufgaben ursprünglich als Gegengewicht zueinander gesetzt wurden und ein „Konflikt“ entstand, der das Netzwerk daran hinderte, besser zu lernen, als wenn es für jede Aufgabe einzeln trainiert würde. Schlussfolgerung: Wenn Sie den Verlust mehrerer Aufgaben verwenden, stellen Sie sicher, dass dieselben Aufgaben nicht mit der Anweisung in Konflikt stehen (z. B. kann die Vorhersage der Grenzen von Objekten und ihrer internen Segmentierung sich gegenseitig stören, da diese Dinge auf unterschiedlichen Vorzeichen im Netzwerk beruhen können). Der Autor hat dies umgangen, indem
er für jede Aufgabe separate Squeeze-and-Excitation-Blöcke hinzugefügt hat .
Kürzlich erschienen Artikel aus dem Jahr 2019, in denen die Autoren ein noch besseres Geschwindigkeits- / Genauigkeitsverhältnis in der Erkennungsaufgabe unter Verwendung einer
punktbasierten Box-Vorhersage deklarieren. Ich spreche von den Artikeln
„Objekte als Punkte“ und
„CornerNet-Lite“ .
ExtremeNet ist eine Modifikation von CornerNet. Es scheint, dass sie jetzt bei der Erkennung mithilfe neuronaler Netze als SOTA bezeichnet werden können (dies ist jedoch nicht genau).
Wenn meine Erklärung der Detektoren plötzlich immer noch chaotisch und unverständlich schien, diskutiere ich sie in
unserem Video langsam. Vielleicht solltest du es zuerst sehen.
Im Folgenden habe ich Tabellen neuronaler Netze zur Erkennung mit Links zum Code und einer kurzen Beschreibung der Chips jedes Netzes angegeben. Ich habe versucht, nur die Netzwerke zu sammeln, die wirklich wichtig sind (zumindest ihre Ideen), um heute eine gute Vorstellung von der Objekterkennung zu haben:
Neuronale Netzdetektoren (zweistufig) Neuronale Netzdetektoren (einstufig) Neuronale Netzdetektoren (Sonstiges) Neuronale Netzdetektoren (punktbasiert) Um zu verstehen, wie die Geschwindigkeit / Qualität jeder Architektur korreliert, können Sie sich
diesen Test oder seine
populärere Version ansehen.
Architektur ist in Ordnung, aber Erkennung ist in erster Linie eine praktische Aufgabe. "Haben Sie nicht hundert Netzwerke, aber mindestens eines funktioniert" - das ist meine Botschaft. Es gibt Links zum Code in der obigen Tabelle, aber ich persönlich stoße selten darauf, Detektoren direkt aus Repositorys zu starten (zumindest mit dem Ziel einer weiteren Bereitstellung in der Produktion). Am häufigsten wird hierfür eine Bibliothek verwendet, beispielsweise die TensorFlow-Objekterkennungs-API (siehe den
praktischen Teil meiner Lektion ) oder eine
Bibliothek von Forschern von CUHK . Ich mache Sie auf einen weiteren Supertisch aufmerksam (Sie mögen sie, oder?):
Bibliotheken zum Ausführen von Erkennungsmodellen Oft müssen Sie ein Objekt nur einer Klasse erkennen, das jedoch spezifisch und sehr variabel ist. Zum Beispiel, um alle Gesichter auf dem Foto zu erkennen (zur weiteren Überprüfung / Zählung von Personen), um ganze Personen zu erkennen (zur erneuten Identifizierung / Zählung / Verfolgung) oder um Text in der Szene zu erkennen (zur
OCR / Übersetzung von Wörtern auf dem Foto). Im Allgemeinen funktioniert der „normale“ Erkennungsansatz hier bis zu einem gewissen Grad, aber jede dieser Unteraufgaben hat ihre eigenen Tricks, um die Qualität zu verbessern.
Gesichtserkennung: Nicht gefangen - kein Dieb
Hier tritt eine gewisse Spezifität auf, da Gesichter häufig einen relativ kleinen Teil des Bildes einnehmen. Außerdem schauen die Leute nicht immer in die Kamera, oft ist das Gesicht nur von der Seite sichtbar. Einer der ersten Ansätze zur Gesichtserkennung war der berühmte Viola-Jones-Detektor, der auf Haar-Kaskaden basiert und bereits 2001 erfunden wurde.
Neuronale Netze
waren damals nicht in Mode, sie waren immer noch nicht so stark in der Vision, aber der gute alte handgefertigte Ansatz hat seine Aufgabe erfüllt. Es wurden verschiedene Arten von speziellen Filtermasken aktiv verwendet, die dazu beitrugen, Gesichtsbereiche aus dem Bild und ihren Zeichen zu extrahieren, und diese Zeichen wurden dann dem AdaBoost-Klassifikator übermittelt. Übrigens funktioniert diese Methode wirklich gut und jetzt ist sie schnell genug und startet sofort
mit OpenCV . Der Nachteil dieses Detektors besteht darin, dass er nur Gesichter sieht, die frontal an der Kamera angebracht sind. Man muss sich nur ein wenig umdrehen und die Stabilität der Erkennung wird verletzt.
Für solch komplexere Fälle können Sie
dlib verwenden . Dies ist C ++ - eine Bibliothek, in der viele Bildverarbeitungsalgorithmen implementiert sind, auch zur Gesichtserkennung.
Von den neuronalen Netzwerkansätzen bei der Gesichtserkennung ist das
kaskadierte Multitask-CNN (MTCNN) (
MatLab ,
TensorFlow ) von besonderer Bedeutung. Im Allgemeinen wird es jetzt aktiv verwendet (im selben
Facenet ).
Die Idee von MTCNN besteht darin, drei neuronale Netze nacheinander (daher eine
„Kaskade“ ) zu verwenden, um die Position eines Gesichts und seiner singulären Punkte vorherzusagen. In diesem Fall gibt es genau 5 spezielle Punkte im Gesicht: das linke Auge, das rechte Auge, den linken Rand der Lippen, den rechten Rand der Lippen und der Nase. Das erste neuronale Netzwerk aus der Kaskade (
P-Net ) wird verwendet, um potenzielle Regionen des Gesichts zu erzeugen. Das zweite (
R-Net ) - um die Koordinaten der empfangenen Boxen zu verbessern.
Das dritte ( O-Net ) neuronale Netzwerk regressiert erneut die Koordinaten der Boxen und sagt zusätzlich 5 Schlüsselpunkte des Gesichts voraus. Dieses Netzwerk ist eine Mehrfachaufgabe, da drei Aufgaben gelöst sind: Regression von Boxpunkten, Klassifizierung von Gesicht / Nicht-Gesicht für jede Box und Regression von Gesichtspunkten. Darüber hinaus erledigt MTCNN alles in Echtzeit, dh es benötigt weniger als 40 ms pro Bild.Wie lesen Sie immer noch keine Artikel mit ArXiv selbst?In diesem Fall empfehle ich, den Originalartikel über MTCNN zu lesen , wenn Sie bereits Hintergrundinformationen zu Faltungsnetzwerken haben. Dieser Artikel umfasst nur 5 Seiten , enthält jedoch alle Informationen, die Sie zum Verständnis des Ansatzes benötigen. Probieren Sie es aus, es wird sich verzögern :) State-of-the-Art
Dual Shot Face Detector (DSFD) FaceBoxes . FaceBoxes CPU (!), DSFD ( 2019 ). DSFD , MTCNN, (
dilated convolutions ), . , dilated convolutions . DSFD (, ?).
,
, .
: ( )
. , , bounding box', ( ), . , , , recognition-,
.
bounding box', , ( ). , ,
EAST- .
EAST- , , :
- Text Score Map' ( )
, ( ), .
arxiv- :
( ) , :
TextBoxes++ (
Caffe )
SegLinks , EAST, , .
,
. — . , , , . ,
MORAN (
PyTorch )
ASTER (
TensorFlow ) .
- , : CNN RNN. , . MORAN': .
EAST', - , . , , .
, / .
Spatial Transformet Network (STN) , (, , ). / STN.
STN ,
( , )
PyTorch .
MORAN ( ) — ,
x y, , .
rectification , (
rectifier' ). :
Zusätzlich zu den Ansätzen zur „modularen“ Texterkennung (Erkennungsnetzwerk -> Erkennungsnetzwerk) gibt es jedoch eine End-to-End-Architektur: Die Eingabe ist ein Bild, und die Ausgabe ist eine Erkennung, und der Text wird in ihnen erkannt. Und das alles ist eine einzige Pipeline, die beide Aufgaben gleichzeitig lernt. In dieser Richtung gibt es die beeindruckende Arbeit des
Fast Oriented Text Spotting mit einem Unified Network ( FOTS ) ( PyTorch- Code ), bei der die Autoren auch feststellen, dass der End-to-End-Ansatz doppelt so schnell ist wie „Erkennung + Erkennung“. Unten sehen Sie das FOTS-Diagramm für neuronale Netze. Eine besondere Rolle spielt der RoiRotate-Block, aufgrund dessen es möglich ist, Gradienten aus dem Netzwerk zur Erkennung auf das neuronale Netzwerk zur Erkennung zu übertragen (dies ist wirklich komplizierter als es scheint).
Übrigens findet jedes Jahr die
ICDAR- Konferenz
statt , an der
mehrere Wettbewerbe zur Erkennung von Text in verschiedenen Bildern teilnehmen.
Aktuelle Probleme bei der Erkennung
Meiner Meinung nach ist das Hauptproblem bei der Erkennung jetzt nicht die Qualität des Detektormodells, sondern die Daten: Die Markierung ist normalerweise lang und teuer, insbesondere wenn viele Klassen erkannt werden müssen (aber es gibt übrigens
ein Beispiel für eine Lösung für 500 Klassen). Daher widmen sich
viele Arbeiten nun der Erzeugung der plausibelsten Daten „synthetisch“ und dem Erhalt von Markups „kostenlos“. Unten ist ein Bild aus
meinem Diplom eines Artikels von Nvidia , der sich speziell mit der Erzeugung synthetischer Daten befasst.
Trotzdem ist es großartig, dass wir jetzt sicher sagen können, wo auf dem Bild was sein soll. Und wenn wir zum Beispiel die Menge von etwas auf dem Rahmen berechnen wollen, dann reicht es aus, dies zu erkennen und die Anzahl der Kästchen herauszugeben. Bei der Erkennung von Personen funktioniert das übliche YOLO auch gut, nur die Hauptsache ist, viele Daten einzureichen. Der gleiche
Darkflow ist geeignet, und die Klasse „Mensch“ ist in fast allen wichtigen Erkennungsdatensätzen enthalten. Wenn wir also mit der Kamera die Anzahl der Personen zählen möchten, die beispielsweise an einem Tag vorbeigekommen sind, oder die Anzahl der Waren, die eine Person in einem Geschäft aufgenommen hat, erkennen wir einfach die Menge und geben sie aus ...
Hör auf Wenn wir jedoch Personen in jedem Bild von der Kamera erkennen möchten, können wir ihre Anzahl in einem Bild und in zwei Bildern berechnen - nicht mehr, da wir nicht sagen können, wo genau sich welche Person befindet. Wir brauchen einen Algorithmus, mit dem wir genau eindeutige Personen im Videostream zählen können. Es mag ein Algorithmus zur
erneuten Identifizierung sein , aber wenn es um Video und Erkennung geht, ist es eine Sünde, keine Tracking-Algorithmen zu verwenden.
Video und Tracking: in einem Stream
Bisher haben wir nur über Aufgaben in Bildern gesprochen, aber das Interessanteste passiert im Video. Um die gleiche Erkennung von Handlungen zu lösen, müssen wir nicht nur die sogenannte
räumliche Komponente verwenden, sondern auch die
zeitliche , da Video eine
zeitliche Folge von Bildern ist.
Tracking ist ein Analogon zur Bilderkennung, jedoch für Video. Das heißt, wir möchten dem Netzwerk beibringen, nicht das Boxen im Bild vorherzusagen, sondern ein Tracklet in der Zeit (was im Wesentlichen eine Folge von Boxen ist). Unten sehen Sie ein Beispiel für ein Bild, das die „Schwänze“ zeigt - die Spuren dieser Personen im Video.
Lassen Sie uns darüber nachdenken, wie Sie das Tracking-Problem lösen können. Es gebe ein Video und seine Bilder Nr. 1 und Nr. 2. Betrachten wir bisher nur ein Objekt - wir verfolgen einen Ball. Bei Bild 1 können wir einen Detektor verwenden, um es zu erkennen. Beim zweiten können wir auch einen Ball erkennen, und wenn er alleine da ist, ist alles in Ordnung: Wir sagen, dass das Boxen auf dem vorherigen Frame das Boxen des gleichen Balls wie auf Frame # 2 ist. Sie können auch mit den verbleibenden Frames unterhalb des
GIFs des
Pyimagesearch- Vision-
Kurses fortfahren .
Übrigens, um Zeit zu sparen, können wir das neuronale Netzwerk nicht im zweiten Frame starten, sondern einfach die Box des Balls aus dem ersten Frame „herausschneiden“ und im zweiten Frame oder Pixel für Pixel nach genau der gleichen
Korrelation suchen.
Korrelations-Tracker verwenden diesen Ansatz. Sie gelten als einfach und mehr oder weniger zuverlässig, wenn es sich um einfache Fälle wie „Verfolgen eines Balls vor der Kamera in einem leeren Raum“ handelt. Diese Aufgabe wird auch als
visuelle Objektverfolgung bezeichnet . Unten sehen Sie
ein Beispiel für die Arbeit des Korrelations-Trackers am Beispiel einer Person.
Wenn es jedoch mehrere Erkennungen / Personen gibt, müssen Sie in der Lage sein, die Felder aus Bild 1 und Bild 2 abzugleichen. Die erste Idee, die mir in den Sinn kommt, ist zu versuchen, die Box mit der Box
abzustimmen , die den größten Schnittbereich (
IoU ) aufweist. Richtig, bei mehreren überlappenden Erkennungen ist ein solcher Tracker instabil, sodass Sie noch mehr Informationen verwenden müssen.
Der Ansatz mit IoU basiert nur auf den
„geometrischen“ Erkennungszeichen, dh es wird lediglich versucht, diese anhand der Nähe zu Frames zu vergleichen. Wir verfügen jedoch über ein ganzes Bild (in diesem Fall sogar über zwei), und wir können die Tatsache nutzen, dass sich in diesen Erkennungen
„visuelle“ Zeichen befinden . Außerdem haben wir eine Erkennungshistorie für jede Person, die es uns ermöglicht, ihre nächste Position auf der Grundlage von Geschwindigkeit und Bewegungsrichtung genauer vorherzusagen. Dies kann bedingt als
„physische“ Zeichen bezeichnet werden .
Einer der ersten Echtzeit-Tracker, der absolut zuverlässig und in der Lage war, schwierige Situationen zu bewältigen, wurde 2016 veröffentlicht.
Simple Online und Realtime Traker (SORT) (
Python-Code ). SORT verwendete keine visuellen Zeichen und neuronalen Netze, sondern schätzte nur eine Reihe von Parametern jeder Box in jedem Frame: die aktuelle Geschwindigkeit (x und y getrennt) und Größe (Höhe und Breite). Das Seitenverhältnis einer Box wird immer von der ersten Erkennung dieser Box an übernommen. Ferner werden die Geschwindigkeiten unter Verwendung von
Kalman-Filtern vorhergesagt (sie sind in der Welt der Signalverarbeitung im Allgemeinen gut und leicht), die Schnittmatrix der Boxen durch IoU wird erstellt und die Erkennungen werden durch den
ungarischen Algorithmus zugewiesen.
Wenn es Ihnen so vorkommt, als sei die Mathematik schon ein bisschen viel geworden, dann wird in
diesem Artikel alles auf zugängliche Weise erklärt (das ist mittel :).
Bereits 2017 wurde eine Modifikation von SORT in Form von
DeepSORT (
Code für TensorFlow ) veröffentlicht. DeepSORT hat bereits begonnen, das neuronale Netzwerk zum Extrahieren visueller Zeichen zu verwenden, um Kollisionen aufzulösen. Die Qualität des Trackings ist gewachsen - nicht umsonst gilt es heute als einer der besten Online-Tracker.
Das Gebiet der Verfolgung entwickelt sich tatsächlich aktiv: Es gibt
Tracker mit siamesischen neuronalen Netzen und
Tracker mit RNN . Halten Sie Ihren Finger am Puls der Zeit, denn an jedem Tag kann eine noch genauere und schnellere Architektur herauskommen (oder ist bereits herausgekommen). Übrigens ist es sehr praktisch, solche Dinge auf
PapersWithCode zu
verfolgen . Es gibt immer Links zu Artikeln und Code für sie (falls vorhanden).
Nachwort
Wir haben wirklich viel erlebt und viel gelernt. Aber Computer Vision ist ein extrem weites Gebiet, und ich bin eine extrem hartnäckige Person. Aus diesem Grund werden wir Sie im dritten Artikel dieses Zyklus sehen (wird es der letzte sein? Wer weiß ...), in dem wir die Segmentierung, die Beurteilung der Körperhaltung, die Erkennung von Aktionen auf einem Video und die Erstellung einer Beschreibung aus einem Bild unter Verwendung neuronaler Netze ausführlicher diskutieren werden.
PS Ich möchte Vadim Gorbatschow für seine wertvollen Ratschläge und Kommentare bei der Vorbereitung dieses und des vorherigen Artikels meinen besonderen Dank aussprechen.