Ich sehe, es bedeutet, dass ich existiere: eine Überprüfung von Deep Learning in Computer Vision (Teil 1)

Computer Vision. Jetzt reden sie viel darüber, wo es viel angewendet und implementiert wird. Und irgendwie gab es vor einiger Zeit keine Übersichtsartikel über Habré im Lebenslauf mit Beispielen für Architekturen und moderne Aufgaben. Aber es gibt viele von ihnen und sie sind wirklich cool! Wenn Sie daran interessiert sind, was jetzt in Computer Vision passiert, nicht nur aus Sicht der Forschung und Artikel , sondern auch aus Sicht der angewandten Probleme, dann sind Sie bei cat willkommen. Der Artikel kann auch eine gute Einführung für diejenigen sein, die schon lange anfangen wollten, all dies zu verstehen, aber etwas war im Weg;)

Bild

Heute gibt es bei PhysTech eine aktive Zusammenarbeit zwischen der "Akademie" und Industriepartnern. Insbesondere gibt es viele interessante Labors von Unternehmen wie Sberbank, Biocad, 1C, Tinkoff, MTS und Huawei an der PhysTech School für Angewandte Mathematik und Informatik .

Ich wurde inspiriert, diesen Artikel zu schreiben, indem ich im Labor für hybride intelligente Systeme arbeitete , das von VkusVill eröffnet wurde. Das Labor hat eine ehrgeizige Aufgabe - ein Geschäft zu bauen, das ohne Geldschalter funktioniert, hauptsächlich mit Hilfe von Computer Vision. Fast ein Jahr lang hatte ich die Gelegenheit, an vielen Aufgaben des Sehens zu arbeiten, die in diesen beiden Teilen erörtert werden.

Ohne Kasse einkaufen? Irgendwo habe ich es schon gehört ..
Wahrscheinlich, lieber Leser, haben Sie an Amazon Go gedacht. In gewissem Sinne besteht die Aufgabe darin, ihren Erfolg zu wiederholen, aber bei unserer Entscheidung geht es mehr um die Implementierung als darum, ein solches Geschäft für viel Geld von Grund auf neu aufzubauen .

Wir werden nach Plan umziehen:

  1. Motivation und was los ist
  2. Einstufung als Lebensstil
  3. Faltungsarchitekturen für neuronale Netze: 1000 Wege, um ein Ziel zu erreichen
  4. Visualisierung von Faltungs-Neuronalen Netzen: Zeigen Sie mir Leidenschaft
  5. Ich selbst bin eine Art Chirurg: Wir extrahieren Merkmale aus neuronalen Netzen
  6. Bleiben Sie nah dran: Repräsentationslernen für Menschen und Einzelpersonen
  7. Teil 2: Erkennen, Bewerten der Haltung und Erkennen von Handlungen ohne Spoiler

Motivation und was los ist


Für wen ist der Artikel?
Der Artikel konzentriert sich mehr auf Menschen, die bereits mit maschinellem Lernen und neuronalen Netzen vertraut sind. Ich rate Ihnen jedoch, mindestens die ersten beiden Abschnitte zu lesen - plötzlich wird alles klar :)

Im Jahr 2019 sprechen alle über künstliche Intelligenz, die vierte industrielle Revolution und die Annäherung der Menschheit an eine Singularität . Cool, cool, aber ich möchte Einzelheiten. Schließlich sind wir neugierige Technikfreaks, die nicht an Märchen über KI glauben, sondern an formale Aufgabenstellung, Mathematik und Programmierung. In diesem Artikel werden wir über spezifische Fälle der Verwendung der sehr modernen KI sprechen - die Verwendung von Deep Learning (nämlich Faltungs-Neuronale Netze) in einer Vielzahl von Computer-Vision-Aufgaben.

Ja, wir werden speziell über Gitter sprechen und manchmal einige Ideen aus einer „klassischen“ Sicht erwähnen (wir werden die Methoden in der Vision nennen, die vor neuronalen Netzen verwendet wurden, aber dies bedeutet keineswegs, dass sie jetzt nicht verwendet werden).

