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

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

ただいまの
回答率

91.26%

  • Python

    4190questions

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

  • Python 2.7

    974questions

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

  • TensorFlow

    321questions

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 55

poker

score 5

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

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

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

Device mapping: no known devices.
I 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

#!/usr/bin/env python
#! -*- coding: utf-8 -*-

import sys
import numpy as np
import cv2
import tensorflow as tf
import os
import random
import main

# OpenCVのデフォルトの顔の分類器のpath
cascade_path = '(省略)OpenCV/haarcascades/haarcascade_frontalface_alt.xml'
faceCascade = cv2.CascadeClassifier(cascade_path)


# 識別ラベルと各ラベル番号に対応する名前
HUMAN_NAMES = {
  0: u"A",
  1: u"B",
  2: u"C",
  3: u"D",
  4: u"E",
  5: u"F"
}

#指定した画像(img_path)を学習結果(ckpt_path)を用いて判定する
def evaluation(img_path, ckpt_path):
  # GraphのReset(らしいが、何をしているのかよくわかっていない…)
  tf.reset_default_graph()
  # 画像を開く
  f = open(img_path, 'r')
  # 画像読み込み
  img = cv2.imread(img_path, cv2.IMREAD_COLOR)
  # モノクロ画像に変換
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  face = faceCascade.detectMultiScale(gray, 1.1, 3)
  if len(face) > 0:
    for rect in face:
      # 加工した画像に何でもいいので適当な名前をつけたかった。日付秒数とかでいいかも
      random_str = str(random.random())
      # 顔部分を赤線で書こう
      cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0, 255), thickness=2)
      # 顔部分を赤線で囲った画像の保存先
      face_detect_img_path = '(省略)/result/' + random_str + '.jpg'
      # 顔部分を赤線で囲った画像の保存
      cv2.imwrite(face_detect_img_path, img)
      x = rect[0]
      y = rect[1]
      w = rect[2]
      h = rect[3]
      # 検出した顔を切り抜いた画像を保存
      cv2.imwrite('(省略)/result/' + random_str + '.jpg', img[y:y+h, x:x+w])
      # TensorFlowへ渡す切り抜いた顔画像
      target_image_path = '(省略)/result/' + random_str + '.jpg'
  else:
    # 顔が見つからなければ処理終了
    print ('image:NoFace')
    return
  f.close()

  f = open(target_image_path, 'r')
  # データを入れる配列
  image = []
  # 画像読み込み
  img = cv2.imread(target_image_path)
  # 28px*28pxにリサイズ
  img = cv2.resize(img, (28, 28))
  # 画像情報を一列にした後、0-1のfloat値にする
  image.append(img.flatten().astype(np.float32)/255.0)
  # numpy形式に変換し、TensorFlowで処理できるようにする
  image = np.asarray(image)
  # 入力画像に対して、各ラベルの確率を出力して返す(main.pyより呼び出し)
  logits = main.inference(image, 1.0)
  # We can just use 'c.eval()' without passing 'sess'
  sess = tf.InteractiveSession()
  # restore(パラメーター読み込み)の準備
  saver = tf.train.Saver()
  # 変数の初期化
  sess.run(tf.global_variables_initializer())
  if ckpt_path:
    # 学習後のパラメーターの読み込み
    saver.restore(sess, ckpt_path)
  # sess.run(logits)と同じ
  softmax = logits.eval()
  # 判定結果
  result = softmax[0]
  # 判定結果を%にして四捨五入
  rates = [round(n * 100.0, 1) for n in result]
  humans = []
  # ラベル番号、名前、パーセンテージのHashを作成
  for index, rate in enumerate(rates):
    name = HUMAN_NAMES[index]
    humans.append({
      'label': index,
      'name': name,
      'rate': rate
    })
  # パーセンテージの高い順にソート
  rank = sorted(humans, key=lambda x: x['rate'], reverse=True)

  # 判定結果と加工した画像のpathを返す
  return [rank, face_detect_img_path, target_image_path]

# コマンドラインからのテスト用
if __name__ == '__main__':
  evaluation('(省略)/test.jpg', '(省略)/model.ckpt')

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

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 20:49

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

    キャンセル

  • 2017/12/26 20:57

    デバッグするために必要なことを羅列してみます。

    GPUがなければCPUを使うだけなので問題が起きないはずなのですが、Tensorflowの旧バージョンでその限りではない可能性があります。ので、pip listをしてGPUバージョンをインストールしていないかを確認することが必要です。

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

    キャンセル

  • 2017/12/26 21:08

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

    キャンセル

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

ただいまの回答率

91.26%

関連した質問

同じタグがついた質問を見る

  • Python

    4190questions

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

  • Python 2.7

    974questions

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

  • TensorFlow

    321questions