タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

Kerasを使用したCIFAR-10データセットのCNN実装

AI Python

t f B! P L

 

プログラムの画像

今回はKerasをつかって、画像認識のコードを書いていきます。

KerasにはCIFAR-10という画像データのデータセットがあります。

それで学習させて、なんの画像かを当てるコードです。

CNNとは

CNNConvolutional Neural Network)は、主に画像認識やパターン認識などのタスクに適したディープラーニングの一種です。CNNは、畳み込み層(Convolutional Layer)、プーリング層(Pooling Layer)、全結合層(Fully Connected Layer)から構成されるニューラルネットワークです。

 

畳み込み層は、入力データに対して畳み込み演算を行い、特徴マップを生成します。この操作は、画像内の局所的な特徴を検出するために役立ちます。畳み込み層には、畳み込みカーネルと呼ばれる学習可能なフィルタが使用されます。

 

プーリング層は、特徴マップの次元を削減し、計算量を減らすために使われます。一般的には最大プーリング(Max Pooling)や平均プーリング(Average Pooling)が用いられます。

 

全結合層は、畳み込みとプーリングの結果を受け取り、最終的な出力を生成します。これは通常、クラス分類や回帰などのタスクに対応しています。

 

CNNは、画像の階層的な特徴を学習するのに優れており、畳み込み層が局所的な特徴を抽出し、プーリング層がその特徴を集約して全結合層に渡すというアーキテクチャが特徴的です。これにより、位置に対する頑健性や、データの階層的な構造を捉える能力が向上します。

〇コードの実装

まず、Kerasと必要なライブラリをインストールします。

 Googleコラボで書く場合はtensorflowのインストールはいりません。

pip install tensorflow

そして、以下はCIFAR-10に対する簡単なCNNの実装例です。

 

import tensorflow as tf

from tensorflow.keras import layers, models

from tensorflow.keras.datasets import cifar10

from tensorflow.keras.utils import to_categorical

import numpy as np

from tensorflow.keras.preprocessing import image

import matplotlib.pyplot as plt

 

# CIFAR-10データセットの読み込み

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

 

# データの正規化

x_train, x_test = x_train / 255.0, x_test / 255.0

 

# ラベルをone-hotエンコーディング

y_train = to_categorical(y_train, 10)

y_test = to_categorical(y_test, 10)

 

# モデルの構築

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.Flatten())

model.add(layers.Dense(64, activation='relu'))

model.add(layers.Dense(10, activation='softmax'))

 

# モデルのコンパイル

model.compile(optimizer='adam',

              loss='categorical_crossentropy',

              metrics=['accuracy'])

 

# モデルの概要表示

model.summary()

 

# モデルの訓練

model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))

この例では、3つの畳み込み層とプーリング層、それに続く2つの全結合層からなるシンプルなCNNを構築しています。最後の層は10クラスの分類問題のためにsoftmax活性化関数を使用しています。

〇画像の予測

# テスト用の画像読み込み(CIFAR-10データセットの最初の画像を使用)

test_image = x_test[0]

test_image = np.expand_dims(test_image, axis=0)  # バッチ次元を追加

 

# モデルの予測

predictions = model.predict(test_image)

 

# 予測結果の表示

class_names = ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]

predicted_class = np.argmax(predictions)

predicted_class_name = class_names[predicted_class]

 

# 元の画像を表示

plt.imshow(x_test[0])

plt.title(f"Predicted class: {predicted_class_name}")

plt.show()

このコードは、テスト画像をモデルに渡して予測を行い、その結果を表示します。テスト画像がCIFAR-10データセットの最初の画像であることに注意してください。実際には、自分の画像を利用する場合には、適切に前処理する必要があります。

CNNの使用例

CNNは画像認識や画像分類の分野で特に優れた性能を発揮し、多くの実際の応用例が存在します。以下はいくつかの代表的な例です。

 

・顔認識:

CNNは顔認識の分野で広く使用されています。Facebookの顔認識機能やスマートフォンの顔認識ロックなどがその例です。

・自動運転技術:

自動運転車のセンサーデータからの物体検出や、道路上の標識認識においてCNNが活用されています。

・医療画像解析:

医療分野では、X線、MRICTなどの画像データを解析する際にCNNが利用され、病変の検出や疾患の診断に寄与しています。

・動画分析:

 

動画分析においても、CNNはフレームごとの特徴を学習して物体検出や行動認識などに利用されます。セキュリティカメラや交通監視システムなどで使用されています。

・自然言語処理:

画像以外の分野でも応用されており、テキストの特徴を抽出するためにCNNが使用されています。例えば、テキストの感情分析や機械翻訳などがあります。

アート生成:

CNNは画像生成の分野でも使用され、DeepDreamなどのアート生成アプリケーションで遊ぶためにも利用されています。

これらは一部の例であり、CNNはその優れた特徴抽出能力と階層的な学習により、多岐にわたる分野で広く利用されています。

〇まとめ

Kerasをつかって画像認識させると、やっとこさAIをつくっているんだなーと実感できます。scikit-learnでは統計的アルゴリズムを用いた機械学習がメインですが、Kerasは深層学習をメインとしたライブラリとなっています。

画像認識だけではなく、線形回帰とかもできるのでどんどんつかっていきましょう。

 

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