1. ホーム
  2. TensorFlow

TensorFlow学習 - Tensorflowオブジェクト検出API (win10, CPU)

2022-02-19 01:34:40

英語版リンクアドレス : https://github.com/tensorflow/models/tree/master/object_detection

以下のライブラリがインストールされていることを確認してください。

Tensorflow Object Detection APIは、以下のライブラリに依存しています。

  • Protobuf 2.6
  • ピロー 1.0
  • lxml
  • tf Slim (これは "tensorflow/models" のチェックアウトに含まれています)
  • Jupyterノートブック
  • Matplotlib
  • テンソルフロー

モデルのダウンロードリンクです。 https://github.com/tensorflow/models    (モデルの各モジュールの簡単な説明が含まれています。ダウンロードにはChromeを使用することをお勧めします。 <スパン モデルマスター.zip )

ローカルディレクトリ(D: \TensorFlow Object Detection API Tutorial)にモデルをダウンロードし、解凍してmodelsフォルダにリネームして保存しました。

また、リンク先を開いてください。 <スパン https://github.com/google/protobuf/releases   <スパン 必要なバージョンをダウンロードします。私はここでWin版をダウンロードしています。  protoc-3.4.0-win32.zip, 解凍して作成: bin, include フォルダ

ファイルのディレクトリです。D:\TensorFlow Object Detection API Tutorialinclude and D:\TensorFlow Object Detection API Tutorialbin (the directory contains protoc.exe, which is used to compile the object_detection file later under the mods of protocol)

Win10で動作しており、AnacondaでTensorFlowをインストールしているので、Anacondaに付属するAnacondaプロンプト(cmdに近い)を開いてみました。

下図のように、ダウンロード・解凍後にmodelsディレクトリに切り分け、object_detection/protosディレクトリ下のprotoファイルをprotoc実行ファイルでコンパイルしてPythonファイルを生成しています; ( メッセージによると、protocのいくつかのバージョンを試したところ、3.5と3.6のバージョンには問題があり、3.5以前のバージョンを使ってみることが推奨されているようですが、私は3.4.0 protocを使って問題なく使うことができました )

をクリックし、Jupyterノートブックを開きます。

Object Detection Demoを開き、Run Allを実行すると、cocoからデータをダウンロードし、事前に学習させたモデルを生成するので、読者は必要に応じて自分のモデルを学習させることができます。実行後、以下のような検証テスト結果が生成されます。

<スパン COCOで学習させた主な5つのネットワークを公開します。ネットワーク構造は、SSD+MobileNet、SSD+Inception、R-FCN+ResNet101、Faster RCNN+ResNet101、Faster RCNN+Inception_ResNetの5つです。

もし、独自の画像を検出したい場合は、TEST_IMAGE_PATHSを独自の画像パスに変更すればうまくいくでしょう。

#PATH_TO_TEST_IMAGES_DIR = 'test_images' です。
#TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]である。

TEST_IMAGE_PATHS = ['person.jpg'] # 画像は対応するディレクトリへ

他のモデルを使用する場合は、Tensorflowの検出モデルzooを探し、中のモデルのダウンロードアドレスに従って、MODEL_NAMEを以下の値に変更するだけで、対応するモデルをダウンロードし、実行することができます。

MODEL_NAME = 'ssd_inception_v2_coco_11_06_2017'

MODEL_NAME = 'rfcn_resnet101_coco_11_06_2017'

MODEL_NAME = 'faster_rcnn_resnet101_coco_11_06_2017'

MODEL_NAME = 'faster_rcnn_inception_resnet_v2_atrous_coco_11_06_2017'

-------------------------------------------------------------- 上記は、APIからプログラムファイルを実行し、事前に学習したモデルでいくつかの画像分類結果をテストしています ------------------------------------------------------ ------

-------------------------------------------------------------- 以下では、この API とダウンロードしたモデルを使って、ビデオターゲットの検出とローカライズを行います -------------------------------------------------------------- ----------------------------------------------------------------------

上記のファイルをpyファイルとしてダウンロードし、ファイル名を変更してコードを変更します。この記事では、次のように変更します: object_detection_tutorial_CONVERT.py (ディレクトリ内。D:\TensorFlow Object Detection API Tutorial (ディレクトリ:Debian)

object_detection_tutorial_CONVERT.py の内容の次の変更は、カメラの読み込みとターゲットの検出とローカライズを行うことです。

変更後のコードです。

# coding: utf-8

# Object Detection Demo
# This notebook will walk you step by step through the process of using a pre-trained model to Make sure to follow the [installation instructions](https://github.com/tensorflow/models/blob/master/object_ Make sure to follow the [installation instructions]( detection/g3doc/installation.md) before you start.

# # Imports

# In[1]:

import numpy as np
import os
import six.movs.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile

from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image

import cv2 #add 20170825
cap = cv2.VideoCapture(0) #add 20170825

## Env setup

# In[2]: #delete 20170825
# This is needed to display the images. #delete 20170825
#get_ipython().magic('matplotlib inline') #delete 20170825

# This is needed since the notebook is stored in the object_detection folder.  
sys.path.append(". ")


# ## Object detection imports
# ## Here are the imports from the object detection module.

# In[3]:

from utils import label_map_util

from utils import visualization_utils as vis_util


# # Model preparation 

# ## Variables
# Variables 
# Any model exported using the `export_inference_graph.py` tool can be loaded here simply by changing `PATH_TO_CKPT` to point to a new .pb file.  
#By default we use an " 
# By default we use an "SSD with Mobilenet" model here. See the [detection model zoo](https://github.com/tensorflow/models/blob/master/ object_detection/g3doc/detection_model_zoo.md) for a list of other models that can be run out-of-the-box with varying speeds and accuracies.

# In [4]:

# What model to download.
MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'
MODEL_FILE = MODEL_NAME + '.tar.gz'
DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'

# Path to frozen detection graph. This is the actual model that is used for the object detection.
PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'

# List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

NUM_CLASSES = 90


## Download Model

# In[5]:

opener = urllib.request.URLopener()
opener.retrieve(DOWNLOAD_BASE + MODEL_FILE, MODEL_FILE)
tar_file = tarfile.open(MODEL_FILE)
for file in tar_file.getmembers():
  file_name = os.path.basename(file.name)
  if 'frozen_inference_graph.pb' in file_name:
    tar_file.extract(file, os.getcwd())


## Load a (frozen) Tensorflow model into memory.

## In[6]:

detection_graph = tf.Graph()
with detection_graph.as_default():
  od_graph_def = tf.GraphDef()
  with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
    serialized_graph = fid.read()


その後、IDLEやSpyderで実行すると、以下のような結果になります。