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

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

ただいまの
回答率

88.92%

セマンティックセグメンテーション Deeplab v3+を用いて画像から人型を認識させたい。

解決済

回答 1

投稿 編集

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

dendenmushi

score 83

前提・実現したいこと

semantic_segmentation Deeplabを使用して画像から人だけを認識させたい。(2020年7月現在の方法)
行おうとしていることは以下のサイトの内容になります。
誰でも出来る!DeepLab v3+でGPUを使って自作データセットで学習・推論する

推奨環境

OS    Windows10
GPU    RTX2060
GPUのドライバー    436.48
python    Python 3.6.9 :: Anaconda, Inc.
CUDA    CUDA Toolkit 9.0
cuDNN    v7.4.1.5
tensorflow_gpu    v1.13.1
keras    2.3.1

私の開発環境

OS    Windows10
GPU    RTX2070
GPUのドライバー    26.21.14.4166
python    Python 3.6.9 :: Anaconda, Inc.
CUDA    CUDA Toolkit 9.0
cuDNN    release 9.0, V9.0.176
tensorflow_gpu    v1.13.1
keras    2.3.4

発生している問題・エラーメッセージ

【事象①】
PATHを通してPC再起動を行った後に
model_test.py -vを行ったときに以下エラーが発生しました。

(py37gpu_resnet) C:\ProgramData\Anaconda3\envs\py37gpu_resnet\background-removal\models\research\deeplab>python model_test.py -v
No module named 'tf_slim'


対応

pip install tf_slim

この対応後に以下が発生しました。
【事象②】

(py37gpu_resnet) C:\ProgramData\Anaconda3\envs\py37gpu_resnet\background-removal\models\research\deeplab>python model_test.py -v


cannot import name 'device_spec' from 'tensorflow.python.framework

対応
以下のサイトを参考にしました。
ImportError: cannot import name 'device_spec' from 'tensorflow.python.framework'

pip install tensorflow_gpu==1.13.1

その後、python model_test.py -vを行ったところ、

ImportError: cannot import name 'device_spec' from 'tensorflow.python.framework' (C:\ProgramData\Anaconda3\envs\py37gpu_resnet\lib\site-packages\tensorflow\python\framework\__init__.py)

さらに試したこと

1
DeepLab で Sematic Segmentation する(デモを動かす)
ここで言われているDemoをGoogle-colabでも動かしてみましたが、この場合は、自分の好きな画像に対してURLを準備しなければ実行できないようでした。

GPUをあきらめてtensorflow==1.13.1で動かそうとしたところ、

    from tensorflow.python.framework import device_spec as tf_device
ImportError: cannot import name 'device_spec' from 'tensorflow.python.framework' (C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\__init__.py)

この際ローカル実行の方向は諦めてGoogle colab上の整った環境で行ってみようと思い以下を実行しました。

2
準備として上記サイト『誰でもできる~』にある手順を参考に、以下2つを入手してから、GoogleDriveのColab NotebookにVOC2012フォルダを作り、入れておきました。

deeplabv3_pascal_train_aug_2018_01_04.tar.gz →入手先
VOCtrainval_11-May-2012.tar →入手先
イメージ説明

Google Colab のコマンドごとに一行あけています。

# Google Driveマウント
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse

import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

!mkdir -p drive
!google-drive-ocamlfuse drive
!ls drive

# Pascal VOC形式のデータセットをTFRecordに変換
!git clone https://github.com/tensorflow/models

cd models/research/deeplab/datasets

!mkdir pascal_voc_seg

!mkdir pascal_voc_seg/VOCdevkit

cd ../../../../../

cd content/

!cp drive/"Colab Notebooks"/VOC2012/VOCtrainval_11-May-2012.tar models/research/deeplab/datasets/pascal_voc_seg/

cd models/research/deeplab/datasets/pascal_voc_seg/

!7z x VOCtrainval_11-May-2012.tar

cd ../../../../../../

cd content/models/research/deeplab/datasets/

# SegmentationClassRawを生成
!python ./remove_gt_colormap.py --original_gt_folder="./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClass" --output_dir="./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClassRaw"

mkdir pascal_voc_seg/tfrecord

!python ./build_voc2012_data.py \
    --image_folder="./pascal_voc_seg/VOCdevkit/VOC2012/JPEGImages" \
    --semantic_segmentation_folder="./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClassRaw" \
    --list_folder="./pascal_voc_seg/VOCdevkit/VOC2012/ImageSets/Segmentation" \
    --image_format="jpg" \
    --output_dir="./pascal_voc_seg/tfrecord/"

!pip uninstall tensorflow

!pip install tensorflow==1.13.1

!python ./build_voc2012_data.py \
    --image_folder="./pascal_voc_seg/VOCdevkit/VOC2012/JPEGImages" \
    --semantic_segmentation_folder="./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClassRaw" \
    --list_folder="./pascal_voc_seg/VOCdevkit/VOC2012/ImageSets/Segmentation" \
    --image_format="jpg" \
    --output_dir="./pascal_voc_seg/tfrecord/"

cd ../../../../../../

cd content/models/research/deeplab/

mkdir ./datasets/pascal_voc_seg/init_models

cd ../../../../../content/

!cp drive/"Colab Notebooks"/VOC2012/deeplabv3_pascal_train_aug_2018_01_04.tar.gz models/research/deeplab/datasets/pascal_voc_seg/init_models/

