[PYTHON] Bis pix2 pix-tensorflow von GCML ausgeführt wird

Notieren Sie die Schritte, damit pix2pix-tensorflow, eine TensorFlow-Implementierung von pix2pix, mit Google Cloud Machine Learning (GCML) funktioniert.

Ersetzen Sie die Dateieingabe / -ausgabe durch tf.gfile

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.

wichtiger Punkt

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.

Verpackung

Unterverzeichnis erstellen

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/

wichtiger Punkt

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 setup.py

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'])

Lokaler Betriebstest

Ü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.

Wirf einen Job in die Cloud

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

Überprüfen Sie das Protokoll

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

Kopieren Sie das Ergebnis lokal

Kopiert die lokal im Cloud-Speicher gespeicherten Ergebnisse.

$ cd /your/data/path
$ gsutil cp -r gs://your-bucket/output .

Auswertung

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

pix2pix

Quellcode

https://github.com/knok/pix2pix-tensorflow (gcml-Zweig Baum / gcml)))

Über Ressourcen

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.

von jetzt an

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.

Recommended Posts

Bis pix2 pix-tensorflow von GCML ausgeführt wird
Bis die Sphinx-Dokumentation auf GitHub veröffentlicht wird
Bis die Webanwendung mit Sakura VPS veröffentlicht wird
Führen Sie Django auf PythonAnywhere aus
Führen Sie mysqlclient auf Lambda aus
Führen Sie OpenMVG auf einem Mac aus