Ich möchte Computer Vision von Grund auf lernen
Ich empfehle Anton Konushins Kurs "Einführung in Computer Vision" . Persönlich habe ich das Gegenstück in SHAD durchgesehen, das eine solide Grundlage für das Verständnis der Bild- und Videoverarbeitung gelegt hat.

Bild

Meiner Meinung nach ist die erste wirklich interessante Anwendung neuronaler Netze in der Vision, über die 1993 in den Medien berichtet wurde, die Handschrifterkennung durch Jan LeCun . Jetzt ist er einer der Haupt-KI in der Facebook-KI-Forschung . Ihr Team hat bereits viele nützliche Open Source-Inhalte veröffentlicht .

Vision wird heute in vielen Bereichen eingesetzt. Ich werde nur einige bemerkenswerte Beispiele nennen:

Bild
Bild


Unbemannte Fahrzeuge von Tesla und Yandex

Bild


Medizinische Bildgebungsanalyse und Krebsvorhersage

Bild


Spielekonsolen: Kinect 2.0 (obwohl immer noch Tiefeninformationen verwendet werden, dh RGB-D-Bilder)

Bild



Gesichtserkennung: Apple FaceID (mit mehreren Sensoren)

Bild


Gesichtspunktbewertung: Snapchat-Masken

Bild


Biometrie der Gesichts- und Augenbewegungen (ein Beispiel aus dem Projekt von FPMI MIPT )

Bild


Suche nach Bild: Yandex und Google

Bild


Erkennung des Bildtextes ( optische Zeichenerkennung )

Bild

Bild


Drohnen und Roboter: Empfangen und Verarbeiten von Informationen durch Sehen

Bild

Kilometerzähler : Erstellen einer Karte und Planen beim Bewegen von Robotern

Bild


Verbesserung von Grafiken und Texturen in Videospielen

Bild


Bildübersetzung: Yandex und Google

Bild

Bild


Augmented Reality: Sprungbewegung (Projekt Nordstern ) und Microsoft Hololens

Bild



Stil- und Texturübertragung : Prisma , PicsArt

Ganz zu schweigen von den zahlreichen Anwendungen in verschiedenen internen Aufgaben von Unternehmen. Facebook verwendet beispielsweise auch Vision, um Medieninhalte zu filtern. Computer Vision-Methoden werden auch bei Qualitäts- / Schadensprüfungen in der Industrie eingesetzt .

Augmented Reality muss hier in der Tat besondere Aufmerksamkeit gewidmet werden, da es in naher Zukunft nicht funktioniert , kann dies einer der Hauptanwendungsbereiche des Sehens werden.

Motiviert. Aufgeladen. Lass uns gehen:

Einstufung als Lebensstil



Bild

Wie gesagt, in den 90ern wurden die Netze in Sichtweite abgefeuert. Und sie haben in einer bestimmten Aufgabe gedreht - der Aufgabe, Bilder von handgeschriebenen Zahlen zu klassifizieren (der berühmte MNIST-Datensatz ). Historisch gesehen war es die Aufgabe, Bilder zu klassifizieren, die zur Grundlage für die Lösung fast aller nachfolgenden Aufgaben in der Vision wurde. Betrachten Sie ein bestimmtes Beispiel:

Aufgabe : Am Eingang befindet sich ein Ordner mit Fotos. Jedes Foto hat ein bestimmtes Objekt: entweder eine Katze, einen Hund oder eine Person (auch wenn es keine "Müll" -Fotos gibt, ist dies eine nicht unbedingt wichtige Aufgabe, aber Sie müssen irgendwo anfangen). Sie müssen die Bilder in drei Ordner zerlegen: /cats , /dogs und /leather_bags /humans , wobei nur Fotos mit den entsprechenden Objekten in jedem Ordner /leather_bags .

