Tensorflow 2.0画像分類:モデルのインストール、データの読み込み、構築、トレーニング

公開: 2020-04-21

画像分類は、パターン認識のカテゴリです。 隣接するピクセル間の関係に従って画像を分類します。 つまり、コンテキスト情報を使用して画像を整理し、さまざまなテクノロジーの間で非常に人気があります。 これはディープラーニングの重要なトピックであり、それについて学習している場合は、この記事をきっとお楽しみいただけます。

ここでは、TensorFlow画像分類を実行します。 モデルを作成してトレーニングし、その精度を高めてサボテンの画像を分類します。 TensorFlowは、オープンソースの機械学習プラットフォームであり、Googleの製品です。

始めましょう。

目次

TensorFlow2.0をインストールします

まず、GoogleColabにTensorFlowをインストールする必要があります。 あなたはpipを通してそれをインストールすることができます:

!pip install tensorflow-gpu == 2.0.0-alpha0

次に、インストールを確認します。

tensorflowをtfとしてインポートします

print(tf .__ version)

#出力:2.0.0-alpha0

ソース

学ぶ:初心者に最も人気のある5つのTensorFlowプロジェクト

データを読み込む

検証後、tf.data.datasetを使用してデータをロードできます。 画像にサボテンが含まれているかどうかを判断する分類器を作成します。 サボテンは円柱状である必要があります。この目的のためにサボテンの空中写真データセットを使用できます。 次に、ファイルパスとそのラベルをロードします。

train_csv = pd.read_csv('data / train.csv')

#train/の画像ファイル名の前に相対パスを付ける

filenames = ['train /'+ train_csv['id']。tolist()]のfnameのfname

ラベル=train_csv['has_cactus']。tolist()

train_filenames、val_filenames、train_labels、val_labels =

train_test_split(ファイル名、

ラベル、

train_size = 0.9、

random_state = 42)

ラベルとファイル名を取得したら、tf.data.Datasetオブジェクトを作成する準備が整います。

train_data = tf.data.Dataset.from_tensor_slices(

(tf.constant(train_filenames)、tf.constant(train_labels))

)。

val_data = tf.data.Dataset.from_tensor_slices(

(tf.constant(val_filenames)、tf.constant(val_labels))

)。

ソース

現在、データセットには実際の画像がありません。 ファイル名しかありません。 TensorFlow画像認識を実行できるように、必要な画像を読み込んで処理する関数が必要です。

IMAGE_SIZE = 96#MobileNetV2で使用するための最小画像サイズ

BATCH_SIZE = 32

#各画像を読み込んで前処理する関数

def _parse_fn(filename、label):

img = tf.io.read_file(img)

img = tf.image.decode_jpeg(img)

img =(tf.cast(img、tf.float32)/127.5)– 1

img = tf.image.resize(img、(IMAGE_SIZE、IMAGE_SIZE))

img、labelを返す

#trainおよびvalデータセットの各例に対して_parse_fnを実行します

#また、シャッフルしてバッチを作成します

train_data =(train_data.map(_parse_fn)

.shuffle(buffer_size = 10000)

.batch(BATCH_SIZE)

)。

val_data =(val_data.map(_parse_fn)

.shuffle(buffer_size = 10000)

.batch(BATCH_SIZE)

)。

ソース

モデルの構築

このTensorFlow画像分類の例では、転移学習モデルを作成します。 これらのモデルは、以前にトレーニングを受けた既存の画像分類モデルを使用できるため、高速です。 このレイヤーは必要なイメージのクラスを指定するため、ネットワークの上位レイヤーを再トレーニングするだけで済みます。

TensorFlow2.0のKerasAPIを使用して、画像分類モデルを作成します。 また、転移学習の目的で、MobileNetV2を属性検出器として使用します。 これはMobileNetの2番目のバージョンであり、Googleの製品です。 InceptionやResNetなどの他のモデルよりも軽量で、モバイルデバイスで実行できます。 このモデルをImageNetにロードし、重みをフリーズし、分類ヘッドを追加して、最上位レイヤーなしで実行します。

IMG_SHAPE =(IMAGE_SIZE、IMAGE_SIZE、3)

#MobileNetV2で事前トレーニングされたモデル

base_model = tf.keras.applications.MobileNetV2(

input_shape = IMG_SHAPE、

include_top = False、

weights ='imagenet'

)。

