データから導入まで

Linda Hamilton
リリース: 2024-11-03 01:43:29
オリジナル
526 人が閲覧しました

DataWhisper: DL プロジェクトのライフサイクルをマスターする

著者: Abdella Hallou (LinkedIn、Twitter)

ディープ ラーニング プロジェクト スターター ガイドへようこそ!このチュートリアルは、ディープ ラーニングのエキサイティングな世界に飛び込もうとしている人にとって、包括的なリソースとして機能します。初心者でも経験豊富な開発者でも、このガイドではディープ ラーニング プロジェクトを構築するプロセスを最初から最後まで説明します。

目次

  • 何を学ぶか
  • このチュートリアルに従うべき人
  • サポートが必要ですか?
  • 始めましょう!
  • データセットをインポートしてロードします
  • データセット構造
  • 探索的データ分析 (EDA)
  • データの前処理
  • モデルを構築する
  • 精度を評価する
  • モデルを保存してエクスポート
  • 予測を立てる
  • 導入
    • 新しい Flutter プロジェクトを作成する
    • カメラの設定
    • カメラ画面の作成
    • 画像アップロードの統合
    • TensorFlow Lite によるオブジェクト認識
    • 画像上でモデルを実行する
    • ダイアログでの結果の表示
    • ユーザー インターフェイスの構築

学べること

このチュートリアルでは、モバイル アプリでの深層学習モデルの作成とデプロイに関連する重要な手順を学習します。次のトピックについて説明します:

  1. データの準備: トレーニング用の堅牢で信頼性の高いデータセットを確保するために、データの前処理のさまざまな方法を検討します。

  2. モデルの作成: CNN モデルを設計および構築する方法を学びます。

  3. モデルのトレーニング: TensorFlow を使用して深層学習モデルをトレーニングするプロセスについて詳しく説明します。

  4. モバイル アプリへのデプロイ: モデルがトレーニングされたら、TensorFlow Lite を使用してモデルをモバイル アプリに統合する手順を案内します。外出先でも予測を行う方法がわかります!

このチュートリアルに従うべき人

このチュートリアルは、深層学習の概念と Python プログラミングの基本を理解している初心者および中級の開発者に適しています。データ サイエンティスト、機械学習愛好家、モバイル アプリ開発者のいずれであっても、このガイドはディープ ラーニング プロジェクトを開始するために必要な知識を提供します。

助けが必要ですか、それとも質問がありますか?

このチュートリアルの実行中に問題が発生したり、質問がある場合、またはさらに説明が必要な場合は、ためらうことなく、このリポジトリ From-Data-to-Deployment で GitHub の問題を作成してください。喜んでお手伝いさせていただき、必要なアドバイスをさせていただきます。

問題を作成するには、このリポジトリのページの上部にある 「問題」 タブをクリックし、「新しい問題」 ボタンをクリックします。直面している問題や質問について、できるだけ多くのコンテキストと詳細を提供してください。これにより、お客様のご懸念をより深く理解し、迅速かつ正確な対応を提供することができます。

あなたのフィードバックは貴重であり、他のユーザーのためのこのチュートリアルの改善にも役立ちます。サポートが必要な場合は、遠慮なくご連絡ください。一緒に学び、成長しましょう!

始めましょう!

まず、必要な依存関係とライブラリがインストールされていることを確認してください。このチュートリアルは理解しやすいセクションに分かれており、各セクションでは深層学習プロジェクトのワークフローの特定の側面をカバーしています。最も興味のあるセクションに自由にジャンプしたり、最初から最後まで読んでください。

準備はできていますか?

データセットのインポートとロード

コードに必要なインポートを開始しましょう。このチュートリアルでは、Fashion Mnist データセットを使用します。

# Import the necessary libraries
from __future__ import print_function
import keras
from google.colab import drive
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization
from keras.layers import Conv2D, MaxPooling2D
from keras.wrappers.scikit_learn import KerasClassifier
from keras import backend as K
from sklearn.model_selection import GridSearchCV
import tensorflow as tf
from keras.utils.vis_utils import plot_model
import matplotlib.pyplot as plt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

データセットの構造

どのような深層学習プロジェクトにおいても、データを理解することが重要です。モデルの作成とトレーニングに入る前に、データをロードし、その構造、変数、全体的な特性について洞察を得ることから始めましょう。

# Load the Fashion MNIST dataset
fashion_mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

探索的データ分析 (EDA)

データがロードされたので、その特性をより深く理解するために探索的なデータ分析を実行してみましょう。

print("Shape of the training data : ",x_train.shape)
print("Shape of the testing data : ",x_test.shape)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
Shape of the training data :  (60000, 28, 28)
Shape of the testing data :  (10000, 28, 28)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ファッション MNIST データセットには、10 のカテゴリの 70,000 のグレースケール画像が含まれています。以下に示すように、画像は個々の衣類を低解像度 (28 x 28 ピクセル) で示しています。
From Data to Deployment

60,000 の画像はネットワークのトレーニングに使用され、10,000 の画像はネットワークが画像の分類をどの程度正確に学習したかを評価するために使用されます。