Was ist ein Bild / Foto?
Bild
Fast überall in der Vision ist es üblich, mit Bildern im RGB-Format zu arbeiten. Jedes Bild hat eine Höhe (H), eine Breite (B) und eine Tiefe von 3 (Farben). Somit kann ein Bild als Tensor der Dimension HxBx3 dargestellt werden (jedes Pixel ist ein Satz von drei Zahlen - Intensitätswerte in den Kanälen).




Stellen Sie sich vor, wir sind noch nicht mit Computer Vision vertraut, aber wir kennen uns mit maschinellem Lernen aus. Bilder sind einfach numerische Tensoren im Speicher des Computers. Wir formalisieren die Aufgabe in Bezug auf maschinelles Lernen: Objekte sind Bilder, ihre Zeichen sind Werte in Pixel, die Antwort für jedes der Objekte ist eine Klassenbezeichnung (Katze, Hund oder Person). Dies ist eine reine Klassifizierungsaufgabe .

Wenn es jetzt schwierig geworden ist ..
... dann ist es besser, zuerst die ersten 4 Artikel aus dem OpenDataScience ML Open Course zu lesen und einen einführenden Artikel über Vision zu lesen, zum Beispiel einen guten Vortrag in Small ShAD .

Sie können einige Methoden aus der „klassischen“ Sicht oder dem „klassischen“ maschinellen Lernen verwenden, dh nicht aus einem neuronalen Netzwerk. Grundsätzlich bestehen diese Methoden darin, die Bilder bestimmter Merkmale (Sonderpunkte) oder lokaler Regionen hervorzuheben, die das Bild charakterisieren („ Tasche mit visuellen Wörtern “). Normalerweise läuft alles auf etwas wie SVM über HOG / SIFT hinaus .

Wir haben uns hier versammelt, um über neuronale Netze zu sprechen. Wir möchten also nicht die von uns erfundenen Zeichen verwenden, sondern dass das Netzwerk alles für uns tut. Unser Klassifikator nimmt die Vorzeichen eines Objekts als Eingabe und gibt eine Vorhersage (Klassenbezeichnung) zurück. Hier wirken die Intensitätswerte in Pixel als Vorzeichen (siehe Bildmodell in
Spoiler oben). Denken Sie daran, dass ein Bild ein Größentensor (Höhe, Breite, 3) ist (wenn es Farbe ist). Wenn Sie lernen, in das Raster einzutreten, wird dies normalerweise nicht von einem Bild und nicht von einem ganzen Datensatz, sondern von Stapeln, d. H. in kleinen Teilen von Objekten (z. B. 64 Bilder im Stapel).

Somit empfängt das Netzwerk einen Eingangstensor der Größe (BATCH_SIZE, H, W, 3). Sie können jedes Bild in eine Vektorlinie aus H * W * 3-Zahlen „erweitern“ und mit den Werten in Pixeln arbeiten, genau wie mit Zeichen beim maschinellen Lernen. Ein normales Multilayer-Perceptron (MLP) würde genau das tun, aber ehrlich gesagt ist es so Basislinie, da beim Arbeiten mit Pixeln als Vektorzeile beispielsweise die translatorische Invarianz von Objekten im Bild nicht berücksichtigt wird. Dieselbe Katze kann sich in der Mitte des Fotos befinden, und in der Ecke lernt MLP dieses Muster nicht.

Sie brauchen also etwas Klügeres, zum Beispiel eine Faltungsoperation. Und hier geht es um moderne Vision, um Faltungs-Neuronale Netze :

Der Trainingscode für das Faltungsnetzwerk sieht möglicherweise ungefähr so ​​aus (im PyTorch-Framework).
 #    : # https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html import torch.nn as nn import torch.nn.functional as F import torch.optim as optim class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) for epoch in range(2): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(trainloader, 0): # get the inputs inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 2000 == 1999: # print every 2000 mini-batches print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training') 


