目的
下記サイトを参考に画像認識を試してみました。
私のPC環境では、いくつかエラーが発生しました。発生したエラーの回避方法をまとめ、画像認識の動作確認をします。
開発環境
Python version:3.9.7
OS: windows 10.0
Tensorflow:2.9
環境構築
まず、必要なライブラリをインストールと、gitからデータと学習の重みファイルをダウンロードします。
こちらの環境構築と同じようにして設定してください。
動作確認
上記リンクを使って、下記ファイルの動作を検証してみます。
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に記述されてていないものは、コメントアウトしています。
# 変更前
_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.
を付け加える
# 変更前
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を実行し、画像認識できることを確認できました。
追記
darkflowについて、調べたことをまとめました。ご参考になれば、幸いです。