Pythonで衣服の画像を分類する – 完全ガイド

スポンサーリンク

この記事では、Pythonプログラミング言語を使用したTensorFlowを使って、様々な服の画像の分類がどのように行われるかを見ていきます。

ソーシャルメディアプラットフォームのInstagram、YouTube、Twitterは、私たちの日常生活を支配しています。

特にモデルやセレブリティは、自分を最高に見せたいなら、服をいくつかのカテゴリーに分類する方法を知っておく必要があります。

こちらもお読みください。

1
2
3
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

写真に写っているファッションアイテムの分類は、個々の衣服の識別を含んでいます。

同じことは、ソーシャルネットワーキング、eコマース、刑法にも応用されている。


スポンサーリンク

Step 1: モジュールをインポートする

すべてのプロジェクトにおいて、最初のステップは必要なモジュールをすべてインポートすることです。

今回は、Tensorflowに加え、numpyとmatplotlibをインポートします。

fashion_data=tf.keras.datasets.fashion_mnist

ステップ2: データの読み込みと前処理

これからプログラムに読み込むデータセットはこちらです。

このデータセットには、10種類のファッションカテゴリに属する、グレースケールで各28×28ピクセルの写真6万枚と、ダミーの画像1万枚が含まれている。

MNISTはこのデータセットを用いて置き換えることができる。

以下のコードで、データの読み込みを行う。

1
2
3
4
5
6
7
(inp_train,out_train),(inp_test,out_test)=fashion_data.load_data()
inp_train = inp_train/255.0
inp_test = inp_test/255.0
print("Shape of Input Training Data: ", inp_train.shape)
print("Shape of Output Training Data: ", out_train.shape)
print("Shape of Input Testing Data: ", inp_test.shape)
print("Shape of Output Testing Data: ", out_test.shape)

ステップ3:学習データとテストデータの分割

機械学習モデルの主要な部分は、80対20の法則に基づいてデータを2つに分割することです。

80-20ルールとは、データの80%をトレーニング用データに、20%をテスト用データに送るというものです。

以下のコードでは、データをトレーニング用とテスト用に分割しています。

Shape of Input Training Data:  (60000, 28, 28)
Shape of Output Training Data:  (60000,)
Shape of Input Testing Data:  (10000, 28, 28)
Shape of Output Testing Data:  (10000,)

このコードは読み込まれたデータセットを正規化します。

1
2
3
4
5
6
7
8
9
plt.figure(figsize=(10,10))
for i in range(100):
    plt.subplot(10,10,i+1)
    plt.imshow(inp_train[i])
    plt.xticks([])
    plt.yticks([])
    plt.xlabel(out_train[i])
    plt.tight_layout()
plt.show()

ステップ4:データの可視化

初期データを可視化するコードは以下の通りです。

1
2
3
4
5
6
7
8
9
10
Labels=['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
plt.figure(figsize=(10,10))
for i in range(100):
    plt.subplot(10,10,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(inp_train[i], cmap=plt.cm.binary)
    plt.xlabel(Labels[out_train[i]])
    plt.tight_layout()
plt.show()
1
2
3
4
5
6
7
8
9
my_model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10)
])
my_model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
my_model.fit(inp_train, out_train, epochs=20)

ステップ 5: ラベルを実際の名前に変更する

可視化されたラベルを見てきましたが、ラベルにもきちんとした名前をつけたいものです。

以下のコードで実現できます。

1
2
loss, accuracy = my_model.evaluate(inp_test,out_test,verbose=2)
print('
Accuracy:'
,accuracy*100)
1
2
prob=tf.keras.Sequential([my_model,tf.keras.layers.Softmax()])
pred=prob.predict(inp_test)

これで、可視化がより理解しやすくなったことがわかると思います。


ステップ 6: モデルのビルド、コンパイル、およびトレーニング

TensorFlowとKerasのモデルをビルド、コンパイル、学習するコードは以下の通りです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
plt.figure(figsize=(20,20))
for i in range(20):
    true_label,image = out_test[i],inp_test[i]
    pred_label = np.argmax(pred[i])
    plt.subplot(10,10,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(image, cmap=plt.cm.binary)
    if pred_label == true_label:
        color = 'green'
        label="Correct Prediction!"
    else:
        color = 'red'
        label="Wrong Prediction!"
    plt.tight_layout()
    plt.title(label,color=color)
    plt.xlabel(" {} -> {} ".format(Labels[true_label],Labels[pred_label]))

ステップ7:最終的な損失と精度を確認する

モデルの学習が成功したら、次は損失を計算し、作成・学習したモデルの最終的な精度を求めます。

Classify Images Sample Demonstration

最終的な精度は88.8%であり、非常に良い結果となりました。


ステップ8: 予測を行う

このプログラムの最後のステップは、作成・学習したモデルを使って予測を行うことです。

MNIST Clothes Data Visualize

ステップ9:最終的な予測値の可視化

どのような分類モデルでも、最終的な可視化を行うことは重要です。

より簡単にするために、データセットの最初の20枚の画像を視覚化することにします。

MNIST Clothes Data Visualize With Labels
Final Visual Clothes Classification

チュートリアルを読んでいただきありがとうございました。

このチュートリアルを通して多くのことを学んでいただければ幸いです。

Happy Learning! もっと学ぶために読み続けてください。

  1. Pythonで精度を計算する – 分類エラーメトリック
  2. 複数のMLアルゴリズムによるIrisデータセットの分類
  3. Pythonによる推薦システムの理論的紹介

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