Da wir jetzt über das Training mit einem Lehrer sprechen, benötigen wir mehrere Komponenten für das Training eines neuronalen Netzwerks:

  • Daten (bereits vorhanden)
  • Netzwerkarchitektur (Highlight)
  • Eine Verlustfunktion, die angibt, wie das neuronale Netzwerk zu lernen ist (hier ist es Kreuzentropie ).
  • Optimierungsmethode (ändert das Netzwerkgewicht in die richtige Richtung)
  • Definieren Sie Architektur- und Optimierer-Hyperparameter (z. B. Schrittgröße des Optimierers, Anzahl der Neuronen in Schichten, Regularisierungskoeffizienten)

Dies ist genau das, was im Code implementiert ist: Das Faltungs-Neuronale Netzwerk selbst wird in der Klasse Net () beschrieben.

Wenn Sie langsam und von Anfang an etwas über Faltung und Faltungsnetzwerke lernen möchten, empfehle ich einen Vortrag an der Deep Learning School (MIPT MIPT) (auf Russisch) zu diesem Thema und natürlich Stanfords Kurs cs231n (auf Englisch) .

Deep Learning School - was ist das?
Deep Learning School im Labor für Innovation FPMI MIPT ist eine Organisation, die sich aktiv an der Entwicklung eines offenen russischsprachigen Kurses über neuronale Netze beteiligt. In diesem Artikel werde ich mehrmals auf diese Video-Tutorials verweisen.

Bild

Kurz gesagt, mit der Faltungsoperation können Sie Muster auf Bildern anhand ihrer Variabilität finden. Wenn wir Faltungs-Neuronale Netze trainieren (dt.: Faltungs-Neuronale Netze), finden wir tatsächlich Faltungsfilter (Neuronengewichte), die Bilder gut beschreiben und so gut, dass wir die Klasse daraus genau bestimmen können. Es wurden viele Wege erfunden, um ein solches Netzwerk aufzubauen. Mehr als Sie denken ...

Faltungsarchitekturen für neuronale Netze: 1000 Wege, um ein Ziel zu erreichen



Bild


Ja, ja, noch eine architektonische Überprüfung . Aber hier werde ich versuchen, es so relevant wie möglich zu machen!

Zuerst gab es LeNet , es half Jan LeCun 1998, Zahlen zu erkennen. Dies war das erste Faltungsnetzwerk zur Klassifizierung. Ihr Hauptmerkmal war, dass sie im Grunde genommen anfing, Faltungs- und Pooling- Operationen durchzuführen.

Bild

Dann gab es eine Pause bei der Entwicklung von Grids, aber die Hardware stand nicht still, und es wurden effektive Berechnungen für GPU und XLA entwickelt . Im Jahr 2012 erschien AlexNet, sie schoss im ILSVRC-Wettbewerb ( ImageNet Large-Scale Visual Recognition Challenge ).

Ein kleiner Exkurs über ILSVRC
ImageNet wurde bis 2012 zusammengestellt und eine Teilmenge von Tausenden von Bildern und 1000 Klassen wurde für den ILSVRC-Wettbewerb verwendet. ImageNet hat derzeit ~ 14 Millionen Bilder und 21.841 Klassen (von der offiziellen Website übernommen), aber für den Wettbewerb wählen sie normalerweise nur eine Teilmenge aus. ILSVRC wurde dann zum größten jährlichen Bildklassifizierungswettbewerb. Übrigens haben wir kürzlich herausgefunden, wie man in wenigen Minuten auf ImageNet trainiert .

Von 2010 bis 2018 erhielten sie im ImageNet (in ILSVRC) SOTA- Netzwerke für die Klassifizierung von Bildern. Zwar sind seit 2016 eher Wettbewerbe zur Lokalisierung, Erkennung und zum Verständnis der Szene als zur Klassifizierung relevanter.

In der Regel werfen verschiedene Architekturprüfungen Licht auf diejenigen, die von 2010 bis 2016 die ersten beim ILSVRC waren, sowie auf einige einzelne Netzwerke. Um die Geschichte nicht zu überladen, habe ich sie unter den Spoiler gelegt und versucht, die Hauptideen hervorzuheben:

