TensorFlow は、機械学習モデルを作成するための汎用ツールです。
この投稿では、オープンソースの機械学習フレームワークである TensorFlow を使用して顔認識システムを作成する方法を見ていきます。 データの収集と準備からモデルのトレーニングと評価まで、成功する顔認識システムを作成するための重要なプロセスについて説明します。
TensorFlow を直接体験して、コード スニペットと実際の例を使用して顔認識を作成します。 私たちが進むにつれて、あなたは大歓迎です。
TensorFlowの概要
TensorFlow は無料のオープンソース ライブラリです。 これは、データフローと微分可能プログラミングを使用する記号数学ツールボックスです。 深いものを含むさまざまなタスクを処理できます ニューラルネットワーク トレーニング。
TensorFlow は強力で順応性があります。 同様に、それは開発および開発のための優れたツールです。 機械学習モデルのデプロイ. 複数のレイヤーとテンソル演算を使用して複雑なモデルを構築できます。 また、ライブラリ内の事前構築済みモデルは、特定のニーズに合わせて微調整できます。
さらに、TensorFlow には巨大で拡大しているユーザー コミュニティがあります。 そのため、プラットフォームを初めて使用する個人向けの情報とヘルプが豊富にあります.
TensorFlow は、 機械学習 その理由の XNUMX つは、エンド ツー エンドのワークフローを提供するためです。 そのため、モデルを簡単に構築、トレーニング、デプロイできます。 特定の要求に合わせてモデルを改善およびスケーリングするためのツールと戦略を提供します。 データの前処理からモデルの展開までさまざまです。
顔認識とは?
顔認証は コンピュータビジョン 顔から個人を特定するタスク。 この技術は、目、鼻、口の形や質感など、顔の特徴を認識します。
そして、それらを既知の顔のデータベースと比較して一致を識別します。 顔認識には、セキュリティ システム、写真整理、生体認証など、いくつかの用途があります。
顔認識アルゴリズムの精度は、機械学習のブレークスルーの結果として、近年大幅に向上しています。
必要なライブラリのインポート
何かを始める前に、モデルに必要なライブラリをインポートする必要があります。 Tensorflow (tf) がインポートされ、モデルの作成とトレーニングに利用されます。 <(p>
「numpy」は、数学的計算とデータ処理を実行します。
「matplotlib.pyplot」は plt としてインポートされ、 データのチャート化と視覚化.
最後に、sklearn から「fetch lfw people」をインポートします。 顔認識データセットをロードするために使用されます。 この関数は、scikit-learn ツールキットの一部です。 この機能のおかげで、別のデータセットをアップロードする必要はありませんでした。 これはすでに sckit-learn に組み込まれています。
そして、それはあなたに広い範囲へのアクセスを提供します 機械学習用のデータセット アプリケーション。 このシナリオでは、fetch lfw people メソッドを使用して、「Labeled Faces in the Wild」(LFW) データセットを取得します。 人々の顔の写真とそれに付随するラベルで構成されています。
これらのライブラリは、顔認識モデルの実装と評価に不可欠です。
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
顔認識データセットの前処理と読み込み
この部分では、「fetch lfw people」関数を使用して、顔認識データを前処理します。 まず、「60 人あたりの最小顔数 = 60」オプションを使用して lfw 人をフェッチします。 これは、少なくとも XNUMX 枚の写真を持っている人物のみをデータセットに含めたいことを示しています。 したがって、モデルに学習するのに十分なデータがあることを確認します。 また、これによりオーバーフィッティングの危険性が低下します。
次に、faces オブジェクトからのデータとラベルが抽出され、変数 X と y に割り当てられます。 ×ホル。
これで、前処理されたデータとラベルを使用して顔認識モデルをトレーニングする準備が整いました。
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
トレーニング セットとテスト セットの分割
このステップでは、sklearn.model 選択からのトレーニング テスト分割メソッドを使用して、顔認識データセットを XNUMX つの半分に分割します。 この分割の目的は、トレーニング後にモデルのパフォーマンスを評価することです
トレーニング テスト分割関数は、データ X とラベル y を入力として受け入れます。 そして、それらをトレーニング セットとテスト セットに分割します。 この例では、テスト サイズ = 0.2 を選択します。 これは、データの 20% がテスト セットとして使用され、80% がトレーニング セットとして使用されることを意味します。 さらに、random state=42 を使用して、コードが実行されるたびにデータが一貫して分割されるようにします。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
データの準備
データを前処理する目的は、モデルに入力する準備をすることです。 データは、各データ ポイントを 255 で割ることによって、このコードで前処理されます。
これを達成する動機は何ですか? 正規化は、機械学習で使用される前処理手順であり、すべての機能が同じスケールであることを保証します。 このシナリオでは、255 で除算すると、データが 0 から 1 の範囲にスケーリングされます。これは、通常の画像データの正規化手順です。
これにより、モデルの収束が高速化され、パフォーマンスが向上します。
X_train = X_train / 255.0
X_test = X_test / 255.0
モードの作成
写真に写っている顔の個人を特定したい。 この場合、高密度ネットワークとして知られる、完全に接続されたネットワークを使用します。 これは、モデルの作成に使用された人工ニューラル ネットワークです。
人工ニューラル ネットワークは、人間の脳がどのように機能し、組織化されるかをモデルにしています。 それらは、リンクされた情報処理ノードまたはニューロンで構成されています。 密なネットワーク内の層内の各ニューロンは、その上の層内のすべてのニューロンにリンクされています。
モデルには、このコードで 128 つのレイヤーがあります。 次のレイヤーに入力するために、入力データは最初のレイヤーで 64 次元配列にフラット化されます。 したがって、次の XNUMX つの層の XNUMX 個のニューロンと XNUMX 個のニューロンは完全にリンクしています。
ReLU 活性化関数は、これらのレイヤーで使用される独自の活性化関数です。 これにより、入力と出力の間の非線形相関をモデルに学習させることができます。 最後の層では、softmax 活性化関数を使用して予測を行います。 そして、それは潜在的なクラスと同じ数のニューロンを持つ完全に接続された層です。
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
モデルのコンパイル
モデルは「コンパイル」機能を使用してコンパイルされます。 トレーニング用にモデルを準備する必要があります。 そのため、モデルの評価に使用されるオプティマイザー、損失関数、およびメトリックを定義します。
トレーニング中、オプティマイザーはモデルのパラメーターの変更を担当します。 「adam」オプティマイザーは、人気のある深層学習最適化手法です。
損失関数を使用して、トレーニング データに対するモデルのパフォーマンスを評価します。 ターゲット ラベルは、ワンホット エンコードされたベクトルではなく、画像のクラスを反映する整数であるため、「スパース カテゴリカル クロスエントロピー」損失関数が適しています。
最後に、モデルを評価するためのメトリクス (この場合は「精度」) を定義します。
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
モデルトレーニング
「fit」関数を使用してモデルをトレーニングします。
トレーニング データ (X トレイン) と関連するラベル (Y トレイン) を提供し、実行するエポック (反復) の数を 10 に設定します。トレーニング手順では、モデルの重みを変更して損失 (予測された実際のラベル) とトレーニング データの精度を向上させます。
model.fit(X_train, y_train, epochs=10)
モデル評価
次に、テスト データでトレーニング済みモデルを評価する必要があります。 テスト損失とテスト精度を使用して、モデルのパフォーマンスを評価します。 テスト データ X テストとテスト ラベル y テストでは、「model.evaluate 関数」を呼び出す必要があります。
この関数は、テスト精度とテスト損失を出力します。 変数 test loss と test accuracy にはそれぞれこれらの値が含まれています。 最後に、「print」関数を使用してテスト精度を出力します。
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
クラスの予測と予測されたクラスの取得
トレーニング モデルとテスト データを使用して、アルゴリズムは予測を行います。 テスト データが「model.predict」メソッドに渡されると、テスト セット内の各画像の予測の配列が出力されます。
次に、「np.argmax」関数を使用して「ターゲット名」リストから各画像のターゲット クラス名を取得し、予測確率が最大のインデックスを特定します。 次に、このインデックスを使用して、各画像の予測クラスを決定します。
リスト内包表記を使用すると、「予測」配列内のすべての予測がこのメソッドの対象となり、「予測クラス」リストが生成されます。
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
予測の視覚化
モデルがどのように見えるかを確認できます。
モデルのパフォーマンスを評価するために、最初の 10 枚の写真とその予測が表示されます。 写真をグレースケールでプロットし、画像の実際のクラスと、matplotlib.pyplot モジュールを使用してモデルによって予測されたクラスの両方を表示します。
「imshow」関数は for ループで使用され、最初の 10 個のテスト セットの写真をそれぞれプロットします。 ターゲット名[y test[i]] と予測クラス[i] は、それぞれ画像の実際のクラスと予測クラスを決定するために使用されます。 各プロットのタイトルは、これらの分類によって示されます。
最後に、プロットは plt.show() メソッドを使用して表示されます。
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
要約
TensorFlow は、機械学習モデルを作成するための完全で柔軟な環境を提供します。
特定の要件を満たすようにモデルを微調整するか、機械学習に新しい開発を追加することで、モデルの精度をさらに高めることができます。
TensorFlow と顔認識は、将来、セキュリティ システム、生体認証、ヘルスケアなどの業界でますます使用されるようになるでしょう。 まもなく、魅力的なイノベーションが見られるでしょう。
コメントを残す