# Printing unique values in training data
unique_labels = np.unique(y_train, axis=0)
print("Unique labels in training data:", unique_labels)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
Unique labels in training data: [0 1 2 3 4 5 6 7 8 9]
ログイン後にコピー
ログイン後にコピー

ラベルは 0 から 9 までの整数の配列です。これらは、画像が表す衣類のクラスに対応します。
|ラベル | Rクラス |
| - |-|
| 0 | Tシャツ/トップス|
| 1 |ズボン|
| 2 |プルオーバー|
| 3 |ドレス|
| 4 |コート|
| 5 |サンダル|
| 6 |シャツ|
| 7 |スニーカー|
| 8 |バッグ|
| 9 | アンクルブーツ |

クラス名はデータセットに含まれていないため、後で画像をプロットするときに使用するためにここに保存します。

# Numeric labels
numeric_labels = np.sort(np.unique(y_train, axis=0))
# String labels
string_labels = np.array(['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot'])
# Mapping numeric labels to string labels
numeric_to_string = dict(zip(numeric_labels, string_labels))
print("Numeric to String Label Mapping:")
print(numeric_to_string)
ログイン後にコピー
ログイン後にコピー
Numeric to String Label Mapping:
{0: 'T-shirt/top', 1: 'Trouser', 2: 'Pullover', 3: 'Dress', 4: 'Coat', 5: 'Sandal', 6: 'Shirt', 7: 'Sneaker', 8: 'Bag', 9: 'Ankle boot'}
ログイン後にコピー
ログイン後にコピー

データの前処理

ネットワークをトレーニングする前に、データを前処理する必要があります。
まず、データセット内のクラスの数 (この場合は 10) と入力画像のサイズ (28x28 ピクセル) を定義します。

# Import the necessary libraries
from __future__ import print_function
import keras
from google.colab import drive
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization
from keras.layers import Conv2D, MaxPooling2D
from keras.wrappers.scikit_learn import KerasClassifier
from keras import backend as K
from sklearn.model_selection import GridSearchCV
import tensorflow as tf
from keras.utils.vis_utils import plot_model
import matplotlib.pyplot as plt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この部分は、ニューラル ネットワーク モデルの予期される形式に一致するように入力画像データを再形成する役割を果たします。形式は、使用されているバックエンド (TensorFlow や Theano など) によって異なります。このスニペットでは、K.image_data_format() を使用して画像データ形式をチェックし、結果に基づいて適切な再整形を適用します。

# Load the Fashion MNIST dataset
fashion_mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

データ内の画像のピクセル値は0~255の範囲にあります。
これらの値を CNN モデルに与える前に、0 から 1 の範囲にスケールします。

print("Shape of the training data : ",x_train.shape)
print("Shape of the testing data : ",x_test.shape)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

クラス ラベル (整数として表される) をバイナリ クラス行列形式に変換します。これは、マルチクラス分類問題に必要です。

Shape of the training data :  (60000, 28, 28)
Shape of the testing data :  (10000, 28, 28)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

モデルを構築する

このステップでは、画像分類用の畳み込みニューラル ネットワーク (CNN) モデルを定義して構築します。モデル アーキテクチャは、畳み込み層、プーリング層、ドロップアウト層、高密度層などの複数の層で構成されます。 build_model 関数は、クラスの数、トレーニングおよびテスト データを入力として受け取り、トレーニング履歴と構築されたモデルを返します。

# Printing unique values in training data
unique_labels = np.unique(y_train, axis=0)
print("Unique labels in training data:", unique_labels)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
Unique labels in training data: [0 1 2 3 4 5 6 7 8 9]
ログイン後にコピー
ログイン後にコピー
# Numeric labels
numeric_labels = np.sort(np.unique(y_train, axis=0))
# String labels
string_labels = np.array(['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot'])
# Mapping numeric labels to string labels
numeric_to_string = dict(zip(numeric_labels, string_labels))
print("Numeric to String Label Mapping:")
print(numeric_to_string)
ログイン後にコピー
ログイン後にコピー

精度を評価する

トレーニングされたモデルのパフォーマンスを評価するために、テスト データに基づいて評価します。評価メソッドは、テストの損失と精度を計算するために使用されます。これらのメトリクスはコンソールに出力されます。

Numeric to String Label Mapping:
{0: 'T-shirt/top', 1: 'Trouser', 2: 'Pullover', 3: 'Dress', 4: 'Coat', 5: 'Sandal', 6: 'Shirt', 7: 'Sneaker', 8: 'Bag', 9: 'Ankle boot'}
ログイン後にコピー
ログイン後にコピー

From Data to Deployment

num_classes = 10
# input image dimensions
img_rows, img_cols = 28, 28
ログイン後にコピー
if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)
ログイン後にコピー

モデルを保存してエクスポートする

モデルをトレーニングした後、save メソッドを使用して階層データ形式 (HDF5) ファイル形式で保存します。次に、move_to_drive 関数を呼び出して、モデルを Google ドライブにエクスポートします。さらに、モデルは h52tflite 関数を使用して TensorFlow Lite 形式に変換され、結果の TFLite モデルも Google ドライブに保存されます。保存されたモデルと TFLite モデルのパスが返されます。

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
ログイン後にコピー

