画像データを機械学習で使えるデータへ変換する
はじめに
前回は、Frickrを使った画像データのダウンロードについて整理しました.
shirakonotempura.hatenablog.com
今回は、ダウンロードした画像データを機械学習で使えるデータへ変換していく作業についてまとめていきます.
前提条件として、画像データは以下のような形で、PC上に保存されているとします.
ゴリゴリのwindowsですみません.
読み込み
早速ですが、データを読み込んでいきます.
大まかな手順としては、以下になります
- フォルダ名を設定(以下の例では、"cheetah"と"cat")
- そのフォルダ内の画像データをデータ化して入力データXとして保存
- インデックスをラベルデータYとして保存
image_sizeは、画像のサイズを統一するために使用します. フォルダ内の画像全てを読み込んだ場合、データ数の差異でクラスごとの入力データに偏りが生じる場合があるため、max_readで指定した枚数しか利用しないようにしています.
# input classes = ["cheetah", "tiger", "leopard", "lynx", "lion",\ "jaguar", "white tiger", "cat"] num_classes = len(classes) image_size = 50 max_read = 280 for index, class_label in enumerate(classes): images_dir = "./images/" + class_label files = glob.glob(images_dir + "/*.jpg") for i, file in enumerate(files): if i >= 5: break image = Image.open(file) image = image.convert("RGB") image = image.resize((image_size, image_size)) data = np.asarray(image) X.append(data) y.append(index) X = np.array(X) y = np.array(Y)
訓練データとテストデータに分ける
Scikit-learnのmodel_selection.train_test_split()を使って、訓練用データとテスト用データに分けています.
デフォルトで訓練データ75%、テストデータ25%に分けてくれますが、自分で割合を指定したい場合はtest_size=0.20
で割合を指定できます.
また、random_state
を指定して、シード値を固定することもできます.
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y)
データの正規化およびラベルのOne-hotベクトル化
最後にデータの正規化(最大値を1に変換)およびラベルのone-hotベクトル化をして終了です.
# 正規化 X_train = X_train.astype("float")/255 X_test = X_test.astype("float")/255 # one-hot vector y_train = np_utils.to_categorical(y_train, num_classes) y_test = np_utils.to_categorical(y_test, num_classes)
補足:
デジタルデータは以下のコードで保存および再利用が可能です.
ローカルで学習用データを作成して、メインの学習はクラウド上で行うときなど使用できます.
ただし、データのサイズとしてはかなり大きくなりますのでご注意ください.
また、保存先などは適宜、変更してください
# データの保存 Xy_data = (X_train, X_test, y_train, y_test) np.save("./images/Xy_data.npy", Xy_data) # データの利用 X_train, X_test, y_train, y_test = np.load("./images/Xy_data.npy")
上記をまとめたGoogle Colaboratoryのnoteはコチラ
まとめ
今回は、画像データをデジタルデータに変換していく作業についてまとめました.
これで訓練データとテストデータができましたので、MNISTでやったようにCNNモデルを作って学習ができるはずです.
誤り・不備にお気づきの方はコメントください.
以下の記事を参考にさせていただきました.ありがとうございます.
newtechnologylifestyle.net