スポンサーリンク

【Python】Kerasで任意画像を画像分類する方法ご紹介。

Python
スポンサーリンク

今回の記事ではKerasを使って、任意画像を画像分類する方法をご紹介する記事です。データの準備からモデル学習までの流れを解説していきます。初学者でもすぐに理解できるように、サンプルソースを用いて解説していきます。

スポンサーリンク

モデル学習用のデータ作成

画像格納用のフォルダは下記の様に設定する必要があります。

test
   ├── test1_folder
   └── test2_folder

このフォルダ数が要は、識別用のクラスになっているので、識別の要素が4つになる場合は下記の様に変更します。

test
   ├── test1_folder
   └── test2_folder
   ├── test3_folder
   └── test4_folder

このフォルダの元に識別クラスにあたる画像を格納します。

これで下準備は完了ですので、コードを書いていきましょう。

モデル学習

import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Dense, Dropout, Activation, Flatten
import numpy as np
from sklearn.model_selection import train_test_split
from PIL import Image
import glob



#folders = [”このリストは識別用のフォルダ名を記載する”]
#上記の様にtest1~4を識別さえる場合は下記
folders = ['test1_folder','test2_folder','test3_folder','test4_folder']

X = []
Y = []

image_size = 50
# 対象の画像サイズで最終的にリサイズのサイズにもなります。
index = 0
for folder in folders:
    files = glob.glob('./[自身の指定フォルダ]'+ str(folder) + '/*.JPG')
    #print(files)
    for file in files:
        #print(file)
        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)
    index = index + 1
X = np.array(X)
Y = np.array(Y)

#Xの配列が画像の要素を全て格納するlistになっている
#Yは対応するクラス画像に番号をふるだけのもの

X = X.astype('float32')
X = X / 255.0

# 正解ラベルの形式を変換
Y = np_utils.to_categorical(Y, 16)

# 学習用データとテストデータ
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20)

# CNNを構築
model = Sequential()
 
model.add(Conv2D(32, (3, 3), padding='same',input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
 
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
 
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense([自身のクラス分けする際の数]))
model.add(Activation('softmax'))
 
# コンパイル
model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy'])

history = model.fit(X_train, y_train, epochs=200)
print("完了")

model.save('/[自身の保存したいフォルダパス].hdf5')
print("保存完了")

コードを順に説明していきます。

まずは、任意画像を全て読み込み、Xリストに配列として格納します。

次に、モデルの元となるニューラルネットを作成しコンパイルします。

最後に、そのモデルを学習させます。

こちらで任意画像の識別学習モデルが作成できます。このモデルを使用して画像を分類する方法に関しては別記事で解説いたしますので気になる方は是非参考にしてください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Python
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました