Dieses Projekt zielt darauf ab, den Prozess des Erstellens eines benutzerdefinierten Deepdream -Modells mithilfe von vorbereiteten Googlenet -Modellen und benutzerdefinierten Bilddatensätzen zu vereinfachen.
Hier sind einige Beispielvisualisierungen, die mit benutzerdefinierten Deepdream -Modellen erstellt wurden, die auf Sommermotivbildern trainiert wurden:
Abhängigkeiten:
In der Installationshandbuch finden Sie detaillierte Installationsanweisungen für Ubuntu und Windows.
Nachdem Sie sichergestellt haben, dass Pytorch installiert ist, können Sie die Places365 -Googlenet- und Inception5H -Modelle (Inceptionv1) mit dem folgenden Befehl optional herunterladen:
python models/download_models.py
Wenn Sie nur Deepdreams mit den vorbereiteten Modellen erstellen möchten oder ein vorgezogenes Modell von jemand anderem mit Traumkreator heruntergeladen haben, können Sie voranfahren, um Modelle zu visualisieren.
Erstellen und vorbereiten Sie Ihren Datensatz
Bilder sammeln
Sortieren Sie Bilder in das erforderliche Format.
Entfernen Sie alle beschädigten Bilder.
Stellen Sie sicher, dass Duplikate entfernt werden, wenn Sie dies noch nicht getan haben
Größen Sie die Größe des Datensatzes, um das Training zu beschleunigen.
Berechnen Sie den Mittelwert und die Standardabweichung Ihres Datensatzes.
Trainieren Sie ein Googlenet -Modell
Visualisieren Sie die Ergebnisse
Wenn die Ergebnisse nicht großartig sind, müssen Sie möglicherweise zu Schritt 1-2 zurückkehren und einige Änderungen anhand der Verwendung von Bildern, Kategorien und Trainingsparametern vornehmen.
Es kann nur 5 Epochen dauern, um Visualisierungen zu erstellen, die Ihren Trainingsdaten mithilfe der Hauptschicht FC/Logits ähneln. Um das Training zu beschleunigen und besser aussehende Ergebnisse zu erzielen, ist das vorgezogene BVLC -Modell teilweise eingefroren, um die unteren Schichten vor der Änderung zu schützen.
Um ein benutzerdefiniertes Deepdream -Modell zu trainieren, müssen Sie einen Datensatz erstellen, der aus Bildern besteht, die Sie für das Training verwenden möchten. Es gibt eine Vielzahl von Möglichkeiten, wie Sie Bilder für Ihren Datensatz aufnehmen können, und Sie benötigen mindestens ein paar hundert Bilder für jede Kategorie/Klasse.
Deepdream wird am häufigsten mit Bildklassifizierungsmodellen durchgeführt, die auf Bilddatensätzen trainiert werden, die aus verschiedenen Kategorien/Klassen bestehen. Bildklassifizierungsmodelle versuchen, den Unterschied zwischen verschiedenen Bildklassen zu erlernen, und dabei erlangen die Neuronen die Fähigkeit, traumähnliche Halluzinationen zu schaffen. Die von Ihnen ausgewählten Bilder, die Unterschiede zwischen ihnen, die Unterschiede zwischen Ihren gewählten Klassen und die Anzahl der verwendeten Bilder wirken sich stark auf die Visualisierungen aus, die erzeugt werden können.
Pytorch -Bilddatensätze sollen strukturiert werden, wobei das Hauptverzeichnis/der Ordner Unterordner/Verzeichnisse für jede Kategorie/Klasse enthält. Nachfolgend wird ein Beispiel für die erforderliche Datensatzstruktur angezeigt:
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
Stellen Sie nach dem Erstellen Ihres Datensatzes im richtigen Format sicher, dass Sie doppelte Bilder entfernen, wenn Sie dies noch nicht getan haben. Es gibt eine Vielzahl von Tools, die Sie für diese Aufgabe verwenden können, einschließlich kostenloser und Open -Source -Software.
Wenn Sie dies noch nicht getan haben, möchten Sie möglicherweise eine Sicherungskopie Ihres Datensatzes erstellen.
Als nächstes müssen Sie überprüfen, ob keiner der Bilder so korrupt ist, dass Pytorch sie daran hindert, sie zu laden. Verwenden Sie den folgenden Befehl, um automatisch beschädigte Bilder aus Ihrem Datensatz zu entfernen:
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
Als nächstes möchten Sie wahrscheinlich die Größe Ihres Datensatzes ändern, um näher an der Schulungsbildgröße zu sein, um das Training zu beschleunigen. Durch die Größe Ihres Datensatzes wird Sie nicht daran hindern, größere Deepdream -Bilder mit dem resultierenden Modell zu erstellen. Das mitgelieferte Skriptkript wird nur Bilder ändern, die über die angegebene Bildgröße mit ihrer Höhe oder Breite liegen.
Verwenden Sie den folgenden Befehl, um die Bilder in Ihrem Datensatz zu ändern:
python data_tools/resize_data.py -data_path <training_data> -max_size 500
Jetzt können Sie mit Ihrem neu vergrößerten Datensatz den Mittelwert und die Standardabweichung Ihres Datensatzes für das Training und das Deepdreaming berechnen. Stellen Sie sicher, dass Sie den Mittelwert und die Standardabweichung erneut berechnen, wenn Sie den Datensatz durch Hinzufügen oder Entfernen von Bildern ändern.
Verwenden Sie den folgenden Befehl, um den Mittelwert und die Standardabweichung Ihres Datensatzes zu berechnen und die Ausgabe für den nächsten Schritt zu speichern:
python data_tools/calc_ms.py -data_path <training_data>
Jetzt können Sie Ihr Deepdream -Modell mit dem Ausführen des Googlenet -Trainingsskripts ausbilden. Es wird empfohlen, das Modell alle 5-10 Epochen zu speichern, um die Qualität der Visualisierungen zu überwachen.
Nach dem Training Ihrer Modelle können Sie ihnen eine Farbkorrelationsmatrix hinzufügen, um mit dem folgenden Befehl eine Farbdektorrelation zu erhalten:
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
Grundausbildungsbefehl:
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
Eingaboptionen:
-data_path
: Pfad zum Dataset -Verzeichnis/-ordner, den Sie verwenden möchten.-data_mean
: Ihre vorgebaute Liste der Mittelwerte für Ihren ausgewählten Datensatz.-data_sd
: Ihre vorgebaute Liste der Standardabweichungswerte für Ihren ausgewählten Datensatz.Trainingsoptionen:
-num_epochs
: Die Anzahl der zu verwendenden Trainings -Epochen. Standard ist 120
.-batch_size
: Die Anzahl der Trainings- und Validierungsbilder, die gleichzeitig das Netzwerk durchführen sollen. Standard ist 32
.-learning_rate
: Lernrate für den Adam- oder SGD -Optimierer. Standard ist 1e-2
.-optimizer
: Der zu verwendende Optimierungsalgorithmus; entweder sgd
oder adam
; Standard ist sgd
.-train_workers
: Wie viele Arbeiter für das Training verwenden. Standard ist 0
.-val_workers
: Wie viele Arbeitnehmer zur Validierung verwenden. Standard ist 0
.-balance_classes
: Das Aktivieren dieses Flags basiert das Training für jede Klasse basierend auf der Klassengröße aus.Modelloptionen:
-model_file
: Pfad zur .pth
-Modelldatei, die für das Startmodell verwendet werden soll. Standard ist das BVLC -Googlenet -Modell.-freeze_to
: Welche Ebene zum Einfrieren des Modells bis zu; Eine von none
, conv1
, conv2
, conv3
, mixed3a
, mixed3b
, mixed4a
, mixed4b
, mixed4c
, mixed4d
, mixed4e
, mixed5a
oder mixed5b
. Standard ist mixed3b
.-freeze_aux1_to
Eine von none
, loss_conv
, loss_fc
oder loss_classifier
. Standard ist none
.-freeze_aux2_to
: Welche Ebene zum Einfrieren des zweiten Auxiliary -Zweigs bis zu; Eine von none
, loss_conv
, loss_fc
oder loss_classifier
. Standard ist none
.-delete_branches
: Wenn dieses Flag aktiviert ist, werden im Modell keine Hilfszweige verwendet.Ausgabeoptionen:
-save_epoch
: Speichern Sie das Modell jeder save_epoch
-Epochen. Standard ist 10
. Setzen Sie auf 0
um das Speichern von Zwischenmodellen zu deaktivieren.-output_name
: Name des Ausgabemodells. Standard ist bvlc_out.pth
.-individual_acc
: Das Aktivieren dieses Flags druckt die individuelle Genauigkeit jeder Klasse.-save_csv
: Das Aktivieren dieses Flags speichert Verlust- und Genauigkeitsdaten in TXT -Dateien.-csv_dir
: Wo speichern CSV -Dateien. Der Standardwert wird auf das aktuelle Arbeitsverzeichnis gesetzt.Andere Optionen:
-use_device
: Null-Indexed-ID der GPU zu verwenden plus cuda:
. Standard ist cuda:0
.-seed
: Ein ganzzahliger Wert, den Sie für wiederholbare Ergebnisse angeben können. Standardmäßig ist dieser Wert für jeden Lauf zufällig.Datensatzoptionen:
-val_percent
: Der Prozentsatz der Bilder aus jeder Klasse, die zur Validierung verwendet werden sollen. Die Standardeinstellung ist 0.2
.Nach dem Training eines neuen Deepdream -Modells müssen Sie die Visualisierungen testen. Die besten Visualisierungen finden sich in der Hauptschicht FC, auch als "Logits" -Schicht bezeichnet. Dieses Skript hilft Ihnen dabei, alle Kanäle einer bestimmten Ebene in einem bestimmten Modell für eine bestimmte Modell -Epoche schnell und einfach zu visualisieren, indem Sie für jeden Kanal ein separates Bild erstellen.
Eingaboptionen:
-model_file
: Pfad zum vorgebliebenen Googlenet -Modell, das Sie verwenden möchten.-learning_rate
: Lernrate für den Adam- oder L-BFGS-Optimierer. Standard ist 1.5
.-optimizer
: Der zu verwendende Optimierungsalgorithmus; entweder lbfgs
oder adam
; Standard ist adam
.-num_iterations
: Standard ist 500
.-layer
: Die spezifische Ebene, die Sie verwenden möchten. Standard wird auf fc
gesetzt.-extract_neuron
: Wenn dieses Flag aktiviert ist, wird das Mittelneuron aus jedem Kanal extrahiert.-image_size
: Eine von der Kommas getrennte Liste von <height>,<width>
für das Ausgabebild. Der Standard ist auf 224,224
festgelegt.-jitter
: Die Menge an Bildjitter, die für die Vorverarbeitung verwendet werden soll. Standard ist 16
.-fft_decorrelation
: Ob Sie eine räumliche Dekorrelation verwenden oder nicht. Wenn dies aktiviert ist, sollte eine niedrigere Lernrate verwendet werden.-color_decorrelation
: Ob Sie eine Farbdektorrelation verwenden oder nicht. Geben Sie optional eine mit Kommas getrennte Liste von Werten für die Farbkorrelationsmatrix an. Wenn keine Werte bereitgestellt werden, wird ein Versuch, eine Farbkorrelationsmatrix aus der Modelldatei zu laden, vor der Definition der Bildnutzungs -Korrelationsmatrix durchgeführt.-random_scale
: Ob zufällige Skalierung verwendet werden oder nicht. Geben Sie optional eine mit Kommas getrennte Liste von Werten an, damit die Skalen zufällig ausgewählt werden können. Wenn keine Werte bereitgestellt werden, werden Skalen aus der folgenden Liste zufällig ausgewählt: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: Ob zufällige Rotationen verwenden oder nicht. Geben Sie optional eine von der Kommas getrennte Liste der Gradwerte an, damit die Rotationen zufällig aus ausgewählten oder einen einzelnen Wert für die zufällige Auswahl von Grad aus [-value, value]
verwendet werden können. Wenn keine Werte bereitgestellt werden, wird ein Bereich von [-5, 5]
verwendet.-padding
: Die Menge an Polsterung, die vor zufälligen Skalierungen und zufälligen Rotationen verwendet werden soll, um Kantenartefakte zu verhindern. Die Polsterung wird dann nach den Transformationen entfernt. Standard ist auf 0
gesetzt, um es zu deaktivieren.Verarbeitungsoptionen:
-batch_size
: Wie viele Kanalvisualisierungsbilder in jeder Charge erstellen. Standard ist 10
.-start_channel
: Welchen Kanal zum Erstellen von Visualisierungsbildern bei. Standard ist 0
.-end_channel
: Welcher Kanal zum Erstellen von Visualisierungsbildern bei der Erstellung von Visualisierungsbildern bei. Die Standardeinstellung wird für alle Kanäle auf -1
gesetzt.Nur erforderlich, wenn das Modell sie nicht enthält, Optionen :
-model_epoch
: Die Trainings -Epoche, aus der das Modell gespeichert wurde, um für die Ausgabebildnamen zu verwenden. Standard ist 120
.-data_mean
: Ihre vorgebaute Liste der Mittelwerte, mit denen das Modell trainiert wurde, wenn sie nicht im Modell gespeichert wurden.-num_classes
: Die Anzahl der Klassen, an denen das Modell trainiert wurde. Standard ist 120
.Ausgabeoptionen :
-output_dir
: Wo speichern Ausgabebilder. Standard wird auf das aktuelle Arbeitsverzeichnis eingestellt.-print_iter
: Drucken Sie Fortschritte bei jeder print_iter
-Iterationen. Auf 0
einstellen, um den Druck zu deaktivieren.-save_iter
: Speichern Sie die Bilder bei jeder save_iter
-Iterationen. Der Standardwert ist 0
, um das Speichern von Zwischenergebnissen zu deaktivieren.Andere Optionen:
-use_device
: Null-Indexed-ID der GPU zu verwenden plus cuda:
. Standard ist cuda:0
.-seed
: Ein ganzzahliger Wert, den Sie für wiederholbare Ergebnisse angeben können. Standardmäßig ist dieser Wert für jeden Lauf zufällig.Basic FC (Logits) Layer Visualisierung:
python vis_multi.py -model_file <bvlc_out120>.pth
Erweiterte FC (Logits) Layer Visualisierung:
python vis_multi.py -model_file <bvlc_out120>.pth -layer fc -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -output_dir <output_dir> -padding 16 -jitter 16,8
Mit diesem Skript können Sie Deepdream Halluzinationen mit ausgebildeten Googlenet -Modellen erstellen.
Eingaboptionen:
-model_file
: Pfad zum vorgebliebenen Googlenet -Modell, das Sie verwenden möchten.-learning_rate
: Lernrate für den Adam- oder L-BFGS-Optimierer. Standard ist 1.5
.-optimizer
: Der zu verwendende Optimierungsalgorithmus; entweder lbfgs
oder adam
; Standard ist adam
.-num_iterations
: Standard ist 500
.-content_image
: Pfad zu Ihrem Eingabebild. Wenn kein Eingangsbild angegeben ist, wird stattdessen zufälliges Rauschen verwendet.-layer
: Die spezifische Ebene, die Sie verwenden möchten. Standard ist auf mixed5a
gesetzt.-channel
: Der spezifische Schichtkanal, den Sie verwenden möchten. Der Standardwert wird auf -1
gesetzt, um die spezifische Kanalauswahl zu deaktivieren.-extract_neuron
: Wenn dieses Flag aktiviert ist, wird das Center -Neuron aus dem Kanal extrahiert, der durch den -channel
-Parameter ausgewählt wird.-image_size
: Eine von der Kommas getrennte Liste von <height>,<width>
für das Ausgabebild. Wenn ein einzelner Wert für die maximale Seitenlänge zusammen mit einem Inhaltsbild bereitgestellt wird, wird die minimale Seitenlänge automatisch berechnet. Der Standard ist auf 224,224
festgelegt.-jitter
: Die Menge an Bildjitter, die für die Vorverarbeitung verwendet werden soll. Standard ist 16
.-fft_decorrelation
: Ob Sie eine räumliche Dekorrelation verwenden oder nicht. Wenn dies aktiviert ist, sollte eine niedrigere Lernrate verwendet werden.-color_decorrelation
: Ob Sie eine Farbdektorrelation verwenden oder nicht. Geben Sie optional eine mit Kommas getrennte Liste von Werten für die Farbkorrelationsmatrix an. Wenn keine Werte bereitgestellt werden, wird ein Versuch, eine Farbkorrelationsmatrix aus der Modelldatei zu laden, vor der Definition der Bildnutzungs -Korrelationsmatrix durchgeführt.-random_scale
: Ob zufällige Skalierung verwendet werden oder nicht. Geben Sie optional eine mit Kommas getrennte Liste von Werten an, damit die Skalen zufällig ausgewählt werden können. Wenn keine Werte bereitgestellt werden, werden Skalen aus der folgenden Liste zufällig ausgewählt: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: Ob zufällige Rotationen verwenden oder nicht. Geben Sie optional eine von der Kommas getrennte Liste der Gradwerte an, damit die Rotationen zufällig aus ausgewählten oder einen einzelnen Wert für die zufällige Auswahl von Grad aus [-value, value]
verwendet werden können. Wenn keine Werte bereitgestellt werden, wird ein Bereich von [-5, 5]
verwendet.-padding
: Die Menge an Polsterung, die vor zufälligen Skalierungen und zufälligen Rotationen verwendet werden soll, um Kantenartefakte zu verhindern. Die Polsterung wird dann nach den Transformationen entfernt. Standard ist auf 0
gesetzt, um es zu deaktivieren.-layer_vis
: Ob Sie die Visualisierung von Deepdream oder Richtungen verwenden, wenn Sie bestimmte Ebenenkanäle nicht visualisieren. Eine von deepdream
oder direction
; Standard ist deepdream
.Nur erforderlich, wenn das Modell sie nicht enthält, Optionen :
-data_mean
: Ihre vorgebaute Liste der Mittelwerte, mit denen das Modell trainiert wurde, wenn sie nicht im Modell gespeichert wurden.-num_classes
: Die Anzahl der Klassen, an denen das Modell trainiert wurde, wenn es nicht im Modell gespeichert wurde.Ausgabeoptionen :
-output_image
: Name des Ausgabebildes. Standard ist out.png
.-print_iter
: Drucken Sie Fortschritte bei jeder print_iter
-Iterationen. Auf 0
einstellen, um den Druck zu deaktivieren.-save_iter
: Speichern Sie die Bilder bei jeder save_iter
-Iterationen. Der Standardwert ist 0
, um das Speichern von Zwischenergebnissen zu deaktivieren.Fliesenoptionen:
-tile_size
: Die gewünschte Fliesengröße zu verwenden. Entweder eine Komma -getrennte Liste von <height>,<width>
oder ein einzelner Wert, der sowohl für die Fliesenhöhe als auch für die Breite verwendet werden soll. Der Standardwert wird auf 0
gesetzt, um das Fliesen zu deaktivieren.-tile_overlap
: Der Prozentsatz der Überlappung, die für die Kacheln verwendet werden soll. Die Standardeinstellung ist 25
für 25%. Überlappungsprozentsätze über 50% führen zu Problemen.-tile_iter
: Standard ist 50
.Andere Optionen:
-use_device
: Null-Indexed-ID der GPU zu verwenden plus cuda:
. Standard ist cuda:0
.-seed
: Ein ganzzahliger Wert, den Sie für wiederholbare Ergebnisse angeben können. Standardmäßig ist dieser Wert für jeden Lauf zufällig.Basic Deepdream:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
Fortgeschrittener Deepdream:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a/conv_5x5_relu -channel 9 -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -padding 16 -jitter 16,8
Weitere Informationen zu allen enthaltenen Skripten/Tools in Bezug auf Datensatzerstellung, Reinigung und Vorbereitung finden Sie hier.