Architektur von 2012 bis 2015
JahrArtikelSchlüsselideeGewicht
2012AlexnetVerwenden Sie zwei Bündel hintereinander. Teilen Sie das Netzwerktraining in zwei parallele Zweige auf240 MB
2013ZfnetFiltergröße, Anzahl der Filter in Schichten- -
2013Überfeatureeiner der ersten Detektoren für neuronale Netze- -
2014VggNetzwerktiefe (13-19 Schichten), Verwendung mehrerer Conv-Conv-Pool-Blöcke mit kleinerer Faltungsgröße (3x3)549 MB (VGG-19)
2014Inception (v1) (auch bekannt als GoogLeNet)1x1-Faltung (Idee aus dem Netzwerk-in-Netzwerk ), Hilfsverluste (oder tiefe Überwachung ), Stapeln der Ausgänge mehrerer Faltungen (Inception-Block)- -
2015ResnetRestverbindungen , sehr tief (152 Schichten ..)98 MB (ResNet-50), 232 MB (ResNet-152)




Die Ideen all dieser Architekturen (mit Ausnahme von ZFNet, es wird normalerweise wenig erwähnt) waren zu einer Zeit ein neues Wort in neuronalen Netzen für Vision. Nach 2015 gab es jedoch viele weitere wichtige Verbesserungen, beispielsweise Inception-ResNet, Xception, DenseNet, SENet. Unten habe ich versucht, sie an einem Ort zu sammeln.

Architektur von 2015 bis 2019
JahrArtikelSchlüsselideeGewicht
2015Inception v2 und v3Zerlegung von Paketen in Pakete 1xN und Nx192 MB
2016Inception v4 und Inception-ResNetKombination von Inception und ResNet215 MB
2016-17Resnext2. Platz ILSVRC, die Verwendung vieler Zweige ("generalisierter" Inception-Block)- -
2017Xceptiontief durchtrennbare Faltung , wiegt weniger mit vergleichbarer Genauigkeit wie Inception88 MB
2017DensenetDichter Block leicht aber genau33 MB (DenseNet-121), 80 MB (DenseNet-201)
2018SenetQuetsch- und Erregungsblock46 MB (SENet-Inception), 440 MB (SENet-154)


Die meisten dieser Modelle für PyTorch finden Sie hier , und es gibt so eine coole Sache .

Sie haben vielleicht bemerkt, dass das Ganze ziemlich viel wiegt (ich möchte maximal 20 MB oder sogar weniger), während heutzutage mobile Geräte überall verwendet werden und das Internet der Dinge immer beliebter wird, was bedeutet, dass Sie dort auch Gitter verwenden möchten.

Beziehung zwischen Modellgewicht und Geschwindigkeit
Da die neuronalen Netze in sich nur Tensoren multiplizieren, wirkt sich die Anzahl der Multiplikationsoperationen (sprich: die Anzahl der Gewichte) direkt auf die Arbeitsgeschwindigkeit aus (wenn keine arbeitsintensive Nach- oder Vorverarbeitung verwendet wird). Die Geschwindigkeit des Netzwerks selbst hängt von der Implementierung (Framework), der Hardware, auf der es ausgeführt wird, und der Größe des Eingabebilds ab.

Die Autoren vieler Artikel gingen den Weg, schnelle Architekturen zu erfinden. Ich sammelte ihre Methoden unter dem folgenden Spoiler:


Die Nummern in allen Tabellen stammen aus der Obergrenze der Repositorys, der Keras-Anwendungstabelle und diesem Artikel .

Sie fragen: „Warum haben Sie über diesen ganzen„ Zoo “von Modellen geschrieben? Und warum ist die Aufgabe der Klassifizierung? Aber wir wollen Maschinen das Sehen beibringen, und Klassifizierung ist nur eine enge Aufgabe. “ Tatsache ist, dass neuronale Netze zum Erkennen von Objekten, zum Bewerten von Körperhaltungen / Punkten, zum erneuten Identifizieren und Suchen in einem Bild präzise Modelle zur Klassifizierung als Rückgrat verwenden und 80% des Erfolgs von ihnen abhängen.

