3

インポートデータセットに関する問題は私を狂わせるでしょう。Keras-SegNetはImageDataGeneratorとfitまたはfit_generatorを使用します

これは私のsegnetコードの一部です。

画像&のマスクデータのインポートに関する質問に焦点を当てます。

print("CNN Model created.") 

###training data 
data_gen_args = dict() 
image_datagen = ImageDataGenerator(**data_gen_args) 
mask_datagen = ImageDataGenerator(**data_gen_args) 
seed1 = 1 
image_datagen.fit(images, augment=True, seed=seed1) 
mask_datagen.fit(masks, augment=True, seed=seed1) 

train_image_generator = image_datagen.flow_from_directory(TRAIN_im,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 
train_mask_generator = mask_datagen.flow_from_directory(TRAIN_mask,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 

train_generator = zip(train_image_generator,train_mask_generator) 

###validation data 
valid_gen_args = dict() 
val_image_datagen = ImageDataGenerator(**valid_gen_args) 
val_mask_datagen = ImageDataGenerator(**valid_gen_args) 
seed2 = 5 
val_image_datagen.fit(val_images, augment=True, seed=seed2) 
val_mask_datagen.fit(val_masks, augment=True, seed=seed2) 

val_image_generator = val_image_datagen.flow_from_directory(VAL_im,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 
val_mask_generator = val_mask_datagen.flow_from_directory(VAL_mask,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 

val_generator = zip(val_image_generator,val_mask_generator) 

### 
model.fit_generator(
train_generator,steps_per_epoch=nb_train_samples//BATCH_SIZE,epochs=EPOCHS,validation_data=val_generator,validation_steps=nb_validation_samples//BATCH_SIZE) 

私の質問は:

  1. 私は500 * 500に入力サイズを変更するので、私はプールとアップサンプル層の大きさを調整します。これは達成可能ですか? さらに、古典的なネット(AlexNet、VGG、Segnet ...のような)は、プーリングとアップサンプルレイヤのサイズとフィルタ番号を調整することで任意の入力イメージサイズを受け入れることができますか?この部分はKeras公式のチュートリアルからである(ANS

    image_datagen.fit(images, augment=True, seed=seed1) 
    mask_datagen.fit(masks, augment=True, seed=seed1) 
    

    ::。今、私は知っている彼らは両方私は、変数「画像」と「マスク」のデータ型が何であるかを知りたいのです

  2. numpy配列です)。

  3. 上記の質問によると、どうやってそれらを派生させることができるの?

    以下のmnist.load_data()のような関数を書くべきですか?

    私はいくつかの例が必要です。私はそれが自分で のように「mnist.load_dataを()」関数を定義する必要はありません意味しています、と私は得るためにそれを使用することができます

    flow_from_directory 
    

    機能を使用

    (x_train_image, y_train_label), (x_test_image, y_test_label) = mnist.load_data() 
    
  4. 私のディレクトリ構造からデータを直接(バッチ、シャッフル)しますか?

これは私のディレクトリ構造です:

Dataset -training----------images----"many images" 
      |   | 
      |   |-----mask-----"ground truth images(mask)" 
      | 
      | 
     validation----------val_images----"many images" 
      |  | 
      |  |------val_mask------"ground truth images(mask)" 
      | 
      | 
     testing---------------test images (no ground truth) 

どうもありがとう!

+0

ImageDataGeneratorをセグメンテーションの問題で実際に使用することはできますか?私の知る限りでは、ディレクトリから画像をランダムに読み込みますが、もちろん画像とマスクのペアが必要です。 – pietz

+0

@pietz Kerasオフィシャルチュートリアル:https://keras.io/preprocessing/image/ 「イメージとマスクを一緒に変換する例」というキーワードを検索できます。ページの 私はそれができると思います。 私はgithubでいくつかのkeras segnetの例を見ました。 –

+1

ImageDataGeneratorの経験はあまりありませんが、ドキュメントを見ると 'fit'メソッドは画像正規化のサンプル統計を計算するために必要です。これは 'featurewise_center'、' featurewise_std_normalization'または 'zca_whitening'を使用している場合にのみ必要です。あなたですか?その場合、画像とマスクは、統計を計算するためのサンプルデータです。 – filippo

答えて

2

それに行きましょう。

  1. SegNetは、入力/出力サイズで動作するFCN(完全畳み込みネットワーク - >密なレイヤーを使用しない)です。これらのエンコーダ/デコーダアーキテクチャに16の組み合わせを使用することを推奨します。どうして?あなたの場合、私たちは500から250から125から62、反対側では62から124、そして248から496に行くので、突然あなたの決議はもはや一致しません。 AlexNetとVGGは高密度層を使用します。つまり、必要に応じた初期入力サイズを変更することができますが、異なる解像度の事前に重み付けされたウェイトを使用することはできません。パラメータの数は単に一致しません。サイドノート:VGGとAlexNetは分類アーキテクチャですが、SegNetはセグメンテーションアーキテクチャです。
  2. imagesおよびmasksは、形状が(num_imgs, width, height, num_channels)である4次元配列である。これらの変数はどこから来ていますか?以前の手順でそれぞれのイメージファイルから読み込んでおく必要があります。
  3. 2つのフォルダのそれぞれを繰り返し、各イメージを読み込んでリストに追加し、終了するとこのリストをnumpyの配列に変換します。イメージとマスクが同じ方法でソートされていることを確認して、イメージとマスクが一致するようにします。
  4. flow_from_directoryは、画像を読み取るためにIDGと共に使用できる機能です。とても便利な。ただし、featurewise_center,featurewise_std_normalizationおよびzca_whiteningが必要ない場合は、IDG fit()関数を実行するためにすでに利用可能なnumpy配列が必要なので、これを回避することができます。 Btwでは、このフィット関数はモデルのトレーニングを開始するfit()関数とは関係ありません。これは、同じ命名規則を使用するだけです。
+0

1.実際には、エンコーディングプロセスとデコードプロセスで2つの2 * 2と2つの5 * 5にプーリングカーネルのサイズを調整しました。しかし、私はそれをコンパイルしていません。このアプローチは実現可能ですか? –

+0

OK、これも機能するかもしれません。私はあなたが500x500がかなり大きいことに気づくと思うので、訓練にかなりの時間がかかります。 224x224のパイプラインも試してみることをお勧めします。本当に解像度が必要かどうかを確認してください。 – pietz

関連する問題