Notieren Sie die Schritte, damit pix2pix-tensorflow, eine TensorFlow-Implementierung von pix2pix, mit Google Cloud Machine Learning (GCML) funktioniert.
Da GCML Dateien in Cloud Storage eingibt und ausgibt, ersetzen Sie Pythons eigene Datei-E / A-bezogene Methoden durch tf.gfile.
diff --git a/pix2pix.py b/pix2pix.py
index 20ba819..3d1b1c2 100644
--- a/pix2pix.py
+++ b/pix2pix.py
@@ -13,6 +13,11 @@ import collections
import math
import time
+os.path.exists = tf.gfile.Exists
+glob.glob = tf.gfile.Glob
+os.makedirs = tf.gfile.MakeDirs
+open = tf.gfile.Open
+
parser = argparse.ArgumentParser()
parser.add_argument("--input_dir", help="path to folder containing images")
parser.add_argument("--mode", required=True, choices=["train", "test", "export"
])
Ich habe mir die Mühe erspart, die Methode im Editor neu zu schreiben, und die vorhandene Methode durch das Äquivalent von tf.gfile ersetzt.
Diesmal gibt es kein Problem mit dem Zielcode, aber wenn Sie beim Öffnen einer neuen Datei mit tf.gfile.Open versuchen, sie mit mode = 'a' zu erstellen, schlägt dies fehl (bestätigt mit 1.0.1.). In diesem Fall muss mode = 'w' gesetzt werden.
Erstellen Sie ein Unterverzeichnis namens task und verschieben Sie den Hauptcode dorthin. Wir benötigen auch eine "\ __ init__.py" -Datei zum Verpacken, also erstellen Sie sie.
$ mkdir task
$ touch task/__init__.py #Leere Datei ist in Ordnung
$ mv pix2pix.py task/
Wenn es nicht mit einem einzelnen Code vollständig ist, muss es geändert werden, um die mit der Verpackung verbundenen Namespace-Änderungen zu berücksichtigen. Wenn sich pix2pix.py auf model.py bezieht, müssen Sie den Teil "Modell importieren" in pix2pix.py durch "Modell aus Aufgabenimport" ersetzen. Dieses Mal wird der Vorgang nur mit pix2pix.py abgeschlossen, sodass dies nicht erforderlich ist.
Erstellen Sie die Datei setup.py, die zum Verpacken benötigt wird.
setup.py
# -*- coding: utf-8 -*-
#
from setuptools import setup
if __name__ == '__main__':
setup(name='task',
packages=['task'])
Überprüfen Sie lokal, ob die geänderten Ergebnisse korrekt funktionieren. Angenommen, der Datensatz wurde bereits heruntergeladen.
$ gcloud ml-engine local train --module-name=task.pix2pix \
--package-path=task/ -- \
--mode train --output_dir /path/to/trained_facades \
--input_dir /path/to/facades/train --max_epochs 200 \
--which_direction BtoA'
aspect_ratio = 1.0
batch_size = 1
beta1 = 0.5
checkpoint = None
display_freq = 0
flip = True
gan_weight = 1.0
input_dir = /path/to/facades/train
l1_weight = 100.0
lab_colorization = False
lr = 0.0002
max_epochs = 200
max_steps = None
mode = train
ndf = 64
ngf = 64
output_dir = /path/to/trained_facades
output_filetype = png
progress_freq = 50
save_freq = 5000
scale_size = 286
seed = 1398609485
summary_freq = 100
trace_freq = 0
which_direction = BtoA
examples count = 400
parameter_count = 57183616
progress epoch 1 step 50 image/sec 0.3 remaining 4224m
discrim_loss 0.573411
gen_loss_GAN 0.376408
gen_loss_L1 0.146523
Wenn die Ausgabe des Fortschritts ausgegeben wird, kann davon ausgegangen werden, dass sie gut funktioniert.
Sie müssen lediglich den eigentlichen Auftrag einreichen. Es wird davon ausgegangen, dass sich der Bucket und die Trainingsdaten bereits im Cloud-Speicher befinden.
$ gcloud ml-engine jobs submit training pix2pix_1 \
--module-name=task.pix2pix \
--staging-bucket gs://your-bucket \
--region us-central1 \
--scale-tier BASIC_GPU \ #Verwenden Sie eine GPU-Instanz
--package-path=task/ -- \
--mode train --output_dir gs://your-bucket/output \
--input_dir gs://your-bucket/facades/train \
--max_epochs 200 --which_direction BtoA
Job [pix2pix_1] submitted successfully.
Your job is still active. You may view the status of your job with the command
$ gcloud ml-engine jobs describe pix2pix_1
or continue streaming the logs with the command
$ gcloud ml-engine jobs stream-logs pix2pix_1
jobId: pix2pix_1
state: QUEUED
Wie Sie in der obigen Ausgabe sehen können, können Sie das Protokoll anzeigen, indem Sie den Befehl glow ausführen. Warten wir, bis es fertig ist.
$ gcloud ml-engine jobs stream-logs pix2pix_1
(Unterlassung)
INFO 2017-05-18 18:11:39 +0900 master-replica-0 progress
epoch 25 step 200 image/sec 4.7 remaining 248m
INFO 2017-05-18 18:11:39 +0900 master-replica-0 discrim_
loss 0.648207
INFO 2017-05-18 18:11:39 +0900 master-replica-0 gen_loss
_GAN 2.13424
INFO 2017-05-18 18:11:39 +0900 master-replica-0 gen_loss_L1 0.318083
INFO 2017-05-18 18:11:39 +0900 master-replica-0 progress epoch 25 step 250 image/sec 4.7 remaining 247m
Kopiert die lokal im Cloud-Speicher gespeicherten Ergebnisse.
$ cd /your/data/path
$ gsutil cp -r gs://your-bucket/output .
Verarbeiten Sie die Bewertungsdaten, um die Ergebnisse anzuzeigen.
$ python task/pix2pix.py --mode test \
--checkpoint /your/data/path/output \
--input_dir /path/to/facades/val \
--output_dir /your/data/path/test
$ firefox /your/data/path/test/index.html
https://github.com/knok/pix2pix-tensorflow (gcml-Zweig Baum / gcml)))
Der Vorgang dauerte ca. 5 Stunden. Die Zahlung beträgt ca. 800 Yen. Diesmal war der Inhalt sehr klein, 400 Datenblätter, aber bei anderen Datensätzen, wie z. B. edge2shoes, gibt es ungefähr 50.000 Bilder, sodass die Kosten voraussichtlich mehr als zehnmal höher sind.
Da der auf dieser Zeit basierende Code gemäß der Methode geschrieben wird, ist eine parallele Ausführung in GCML mit wenigen Änderungen möglich. Ich werde darüber schreiben, wie es geht.