質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

1260閲覧

deep-learning-modelsの画像認識時間

退会済みユーザー

退会済みユーザー

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2018/04/04 15:33

下記のサイトを見ながら画像認識を試しています。
https://qiita.com/PonDad/items/c5419c164b4f2efee368

学習済みモデルh5とjsonをダウンロードして同じ階層に置き、inception_v3のh5のリンク先をローカルに書き換えました。
WEIGHTS_PATH = 'inception_v3_weights_tf_dim_ordering_tf_kernels.h5'
WEIGHTS_PATH_NO_TOP = 'inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5'
サイトにはラズパイでも1,2秒で認識すると記載されていますが実際には1,2分かかってしまいます。
どこがいけないのでしょうか?よろしくお願いします。

h5py 2.7.1
keras 2.1.2
tensorflow 1.4.1
opencv 3.4.1
python 3.5.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2018/04/04 21:32

Python以外に何か他のプログラムを後ろで走らせていませんか?Inception_v3だけでそんなにかかるのは変です。初回限定ダウンロードや、初期化などの時間を含めていませんか?
退会済みユーザー

退会済みユーザー

2018/04/05 00:31

特に自分では他のプログラムを動かしてはいないのですが。。。そもそも初回動作時もダウンロードしてきてくれず、自分でwgetしてきました。これが問題なのでしょうか?
guest

回答1

0

ベストアンサー

banbanさん、

実際には1,2分かかってしまいます。

これは、Inception_v3.py を実行してから、認識するまで、を言ってるですよね?

中の時間を計測すると、モデルの読み込みに時間がかかっているようです。

こちらの環境では、main実行まで(importなど)数秒かかり、modelの読み込み(time1)に180秒、time5(認識)は初回が7.4秒、それ以降は、2.2秒程度でした。

  • コード例
import time . . . if __name__ == '__main__': print("time 1 : start") start = time.time() model = InceptionV3(include_top=True, weights='imagenet') end = time.time() print("time 1 : {0}".format(end - start)) for iterator in range(0, 2): print("time 2a : start") start = time.time() img_path = 'elephant.jpg' img = image.load_img(img_path, target_size=(299, 299)) end = time.time() print("time 2a : {0}".format(end - start)) print("time 3a : start") start = time.time() x = image.img_to_array(img) x = np.expand_dims(x, axis=0) end = time.time() print("time 3a : {0}".format(end - start)) print("time 4a : start") start = time.time() x = preprocess_input(x) end = time.time() print("time 4a : {0}".format(end - start)) print("time 5a : start") start = time.time() preds = model.predict(x) end = time.time() print("time 5a : {0}".format(end - start)) print('Predicted:', decode_predictions(preds)) . . .
  • 環境
>>> sys.version_info sys.version_info(major=3, minor=5, micro=3, releaselevel='final', serial=0) >>> numpy.__version__ '1.14.2' >>> cv2.__version__ '3.4.1' >>> tensorflow.__version__ '1.7.0' >>> keras.__version__ '2.1.5' >>> h5py.__version__ '2.7.1'
  • 実行例(3つの画像を使用。2回計測)
