20200623のTensorFlowに関する記事は3件です。

Cycle GANをCoreMLモデルに変換

horse2zebra_1.png

*論文:サイクルでつながった敵対的ネットワークを使用するペアになっていない画像から画像への変換

CoreMLに変換することでCycleGAN画像変換をiPhoneアプリで使用できます。

このストーリーでは、TensorFlow CoreのCycleGANチュートリアルモデルを使用します。

最初に、Colaboratoryでチュートリアルモデルをトレーニングします。

colabの以下のセルまでの全てのセルを実行します。

colab
for epoch in range(EPOCHS):
  start = time.time()

  n = 0
  for image_x, image_y in tf.data.Dataset.zip((train_horses, train_zebras)):
    train_step(image_x, image_y)
    if n % 10 == 0:
      print ('.', end='')
    n+=1

  clear_output(wait=True)
  # Using a consistent image (sample_horse) so that the progress of the model
  # is clearly visible.
  generate_images(generator_g, sample_horse)

  if (epoch + 1) % 5 == 0:
    ckpt_save_path = ckpt_manager.save()
    print ('Saving checkpoint for epoch {} at {}'.format(epoch+1,
                                                         ckpt_save_path))

  print ('Time taken for epoch {} is {} sec\n'.format(epoch + 1,
                                                      time.time()-start))

モデルのトレーニングが完了したら、新しいセルを挿入して以下の手順で変換を実行します。

1、TFCoreMLをインストールします。

colab
!pip install --upgrade tfcoreml

2、チェックポイントを復元します。

colab
checkpoint_path = "./checkpoints/train"

ckpt = tf.train.Checkpoint(generator_g=generator_g,
                           generator_f=generator_f,
                           discriminator_x=discriminator_x,
                           discriminator_y=discriminator_y,
                           generator_g_optimizer=generator_g_optimizer,
                           generator_f_optimizer=generator_f_optimizer,
                           discriminator_x_optimizer=discriminator_x_optimizer,
                           discriminator_y_optimizer=discriminator_y_optimizer)

ckpt_manager = tf.train.CheckpointManager(ckpt, checkpoint_path, max_to_keep=5)

# if a checkpoint exists, restore the latest checkpoint.
if ckpt_manager.latest_checkpoint:
  ckpt.restore(ckpt_manager.latest_checkpoint)
  print ('Latest checkpoint restored!!')

3、「saved_model」フォーマットでジェネレータg(これがhorse2zebraジェネレーターです。ジェネレーターfはzebra2horse)を保存します。

colab
generator_g.save './ savedmodel'

4、変換を実行します。

import tfcoreml
input_name = generator.inputs[0].name.split(':')[0]
print(input_name) #Check input_name.
keras_output_node_name = generator_g.outputs[0].name.split(':')[0]
graph_output_node_name = keras_output_node_name.split('/')[-1]
mlmodel = tfcoreml.convert('./savedmodel',
                       input_name_shape_dict={input_name: (1, 256, 256, 3)},
                       output_feature_names=[graph_output_node_name],
                       minimum_ios_deployment_target='13',
                       image_input_names=input_name,
                       image_scale=2/ 255.0,
                       red_bias=-1,
                       green_bias=-1,
                       blue_bias=-1,
                       )
mlmodel.save('./cyclegan.mlmodel')

これで、iOSプロジェクトでCycleGANを使用できます。

import Vision
lazy var coreMLRequest:VNCoreMLRequest = {
   let model = try! VNCoreMLModel(for: cyclegan().model)
   let request = VNCoreMLRequest(model: mode, completionHandler: self.coreMLCompletionHandler0)   
   return request
   }()

let handler = VNImageRequestHandler(ciImage: ciimage,options: [:])   

DispatchQueue.global(qos: .userInitiated).async {   
  try? handler.perform([coreMLRequest])
}

multiArrayを画像として視覚化するには、Hollance氏のCoreML Helpersが非常に便利です。

MultiArrayからImageへの変換 CoreMLHelper

自分でデータセットを用意してトレーニングすれば何2何でも作れます!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TensorFlow2の動作確認用のコードサンプル(非チュートリアル)

インストール直後にやるべき動作確認

TensorFlowをインストールしたあと、動作確認に使うコードのサンプルを紹介します。

  • バージョン確認だけだと、学習させたときにエラーが出ないか、GPUを使っているかなどの確認ができない。
  • チュートリアルだと長過ぎる(というかコピペできるように紹介してない)ことが多い。

ので、簡単な動作確認として、バージョンとGPU確認、最低限の学習をするコードを書いています。

import numpy as np
import tensorflow as tf

print(tf.__version__)

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print("Physical GPUs: {}, Logical GPUs: {}".format(len(gpus), len(logical_gpus)))
else:
    print("CPU only")

x = np.arange(-1, 1, 0.0001)
y = 0.8 * x + 0.2

model = tf.keras.Sequential([tf.keras.layers.Dense(1, activation=None)])
model.compile("sgd", "mse")
model.build(input_shape=(0,1))
model.summary()
model.fit(x, y, epochs=5)

print("ground truth: 0.8, 0.2")
print("estimated: ", model.variables[0][0,0].numpy(), model.variables[1][0].numpy())

バージョンやGPUの情報がTensorFlowのログに紛れて見にくいので、必要に応じて改行とかを入れてください。

dockerを使っていたりすると、GPUの設定を間違えやすいので、GPUが認識されているかはしっかり確認しましょう。
学習中にnvidia-smiでGPUが使われているかの確認もしておきましょう。
学習が始まるとGPU-UtilとMemory-Usageが増えて、学習が終わるとGPU-Utilだけ下がり、Memory-Usageはそのままになるはずです。

学習については、$y = ax + b$の$a(=0.8)$, $b=(0.2)$を線形回帰していて、estimatedとして近い値を求められていればOKです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TensorFlow2の動作確認(非チュートリアル)

インストール直後にやるべき動作確認

TensorFlowをインストールしたあと、動作確認に使うコードのサンプルを紹介します。

  • バージョン確認だけだと、学習させたときにエラーが出ないか、GPUを使っているかなどの確認ができない。
  • チュートリアルだと長過ぎる(というかコピペできるように紹介してない)ことが多い。

ので、簡単な動作確認として、バージョンとGPU確認、最低限の学習をするコードを書いています。

import numpy as np
import tensorflow as tf

print(tf.__version__)

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print("Physical GPUs: {}, Logical GPUs: {}".format(len(gpus), len(logical_gpus)))
else:
    print("CPU only")

x = np.arange(-1, 1, 0.0001)
y = 0.8 * x + 0.2

model = tf.keras.Sequential([tf.keras.layers.Dense(1, activation=None)])
model.compile("sgd", "mse")
model.build(input_shape=(0,1))
model.summary()
model.fit(x, y, epochs=5)

print("ground truth: 0.8, 0.2")
print("estimated: ", model.variables[0][0,0].numpy(), model.variables[1][0].numpy())

バージョンやGPUの情報がTensorFlowのログに紛れて見にくいので、必要に応じて改行とかを入れてください。

dockerを使っていたりすると、GPUの設定を間違えやすいので、GPUが認識されているかはしっかり確認しましょう。
学習中にnvidia-smiでGPUが使われているかの確認もしておきましょう。
学習が始まるとGPU-UtilとMemory-Usageが増えて、学習が終わるとGPU-Utilだけ下がり、Memory-Usageはそのままになるはずです。

学習については、$y = ax + b$の$a(=0.8)$, $b=(0.2)$を線形回帰していて、estimatedとして近い値を求められていればOKです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む