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

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

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

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

Python

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

Q&A

0回答

1003閲覧

どちらがImageDataGeneratorでの水増しとして適切でしょうか。

aheshiyu_tt

総合スコア11

Keras

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

Python

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

0グッド

0クリップ

投稿2021/12/13 15:07

編集2021/12/13 15:10

比較するソースコード2つ

※質問は一番下に書いてあります。

以下に2つのソースコードを貼ります。どちらも長くて申し訳ありません。
まずは1つ目のソースコードです。

Python

1# ------------------------------------------------------------ # 2# クラス別に画像を1枚ずつ変換をかけて保存する処理(ここから) 3datagen = image.ImageDataGenerator( 4 rotation_range = 360, 5 width_shift_range = 5, 6 height_shift_range = 5, 7 fill_mode = "constant" 8) 9 10class_list = [10種類のクラス名] 11img_list = [1種類あたり62枚の画像(合計620枚の画像)] 12 13for class_name in class_list : 14 for img in img_list : 15 gen = datagen.flow( 16 x = img, 17 batch_size = 1, 18 save_to_dir = "./mydataset/train/" + class_name + "/", 19 save_prefix = "train_" + char, 20 save_format = "png", 21 ) 22 for loop in range(100) : 23 gen.next() 24# ここまで----------------------------------------------------- # 25 26# ------------------------------------------------------------ # 27# 水増ししたディレクトリから画像を64枚取得する処理(ここから) 28datagen = image.ImageDataGenerator(rescale = 1./255) 29train_generator = datagen.flow_from_directory( 30 "./mydataset/train/", 31 target_size = (img_w, img_h), 32 batch_size = 64, 33 color_mode = "grayscale", 34 class_mode = "categorical" 35) 36# ここまで----------------------------------------------------- # 37 38... モデル定義など 39 40# ------------------------------------------------------------ # 41# 最終的なジェネレータをfitに用いる(ここから) 42model.fit( 43 x = train_generator, 44 ... 45) 46# ここまで----------------------------------------------------- #

このソースコードでは、画像を1枚ずつ読み込んで、その画像1枚1枚についてジェネレータを作成しています。さらに、そのジェネレータをfor文で100回呼び出すことで、結果的に1枚の画像を100枚の画像に水増ししています。今回は全体で620枚の画像を扱っているため、合計で62000枚の画像に水増しされることになります。そして、水増しした画像を保存したディレクトリをflow_from_directoryで読み込んで、train_generatorを生成しています。最後に、モデルをfitする際にそのジェネレータを渡しています。

長くなりましたが、上記が1つ目のソースコードで次が2つ目のソースコードになります。

Python

1# ------------------------------------------------------------ # 2# 水増し処理とジェネレータ作成を同時に実装(ここから) 3datagen = image.ImageDataGenerator( 4 rotation_range = 360, 5 width_shift_range = 5, 6 height_shift_range = 5, 7 rescale = 1./255, 8 fill_mode = "constant" 9) 10 11original_dir = 10種類のクラス名のディレクトリがあるディレクトリパス(1クラスあたり62枚の画像) 12# original_dir 13# ├── class1(62枚) 14# ├── class2(62枚) 15# : 16# └── class10(62枚) 17 18train_generator = datagen.flow_from_directory( 19 directory = original_dir, 20 target_size = (img_w, img_h), 21 batch_size = 64, 22 color_mode = "grayscale", 23 class_mode = "categorical", 24) 25# ここまで----------------------------------------------------- # 26 27... モデル定義など 28 29# ------------------------------------------------------------ # 30# ジェネレータをfitに用いる(ここから) 31model.fit( 32 x = train_generator, 33 ... 34) 35# ここまで----------------------------------------------------- #

2つ目のソースコードは1つ目のものよりもシンプルで、画像の水増しをせずに(?)ジェネレータを作成しています。基本的には1つ目のソースコードと同じ処理になっているはずです...。

質問

前置きが長くなりましたが、ここで質問です。

上記2つのコードは、最終的にモデルが学習する段階においてジェネレータから提供されるデータに大きな違いはあるのでしょうか。

といいますのも、ImageDataGeneratorを紹介した多くのサイトでは、2つ目のソースコードではなく、1つ目のソースコードのように画像をfor文を使用して水増しを行っているように思えます。そのため、私が初めに作成したソースコードは1つ目の方のようなものでした。しかし、よくよく考えると最終的にバッチサイズを64に設定したジェネレータから変換された画像が提供されるのであれば、わざわざ1枚あたりの画像を100枚に増殖させる必要はないのではないかと思うようになりました。(変換された画像から64枚提供するか、変換しつつ64枚提供するか、の違い)

よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問