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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

Q&A

解決済

1回答

885閲覧

Keras imagedatagenerator 一括処理

22Go

総合スコア55

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

0グッド

1クリップ

投稿2019/07/17 09:06

編集2019/08/25 23:53

kerasで画像判定に関する学習を行なっています。

imagedatageneratorを使ってディレクトリ内の画像に対して一括で処理を行いたいと考えております。

現状は増やしたい画像をimageに入れ、水増し後に元のディレクトリに戻す作業をしています。

imageに画像を入れなくともtrainに入っている全ディレクトリ内の.pngに対して水増しを行いたいのですがどのように書き加えたらいいのか教えてください。

train
/dirA
/A.png
B.png
C.png
/dirB
/D.png
E.png
F.png
/dirC
/G.png
H.png
Y.png

といったディレクトリ構成になっております

python

1import os 2import glob 3import numpy as np 4from keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array, array_to_img 5 6def draw_images(generator, x, dir_name, index): 7 save_name = 'extened' + str(index) 8 g = generator.flow(x, batch_size=1, save_to_dir=output_dir, save_prefix=save_name, save_format='png') 9 10 for i in range(10):##############拡張枚数################### 11 bach = g.next() 12 13input_dir = 'dir/a' 14if __name__ == '__main__': 15 16 ##############出力先################### 17 output_dir = input_dir 18 19 ##############入力ディレクトリ################### 20 images = glob.glob("/Users/a/Desktop/image/*.png") 21 22 23 ##############オーギュメンテーションの設定################### 24 generator = ImageDataGenerator( 25 #zoom_range=0.8, 26 ) 27 28 29 # 読み込んだ画像を順に拡張 30 for i in range(len(images)): 31 img = load_img(images[i]) 32 # 画像を配列化して転置a 33 x = img_to_array(img) 34 x = np.expand_dims(x, axis=0) 35 # 画像の拡張 36 draw_images(generator, x, output_dir, i) 37 38print("fin")

宜しくお願い致します。

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

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

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

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

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

tiitoi

2019/07/17 11:29 編集

現状のコードで変換して保存するということが実現できていそうですが、なにか問題があるのでしょうか?
22Go

2019/07/17 12:06

dirAの中の.pngを見つけたら水増しをして、その後、次のdirBにアクセスして.pngを水増ししたいと思ってます。 現在は別でディレクトリを準備して水増し後に元のディレクトリに全て写している状況なんですが、もっと簡単にできたらと思いまして。。。 ちなみに現在はDesktop/train/dirA.dirB.dirCとなっており、Desktop/imageというディレクトリを作成してあります。
guest

回答1

0

ベストアンサー

データセットのディレクトリで各クラスごとに画像がフォルダで分けられている場合は以下のようにすれば、データセットを水増ししてディレクトリに保存できます。

元の画像と水増しした画像が区別つくように、output_dir に元のデータセットと同じディレクトリ構造で保存するようにしています。

python

1from pathlib import Path 2from keras.preprocessing.image import ( 3 ImageDataGenerator, 4 load_img, 5 img_to_array, 6 array_to_img, 7) 8 9 10# データセットのパス 11dataset_dir = Path("/data/flower_photos") 12 13# 以下のようにクラスごとにサブディレクトリがある前提 14# /data/flower_photos 15# |-- daisy 16# |-- dandelion 17# |-- roses 18# |-- sunflowers 19# `-- tulips 20 21# 出力ディレクトリのパス 22output_dir = Path("extend") 23output_dir.mkdir(exist_ok=True) 24 25# 1枚あたりの生成枚数 (例: 2の場合、1つの画像を2倍に水増しする) 26n = 1 27 28# 画像データ生成器を作成する。 29params = {"rotation_range": 20, "width_shift_range": 0.4} # パラメータは適当に変えてください。 30datagen = ImageDataGenerator(**params) 31 32for sub_dir in dataset_dir.iterdir(): 33 print(f"processing {sub_dir} ...") 34 35 output_subdir = output_dir / sub_dir.name 36 output_subdir.mkdir(exist_ok=True) 37 38 for img_path in sub_dir.glob("*.jpg"): # 拡張子は適当に変えてください 39 # 画像を読み込む。 40 img = load_img(img_path) 41 x = img_to_array(img) # PIL => numpy 42 x = np.expand_dims(x, axis=0) # (H, W, C) -> (1, H, W, C) 43 44 gen = datagen.flow( 45 x, 46 batch_size=1, 47 save_to_dir=output_subdir, 48 save_prefix=f"extened_{img_path.stem}", 49 save_format="png", 50 ) 51 52 # ジェネレーターを n 回呼び出す。 53 [gen.next() for i in range(n)]

投稿2019/07/17 16:46

tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問