Aber ich möchte CNN irgendwie mehr vertrauen, oder sie haben sich Black Boxes ausgedacht, aber was „drinnen“ ist, ist nicht offensichtlich. Um den Funktionsmechanismus von Faltungsnetzwerken besser zu verstehen, entwickelten die Forscher die Verwendung von Visualisierung.

Visualisierung von Faltungs-Neuronalen Netzen: Zeigen Sie mir Leidenschaft


Ein wichtiger Schritt, um zu verstehen, was in Faltungsnetzwerken geschieht, ist der Artikel „Visualisieren und Verstehen von Faltungsnetzwerken“ . Darin schlugen die Autoren verschiedene Möglichkeiten vor, um genau zu visualisieren, worauf (auf welchen Teilen des Bildes) Neuronen in verschiedenen CNN-Schichten reagieren (ich empfehle auch, einen Stanford-Vortrag zu diesem Thema anzuschauen). Die Ergebnisse waren sehr beeindruckend: Die Autoren zeigten, dass die ersten Schichten des Faltungsnetzwerks auf einige „Dinge auf niedriger Ebene“ durch die Art der Kanten / Winkel / Linien reagieren, und die letzten Schichten bereits auf ganze Teile der Bilder (siehe Bild unten), dh sie tragen bereits an sich einige Semantik.

Bild


Darüber hinaus hat das Projekt zur Tiefenvisualisierung von der Cornell University und das Unternehmen die Visualisierung noch weiter vorangetrieben, während der berühmte DeepDream gelernt hat, in einem süchtig machenden interessanten Stil zu verzerren (unten ein Bild von deepdreamgenerator.com ).

Bild


2017 wurde auf Distill ein sehr guter Artikel veröffentlicht , in dem eine detaillierte Analyse dessen durchgeführt wurde, was jede Ebene „sieht“. Zuletzt (im März 2019) erfand Google Aktivierungsatlanten : einzigartige Karten, die für jede Netzwerkschicht erstellt werden können. Dies bringt uns dem Verständnis des Gesamtbildes der Arbeit von CNN näher.



Wenn Sie selbst mit Visualisierung spielen möchten, würde ich Lucid und TensorSpace empfehlen.

Okay, CNN scheint bis zu einem gewissen Grad wahr zu sein. Wir müssen lernen, wie man dies bei anderen Aufgaben verwendet und nicht nur bei der Klassifizierung. Dies wird uns helfen, Embedding'ov-Bilder zu extrahieren und Lernen zu übertragen.

Ich selbst bin eine Art Chirurg: Wir extrahieren Merkmale aus neuronalen Netzen


Stellen Sie sich vor, es gibt ein Bild, und wir möchten diejenigen finden, die visuell so aussehen (dies ist beispielsweise die Suche in einem Bild in Yandex.Pictures). Früher (vor neuronalen Netzen) haben Ingenieure Funktionen dafür manuell extrahiert, z. B. etwas erfunden, das das Bild gut beschreibt und es mit anderen vergleichen kann. Grundsätzlich arbeiten diese Methoden ( HOG , SIFT ) mit Bildverläufen , normalerweise werden diese Dinge als "klassische" Bilddeskriptoren bezeichnet. Von besonderem Interesse beziehe ich mich auf den Artikel und den Kurs von Anton Konushin (dies ist keine Werbung, nur ein guter Kurs :)

Bild


Mithilfe neuronaler Netze können wir diese Merkmale und Heuristiken nicht selbst erfinden, sondern das Modell richtig trainieren und dann die Ausgabe einer oder mehrerer Schichten des Netzes als Zeichen des Bildes verwenden .

Bild

