20190529のTensorFlowに関する記事は2件です。

CustomVision と Edge デバイス(de:code2019パーソナルスポンサー 提供サンプルコード)

Microsoft Azure Cogniyive ServicesのCustomVision(以下 CustomVisionと表記します)を利用すると独自のオブジェクト認識モデルを簡単に作ることができます。作成したモデルはREST APIから利用することもできますが、モデルを出力してスタンドアローンで利用することもできます。
今回のサンプルコードではCustomVisionで7種類の犬を判別するモデルを作成し、出力したモデルを使ってRaspberryPi上で推論を実行してみます。

実行環境

RaspberryPi3(Raspbian Stretch 04/08)
Tensorflow 1.13
OpenCV4.1.0

Windows10 PC(CustomVisionのモデル作成に使用)
ブラウザが利用できればなんでも可

モデルの作成

・次のURLからサンプルコードをPCにダウンロードします。

・ダウンロードしたフォルダにある「dogs.zip」を解凍します。

・CustomVisionのサイトにログインします。
0.PNG

・「New Project」をクリックします。
01.PNG

・次の画面で
「Name(任意)」、
「Project Types:Object Detection」、
「Domains:General(compact)」、
「Export Capabilities:Basic platforms」
を入力します。
02.PNG

・ファイルアップロード画面に移ります。
03.PNG

・解凍した犬のデータを1種類アップロードします。
04.PNG

・続いてアップロードした画像のアノテーションを行います。
 マウスカーソルを対象のオブジェクトに近づけると枠が表示されるのでサイズを調整して、タグ名を登録します。もし枠が表示されない場合は対象をドラッグして囲みます。アップロードした画像すべてにタグをつけていきます。
06.PNG

・アノテーションが完了したら「testset」以外残りの画像もフォルダごとに同様の作業を繰り返します。
11.PNG

・すべての作業が完了したら、「Performance」タブをクリックします。「Train」ボタンをクリックし、トレーニングを開始します。
07.PNG

・トレーニングが完了すると次の画面になります。
08.PNG

・「Export」をクリックします。
08-1.png

・モデルの出力形式を選択します。「Tensorflow」を選んでください。
09-1.png

・「Export」ボタンをクリックします。
10.PNG

・次の「Download」ボタンをクリックしてPCに保存します。
11.PNG

・ダウンロードしたファイルを解凍し、「model.pb」、「label.txt」をRaspberryPiに用意したサンプルコードのディレクトリにコピーします。
12.PNG

・RaspberryPiのターミナルを起動して、サンプルコードのディレクトリに移動します。

・コマンドラインから「python3 predict.py (認識させる画像ファイル)」を実行します。

・無事認識されたら犬が写っている範囲と犬種、確率が表示されます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

多層パーセプトロン [TensorFlow2.0でDeep Learning 3]

(目次はこちら)

はじめに

多層パーセプトロン [TensorFlowでDeep Learning 3]をtensorflow2.0で実現するためにはどうしたらいいのかを書く(tf.keras)。

コード

Python: 3.6.8, Tensorflow: 2.0.0a0で動作確認済み

多層パーセプトロン [TensorFlowでDeep Learning 3] (mnist_softmax_fc.py)を書き換えると、

v2/mnist_softmax_fc.py

v2/mnist_softmax_fc.py
from helper import *

IMAGE_SIZE = 28 * 28
CATEGORY_NUM = 10
LEARNING_RATE = 0.1
FEATURE_DIM = 100
EPOCHS = 30
BATCH_SIZE = 100
LOG_DIR = 'log_softmax_fc'
EPS = 1e-10


def loss_fn(y_true, y):
    y = tf.clip_by_value(y, EPS, 1.0)
    return -tf.reduce_sum(y_true * tf.math.log(y), axis=1)

class Dense(tf.keras.layers.Layer):
    def __init__(self, units, activation, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.units = units
        self.activation = tf.keras.activations.get(activation)

    def build(self, input_shape):
        input_dim = int(input_shape[-1])
        self.W = self.add_weight(
            name='weight',
            shape=(input_dim, self.units),
            initializer=tf.keras.initializers.GlorotUniform()
        )
        self.b = self.add_weight(
            name='bias',
            shape=(self.units,),
            initializer=tf.keras.initializers.Zeros()
        )
        self.built = True

    def call(self, x):
        if self.activation is None:
            raise Exception('Activation function is None')
        return self.activation(tf.matmul(x, self.W) + self.b)

if __name__ == '__main__':
    (X_train, y_train), (X_test, y_test) = mnist_samples(flatten_image=True)

    model = tf.keras.models.Sequential()
    model.add(Dense(FEATURE_DIM, input_shape=(IMAGE_SIZE,), activation='relu'))
    model.add(Dense(CATEGORY_NUM, input_shape=(FEATURE_DIM,), activation='softmax'))
    model.compile(loss=loss_fn, optimizer=tf.keras.optimizers.SGD(LEARNING_RATE), metrics=['accuracy'])

    cb = [tf.keras.callbacks.TensorBoard(log_dir=LOG_DIR)]
    model.fit(X_train, y_train, batch_size=BATCH_SIZE, epochs=EPOCHS, callbacks=cb, validation_data=(X_test, y_test))
    print(model.evaluate(X_test, y_test))

と書ける。結局2つの層は活性化関数が異なるだけなのでそれを引数として渡せるように変更。
で、この、Denseクラスは、tf.keras.layers.Dense(tensorflow/python/keras/layers/core.py)とほぼ同じものなので、
わざわざ定義する必要は全くなく、シンプルに書ける。

v2/mnist_softmax_fc_simple.py

v2/mnist_softmax_fc_simple.py
from helper import *

IMAGE_SIZE = 28 * 28
CATEGORY_NUM = 10
LEARNING_RATE = 0.1
FEATURE_DIM = 100
EPOCHS = 30
BATCH_SIZE = 100
LOG_DIR = 'log_softmax_fc'
EPS = 1e-10


if __name__ == '__main__':
    (X_train, y_train), (X_test, y_test) = mnist_samples(flatten_image=True)

    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Dense(FEATURE_DIM, input_shape=(IMAGE_SIZE,), activation='relu'))
    model.add(tf.keras.layers.Dense(CATEGORY_NUM, input_shape=(FEATURE_DIM,), activation='softmax'))
    model.compile(
            loss='categorical_crossentropy',
            optimizer=tf.keras.optimizers.SGD(LEARNING_RATE), metrics=['accuracy'])

    cb = [tf.keras.callbacks.TensorBoard(log_dir=LOG_DIR)]
    model.fit(X_train, y_train, batch_size=BATCH_SIZE, epochs=EPOCHS, callbacks=cb, validation_data=(X_test, y_test))
    print(model.evaluate(X_test, y_test))

めでたしめでたし
image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む