LoginSignup
0
0

More than 1 year has passed since last update.

tensorflow 2.9で画像認識をしてみた

Last updated at Posted at 2022-05-25

目的

下記サイトを参考に画像認識を試してみました。

YOLOをpythonで動かして画像認識をしてみた

私のPC環境では、いくつかエラーが発生しました。発生したエラーの回避方法をまとめ、画像認識の動作確認をします。

開発環境

Python version:3.9.7
OS: windows 10.0
Tensorflow:2.9

環境構築

まず、必要なライブラリをインストールと、gitからデータと学習の重みファイルをダウンロードします。
こちらの環境構築と同じようにして設定してください。

動作確認

上記リンクを使って、下記ファイルの動作を検証してみます。

test.py
from darkflow.net.build import TFNet
import cv2

options = {"model": "cfg/yolo.cfg", "load": "bin/yolo.weights", "threshold": 0.1}

tfnet = TFNet(options)

imgcv = cv2.imread("./sample_img/sample_dog.jpg")
result = tfnet.return_predict(imgcv)
print(result)

実行すると、tensorflowでエラーが発生しました。

tensorflowのエラー調査(windows10 インストール不具合)

ModuleNotFoundError: No module named 'tensorflow'

環境構築時にtensorflowをインストールしていますが、なぜかエラーが出てしまいます。
pipでtensorflowを再度入れなおしてみましたが、下記のようなエラーが発生しました。

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: xxxxxxxx

このエラーについて調べてみると、window10の初期設定が原因で発生するそうです。

tensorflowのインストール中に、実行するプログラムの一部のpathが長すぎるため、途中で止まってしまいます。
デフォルトでは、260文字の制限があります。

こちらを参考にすると、回避できます。

cv2のエラー調査(open cv不具合)

tensorflowを修復後、test.pyを実行してみましたが、下記のようにエラーが出てしました。

ModuleNotFoundError: No module named 'cv2'

こちらを参考にインストールすると回避できました。

エラー調査(tensorflowの1.xから2.xでの不具合)

cv2を修復後、test.pyを実行してみましたが、エラーが出てしました。

ここからのエラーは、tensorflowの1.xから2.xに変更になったときにライブラリの一部のコマンドが違うAPIに移ったことにより、記述を変更する必要があります。そのため、cloneで取得したgitのファイル情報https://github.com/thtrieu/darkflow.gitの一部を変更する必要があります。

エラーと対処方法を簡単にまとめ、修正したものをgitにあげておくので、参考にしてください。

No module named 'tensorflow.contrib'

エラー
こちらを参考に修正しました。

ModuleNotFoundError: No module named 'tensorflow.contrib'

修正

# 変更前
# import tensorflow.contrib.slim as slim
# 変更後
import tf_slim as slim

Attribute Error: module 'tensorflow_core._api.v2.train' has no attribute 'RMSProp Optimizer'

エラー
こちらを参考に修正しました。

Attribute Error: module 'tensorflow_core._api.v2.train' has no attribute 'RMSProp Optimizer'

修正

trainをkerasにOptimizerの配置を変更。
また、Available optimizersに記述されてていないものは、コメントアウトしています。

build.py
# 変更前
	_TRAINER = dict({
		'rmsprop': tf.train.RMSPropOptimizer,
		'adadelta': tf.train.AdadeltaOptimizer,
		'adagrad': tf.train.AdagradOptimizer,
		'adagradDA': tf.train.AdagradDAOptimizer,
		'momentum': tf.train.MomentumOptimizer,
		'adam': tf.train.AdamOptimizer,
		'ftrl': tf.train.FtrlOptimizer,
		'sgd': tf.train.GradientDescentOptimizer
	})
# 変更後
	_TRAINER = dict({
  		'rmsprop': tf.keras.optimizers.RMSprop,
		'adadelta': tf.keras.optimizers.Adadelta,
		'adagrad': tf.keras.optimizers.Adagrad,
#		'adagradDA': tf.train.AdagradDAOptimizer,
#		'momentum': tf.keras.optimizers.Momentum,
		'adam': tf.keras.optimizers.Adam,
		'ftrl': tf.keras.optimizers.Ftrl,
#		'sgd': tf.keras.optimizers.GradientDescent
	})

AttributeError: module 'tensorflow' has no attribute 'placeholder'

エラー
こちらを参考に修正しました。

AttributeError: module 'tensorflow' has no attribute 'placeholder'

修正

.compat.v1.を付け加える

build.py
# 変更前
tf.placeholder(tf.float32, inp_size, 'input')
# 変更後
tf.compat.v1.placeholder(tf.float32, inp_size, 'input')

darkflow内の修正ファイルまとめ

tensorflowの1.xから2.xでの不具合で修正したdarkflow内のファイルは、下記のとおりです。

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   darkflow/net/build.py
        modified:   darkflow/net/ops/baseop.py
        modified:   darkflow/net/ops/convolution.py
        modified:   darkflow/net/ops/simple.py
        modified:   darkflow/net/yolo/train.py
        modified:   darkflow/net/yolov2/train.py

画像認識の確認

修正後、test2.pyを実行し、画像認識できることを確認できました。

実行前
sample_dog.jpg

実行後
sample_dog2.jpg

追記

darkflowについて、調べたことをまとめました。ご参考になれば、幸いです。

darkflowについて調べてみた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0