pi@raspberrypi:~/deep-learning-models $ time python3 inception_v3-mod.py /usr/local/lib/python3.5/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`. from ._conv import register_converters as _register_converters Using TensorFlow backend. time 1 : start time 1 : 180.10169005393982 time 2a : start time 2a : 1.216275691986084 time 3a : start time 3a : 0.0029439926147460938 time 4a : start time 4a : 0.006985664367675781 time 5a : start time 5a : 7.432719707489014 Predicted: [[('n02504458', 'African_elephant', 0.58458394), ('n01871265', 'tusker', 0.35385633), ('n02504013', 'Indian_elephant', 0.01978549), ('n02134084', 'ice_bear', 0.0005529598), ('n02437312', 'Arabian_camel', 0.00053362496)]] time 2b : start time 2b : 0.017755985260009766 time 3b : start time 3b : 0.002666473388671875 time 4b : start time 4b : 0.0068395137786865234 time 5b : start time 5b : 2.1992945671081543 Predicted: [[('n07742313', 'Granny_Smith', 0.83817315), ('n07747607', 'orange', 0.019701822), ('n07768694', 'pomegranate', 0.0032308628), ('n07753592', 'banana', 0.002971005), ('n03804744', 'nail', 0.0017091646)]] time 2c : start time 2c : 0.00748896598815918 time 3c : start time 3c : 0.002615690231323242 time 4c : start time 4c : 0.006865739822387695 time 5c : start time 5c : 2.200554609298706 Predicted: [[('n07920052', 'espresso', 0.4395446), ('n07930864', 'cup', 0.24479486), ('n03063599', 'coffee_mug', 0.08118124), ('n03297495', 'espresso_maker', 0.007292483), ('n03063689', 'coffeepot', 0.0063423538)]] time 2a : start time 2a : 1.1786425113677979 time 3a : start time 3a : 0.002651691436767578 time 4a : start time 4a : 0.006893634796142578 time 5a : start time 5a : 2.19692325592041 Predicted: [[('n02504458', 'African_elephant', 0.58458394), ('n01871265', 'tusker', 0.35385633), ('n02504013', 'Indian_elephant', 0.01978549), ('n02134084', 'ice_bear', 0.0005529598), ('n02437312', 'Arabian_camel', 0.00053362496)]] time 2b : start time 2b : 0.018367528915405273 time 3b : start time 3b : 0.002653837203979492 time 4b : start time 4b : 0.007094621658325195 time 5b : start time 5b : 2.1861379146575928 Predicted: [[('n07742313', 'Granny_Smith', 0.83817315), ('n07747607', 'orange', 0.019701822), ('n07768694', 'pomegranate', 0.0032308628), ('n07753592', 'banana', 0.002971005), ('n03804744', 'nail', 0.0017091646)]] time 2c : start time 2c : 0.00771021842956543 time 3c : start time 3c : 0.0028247833251953125 time 4c : start time 4c : 0.007145404815673828 time 5c : start time 5c : 2.200134038925171 Predicted: [[('n07920052', 'espresso', 0.4395446), ('n07930864', 'cup', 0.24479486), ('n03063599', 'coffee_mug', 0.08118124), ('n03297495', 'espresso_maker', 0.007292483), ('n03063689', 'coffeepot', 0.0063423538)]] real 3m37.508s user 4m10.058s sys 0m4.162s

投稿2018/04/05 21:17

編集2018/04/05 21:20
mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/06 12:44 編集

もしかしたら自分は根本的に勘違いをしているかもしれません。mt08さんのコードを使って時間を計測したら下記のような結果になりました。 (cv) pi@raspberrypi:~/deep-learning-models-0.5 $ time python3 inception_v3-mod.py /home/pi/.virtualenvs/cv/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`. from ._conv import register_converters as _register_converters Using TensorFlow backend. time 1 : start time 1 : 82.81470131874084 time 2a : start time 2a : 1.314312219619751 time 3a : start time 3a : 0.0029363632202148438 time 4a : start time 4a : 0.008226156234741211 time 5a : start time 5a : 5.249925374984741 Predicted: [[('n02504458', 'African_elephant', 0.58458394), ('n01871265', 'tusker', 0.35385633), ('n02504013', 'Indian_elephant', 0.01978549), ('n02134084', 'ice_bear', 0.0005529598), ('n02437312', 'Arabian_camel', 0.00053362496)]] time 2a : start time 2a : 0.0944066047668457 time 3a : start time 3a : 0.002754688262939453 time 4a : start time 4a : 0.00834202766418457 time 5a : start time 5a : 2.483754873275757 Predicted: [[('n07920052', 'espresso', 0.98693395), ('n07930864', 'cup', 0.004146574), ('n03063599', 'coffee_mug', 0.0013964938), ('n04263257', 'soup_bowl', 0.00030351264), ('n03297495', 'espresso_maker', 0.00025595698)]] time 2a : start time 2a : 1.3574497699737549 time 3a : start time 3a : 0.002788066864013672 time 4a : start time 4a : 0.008253335952758789 time 5a : start time 5a : 2.503756284713745 Predicted: [[('n01855672', 'goose', 0.9495051), ('n02007558', 'flamingo', 0.004349739), ('n01860187', 'black_swan', 0.0038804952), ('n02012849', 'crane', 0.00290681), ('n01847000', 'drake', 0.0025180478)]] real 1m47.118s user 2m6.990s sys 0m2.868s 自分は環境が出来てからの1回目のinceptionv3の実行だけが遅くて2回目の実行から早くなると認識していました。本当はそうではくてinceptionv3は実行するたび1枚目の画像を認識するのには時間がかかりv3実行中の2枚目画像からの認識が早くなるということなのでしょうか?上手く表現できなくて申し訳ないのですがご理解できたらご教示ください。
mkgrei

2018/04/07 02:15

モデルの初期化で重みをモデルにロードするところに時間がかかります。 ロードしておけばその後の画像の認識はほぼ一定では?
mkgrei

2018/04/08 04:59

つまり、2枚めの画像から早くなるというよりも、2枚目以降は重みがメモリ上にキャッシュされているので認識するための計算のみの時間が測定できていて、1枚目はメモリにロードする時間が含まれています。 GPUを使ってやると、重みをメインメモリからGPUメモリに移すため、1枚目の時間が更に伸びます。
退会済みユーザー

退会済みユーザー

2018/04/12 12:17

なるほどそういうことでしたか。ありがとうございます。理解しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問