質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

516閲覧

StyleGANを用いて複数の異なる画像の出力、保存を行いたい。

lexlexlex

総合スコア2

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/10/28 08:06

編集2022/10/28 08:42

前提

Google colabにてpythonを用いてStyleGANを実行しています。
今回の質問はエラーではありません。

実現したいこと

https://qiita.com/Phoeboooo/items/12d21916de56d125f0be
上記のサイトの
・潜在ベクトルを選ぶ
・画像生成
・生成画像を保存する
の項目にて、
複数の異なる画像を同時に生成し、保存したいと考えています。

該当のソースコード

潜在ベクトルを選ぶ

python

1# Pick latent vector. 2rnd = np.random.RandomState(200) 3latents = rnd.randn(1, Gs.input_shape[1])

画像の生成

python

1# Generate image. 2fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True) 3images = Gs.run(latents, None, truncation_psi=0.7, randomize_noise=True, output_transform=fmt)

生成画像を保存する

python

1# Save image. 2os.makedirs(config.result_dir, exist_ok=True) 3png_filename = os.path.join(config.result_dir, 'example200.png') 4PIL.Image.fromarray(images[0], 'RGB').save(png_filename)

試したこと

潜在ベクトルの数値(本コードは200)をfor文にて変数を用いて行おうと思いましたが、
rndがIndentationErrorを起こしてしまいました。

python

1# Pick latent vector. 2for i in range(200,699) : 3rnd = np.random.RandomState(i) 4latents = rnd.randn(1, Gs.input_shape[1])

エラーメッセージ

File "<ipython-input-61-8ce0a78b2a57>", line 3 rnd = np.random.RandomState(i) ^ IndentationError: expected an indented block

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/10/28 08:14

> for文にて変数を用いて行おうと思いましたが、rndがIndentationErrorを起こしてしまいました。 そのコードも質問に記載してください (ここに書くのではなく、質問を編集して追記する)
jbpb0

2022/10/28 08:37 編集

> rnd = np.random.RandomState(200) の行はforループの前で一回だけ実行して、forループ内で > latents = rnd.randn(1, Gs.input_shape[1]) を何回も実行したら、実行する度に「latents」が変わって、違う画像が生成されるのではないですかね > 潜在ベクトルの数値(本コードは200)をfor文にて変数を用いて行おうと 「潜在ベクトル」は > rnd = np.random.RandomState(200) の「200」じゃなくて > latents = rnd.randn(1, Gs.input_shape[1]) の「latents」では? 【追記】 > rnd = np.random.RandomState(200) もforループ内に入れて、「200」のところを毎回変えるのでも、もちろんダメではないです その場合でも、ループの毎回で「latents」が変わって、違う画像が生成されるでしょうね
lexlexlex

2022/10/28 08:41 編集

行った内容を記載させていただきました。 このプログラム上では200の値を変更すると出力される画像が変化するので200の値を変える必要があると考えていました。 すみません、言葉足らずでした。異なる画像を作成したいと考えています。
jbpb0

2022/10/28 08:43

> 200の値を変える必要がある 下記を実行してみてください (forループ内はインデントを入れてください) import numpy as np rnd = np.random.RandomState(200) for i in range(10): print(rnd.randn(1, 5)) 上記の実行結果で、10回のループの毎回表示される五つの数値は、毎回違いますよね なので、「rnd = np.random.RandomState(200)」の実行は一回だけで、その後に「latents = rnd.randn(1, Gs.input_shape[1])」を何回も実行したら、実行する度に「latents」は変わるので、生成される画像も変わると思います 一つ前のコメントにも書きましたが、「rnd = np.random.RandomState(200)」の「200」を変えて何回も実行しても、もちろん大丈夫です どちらでもお好きな方で
jbpb0

2022/10/28 09:16 編集

> rndがIndentationErrorを起こしてしまいました。 「for i in range(200,699) :」の次の行からは、インデントを入れなくてはいけません 「rnd = np.random.RandomState(i)」の行から「PIL.Image.fromarray(...」の行まで、全部です 参考 https://yumarublog.com/python/indent/ あと、「png_filename =...」の行は、このままだと毎回「example200.png」という名前のファイルに上書きされて、一番最後の結果しか残らないので、ファイル名に変数「i」が含まれるように変えてください
lexlexlex

2022/10/29 09:38

ありがとうございました。無事性上位動作ができ、複数の画像データの生成が出来ました。
guest

回答1

0

自己解決

下記のコードを用いて実装が出来ました。
3つのコードを質問上では提示しました。Google colabはセルごとに実行を行うので(なんというか忘れました)for文をかけたい範囲は同じセルで実行する必要があると思います。

python

1import numpy as np 2rnd = np.random.RandomState(200) 3for i in range(500): 4 print(rnd.randn(1, 5)) 5 latents = rnd.randn(1, Gs.input_shape[1]) 6 # Generate image. 7 fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True) 8 images = Gs.run(latents, None, truncation_psi=0.7, randomize_noise=True, output_transform=fmt) 9 # Save image. 10 os.makedirs(config.result_dir, exist_ok=True) 11 png_filename = os.path.join(config.result_dir, 'example%i.png')%i 12 PIL.Image.fromarray(images[0], 'RGB').save(png_filename)

500枚の画像の出力保存ができました。
for文の値を変更すれば枚数の指定ができます

投稿2022/10/29 09:45

lexlexlex

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/11/03 01:55

> print(rnd.randn(1, 5)) は、無くても実行できると思います その行が有るか無いかで、作成される画像が変わるかもしれませんが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問