Ein genauerer Blick auf alle Architekturen macht deutlich, dass die Klassifizierung in CNN zwei Schritte umfasst:
1). Feature-Extraktor- Ebenen zum Extrahieren informativer Features aus Bildern mithilfe von Faltungsebenen
2). Lernen über diese Funktionen hinaus Fully Connected (FC) -Klassifiziererebenen

Bild


Beim Einbetten von Bildern (Features) geht es nur darum, dass Sie ihre Zeichen nach dem Feature-Extraktor eines Faltungs-Neuronalen Netzwerks (obwohl sie auf unterschiedliche Weise aggregiert werden können) als informative Beschreibung von Bildern verwenden können. Das heißt, wir haben das Netzwerk für die Klassifizierung geschult und nehmen dann einfach den Ausgang vor den Klassifizierungsebenen. Diese Zeichen werden als Merkmale , neuronale Netzwerkdeskriptoren oder Bildeinbettungen bezeichnet (obwohl Einbettungen im NLP normalerweise akzeptiert werden, da dies eine Vision ist, spreche ich häufig Merkmale ). Normalerweise ist dies eine Art numerischer Vektor, zum Beispiel 128 Zahlen, mit denen Sie bereits arbeiten können.

Aber was ist mit Auto-Encodern?
Ja, tatsächlich können Funktionen von Auto-Encodern erhalten werden . In meiner Praxis haben sie dies auf unterschiedliche Weise getan, aber zum Beispiel in Artikeln zur Neuidentifizierung (auf die später noch eingegangen wird) nehmen sie immer noch Funktionen nach dem Extraktor an, anstatt den Auto-Encoder dafür zu trainieren. Es scheint mir, dass es sich lohnt, Experimente in beide Richtungen durchzuführen, wenn die Frage ist, was besser funktioniert.

Somit kann die Pipeline zur Lösung des Suchproblems in einem Bild einfach angeordnet werden: Wir führen die Bilder durch CNN, nehmen Zeichen aus den gewünschten Ebenen und vergleichen diese Merkmale aus verschiedenen Bildern miteinander. Zum Beispiel betrachten wir einfach den euklidischen Abstand dieser Vektoren.

Bild


Transfer Learning ist eine bekannte Technik für das effektive Training neuronaler Netze, die bereits für ihre Aufgabe an einem bestimmten Datensatz trainiert wurden. Oft heißt es auch Feinabstimmung anstelle von Transferlernen. In den Stanford-Kursnotizen cs231 werden diese Konzepte geteilt. Transferlernen ist eine allgemeine Idee, und Feinabstimmung ist eine der Implementierungen der Technik. Dies ist für uns in Zukunft nicht so wichtig. Die Hauptsache ist zu verstehen, dass wir das Netzwerk nur so trainieren können, dass es den neuen Datensatz gut vorhersagt, und zwar nicht ausgehend von zufälligen Gewichten, sondern von solchen, die auf einem großen ImageNet-Typ trainiert wurden. Dies gilt insbesondere dann, wenn nur wenige Daten vorhanden sind und Sie das Problem qualitativ lösen möchten.


Es reicht jedoch möglicherweise nicht aus, nur die erforderlichen Funktionen zu übernehmen und zusätzliche Schulungen vom Datensatz zum Datensatz durchzuführen, um beispielsweise nach ähnlichen Personen / Personen / etwas Bestimmtem zu suchen. Fotos derselben Person können manchmal visuell noch unähnlicher sein als Fotos verschiedener Personen. Es ist notwendig, dass das Netzwerk genau die Zeichen hervorhebt, die einer Person / einem Objekt innewohnen, auch wenn es für uns schwierig ist, dies mit unseren Augen zu tun. Willkommen in der Welt des Repräsentationslernens .

Bleiben Sie nah dran: Repräsentationslernen für Menschen und Einzelpersonen


