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

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

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

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

Python

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

Q&A

解決済

1回答

1243閲覧

セグメンテーション用のImageDataGeneratorについて

Kohei_KESE

総合スコア41

Keras

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

Python

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

0グッド

0クリップ

投稿2018/12/20 09:11

現在、kerasのUNetなどのセグメンテーション用モデルを使って、セグメンテーションを実行しているのですが、予測精度が上がらないため、ImageDataGeneratorによる水増しを考えています。しかし、kerasのページを参考に作ってみたのですが、うまくいきませんでした。
データ構造は以下のようになっていて、imgディレクトリが入力用データセット、maskが教師用データセットとなっていて、img_1.pngはmask_1.pngと一対一で対応しています。
img--img_1.png
|-img_2.png
|-img_3.png
mask--mask_1.png
|-mask_2.png
|-mask_3.png

水増しでimg_1.pngとmask_1.pngを同条件で水増ししていきたいです。
アドバイスよろしくお願いします。

Python(途中)

1trnames = os.listdir(r"img") 2ytrnames = os.listdir(r"mask") 3 4xtrPath = "./img/" 5ytrPath = "./mask/" 6 7xtr_num_files = len(xtrnames) #画像数を把握し 8ytr_num_files = len(ytrnames) #画像数を把握し 9 10w = 1024 11h = 1180 12 13data_gen_args = dict(featurewise_center=True, 14 featurewise_std_normalization=True, 15 rotation_range=90., 16 width_shift_range=0.1, 17 height_shift_range=0.1, 18 zoom_range=0.2) 19 20#data_gen_argsの情報を辞書として受け取る 21image_datagen = ImageDataGenerator(**data_gen_args) 22mask_datagen = ImageDataGenerator(**data_gen_args) 23 24#x_train 25train = np.zeros((xtr_num_files, h, w, 3)) #画像データの箱を用意し 26for i,filename in zip(range(xtr_num_files),xtrnames): 27 train[i] = cv2.imread(xtrPath+filename) #cv2で画像を読み込んで 28x_train = train.reshape(-1, h, w, 3)/255 29del train 30 31#y_train 32train = np.zeros((ytr_num_files, h, w, 3)) #画像データの箱を用意し 33for i,filename in zip(range(ytr_num_files),ytrnames): 34 train[i] = cv2.imread(ytrPath+filename) #cv2で画像を読み込んで 35y_train = train.reshape(-1, h, w, 3)/255 36del train 37 38# Provide the same seed and keyword arguments to the fit and flow methods 39seed = 1 40image_datagen.fit(x_train, augment=True, seed=seed) 41mask_datagen.fit(y_train, augment=True, seed=seed) 42 43image_generator = image_datagen.flow_from_directory( 44 'data', 45 target_size =(1024, 1180), 46 class_mode="categorical", 47 seed=seed) 48 49mask_generator = mask_datagen.flow_from_directory( 50 'mask', 51 target_size = (256, 256), 52 class_mode="categorical", 53 seed=seed) 54 55# combine generators into one which yields image and masks 56train_generator = zip(image_generator, mask_generator) 57 58model.fit_generator( 59 train_generator, 60 steps_per_epoch=2000, 61 epochs=50)

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

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

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

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

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

tiitoi

2018/12/20 09:17

どううまくいかなかったのでしょうか?
Kohei_KESE

2018/12/20 23:41

具体的には、flow_from_directoryのところで、以下の文章を吐いて困っています。 Found 0 images belonging to 0 classes. Found 0 images belonging to 0 classes. そもそも、flow_from_directoryは分類のときに使うもので、画像が保存してあるディレクトリ名をラベルにする、という操作だと認識しています。このコードはkerasの元ページを参考に作ったのですが、セグメンテーションにおいてflow_from_directoryを使う理由もよく分かりませんでした。
guest

回答1

0

ベストアンサー

flow_from_directory は以下のようなディレクトリ構成を想定したクラス分類タスク用の仕組みです。

train |-class1: クラス1の画像があるディレクトリ |-class2: クラス2の画像があるディレクトリ |-class3: クラス3の画像があるディレクトリ

現状、セグメンテーション用に使える既存のものは Keras に用意されていないので、オーグメンテーションをしたい場合は自作するしかないでしょう。

ImageDataGenerator で行っている処理の内容は keras_preprocessing/image.py で見れるので、こちらを参考に実装してみてはどうでしょうか

投稿2018/12/21 04:30

tiitoi

総合スコア21954

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

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

Kohei_KESE

2018/12/21 07:57

回答ありがとうございます。 教えて頂いたサイトを参考に、実装することができました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問