web-dev-qa-db-ja.com

CNNの画像を配列に変換する

CNNを使用して犬の繁殖識別を分類しようとしています。画像をグレースケールに変換し、サイズを小さくするために再スケーリングしました。だから今私はそれらをnumpy配列に追加してトレーニングをしようとしています。また、Relu活性化関数を使用します。これは、犬の繁殖のさまざまなカテゴリに対して、多層およびカテゴリクロスエントロピーでうまく機能するためです。

以下は、グレースケールと再スケールのコードです。

def RescaleGrayscaleImg():

    # iterate through the names of contents of the folder
    for image_path in os.listdir(path):

        # create the full input path and read the file
        input_path = os.path.join(path, image_path)

        # make image grayscale
        img = io.imread(input_path)
        img_scaled = rescale(img, 2.0 / 4.0)
        GrayImg = color.rgb2gray(img_scaled)

        # create full output path, 'example.jpg' 
        # becomes 'grayscaled_example.jpg', save the file to disk
        fullpath = os.path.join(outPath, 'grayscaled_'+image_path)
        misc.imsave(fullpath, GrayImg)

画像を配列に変換するにはどうすればよいですか?各列は画像になりますか?どんな助けでも役に立ちます。

4
Marios Nikolaou

CNNの場合、入力は4Dテンソル[batch_size, width, height, channels]である必要があるため、各画像は3Dサブテンソルです。画像はグレースケールなので、channels=1。また、トレーニングでは、すべての画像が同じサイズである必要があります-WIDTHHEIGHT

skimage.io.imreadndarrayを返します。これは、kerasに対して完全に機能します。したがって、次のようにデータを読み取ることができます。

all_images = []
for image_path in os.listdir(path):
  img = io.imread(image_path , as_grey=True)
  img = img.reshape([WIDTH, HEIGHT, 1])
  all_images.append(img)
x_train = np.array(all_images)

ラベルの保存方法はわかりませんが、ラベルの配列も作成する必要があります。私はそれをy_trainと呼んでいます。次のように、ワンホットに変換できます。

y_train = keras.utils.to_categorical(y_train, num_classes)

Kerasのモデルはかなり単純です。これが最も単純なモデルです(reluとx-entropyを使用):

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', 
                 input_shape=[WIDTH, HEIGHT, 1]))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train, batch_size=100, epochs=10, verbose=1)

完全に機能するMNISTの例を見つけることができます ここ

12
Maxim