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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

337閲覧

TensorFlowのDevice mapping: no known devices.について。

poker

総合スコア14

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/12/26 03:34

こちらのブログを参考にしてTensorFlowを用いた顔認識のプログラムを作成しています。
ディープラーニングでザッカーバーグの顔を識別するAIを作る④(WEB構築編)

データを学習させ、model.ckptという学習データを作成することができました。

上記サイトのeval.pyをエラーが出る部分を修正して実行していたのですが、以下のエラーがどうしても解決できず、教えていただきたいです。

python

1Device mapping: no known devices. 2I tensorflow/core/common_runtime/direct_session.cc:255] Device mapping:

Device mapping: no known devices.を検索すると、GPUに関する記事が何個かヒットするのですが、GPUは無いためにCPUのみで作業しています。
python2系、tensorflow 0.12.1です。

以下、コード全文です。

eval.py

python

1#!/usr/bin/env python 2#! -*- coding: utf-8 -*- 3 4import sys 5import numpy as np 6import cv2 7import tensorflow as tf 8import os 9import random 10import main 11 12# OpenCVのデフォルトの顔の分類器のpath 13cascade_path = '(省略)OpenCV/haarcascades/haarcascade_frontalface_alt.xml' 14faceCascade = cv2.CascadeClassifier(cascade_path) 15 16 17# 識別ラベルと各ラベル番号に対応する名前 18HUMAN_NAMES = { 19 0: u"A", 20 1: u"B", 21 2: u"C", 22 3: u"D", 23 4: u"E", 24 5: u"F" 25} 26 27#指定した画像(img_path)を学習結果(ckpt_path)を用いて判定する 28def evaluation(img_path, ckpt_path): 29 # GraphのReset(らしいが、何をしているのかよくわかっていない…) 30 tf.reset_default_graph() 31 # 画像を開く 32 f = open(img_path, 'r') 33 # 画像読み込み 34 img = cv2.imread(img_path, cv2.IMREAD_COLOR) 35 # モノクロ画像に変換 36 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 37 face = faceCascade.detectMultiScale(gray, 1.1, 3) 38 if len(face) > 0: 39 for rect in face: 40 # 加工した画像に何でもいいので適当な名前をつけたかった。日付秒数とかでいいかも 41 random_str = str(random.random()) 42 # 顔部分を赤線で書こう 43 cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0, 255), thickness=2) 44 # 顔部分を赤線で囲った画像の保存先 45 face_detect_img_path = '(省略)/result/' + random_str + '.jpg' 46 # 顔部分を赤線で囲った画像の保存 47 cv2.imwrite(face_detect_img_path, img) 48 x = rect[0] 49 y = rect[1] 50 w = rect[2] 51 h = rect[3] 52 # 検出した顔を切り抜いた画像を保存 53 cv2.imwrite('(省略)/result/' + random_str + '.jpg', img[y:y+h, x:x+w]) 54 # TensorFlowへ渡す切り抜いた顔画像 55 target_image_path = '(省略)/result/' + random_str + '.jpg' 56 else: 57 # 顔が見つからなければ処理終了 58 print ('image:NoFace') 59 return 60 f.close() 61 62 f = open(target_image_path, 'r') 63 # データを入れる配列 64 image = [] 65 # 画像読み込み 66 img = cv2.imread(target_image_path) 67 # 28px*28pxにリサイズ 68 img = cv2.resize(img, (28, 28)) 69 # 画像情報を一列にした後、0-1のfloat値にする 70 image.append(img.flatten().astype(np.float32)/255.0) 71 # numpy形式に変換し、TensorFlowで処理できるようにする 72 image = np.asarray(image) 73 # 入力画像に対して、各ラベルの確率を出力して返す(main.pyより呼び出し) 74 logits = main.inference(image, 1.0) 75 # We can just use 'c.eval()' without passing 'sess' 76 sess = tf.InteractiveSession() 77 # restore(パラメーター読み込み)の準備 78 saver = tf.train.Saver() 79 # 変数の初期化 80 sess.run(tf.global_variables_initializer()) 81 if ckpt_path: 82 # 学習後のパラメーターの読み込み 83 saver.restore(sess, ckpt_path) 84 # sess.run(logits)と同じ 85 softmax = logits.eval() 86 # 判定結果 87 result = softmax[0] 88 # 判定結果を%にして四捨五入 89 rates = [round(n * 100.0, 1) for n in result] 90 humans = [] 91 # ラベル番号、名前、パーセンテージのHashを作成 92 for index, rate in enumerate(rates): 93 name = HUMAN_NAMES[index] 94 humans.append({ 95 'label': index, 96 'name': name, 97 'rate': rate 98 }) 99 # パーセンテージの高い順にソート 100 rank = sorted(humans, key=lambda x: x['rate'], reverse=True) 101 102 # 判定結果と加工した画像のpathを返す 103 return [rank, face_detect_img_path, target_image_path] 104 105# コマンドラインからのテスト用 106if __name__ == '__main__': 107 evaluation('(省略)/test.jpg', '(省略)/model.ckpt') 108

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

それは本当にエラーですか?

https://github.com/tensorflow/tensorflow/issues/7648

Device mapping: no known devices. MatMul: (MatMul): /job:localhost/replica:0/task:0/cpu:0 b: (Const): /job:localhost/replica:0/task:0/cpu:0 a: (Const): /job:localhost/replica:0/task:0/cpu:0 [[ 22. 28.] [ 49. 64.]]

のようにTensorflow-GPU版をインストールすると一応GPUがないか確認して、その結果の情報を表示した後、見つからなければno known devicesと知らせてから、仕事はCPUに割り当てられます。

学習がちゃんとできて、最後まで実行されているのであれば問題ないはずです。
本当はGPUを認識させたい場合を除いて。

投稿2017/12/26 11:39

mkgrei

総合スコア8560

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

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

poker

2017/12/26 11:49

回答ありがとうございます。エラーではないのですね。ですが、学習が行われず、上記のメッセージが出て終了している状況です。
mkgrei

2017/12/26 11:57

デバッグするために必要なことを羅列してみます。 GPUがなければCPUを使うだけなので問題が起きないはずなのですが、Tensorflowの旧バージョンでその限りではない可能性があります。ので、pip listをしてGPUバージョンをインストールしていないかを確認することが必要です。 これ以外にエラーが出ていないのであれば、どこまで正しく実行されているのかを確認する必要があります。 考えられるものとして、 モジュールのインポート時 グラフを作ったとき セッションを作ったとき モデルを読み込んだとき モデルを使ったとき などです。print文による書き出しや、コードのくくりだしによって、どこまで正常に動くのかを確認してみると、問題の場所が絞りこめると思われます。
poker

2017/12/26 12:08

ありがとうございます! print文で結果を出力してないということに気づきました^^; print文で何を出力させれば結果が出るかわからず試行錯誤してみますが、この質問については解決できました! 昨日に引き続き本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問