#事前にトレーニングされたモデルの重みをフリーズします

base_model.trainable = False

#トレーニング可能な分類ヘッド

maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()

Forecast_layer = tf.keras.layers.Dense(1、activation ='sigmoid')

#特徴検出器付きレイヤー分類ヘッド

model = tf.keras.Sequential([

base_model、

maxpool_layer、

予測レイヤー

])

Learning_rate = 0.0001

#モデルをコンパイルする

model.compile(optimizer = tf.keras.optimizers.Adam(lr = Learning_rate)、

loss ='binary_crossentropy'、

メトリック=['精度']

)。

ソース

tf.kerasモデルをトレーニングする場合は、TensorFlowオプティマイザーを使用する必要があります。 tf.keras.optimizersとtf.trainAPIのオプティマイザーは、TensorFlow2.0のtf.keras.optimizersに一緒に含まれています。 TensorFlow 2.0では、tf.kerasの元のオプティマイザーの多くが、パフォーマンスを向上させるためにアップグレードと交換を受けています。 これらにより、パフォーマンスを損なうことなくオプティマイザーを適用でき、時間も節約できます。

読む:初心者向けのTensorFlowオブジェクト検出チュートリアル

世界のトップ大学からデータサイエンスコース学びましょうエグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

モデルのトレーニング

モデルを作成したら、それを教えることができます。 TensorFlow2.0のtf.kerasAPIはtf.dataAPIをサポートしているため、この目的にはtf.data.Datasetオブジェクトを使用する必要があります。 トレーニングを効率的に行うことができ、パフォーマンスに妥協する必要はありません。

num_epochs = 30

Steps_per_epoch = round(num_train)// BATCH_SIZE

val_steps = 20

model.fit(train_data.repeat()、

epochs = num_epochs、

Steps_per_epoch = Steps_per_epoch、

validate_data = val_data.repeat()、

validate_steps = val_steps)

ソース

30エポック後、モデルの精度は大幅に向上しますが、さらに改善することができます。 覚えておいてください、私たちは転移学習中に重みを凍結することに言及しましたか? さて、分類ヘッドをトレーニングしたので、これらのレイヤーのフリーズを解除し、データセットをさらに微調整できます。

#MobileNetV2のすべてのレイヤーのフリーズを解除します

base_model.trainable = True

#微調整するレイヤーまでレイヤーを再フリーズします

base_model.layers [:100]のレイヤーの場合:

layer.trainable = False

#低い学習率を使用する

lr_finetune = Learning_rate / 10

#モデルを再コンパイルします

model.compile(loss ='binary_crossentropy'、

オプティマイザー=tf.keras.optimizers.Adam(lr = lr_finetune)、

メトリック=['精度'])

#微調整のためのトレーニングエポックを増やす

fine_tune_epochs = 30

total_epochs = num_epochs + fine_tune_epochs

#モデルを微調整

#注:initial_epochを設定して、エポック30以降にトレーニングを開始します。

#以前に30エポックのトレーニングを受けました。

model.fit(train_data.repeat()、

Steps_per_epoch = Steps_per_epoch、

epochs = total_epochs、

initial_epoch = num_epochs、

validate_data = val_data.repeat()、

validate_steps = val_steps)

ソース

30エポック後、モデルの精度はさらに向上します。 エポックが増えるにつれ、モデルの精度がさらに向上しました。 これで、画像内の円柱状のサボテンを高精度で認識できる適切なTensorFlow画像認識モデルができました。

また読む:初心者のためのTensorflowプロジェクトのアイデア

TensorFlow画像分類の詳細

TensorFlowの高機能APIとその機能により、あらゆるプログラマーが使用できる強力なテクノロジーになっています。 また、その高レベルAPIにより、一般的な複雑さが解消され、使いやすくなります。

TensorFlow、画像分類、および関連トピックについて詳しく知りたいですか? 次に、機械学習とAIのIIIT-BとupGradのPGディプロマをチェックすることをお勧めします。これは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディと課題、IIIT-B卒業生のステータス、5以上の実践的なものを提供します。実践的なキャップストーンプロジェクトとトップ企業との雇用支援。

機械学習コース| オンラインで学ぶ、IIIT Bangalore

機械学習とAIのPGディプロマとアップグレードおよびIIITバンガロア。
今すぐ申し込む