Path: blob/master/site/ja/lite/examples/style_transfer/overview.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
TensorFlow Lite による芸術的スタイル転移
最近開発されたディープラーニングの中で最も面白い開発の 1 つとして、芸術的スタイル転移または パスティーシュ(模倣)として知られる能力があります。これは芸術的スタイルを表現する画像とコンテンツを表現する画像から成る 2 つの入力画像に基づいて新しい画像を創造するものです。
この手法を使用すると、様々なスタイルの美しく新しい作品を生成することができます。
TensorFlow Lite を初めて使用する場合、Android を使用する場合は、以下のサンプルアプリをご覧ください。
Android や iOS 以外のプラットフォームを使用する場合、または、すでに TensorFlow Lite API に精通している場合は、このチュートリアルに従い、事前トレーニング済みの TensorFlow Lite モデル を使用して、任意のコンテンツ画像とスタイル画像のペアにスタイル転移を適用する方法を学ぶことができます。モデルを使用して、独自のモバイルアプリにスタイル転移を追加することができます。
モデルは GitHub でオープンソース化されています。異なるパラメータを使用してモデルの再トレーニング(例えば、コンテンツレイヤーの重みを増やしてよりコンテンツ画像に近い出力画像にするなど)が可能です。
モデルアーキテクチャの理解
この芸術的スタイル転移モデルは、2 つのサブモデルで構成されています。
スタイル予測モデル: 入力スタイル画像を 100 次元スタイルのボトルネックベクトルに変換する MobilenetV2 ベースのニューラルネットワーク。
スタイル変換モデル: コンテンツ画像にスタイルのボトルネックベクトルを適用し、スタイル化された画像を生成するニューラルネットワーク。
アプリが特定のスタイル画像セットのみをサポートする必要がある場合は、それらのスタイルのボトルネックベクトルを事前に計算して、そのスタイル予測モデルをアプリのバイナリから除外します。
セットアップ
依存関係をインポートします。
コンテンツ画像とスタイル画像、および事前トレーニング済みの TensorFlow Lite モデルをダウンロードします。
入力を前処理する
コンテンツ画像とスタイル画像は RGB 画像である必要があります。ピクセル値は [0..1] 間の float32 の数値です。
スタイル画像のサイズは (1, 256, 256, 3) である必要があります。画像を中央でクロップしてサイズを変更します。
コンテンツ画像は (1, 384, 384, 3) である必要があります。画像を中央でクロップしてサイズを変更します。
入力を可視化する
TensorFlow Lite でスタイル転移を実行する
スタイルを予測する
スタイルを変換する
スタイルをブレンドする
コンテンツ画像のスタイルをスタイル化された出力にブレンドさせることができます。こうすると、出力がよりコンテンツ画像のように見えるようになります。
パフォーマンスベンチマーク
パフォーマンスベンチマークの数値は、ここで説明するツールで生成されます。
モデル名 | モデルサイズ | デバイス | NNAPI | CPU | GPU |
---|---|---|---|---|---|
スタイル予測モデル (int8) | 2.8 Mb | Pixel 3 (Android 10) | 142ms | 14ms* | |
Pixel 4 (Android 10) | 5.2ms | 6.7ms* | |||
iPhone XS (iOS 12.4.1) | 10.7ms** | ||||
スタイル変換モデル (int8) | 0.2 Mb | Pixel 3 (Android 10) | 540ms* | ||
Pixel 4 (Android 10) | 405ms* | ||||
iPhone XS (iOS 12.4.1) | 251ms** | ||||
スタイル予測モデル (float16) | 4.7 Mb | Pixel 3 (Android 10) | 86ms | 28ms* | 9.1ms |
Pixel 4 (Android 10) | 32ms | 12ms* | 10ms | ||
スタイル予測モデル (float16) | 0.4 Mb | Pixel 3 (Android 10) | 1095ms | 545ms* | 42ms |
Pixel 4 (Android 10) | 603ms | 377ms* | 42ms |
** 4 threads used.
* ** 4 つのスレッドを使用。
** 最高のパフォーマンス結果を得るために、iPhone では 2 つのスレッドを使用。*