More Related Content
Similar to run Keras model on opencv (20)
More from Takuya Minagawa (20)
run Keras model on opencv
- 2. 自己紹介
2
株式会社ビジョン&ITラボ 代表取締役
皆川 卓也(みながわ たくや)
「コンピュータビジョン勉強会@関東」主催
博士(工学)
http://visitlab.jp
略歴:
1999-2003年
日本HP(後にアジレント・テクノロジーへ分社)にて、ITエンジニアとしてシステム構築、プリ
セールス、プロジェクトマネジメント、サポート等の業務に従事
2004-2009年
コンピュータビジョンを用いたシステム/アプリ/サービス開発等に従事
2007-2010年
慶應義塾大学大学院 後期博士課程にて、コンピュータビジョンを専攻
単位取得退学後、博士号取得(2014年)
2009年-現在
フリーランスとして、コンピュータビジョンのコンサル/研究/開発等に従事(2018年法人化)
- 5. OpenCV DNNモジュール
5
推論専用
学習は他のDeep Learningライブラリを使用
ドキュメントは少ない
チュートリアル:
https://docs.opencv.org/4.0.0/d2/d58/tutorial_table
_of_content_dnn.html
APIリファレンス:
https://docs.opencv.org/4.0.0/d6/d0f/group__dnn.ht
ml
使っている人もそれほど多くなさそう
- 10. 1. Kerasで学習モデルを構築/学習
10
Tmodel = Sequential()
Tmodel.add(Conv2D(32,kernel_size=(5,5),input_shape=input_shape))
Tmodel.add(MaxPooling2D(pool_size=(2,2)))
Tmodel.add(Conv2D(64,kernel_size=(5,5),input_shape=input_shape))
Tmodel.add(MaxPooling2D(pool_size=(2,2)))
Tmodel.add(Flatten())
Tmodel.add(Dense(1024, activation=tf.nn.relu))
Tmodel.add(Dropout(0.2))
Tmodel.add(Dense(10,activation=tf.nn.softmax))
Tmodel.compile(optimizer='adam',
loss='sparse_categorical_crossentropy', metrics=['accuracy'])
学習モデル構築 KerasのSequential
Model
Conv x2
Max Pooling x2
Full Connected
Layer
Drop Out
学習方法を指定してコンパイル
- 11. 1. Kerasで学習モデルを構築/学習
11
from tensorflow.python.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test= x_test.reshape(x_test.shape[0], 28, 28, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
Tmodel.fit(x=x_train,y=y_train,epochs=10,batch_size=128,validation_
data=(x_test,y_test))
Tmodel.save("trained_model.h5")
MNISTで学習する例
MNISTの読み込
みとデータ整形
学習
学習結果
を保存
- 13. 2. Kerasで推論モデルを構築し、学習結果を読
み込み
13
Imodel = Sequential()
Imodel.add(Conv2D(32,kernel_size=(5,5),input_shape=input_sha
pe))
Imodel.add(MaxPooling2D(pool_size=(2,2)))
Imodel.add(Conv2D(64,kernel_size=(5,5),input_shape=input_sha
pe))
Imodel.add(MaxPooling2D(pool_size=(2,2)))
Imodel.add(Flatten())
Imodel.add(Dense(1024, activation=tf.nn.relu))
#Imodel.add(Dropout(0.2))
Imodel.add(Dense(10,activation=tf.nn.softmax))
推論モデル構築
学習モデルから
Dropoutを除いただけ
- 16. 3. Kerasの推論モデルからTensorflowのモデル
を取得し、保存
16
from tensorflow.python.keras.models import load_model
import tensorflow as tf
from tensorflow.python.keras import backend as K
model = load_model('inference_model.h5')
sess = K.get_session()
outname = "output_node0"
tf.identity(model.outputs[0], name=outname)
constant_graph = graph_util.convert_variables_to_constants(sess,
sess.graph.as_graph_def(),[outname])
tf.train.write_graph(constant_graph, "./", "lenet.pb", as_text=False)
推論モデル構築
Keras推論モデル
読み込み
Kerasのバックエンド(Tensorflow)
のセッション取得
Freeze
プロトコルバッファをバイ
ナリで保存(./lenet.pb)
- 17. 4. OpenCVでモデルファイルを読み込み、推論
を実行
17
dnn::Net net = dnn::readNet("./lenet.pb");
Mat img = imread(“mnist0.png", 0);
Mat blob = dnn::blobFromImage(img, 1.0 / 255);
net.setInput(blob);
Mat prob = net.forward();
Point classIdPoint;
double confidence;
minMaxLoc(prob.reshape(1, 1), 0, &confidence, 0, &classIdPoint);
int classId = classIdPoint.x;
C++
Tensorflow推論
モデル読み込み
予測