スポンサーリンク

【Python】Kerasで任意画像を画像分類。〜 ニューラルネット作成手順 〜

Keras
スポンサーリンク

今回の記事ではKerasの学習キットを使って、ニューラルネット構築とモデルの学習方法についての記事を記載します。

前回は転移学習を行う方法について記載しました。転移学習についてやその方法についての記事は下記をご参照下さい。

【Python】日本語の文字分類を行う方法ご紹介。

スポンサーリンク

モデル作成用の画像フォルダ

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

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リストに配列として格納します。次に、ニューラルネットを作成しコンパイルします。。そのモデルを画像配列のXとラベル配列のYで学習させていきます。

完了した後に保存して完了です。

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

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

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

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

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

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

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

コメント

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