Terminologie Hinweis
Wenn Sie wissenschaftliche Artikel lesen, scheinen einige Autoren den Ausdruck metrisches Lernen manchmal anders zu verstehen, und es besteht kein Konsens darüber, welche Methoden als metrisches Lernen bezeichnet werden sollen und welche nicht. Aus diesem Grund habe ich mich in diesem Artikel dazu entschlossen, diesen bestimmten Satz zu vermeiden und ein logischeres Darstellungslernen zu verwenden . Einige Leser stimmen dem möglicherweise nicht zu. Ich werde dies gerne in den Kommentaren diskutieren.

Wir stellen die Aufgaben:

  • Aufgabe 1 : Es gibt eine Galerie (Set) mit Fotos von Gesichtern von Personen. Wir möchten, dass das Netzwerk gemäß einem neuen Foto entweder mit dem Namen einer Person aus der Galerie antworten kann (angeblich ist es das) oder dass es keine solche Person in der Galerie gibt (und wir fügen sie möglicherweise hinzu neue Person)

  • Aufgabe 2 : Das Gleiche, aber wir arbeiten nicht mit Fotos von Gesichtern, sondern mit Menschen in voller Länge



Die erste Aufgabe wird normalerweise als Gesichtserkennung bezeichnet , die zweite als Neuidentifizierung (abgekürzt als Reid ). Ich habe sie in einem Block zusammengefasst, weil ihre Lösungen heute ähnliche Ideen verwenden: Um effektive Bildeinbettungen zu erlernen, die mit ziemlich schwierigen Situationen umgehen können, verwenden sie heute verschiedene Arten von Verlusten, wie zum Beispiel Triplettverlust , Vierfachverlust Kontrastmittelverlust , Kosinusverlust .



Es gibt immer noch wunderbare siamesische Netzwerke , aber ich habe sie ehrlich gesagt nicht selbst benutzt. Übrigens „entscheidet“ nicht nur der Verlust selbst, sondern auch, wie Paare von Positiven und Negativen dafür abgetastet werden, betonen die Autoren des Artikels Sampling, die beim tiefgreifenden Einbetten des Lernens eine Rolle spielen.

Das Wesentliche all dieser Verluste und siamesischen Netzwerke ist einfach: Wir möchten, dass die Bilder einer Klasse (Person) im latenten Raum der Merkmale (Einbettungen) „nah“ und verschiedener Klassen (Menschen) „fern“ sind. Die Nähe wird normalerweise wie folgt gemessen: Es werden Einbettungen von Bildern aus einem neuronalen Netzwerk vorgenommen (z. B. ein Vektor mit 128 Zahlen), und wir betrachten entweder den üblichen euklidischen Abstand zwischen diesen Vektoren oder die Kosinusnähe. Wie Sie messen können, ist besser, wenn Sie einen Datensatz / eine Aufgabe auswählen.

Eine schematische Darstellung einer Problemlösungspipeline zum Lernen von Darstellungen sieht ungefähr so ​​aus:



Genauer gesagt, so
: (Softmax + CrossEntropy), (Triplet, Contrastive, etc.). positive' negative'

: - , — . , — - , (, ). .


: - ( MUST READ! ) , FaceNet , ArcFace , CosFace .

Bild


: dlib , OpenFace , FaceNet repo , . , ArcFace CosFace ( , - , - ).

, , ?


, - , , , - , - .



Reid : , , 10 , 5 ( ), 50 . (), , , ID. , : , , , , , , ( / ..).



, Reid — . , - , - negative' positive'.

Reid 2016 . , , — representation learning. , -, , Aligned Re-Id (, , ), Generative Adversarial Networks (GAN) .



Bild


, , -, . , - , , , . — !


OpenReid TorchReid . — , , . PyTorch, Readme Person Re-identification, .

face- reid- ( , ). ? …


, . , , ? ( ) :

  • : , ,
  • : ,
  • : ,

float64, , , float32 . low-precision training . , , Google MorphNet , ( ) .

?



Bild


DL CV: , , , . : , , . , , , . .

Stay tuned!

PS: - ?
(, , ), , , . . , , ( ).

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


All Articles