このプロジェクトは、前処理されたGoogleNetモデルとカスタム画像データセットを使用して、カスタムディープドリームモデルを作成するプロセスを簡素化することを目的としています。
夏をテーマにした画像でトレーニングされたカスタムディープドリームモデルで作成された視覚化の例を次に示します。
依存関係:
インストールガイドには、UbuntuとWindowsの詳細なインストール手順を見つけることができます。
Pytorchがインストールされていることを確認した後、オプションでPlaces365 GoogleNetとInception5H(InceptionV1)の前処理モデルを次のコマンドでダウンロードできます。
python models/download_models.py
前提条件のモデルでDeepDreamsを作成したい場合、または夢の作成者と一緒に他の誰かが作成した前提型モデルをダウンロードした場合は、モデルを視覚化するために前進することができます。
データセットを作成して準備します
画像を収集します
画像を必要な形式に並べ替えます。
破損した画像を削除します。
あなたがまだそうしていない場合は、複製が削除されていることを確認してください
データセットのサイズを変更して、トレーニングを高速化します。
データセットの平均と標準偏差を計算します。
GoogleNetモデルをトレーニングします
結果を視覚化します
結果が大きくない場合は、ステップ1-2に戻り、どの画像、カテゴリ、トレーニングパラメーターが使用されるかについていくつかの変更を加える必要がある場合があります。
メインFC/ロジッツレイヤーを使用してトレーニングデータに似た視覚化を作成するには、わずか5エポックかかります。トレーニングをスピードアップし、見栄えの良い結果を生み出すために、使用される前提条件のBVLCモデルは、下層層の変化を防ぐために部分的に凍結されています。
カスタムディープドリームモデルをトレーニングするには、トレーニングに使用する画像で構成されるデータセットを作成する必要があります。データセットに画像を理まかめることができるさまざまな方法があり、各カテゴリ/クラスに少なくとも数百の画像が必要になります。
DeepDreamは、ほとんどの場合、さまざまなカテゴリ/クラスで構成される画像データセットでトレーニングされた画像分類モデルで実行されます。画像分類モデルは、異なる画像クラスの違いを学習しようとします。そうすることで、ニューロンは夢のような幻覚を作成する能力を獲得します。選択した画像、それらの違い、選択したクラスの違い、および使用される画像の数は、生成できる視覚化に大きく影響します。
Pytorch画像データセットは、メインディレクトリ/フォルダーに各カテゴリ/クラスのサブフォルダー/ディレクトリが含まれる場合に構成されます。必要なデータセット構造の例を示します。
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
適切な形式でデータセットを作成したら、まだ行っていない場合は、複製画像を削除してください。無料およびオープンソースソフトウェアなど、このタスクに使用できるさまざまなツールがあります。
まだ行っていない場合は、データセットのバックアップコピーを作成することをお勧めします。
次に、Pytorchがそれらをロードするのを防ぐような方法で画像が破損していないことを確認する必要があります。データセットから破損した画像を自動的に削除するには、次のコマンドを使用します。
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
次に、トレーニングをスピードアップするために、トレーニングの画像サイズに近づくようにデータセットのサイズを変更することをお勧めします。データセットのサイズを変更しても、結果のモデルを使用して、より大きなDeepdream画像を作成することはできません。含まれているサイズ変更スクリプトは、高さまたは幅で指定された画像サイズを超える画像のみを変更します。
データセット内の画像のサイズを変更するには、次のコマンドを使用します。
python data_tools/resize_data.py -data_path <training_data> -max_size 500
新しくサイズ変更されたデータセットを使用すると、トレーニングで使用するためにデータセットの平均と標準偏差を計算できます。画像を追加または削除してデータセットを変更する場合は、平均と標準偏差を再計算してください。
データセットの平均と標準偏差を計算するには、次のコマンドを使用して、次のステップに出力を保存します。
python data_tools/calc_ms.py -data_path <training_data>
これで、GoogleNetトレーニングスクリプトを実行して、DeepDreamモデルのトレーニングを開始できます。視覚化の品質を監視するために、5〜10エポックごとにモデルを保存することをお勧めします。
モデルをトレーニングした後、次のコマンドを使用して色の逆レレーションのために色相関マトリックスを追加できます。
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
基本トレーニングコマンド:
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
入力オプション:
-data_path
:使用するデータセットディレクトリ/フォルダーへのパス。-data_mean
:選択したデータセットの平均値の前計算リスト。-data_sd
:選択したデータセットの標準偏差値の事前に計算されたリスト。トレーニングオプション:
-num_epochs
:使用するトレーニングエポックの数。デフォルトは120
です。-batch_size
:同時にネットワークを通過するトレーニングと検証画像の数。デフォルトは32
です。-learning_rate
:AdamまたはSGD Optimizerで使用する学習率。デフォルトは1e-2
です。-optimizer
:使用する最適化アルゴリズム。 sgd
またはadam
いずれか。デフォルトはsgd
です。-train_workers
:トレーニングに使用する労働者の数。デフォルトは0
です。-val_workers
:検証に使用する労働者の数。デフォルトは0
です。-balance_classes
:このフラグを有効にすると、クラスのサイズに基づいて各クラスのトレーニングのバランスが取れます。モデルオプション:
-model_file
:開始モデルに使用する.pth
モデルファイルへのパス。デフォルトはBVLC GoogleNetモデルです。-freeze_to
:モデルをフリーズするためのレイヤー。 none
つは、 conv1
、 conv2
、 conv3
、 mixed3a
、 mixed3b
、 mixed4a
、 mixed4b
、 mixed4c
、 mixed4d
、 mixed4e
、 mixed5a
、またはmixed5b
。デフォルトはmixed3b
です。-freeze_aux1_to
:最初の補助ブランチを凍結するためのレイヤー。 none
、 loss_conv
、 loss_fc
、またはloss_classifier
の1つです。デフォルトはnone
です。-freeze_aux2_to
:2番目の補助ブランチを凍結するためのレイヤー。 none
、 loss_conv
、 loss_fc
、またはloss_classifier
の1つです。デフォルトはnone
です。-delete_branches
:このフラグが有効になっている場合、モデルでは補助ブランチは使用されません。出力オプション:
-save_epoch
:モデルを保存してください。すべてのsave_epoch
エポック。デフォルトは10
です。 0
に設定して、中間モデルを保存することを無効にします。-output_name
:出力モデルの名前。デフォルトはbvlc_out.pth
です。-individual_acc
:このフラグを有効にすると、各クラスの個々の精度が印刷されます。-save_csv
:このフラグを有効にすると、TXTファイルに損失と精度のデータが節約されます。-csv_dir
:CSVファイルを保存する場所。デフォルトは現在の作業ディレクトリに設定されています。その他のオプション:
-use_device
:gpuのゼロインデックス付きIDを使用して、プラスcuda:
デフォルトはcuda:0
です。-seed
:繰り返し可能な結果を指定できる整数値。デフォルトでは、この値は実行ごとにランダムです。データセットオプション:
-val_percent
:検証に使用する各クラスの画像の割合。デフォルトは0.2
です。新しいDeepdreamモデルをトレーニングした後、視覚化をテストする必要があります。最良の視覚化は、「ロジット」層としても知られるメインFC層にあります。このスクリプトは、各チャネルに個別の画像を生成することにより、特定のモデルエポックの特定のモデルの指定されたレイヤーのすべてのチャネルを迅速かつ簡単に視覚化するのに役立ちます。
入力オプション:
-model_file
:使用したい前提条件のGoogleNetモデルへのパス。-learning_rate
:AdamまたはL-BFGS Optimizerで使用する学習率。デフォルトは1.5
です。-optimizer
:使用する最適化アルゴリズム。 lbfgs
またはadam
いずれか。デフォルトはadam
です。-num_iterations
:デフォルトは500
です。-layer
:使用する特定のレイヤー。デフォルトはfc
に設定されています。-extract_neuron
:このフラグが有効になっている場合、中心ニューロンは各チャネルから抽出されます。-image_size
:出力画像に使用する<height>,<width>
のコンマ分離リスト。デフォルトは224,224
に設定されています。-jitter
:プリプロセシングに使用する画像ジッターの量。デフォルトは16
です。-fft_decorrelation
:FFT空間分離を使用するかどうか。有効にすると、より低い学習率を使用する必要があります。-color_decorrelation
:色の切り相関を使用するかどうか。オプションで、色相関マトリックスの値のコンマ分離リストを提供します。値が提供されていない場合、モデルファイルから色相関マトリックスをロードしようとする試みは、イメージネットカラー相関マトリックスにデフォルトする前に行われます。-random_scale
:ランダムスケーリングを使用するかどうか。オプションで、スケールの値の分離された値のリストをランダムに選択する。値が提供されていない場合、次のリストからスケールがランダムに選択されます: 1, 0.975, 1.025, 0.95, 1.05
。-random_rotation
:ランダム回転を使用するかどうか。オプションでは[-value, value]
からランダムに選択するために使用する回転をランダムに選択する回転の次数値のコンマ分離リストを提供します。値が提供されていない場合、 [-5, 5]
の範囲が使用されます。-padding
:ランダムなスケーリングとランダム回転の前に使用するパディングの量と、エッジアーティファクトを防ぐ。その後、パディングは変換後に削除されます。デフォルトは0
に設定されています。処理オプション:
-batch_size
:各バッチで作成するチャネル視覚化画像の数。デフォルトは10
です。-start_channel
:視覚化画像の作成を開始するチャネル。デフォルトは0
です。-end_channel
:視覚化画像の作成を停止するチャネル。デフォルトは、すべてのチャネルで-1
に設定されています。モデルが含まれていない場合にのみ必要です、オプション:
-model_epoch
:モデルが保存されたトレーニングエポックは、出力画像名に使用します。デフォルトは120
です。-data_mean
:モデル内で保存されていない場合、モデルのトレーニングに使用された平均値の事前に計算されたリストのリスト。-num_classes
:モデルがトレーニングされたクラスの数。デフォルトは120
です。出力オプション:
-output_dir
:出力画像を保存する場所。デフォルトは現在の作業ディレクトリに設定されています。-print_iter
:printの進行状況すべてのprint_iter
iterations。印刷を無効にするために0
に設定します。-save_iter
:すべてのsave_iter
Iterationsすべての画像を保存します。デフォルトは0
になり、中間結果の保存を無効にします。その他のオプション:
-use_device
:gpuのゼロインデックス付きIDを使用して、プラスcuda:
デフォルトはcuda:0
です。-seed
:繰り返し可能な結果を指定できる整数値。デフォルトでは、この値は実行ごとにランダムです。基本的なFC(ロジット)レイヤー視覚化:
python vis_multi.py -model_file <bvlc_out120>.pth
高度なFC(ロジット)レイヤー視覚化:
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
このスクリプトを使用すると、訓練されたGoogleNetモデルを使用してDeepdreamの幻覚を作成できます。
入力オプション:
-model_file
:使用したい前提条件のGoogleNetモデルへのパス。-learning_rate
:AdamまたはL-BFGS Optimizerで使用する学習率。デフォルトは1.5
です。-optimizer
:使用する最適化アルゴリズム。 lbfgs
またはadam
いずれか。デフォルトはadam
です。-num_iterations
:デフォルトは500
です。-content_image
:入力画像へのパス。入力画像が指定されていない場合、代わりにランダムノイズが使用されます。-layer
:使用する特定のレイヤー。デフォルトはmixed5a
に設定されています。-channel
:使用する特定のレイヤーチャネル。デフォルトは、特定のチャネル選択を無効にするために-1
に設定されています。-extract_neuron
:このフラグが有効になっている場合、中心ニューロンは、 -channel
パラメーターで選択されたチャネルから抽出されます。-image_size
:出力画像に使用する<height>,<width>
のコンマ分離リスト。コンテンツ画像とともに最大側の長さの単一の値が提供される場合、最小側の長さは自動的に計算されます。デフォルトは224,224
に設定されています。-jitter
:プリプロセシングに使用する画像ジッターの量。デフォルトは16
です。-fft_decorrelation
:FFT空間分離を使用するかどうか。有効にすると、より低い学習率を使用する必要があります。-color_decorrelation
:色の切り相関を使用するかどうか。オプションで、色相関マトリックスの値のコンマ分離リストを提供します。値が提供されていない場合、モデルファイルから色相関マトリックスをロードしようとする試みは、イメージネットカラー相関マトリックスにデフォルトする前に行われます。-random_scale
:ランダムスケーリングを使用するかどうか。オプションで、スケールの値の分離された値のリストをランダムに選択する。値が提供されていない場合、次のリストからスケールがランダムに選択されます: 1, 0.975, 1.025, 0.95, 1.05
。-random_rotation
:ランダム回転を使用するかどうか。オプションでは[-value, value]
からランダムに選択するために使用する回転をランダムに選択する回転の次数値のコンマ分離リストを提供します。値が提供されていない場合、 [-5, 5]
の範囲が使用されます。-padding
:ランダムなスケーリングとランダム回転の前に使用するパディングの量と、エッジアーティファクトを防ぐ。その後、パディングは変換後に削除されます。デフォルトは0
に設定されています。-layer_vis
:特定のレイヤーチャネルを視覚化しないときに、DeepDreamまたは方向の視覚化を使用するかどうか。 deepdream
またはdirection
の1つ。デフォルトはdeepdream
です。モデルが含まれていない場合にのみ必要です、オプション:
-data_mean
:モデル内で保存されていない場合、モデルのトレーニングに使用された平均値の事前に計算されたリストのリスト。-num_classes
:モデル内で保存されていない場合、モデルがトレーニングされたクラスの数。出力オプション:
-output_image
:出力画像の名前。デフォルトはout.png
です。-print_iter
:printの進行状況すべてのprint_iter
iterations。印刷を無効にするために0
に設定します。-save_iter
:すべてのsave_iter
Iterationsすべての画像を保存します。デフォルトは0
になり、中間結果の保存を無効にします。タイルオプション:
-tile_size
:使用する目的のタイルサイズ。タイルの高さと幅の両方に使用する<height>,<width>
のリスト、または単一の値のいずれか。タイルを無効にするためにデフォルトが0
に設定されています。-tile_overlap
:タイルに使用するオーバーラップの割合。デフォルトは25%のオーバーラップで25
です。 50%を超える割合の重複は、問題を引き起こします。-tile_iter
:デフォルトは50
です。その他のオプション:
-use_device
:gpuのゼロインデックス付きIDを使用して、プラスcuda:
デフォルトはcuda:0
です。-seed
:繰り返し可能な結果を指定できる整数値。デフォルトでは、この値は実行ごとにランダムです。基本的なディープドリーム:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
Advanced 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
データセットの作成、クリーニング、および準備に関連するすべての入力されたスクリプト/ツールの詳細については、こちらをご覧ください。