cd models/research/deeplab/datasets/pascal_voc_seg/init_models/

!tar -zxvf deeplabv3_pascal_train_aug_2018_01_04.tar.gz

cd ../../

# PATH通し
! echo $PYTHONPATH
import os
os.environ['PYTHONPATH'] += ":/content/models/research"
os.environ['PYTHONPATH'] += ":/content/models/research/slim"
os.environ['PYTHONPATH'] += ":/content/models/research/deeplab"
! echo $PYTHONPATH

cd ../../../../../

!cp -r content/models/research/slim/nets content/models/research/deeplab

cd /content/models/research/deeplab/

!python model_test.py -v

!pip install tf_slim

# PATHチェック
!python model_test.py -v

しかし以下ログが出てしまいました。

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:526: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_qint8 = np.dtype([("qint8", np.int8, 1)])
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:527: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_quint8 = np.dtype([("quint8", np.uint8, 1)])
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:528: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_qint16 = np.dtype([("qint16", np.int16, 1)])
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:529: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_quint16 = np.dtype([("quint16", np.uint16, 1)])
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:530: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_qint32 = np.dtype([("qint32", np.int32, 1)])
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:535: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  np_resource = np.dtype([("resource", np.ubyte, 1)])
Traceback (most recent call last):
  File "model_test.py", line 22, in <module>
    from deeplab import model
  File "/content/models/research/deeplab/model.py", line 58, in <module>
    from deeplab.core import feature_extractor
  File "/content/models/research/deeplab/core/feature_extractor.py", line 24, in <module>
    from deeplab.core import nas_network
  File "/content/models/research/deeplab/core/nas_network.py", line 44, in <module>
    from deeplab.core import nas_genotypes
  File "/content/models/research/deeplab/core/nas_genotypes.py", line 23, in <module>
    from deeplab.core import nas_cell
  File "/content/models/research/deeplab/core/nas_cell.py", line 29, in <module>
    from deeplab.core import xception as xception_utils
  File "/content/models/research/deeplab/core/xception.py", line 58, in <module>
    from nets.mobilenet import conv_blocks as mobilenet_v3_ops
  File "/content/models/research/deeplab/nets/mobilenet/conv_blocks.py", line 20, in <module>
    import tf_slim as slim
  File "/usr/local/lib/python3.6/dist-packages/tf_slim/__init__.py", line 25, in <module>
    from tf_slim.layers import *
  File "/usr/local/lib/python3.6/dist-packages/tf_slim/layers/__init__.py", line 25, in <module>
    from tf_slim.layers.layers import *
  File "/usr/local/lib/python3.6/dist-packages/tf_slim/layers/layers.py", line 30, in <module>
    from tf_slim.ops import variables
  File "/usr/local/lib/python3.6/dist-packages/tf_slim/ops/variables.py", line 27, in <module>
    from tensorflow.python.framework import device_spec as tf_device
ImportError: cannot import name 'device_spec'

このエラーから下記サイトを参考にしました。
ImportError: cannot import name device_spec #40857

今度はtensorflowを上げた方がよいという指摘でした…先ほどあえて2verだと駄目なため、1.13.1に下げたばかりでした。
人型に綺麗に認識させる挑戦がこんなにも大変だと思いませんでした。
この後の対応、もしくは他方法でもDeeplabを用いた2020年現在の方法ご教授どなたか頂けないでしょうか。
よろしくお願い致します。

20200704 21:30追記

すみません。別解決方法の糸口です。
DeepLab で Sematic Segmentation する(デモを動かす)
上記のこのサイトで外部URL指定すればできるのですが、もしこれがローカル上にある画像を指定できるのであれば実現できるのですが、C:/~でも,./2.PNGなどでもできませんでした。これはIISやもしくはどこかに外部にアップロードが必ず必要ということになるのでしょうか。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

追記部分に関しての部分レスになります。

20200704 21:30追記
もしこれがローカル上にある画像を指定できるのであれば実現できるのですが、

これは Google Colab 上で利用の際に、ローカル上にある画像を指定
ということですよね?(確認) アップロードするなら

直接ローカルのパスを指定するはセキュリティの都合があるので、
Google Colab から C:/~でも,./2.PNGなど は当然できません。
が、自分のみの環境でも良いなら ngrok について調べて見て下さい。
ローカルファイルを外部から参照可能にするサービスを中継に使う方法があります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/05 09:37

    ありがとうございます。このような方法があるのですね。

    キャンセル

  • 2020/07/05 14:10

    ローカルでの環境構築に関してはTensorflow 2 が必要そうですね。

    > GPUをあきらめてtensorflow==1.13.1で動かそうとした
    > 先ほどあえて2verだと駄目なため、1.13.1に下げたばかりでした。

    Tensorflow 2 がダメだった原因辺りが気になります。

    もしpip でインストールできなかった場合の確認点
    https://www.tensorflow.org/install/pip
    > TensorFlow 2 のインストールには、より新しいバージョンの pip が必要です。

    docker を利用でも、対象のフォルダをマウントすることでローカルファイルへアクセスできます。

    キャンセル

  • 2020/07/05 14:14

    バージョンまわりが本当に大変なんですね…なんとかローカル保存ができるようになりました。ありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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