予測を立てる

モデルの予測を視覚化するために、テスト画像のランダムなセットを選択します。モデルは、predict メソッドを使用してこれらのイメージのクラス ラベルを予測します。次に、matplotlib.
を使用して、予測ラベルがグラウンド トゥルース ラベルと比較され、対応する予測ラベルとともに画像が表示されます。

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
ログイン後にコピー

From Data to Deployment

モデルの詳細については、次のリソースを確認してください:

  1. https://www.tensorflow.org/tutorials/keras/classification
  2. https://github.com/cmasch/zalando-fashion-mnist/tree/master

導入

新しいFlutterプロジェクトを作成する

新しい Flutter プロジェクトを作成する前に、Flutter SDK およびその他の Flutter アプリ開発関連の要件が適切にインストールされていることを確認してください: https://docs.flutter.dev/get-started/install/windows

プロジェクトがセットアップされたら、ユーザーが写真を撮ったり、ギャラリーから画像をアップロードしたり、エクスポートされた TensorFlow Lite モデルを使用してオブジェクト認識を実行できるようにする UI を実装します。
まず、次のパッケージをインストールする必要があります:

  1. カメラ: 0.10.4
  2. 画像ピッカー:
  3. tflite: ^1.1.2

これを行うには、次のコード スニペットをコピーし、プロジェクトの pubspec.yaml ファイルに貼り付けます。

# Import the necessary libraries
from __future__ import print_function
import keras
from google.colab import drive
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization
from keras.layers import Conv2D, MaxPooling2D
from keras.wrappers.scikit_learn import KerasClassifier
from keras import backend as K
from sklearn.model_selection import GridSearchCV
import tensorflow as tf
from keras.utils.vis_utils import plot_model
import matplotlib.pyplot as plt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

プロジェクトの main.dart ファイルに必要なパッケージをインポートします

# Load the Fashion MNIST dataset
fashion_mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

カメラの設定

カメラ機能を有効にするには、camera パッケージを利用します。まず、必要なパッケージをインポートし、カメラ コントローラーをインスタンス化します。 availableCameras() 関数を使用して、利用可能なカメラのリストを取得します。このチュートリアルでは、リストの最初のカメラを使用します。

print("Shape of the training data : ",x_train.shape)
print("Shape of the testing data : ",x_test.shape)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

カメラ画面の作成

カメラのプレビューと画像キャプチャ機能を処理する CameraScreen という新しい StatefulWidget を作成します。 initState() メソッドで、カメラ コントローラーを初期化し、解像度のプリセットを設定します。さらに、カメラ コントローラーを使用して画像をキャプチャする _takePicture() メソッドを実装します。

Shape of the training data :  (60000, 28, 28)
Shape of the testing data :  (10000, 28, 28)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

画像アップロードの統合

ユーザーがギャラリーから画像をアップロードできるようにするには、image_picker パッケージをインポートします。 _pickImage() メソッドを実装します。このメソッドは、ImagePicker クラスを利用してギャラリーから画像を選択します。画像を選択すると、_processImage() メソッドを使用して処理できます。

# Printing unique values in training data
unique_labels = np.unique(y_train, axis=0)
print("Unique labels in training data:", unique_labels)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

TensorFlow Lite によるオブジェクト認識

オブジェクト認識を実行するには、TensorFlow Lite を使用します。まず、tflite パッケージをインポートします。 _initTensorFlow() メソッドで、アセットから TensorFlow Lite モデルとラベルをロードします。モデルとラベルのファイル パスを指定し、スレッド数や GPU デリゲートの使用量などの設定を調整できます。

# Import the necessary libraries
from __future__ import print_function
import keras
from google.colab import drive
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization
from keras.layers import Conv2D, MaxPooling2D
from keras.wrappers.scikit_learn import KerasClassifier
from keras import backend as K
from sklearn.model_selection import GridSearchCV
import tensorflow as tf
from keras.utils.vis_utils import plot_model
import matplotlib.pyplot as plt
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

画像上でモデルを実行する

_objectRecognition() メソッドを実装します。このメソッドは、画像ファイルのパスを入力として受け取り、画像上で TensorFlow Lite モデルを実行します。このメソッドは、認識されたオブジェクトのラベルを返します。

# Load the Fashion MNIST dataset
fashion_mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ダイアログでの結果の表示

画像が処理されると、showDialog() メソッドを使用して結果をダイアログ ボックスに表示します。ダイアログをカスタマイズして、認識されたオブジェクトのラベルを表示し、キャンセルするオプションを提供します。

print("Shape of the training data : ",x_train.shape)
print("Shape of the testing data : ",x_test.shape)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ユーザーインターフェイスの構築

Shape of the training data :  (60000, 28, 28)
Shape of the testing data :  (10000, 28, 28)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

From Data to Deployment
From Data to Deployment

以上がデータから導入までの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート