Transkripte
1. Einführung: Willkommen in der Klasse „Vielleicht
Erkennung mit Deep Learning“, in der wir
eine
End-to-End-Anwendung erstellen , die Minen in
Bildern und Videos
erkennen kann . Mein Name ist Arsin und ich werde dein Lehrer
in dieser Klasse sein. Ich programmiere
seit 2019. Und ich bin der Autor
des Blogs, don't
repeat yourself.org, wo ich
jeden Monat über
5.000 Entwickler habe , um
mehr über Python,
maschinelles Lernen und
Computer Vision zu erfahren . Die Bildklassifizierung ist eine sehr häufige Aufgabe
in der Computer Vision. Es ist eine Aufgabe, bei der Sie eine Reihe von Bildern
haben und die Einheit haben, um sie
in eine Reihe von Kategorien zu klassifizieren. In diesem Kurs werden
wir insbesondere Bilder
in zwei Kategorien einteilen. Lächelnd und nickend, lächelnd. Wir werden Deep Learning verwenden
und zunächst
ein neuronales Faltungsnetzwerk
für diesen Minus-Datensatz trainieren , der Gesichter von Menschen enthält, die
lächeln und nicht lächeln. Sobald das Netzwerk getrocknet ist, werden
wir die
folgenden Schritte ausführen, um ein Lächeln in
Bildern und Videos zu erkennen. Wir werden die harten Kaskaden verwenden,
um ein Gesicht, ein Bild, zu erkennen. Wir werden dann den
Gesichtsbereich aus dem Bild extrahieren. Dann werden wir
die Gesichtsregion zur Klassifizierung an
das Netzwerk übergeben . Und schließlich werden wir das Bild mit dem Etikett
versehen ,
das
je nach
Ausgabe des Netzwerks lächelt
oder nicht lächelt . Wenn das aufregend klingt, dann gehen wir in
die Klasse und beginnen mit der Entwicklung unserer
Geruchserkennungsanwendung.
2. Installation: In diesem ersten Video werden
wir sehen, wie
die erforderlichen Pakete
für dieses Projekt installiert werden. Sie können die
Datei
requirements.txt aus dem Quellcode entnehmen und installieren, was darin enthalten ist. Oder wenn Sie mir
folgen, können
Sie eine neue Datei
im Projektverzeichnis erstellen. Wir nennen es require's dxdy und fügen die für dieses Projekt
benötigten Bibliotheken ein. Also brauchen wir Num Pi. Wir haben gemacht, wie
Radfahrer OpenCV lernen. Wir brauchen auch Schlammgerinnsel. Dann brauchen wir endlich, jetzt speichern wir die Datei. Und aus der Terminologie, die wir Text für die
Stromversorgungsanforderungen
gelernt haben aus dem Text für die
Stromversorgungsanforderungen
gelernt haben. In meinem Fall
sind die Pakete bereits installiert. Hier können wir also sehen, dass die
Anforderung alle diese Bibliotheken bereits erfüllt hat. Aber in Ihrem Fall werden
Sie sehen, dass die Pakete installiert
werden. Und es kann einige Zeit dauern
, bis alle installiert sind.
3. Laden der Daten: In diesem Video werden
wir diese Mäuse laden. Der Mäuse-Datensatz enthält mehr als 13.000
Graustufenbilder von 64 mal 64 Pixeln in der Krise. lächeln und sie lächeln
nicht. Für die nicht lächelnden Gesichter haben
wir mehr als
9.000 Bilder. Und für die lächelnden Gesichter haben
wir 3.690 Bilder. Das Doctype-Set
ist also unausgewogen,
was bedeutet, dass es
eine gleichmäßige Verteilung
der Bilder gibt . Eine gängige Technik
für den Umgang mit einem unausgeglichenen Datensatz ist das
Anwenden des Klassenwartens. Wir werden sehen, wie das geht
, wenn wir unser Modell bauen. Also werden wir zuerst den Datensatz
herunterladen. Sie können zu dieser
URL navigieren, um sie herunterzuladen. Also klicken wir auf die Schaltfläche Aufnehmen und laden sie
im Zip-Format herunter. Wenn die Datei
heruntergeladen wurde, entpacken wir sie. Wir löschen diese Datei. Und unser Datensatz ist in diesem
Formel-you-smiles-Ordner
enthalten. Hier haben wir also zwei Unterordner,
positive und negative. Dieser enthält Bilder
von Gesichtern mit einem Lächeln, wie Sie hier sehen können. Und der Inhalt des
Negative-Ordners, Bilder von nicht lächelnden. Wie Sie sehen können, sind
die Bilder in Graustufen und
etwas mehr 64 mal 64 groß. Normalerweise können wir unser
Modell also mit Kanalproblemen trainieren. Es sollte nicht
viele Ressourcen verbrauchen. Vergessen Sie nicht, den Ordner in das Projektverzeichnis
zu kopieren. Jetzt können wir
unseren Datensatz daraus laden. Beginnen wir also damit,
die notwendigen Pakete zu importieren. Wir werden zuerst eine neue
Python-Datei erstellen, die Punkt p-y trainiert. Wir beginnen mit dem
Import der
Zugtest-Split-Funktion aus der scikit-learn
got wandering-Auswahl. Heute und in dieser Aufteilung werden
wir es verwenden, um unseren
Datensatz in einen Trainingssatz, einen
Validierungssatz
und einen Testsatz aufzuteilen . Dann haben wir die
Bild-Array-Funktion. Also keine Impulse in meinem Bild oder Bild zu Array. Und dann haben wir von TensorFlow keras dot load in range, dem wir ein Bild daraus
laden werden. Als nächstes haben wir das
sequentielle Modell. Also von
Flow Keras servieren , sequentiell. Und dann brauchen wir ein paar Anwälte. Wir werden also TensorFlow haben. Keras, Schichten kommen zum Jahr. Dann haben wir den Mönchspool, dann haben wir die abgeflachte Schicht und schließlich die dichte Schicht. Wir brauchen auch das pyplot-Modul, numpy und das OS-Paket. Importieren wir sie also auch. Und jetzt können wir
unseren Datensatz laden. Erstellen wir also eine Funktion
namens image parts, die den Bot als Argument zum
Datensatz bringt. Und es wird die Liste
der Pfade zu den Bildern
im Datensatz zurückgegeben . Wir können also zuerst eine
Liste mit gültigen Erweiterungen erstellen. Wir werden also sagen, dass gültige
Formate gleich sind. Gpg wird P
und G enthalten . Im Grunde werden wir
diese Liste verwenden , um zu überprüfen, ob es sich bei der
Dateiendung um ein Bild handelt. Und als Nächstes erstellen wir eine leere Liste
namens Bildteile. Entspricht einer leeren
Liste, die die Teile der Bilder
im Datensatz enthalten
wird. Als nächstes schauen wir uns
den Wurzelverzeichnisbaum an. Sagen wir mal für deine Pod-Namen in der Wand. Und hier ist der Pfad der Pfad zum aktuellen
Verzeichnis im Baum. Und ihre Namen gehören den Unterverzeichnissen
des aktuellen Verzeichnisses
in den drei, und die fünf Namen sind die Dateien im
aktuellen Verzeichnis. Fangen wir also mit dem Drucken an. Hier ist mein Harris und wir werden
sehen, was ich hier sagen werde. Ihr habt viele Pflanzen. Hier geht's direkt von
diesem leichten Axon. Wir werden unser Skript ausführen. Die Ausgabe hier sind also alle Unterverzeichnisse
des smiles-Verzeichnisses. Wie Sie sehen können, haben wir
die negativen, positiven, die hier sind, und
dann die negativen sieben, positiven, sieben, die hier
sind. Und hier. Jetzt werden wir
über die letzte Iris schleifen. Also werden wir
für Namen in Namen schreiben. Drucken wir auch die Pfeife
und den letzten Teil aus, um zu
sehen, was los ist. Damit wir schreiben können, dass Sie Ihrem eigenen Farbskript sind. Wie Sie sehen können, haben
wir hier diesen Verzeichnis-Topf
und dann dieses feine Korn. Und dann hat diese Ebene tatsächlich diesen Dateinamen
gekauft
, der ein Bild ist, und so weiter. Was wir jetzt tun können, ist die Dateierweiterung zu
extrahieren, die entweder This oder this ist, und sie mit unserer, zu dieser Liste
zu vergleichen, um zu überprüfen, ob
der Dateiname ein Bild ist. Also werden wir hier eine Erweiterung schreiben. Sie möchten Text teilen. Wir geben einen guten Namen. Noah. Dann schreiben wir unsere Erweiterung in die Liste der
gültigen Formate. Wir werden den vollständigen
Pfad zu unserem Image aufbauen. Wir werden also sagen, dass der
Bildteil
dem OS Punkt, Punkt, Punkt Join entspricht . Und hier werden wir
den Verzeichnisteil beitreten
, der dieser ist. Wir definieren den Namen hier Teil. Mit der Finanzierung für
dieses besondere Bild. Der vollständige Name des
Bildes ist dieser. Und wir müssen auch
unser Bild zwei, unsere Liste, anhängen. Wir sind mit dieser Funktion fertig. Gerade Bildteile geschrieben. Bei dieser
Funktion haben wir jetzt den vollständigen Pfad zu jedem Bild im Datensatz, der in einer Liste
gespeichert ist. Der nächste Schritt besteht also darin,
diese Bildteile zu verwenden und
den intelligentesten Datensatz zu laden. Wir können also sagen, wir werden eine neue Funktion erstellen. Nennen Sie es Wägezelle. Und hier werden
wir zwei Argumente vorbringen. Der erste sind
die Bildteile, und der zweite ist die
Zielgröße der Bilder. Wir definieren es hier. Nehmen wir an, die Bildgröße
entspricht 3232. Bildkörperbild-Pfade. Jetzt können wir
zwei leere Listen erstellen. Zuerst werden wir es die Stadt
nennen, die die Bilder
enthalten wird. Und dann lesen wir es. Das können auch die benannten Beschriftungen, die die Bezeichnung für
jedes Bild enthalten , lächelnd
oder nicht lächelnd. Als nächstes holen wir uns
zunächst die Bilder. Wir können also eine Schleife über
die Bildteile ziehen. Wir werden für Image-Teil-Pods sagen. Hier schreiben wir
image is equal to, wir werden unser Bild mit
der Funktion load image laden. Hier
ist das erste Argument der Weg zu unserem Bild. Und dann haben wir den
Farbmodus, der Graustufen ist. Und dann
ist das letzte Argument die Zielgröße, die wir
unsere Zielgröße verwenden können. Als Nächstes müssen wir
unser Bild in ein NumPy-Array konvertieren. Wir schreiben einfach Bild zwei. Und schließlich hängen wir
unser Bild an die Daten an. Also hier sind wir fertig
mit den Bildern. Wir können jetzt die Labels holen. Um das Etikett zu erhalten, können
wir es
aus dem Bild extrahieren. Aber so drucken wir zum Beispiel hier die Bildteile
aus. Und wir werden sagen: Mal
sehen, was wir bekommen. Die Daten. Bild-Box bereitstellen. Wie Sie sehen können, haben
wir den Bot für jedes
Bild in unserem Datensatz. Hier ist zum Beispiel der vollständige Pfad zu diesem
bestimmten Bild. Wenn wir also den vollständigen Teil übernehmen, können
wir das
Etikett aus diesem Teil extrahieren, was hier positiv ist. Für dieses spezielle Bild lächelt
die Person. Wir haben ein lächelndes
Gesicht auf diesem Bild. Um das Etikett zu bekommen, finden
wir hier diese Zeile. Und wir schreiben Label ist gleich Bildbindung und
bilden das Bild, aber wir werden es basierend
auf dem Verzeichnistrennzeichen aufteilen, das hier dieses Trennzeichen ist. Und wir werden den
dritten vom Ende nehmen. Das ist also der erste, minus eins, minus zwei
und minus drei. Also hier werden wir das Etikett bekommen,
das gleich zwei Positiven ist. Jetzt werden wir sagen, wenn unser Label zwei positiven Werten
entspricht, werden
wir es als eins codieren. Also werden wir einen schreiben. Wenn num gleich positiv ist, werden wir
andernfalls
codieren, dass es 0 hat. Schließlich fügen wir unser
Label an unsere Liste an. Der letzte Schritt besteht darin, einfach die Daten, die Liste und die Liste
zurückzugeben. Wir stellen sicher, dass
sie in ein NumPy-Array konvertiert werden. Wir werden sagen, gib num pi dot zurück, schreibe die oberen und
die nicht-pi-Punkt-Beschriftungen neu. Wir hören auch, dass die Daten
auf den Bereich 01 skaliert werden müssen , indem sie durch 255
dividiert werden. Hier bis hier können wir unsere Datentabellen
mit unserer Funktion
abrufen.
4. Trainieren des Smile: In diesem Teil
werden wir
unser Modell aufbauen und mit dem Training beginnen. Das Modell, das wir
bauen werden, besteht aus
Slack-Off to Curve bis zur Plusmarke, die durch die Blogs
gespawnt wird, gefolgt von einer vollständig
verbundenen Ebene. Wie Sie in diesem Bild sehen
können, haben
wir diese dünne Schicht als das maximale Pooling auf der Ebene. Und dann das Gleiche hier, C plus max Pooling-Layer. Und dann haben wir den
vollständig verbundenen Block
, der aus einer
abgeflachten Schicht besteht, und dann eine dichte Schicht und weitere Schicht, die wie nach außen
warten wird. Erstellen wir also eine Funktion. Wir werden es das Modell nennen. Und es wird die gute Form eines
Arguments annehmen, was
der durchschnittlichen Wissenschaft entspricht. Glanz eins für eine
Kanaldimension. Aber wir müssten uns nicht ändern. In diesem Thema. Wir werden diese
Gleichungsmodelle verwenden, damit wir Murmeln schreiben
können,
wollen sequentiell. Wir werden alle Filter
haben, die Drecksarbeit annehmen. Der Gouverneur unterschreibt. Mal sehen, Drei-mal-Drei-Größe. Für die Aktivierung zur
Beobachtungsfunktion. Oder die Kreuzzüge. Gleiche gute Verfassung. Wir werden Alarm Max-Pooling im
Urlaub verwenden, die
wir kurz für meinen Job verwenden werden. Und dann dasselbe mit der Flüssigkeitsverlustschicht der Filter. Wir werden die
Anzahl der Filter verdoppeln. Und dann die abgeflachte Schicht. Mit 256. Du bist ehrlich. Und für die Aktivierung der Ausgangsschicht. Haben wir. Da wir es mit dem Problem der
binären Klassifizierung zu tun
haben, verwenden wir die
Sigmoid-Aktivierungsfunktion und senden Ihnen alle. Du bist also einer für das
Aktivierungssignal. Lassen Sie uns auch unser Modell kompilieren. Also werden wir die Verlustfunktion
modellieren dot kompilieren. Natürlich nehmen wir
das binäre Kreuz beim Kopieren. Das Optimum ist 0. Sagen wir
Optimierer oder die Metriken. Nimm wirklich den Parker Awesome. Als nächstes müssen wir
die Klassengewichte berechnen. Wie ich bereits sagte, ist
unser Datensatz unausgewogen. Wir müssen also dem unterrepräsentierten Glas mehr Gewicht beimessen. In diesem Fall lächelnd plus, damit das Modell diesem Glas
mehr Aufmerksamkeit schenkt. Wir können beginnen, indem wir
die Nummer jedes Labels
mit der Funktion
numpy dot unique enthalten . Also sagen wir, ich habe vergessen, das Modell zurückzugeben. Also im Gegenzug das Modell, und wir werden sagen, dass Label Counts der Aufruf von non pi
ist. Was auf dem
Kopf steht, werden wir mit
unseren Labels sein und wir werden
sagen zurück, stimmt. Die Rückgabespalten entsprechen show, um die Anzahl
der einzelnen Beschriftungen zurückzugeben. Drucken wir die aus. Wir werden sagen, dass wir kein
Problem mit Produkten haben werden. Haben wir. Geht hier hin, da wir
nicht beschriften müssen, sind
alle Beschriftungen auf 0 gesetzt. Jetzt sind wir also bei unserem Drehbuch. Hier. Wie Sie sehen können, haben
wir eine beschriftete 01 gebildet, die lächelt
oder nicht lächelt. Und für die
Zählvariable haben wir 9.475. Entfalten Sie diese Futterschicht. Wir haben 3.690. Jetzt müssen wir also
die Klassengewichte berechnen. Dafür. Wir können
eine einfachere Operation gebrauchen. Also können wir hier schreiben zählt. Die neuen Konten
entsprechen den maximalen Zählungen, die hier sind, und wir teilen
sie durch die vorherigen Zählungen. Verschieben wir diese beiden
Variablen erneut. Also hier, wie Sie sehen können, ist
das Plus
MyInt plus plus hat
die Gewichte um 0,56
größer als die plus 0. Lassen Sie uns ein Wörterbuch erstellen , das jede
Klasse mit ihrem Gewicht abbildet. So können wir schreiben plus
Gewicht ist gleich. Wir verwenden die Zip-Funktion. Also das Wörterbuch. Jetzt müssen wir
ein Trainingsset, ein
Validierungsset und ein Testset erstellen . Wir werden 20% der
Daten verwenden, um dieses Set zu beten. Und von den verbleibenden 80% werden
wir 20 Prozent für die
Erstellung des Validierungssatzes benötigen. Fangen wir also
mit dem Testset an. Wir werden dafür die
Zugtest-Split-Funktion verwenden. Also hat uns gefallen, dass es versucht, unseren Tag zu versorgen. Und dann folgt mit dieser
Größe werden 20 Prozent dauern. Sag, starte den Herbst. Sie folgen ihrer
eigenen Demonstration. Oder zu tun. Das Gleiche gilt
für den Validierungssatz. Wir haben einfach kopiert und eingefügt. Belastung. Langsam abtropfen lassen Wir bieten. Richtig. Jetzt sind wir bereit, unsere Modelle zu trainieren. Also werden wir
das Modell zunächst schriftlich erstellen. Das Modell entspricht dem Modul. Und wir werden das
Modell für die 20. Box trainieren. Die Box ist also gleich eins. Kunsthistoriker ist das
Quantil würde sagen, es ist das Wunder, warum heute. Der
Validierungsdaten-Validierungssatz. Und wir müssen
das Plusgewicht
für die Chargengröße verwenden das Plusgewicht . Sag 64. Entfaltete die Schachtel, eine Schachtel. Speichern wir das
Modell auch für später. So können wir einfach schreiben, dass man nicht sagt und wir werden es benennen, wird einem Glanz schaden. Wartet und wartet auf
die Startdatei. Wir benutzen den heute. Also willkommen. Das Training sollte nicht zu lange
dauern
Sie können also warten, bis das
Training beendet ist. So wie Sie sehen können,
was unsere Fitnessstudios rund 90 Prozent ausmachen. Aber lassen Sie uns die
Lernkurven zeichnen , um unsere Ergebnisse zu visualisieren. Also kopiere ich einfach
den Code von hier. Es gibt nichts besonderes. Hier. Wir zeichnen nur die Trainingsgenauigkeit,
die Validierungsgenauigkeit. Und dann haben wir den
Trainingsverlust und die Validierung. Lassen Sie uns das Skript erneut ausführen. Hier haben wir also
den Trainingsverlust, und hier haben wir die Genauigkeit
der Trainingsvalidierung von ungefähr 1, 2%. Was Sie feststellen können, dass die Trainings- und
Validierungsgenauigkeit ungefähr hier, dann beginnen zu divergieren. Das ist also ein Zeichen
von Überanpassung. Wir können die Genauigkeit
unseres Modells verbessern , indem wir die
Datenerweiterung verwenden. Aber ich werde
es in dieser Klasse nicht behandeln. Bewerten wir also unser
Modell im Testset. Und wir können unser Modell
auf Zusammenfassungen oder welche Bilder anwenden. Also dieser Verlust Genauigkeit. Es gibt ein Quantildiagramm bei dem das Testset verwendet wird. Hier haben wir kürzlich während
des Verlust-Operators , Awesome. Wir haben also ein Gras, es ist ungefähr
eins zu Person.
5. Anwendung unseres Smile auf Bilder: Jetzt, wo unser Modell trainiert ist, werden
wir es auf
einige reale Bilder anwenden. Erstellen wir also eine
neue Python-Datei. Wir werden es Lächeln,
Detektorbild, PY nennen. Und wir können anfangen, Code zu
schreiben. Also werden wir
oft importieren, sagen v. Dann
haben wir von diesen Modellen. Load-Funktion. Brauche auch. Als Nächstes
definieren wir einige Variablen. Also werden wir gutschreiben, dass die
Breite gleich 800 ist. Nehmen wir an, die Höhe
entspricht 600. Wir erstellen auch die blaue Farbe, also entspricht sie 5500. Und jetzt können wir unser Bild laden. Also hier habe ich einen Ordner
mit ein paar Bildern. Ich kopiere es einfach von hier. Ich habe zehn Bilder. Wir nehmen das
erste, unsere Modelle. Wir werden also mögen, dass das Bild einem Lebenslauf
entspricht, der zu hoch ist. Bilder. Wir haben die erste Ahnung. Sie müssen auch die Größe ändern. Wir werden also das TV-Tool mögen, Bildgröße ändern und
die Breite und Höhe verwenden. Und schließlich haben wir
zu sehr albern konvertiert, um CBT nicht den Haar-Lebenslauf zu
konvertieren, um zu
lesen, dass Sie grau werden müssen. Als Nächstes können wir
mit dem
Haar-Kaskaden-Klassifikator Gesichter
erkennen . Also hier habe ich unser kaskadiertes Standard-XML für die
Frontfläche
definiert . Also werde ich es einfach hier platzieren,
das Projektverzeichnis, und wir können es
mit der Funktion CV laden , um den Kaskadenklassifizierer zu
übernehmen. Also schreiben wir, dass unser
Gesichtsdetektor
gleich CV to
Cascade Classifier ist . Und hier geben wir den Namen an, von dem wir auch unser Modell laden
müssen . Wir werden also sagen, dass mehr als
dem Modell entspricht. Hier haben wir den Namen unseres
Modells, der mehr als ist. Jetzt können wir Gesichter mit der Funktion Multiscale erkennen erkennen. So wie diese Rechtecke unserem Gesichtsdetektor
entsprechen. Für das erste Argument stellen
wir unser Graustufenbild zur Verfügung, und dann haben wir
das maßstabsgetäuschte Auto. Wir werden es als 1.1 bezeichnen. Dann müssen wir
die Mindestnachbarn definieren, als
die wir es angeben können. Diese Parameter funktionieren. Gut in meinem Fall, aber du kannst
sie ändern, wenn du willst. Also hier enthält die
Variable face rectangles die Flächenbegrenzungsrahmen. Der nächste Schritt besteht also darin, eine Schleife über die Begrenzungsrahmen der Fläche zu
ziehen und den Gesichtsbereich zu extrahieren. Wir sagen für x, y, Breite und Höhe. In unserem Fall. Hier werden wir zuerst ein
Rechteck um das Gesicht legen. Also wir, wir mögen TV2.com. Hier. Wir kennen unser Image. Und wir werden
die MSDN-Konten angeben, die x und y sind. Und dann haben wir zwei verschiedene
diagonale Risse, die x plus y plus wären. Und dann haben wir die Farbe Blau und zwei für die Dicke. Und in der nächsten Woche starten Sie die Gesichtsregion aus
dem Graustufenbild. Wir haben die Koordinaten
des Gesichts hier. Also schreiben wir unserem Helden warum? Der Anruf bei Ray. Und wir werden einfach Slicing verwenden. Wir werden also
von y nach y plus x.
X plus Breite entstehen . Wir müssen auch die Größe des
Gesichtsbereichs ändern und
auf 01 branch skalieren , bevor wir ihn unserem Modell
zuführen. Also werden wir lügen oder y ist gleich CV
, um die Größe anzudocken. Hier lernen wir
, es auf 32 mal 32 zu dimensionieren da wir
damit unser Modell trainieren. Hier für die
Bildgröße haben wir 32 mal 32. Dann skalieren wir es auf
01, Zweig Zwei, 55. Wir müssen
das Bild auch zu einem Stapel hinzufügen. werden wir, denn hier die Bildform von
zweiunddreißig. Zweiunddreißig. Unser Modell wurde
anhand von Bildstapeln trainiert. Die neue Form
entspricht also T2, T2 mal T2. Also schreiben wir
y ist gleich y. Und wir werden die
Funktion non-piped dot verwenden, neuer Zugriff auf diese
neue Achse, y-Achse. Und wir werden hier
alles beim Alten belassen. Sie können hier das Vorher und
Nachher drucken , um zu sehen,
was sich hier geändert hat. Die Form. Das Gleiche hier. Hier haben wir einen oder zwei
Attributfehler. In den USA ist ein Großbuchstabe. Hier. Wie Sie sehen können, ist ich vor dem Hinzufügen der
neuen Achse 32 mal 32. Und nachdem Sie hier
die u-Achse hinzugefügt haben, Econ 132 mal 32. Jetzt besteht der letzte Schritt darin,
die Region des
Gesichts zu passieren , um nicht zu funktionieren. Zur Klassifizierung. Wir entfernen niemals. Wir werden schreiben welche Vorhersage dem
vorhersagenden Pfeil entspricht , und lassen uns das Wörterbuch
drucken. Normalerweise hat
die Vorhersage also einen Wert zwischen 0,1. Hier. Sie können hier den Wert der Vorhersage
für dieses bestimmte Bild sehen. Die Prognose ist 0,6. Was wir jetzt tun können
, ist , dass unser Label beispielsweise gleich ist, wenn die Vorhersage
größer oder gleich 0,5 ist, erstellen
wir das Label auf, wir setzen das Etikett auf lächelnd. Sonst
setzen wir es so, dass es nicht lächelt. Also werden wir etikettieren ist
gleichbedeutend mit Lächeln. Wenn die Vorhersage
größer oder gleich
0,5 ist , sonst nicht lächeln. Das ist in die Nacht hineingezogen. Um nach diesem Fall zu suchen, sollte
das Etikett
Ihren Prozess damit verbringen damit verbringen, für den Tag zu
lächeln. Aber das Letzte, was
wir tun müssen, ist den Text und das
Bild
zu schreiben und das Bild anzuzeigen. Wie ein Lebenslauf. Um das x zu setzen. Hier werden wir Text darauf setzen. Und wir würden gerne die
Kennzeichnung und das Bild machen. Für den Text der Koordinaten verwenden
wir die
Koordinaten des Gesichts. Also sagen wir x plus x und y. Und für die Schriftart kann man das wählen, sagen
wir mal diese. Und für die Schriftskala sagen
wir 0,75, blaue Farbe. Möglichkeiten zur Ansicht und CB2. Ich bin sicher, wir behalten unsere Kolumne. Die Person lächelt nicht, aber unser Modell hat im Bergbau
festgestellt. Natürlich
ist unser Modell nicht zu 100% genau, daher ist dies eine
positive Prognose. Versuchen wir es mit einem anderen Bild. Sagen wir das hier. Dieses Mal. Ich bin Armando hat die Rutsche
erfolgreich
vorhergesagt. Wir können es so versuchen, wie die
Person ist, ohne zu lächeln. Wir würden also nicht
diesen nehmen , der auch mit
den anderen Bildern testen kann. Und das ist mit dem Bild. Die Person lächelt nicht. Und unser Modell hat
erfolgreich erkannt.
6. Anwendung unseres Smile auf Videos: Sie nun wissen, wie Sie
Lächeln-Bilder erkennen können, sagen
wir, wie Sie
unseren
Deep-Learning-Smile-Detektor in zwei Videos anwenden . Erstellen wir also eine neue Python-Datei. Nennen Sie es Lach-Detektor, PY. Und lassen Sie uns
die Bibliotheken importieren, damit sich
der Code daran nicht
wesentlich ändert. Ich werde das einfach kopieren,
um es hier einzufügen. Dann haben wir die
Breite und die Höhe. Bei der blauen Farbe. Hier müssen wir nur
die Videoaufnahmeobjekte initialisieren . Also würden wir deine Tasse erneuern. Sicher ist gleich Lebenslauf
zu Videoaufnahme. Hier geben wir den
Namen für unser Video an. Hier habe ich ein
aufgezeichnetes Video von mir, in dem ich einige Tests gemacht habe. Also werde ich es einfach für
diesen Teil des Videos hier verwenden. Ich habe ein paar Tests gemacht und
gelächelt und viel Geld. Also hier werden wir den
Namen des Videos mp4 setzen. Und dann haben wir das Gleiche. Aus diesem Teil. Wir müssen den Gesichtsdetektor,
unser vorab trainiertes Wunder, und wir werden Gesichter erkennen, wobei die
Multiskalen-Erkennungsfunktion
verloren geht. Also werden wir einfach
diese drei Zeilen hier kopieren. Also hier ist unser Wörterbuch. Wir lesen die Frames aus dem
Browser, damit wir mit der
Verarbeitung unserer Frames beginnen können. Wir können sagen, warum ist wahr. Dann holen wir uns hier das nächste Bild aus dem Video. Also, wenn wir
laut Videoaufnahme Frame sagen. Und dann werden wir
es in verschiedene Kurven umwandeln, CV in CV, CV in BGR. Und hier können wir
die Multiscale-Funktion digs verwenden und sie entlang des
Graustufenrahmens weitergeben. Jetzt können wir eine Schleife über die Begrenzungsrahmen der
Fläche ziehen. Also
kopiere ich einfach den Code von hier, weil hier alles
beim Alten bleibt. Ich muss nur hier das Bild ändern, Rahmen. Finde einen neuen Weg. Sie schreiben den Text genauso und wir zeigen unseren Rahmen an. Also kopiere einfach den Code von hier. Wie der Lebenslauf
hier
in der Kopfzeile aussehen soll hier , würden
wir nicht sagen, dass Ihr Lebenslauf aussehen soll Warten Sie, warten Sie eine Minute. Strom ist also gleich q. Okay? Wir brechen aus. Schließlich haben wir die
Videoaufnahme und die Fenster veröffentlicht. Sehen wir uns das Endergebnis an. Wir werden Python sagen,
drei, Smile-Detektor lesen. Hier sehen Sie also, dass der
Algorithmus kein Problem damit hat Lächeln und
Lächeln aus dem Video zu
erkennen. Die Erkennung ist ziemlich stabil.
7. Schlussbemerkung: In diesem Kurs
lernen Sie, wie Sie
ein
neuronales Faltungsnetzwerk trainieren , um ein Lächeln in
Bildern und Videos zu erkennen. Als Erstes
müssen wir
unseren Datensatz von der Festplatte laden und für unser Netzwerk
vorbereiten. Als Nächstes haben wir
unser neuronales Netzwerk erstellt. Und hier haben wir
das Klassengewicht berechnet , um das Klassenungleichgewicht
im Datensatz zu berücksichtigen . Und zwingen Sie das Modell so, unterrepräsentierten Klasse
mehr Aufmerksamkeit zu schenken. In diesem Teil
teilen wir dann einen Datensatz in
einen Trainingssatz, Validierungssatz
und einen Testsatz auf
und
trainieren dann unser Netzwerk. Wir haben gesehen, dass wir beim Testgerät eine Genauigkeit
von 90 Prozent erreicht haben. Der letzte Schritt bestand darin,
unser Modell in Bildern und Videos zu testen . Dafür verwenden wir hier
in diesem Teil
einen Haar-Kaskaden-Klassifizierer , um
das Gesicht im Bild zu erkennen. Und dann haben wir
in diesem Teil hier
die Gesichtsregion aus
dem Bild extrahiert und
die Gesichtsregion zur
Vorhersage mit unserem Modell verbunden. Und schließlich haben wir
das Bild als lächelnd
oder nicht lächelnd bezeichnet .