TensorFlowの学習済みモデルをいじってみる(1)
能書き
TensorFlowの学習済みモデルで遊ぼうと思ったら、いろいろとハマった。
同じようにハマることもあるだろう、記録は残しておいた方がよい。
環境
チュートリアルの実行
object_detectionのチュートリアルを試してみる。
私は実行ファイルを移動させてしまったので、sys.pathをいじる必要があった。
元のコードを次のように書き換える。
# sys.path.append("..")
LIBRARY_PATH = '[ダウンロード先のパス]/models'
sys.path.append(LIBRARY_PATH)
sys.path.append(LIBRARY_PATH + '/object_detection')
さらに、コードに散らばる相対パスを絶対パスに置き換えていく。
これを怠ると、 次のようなメッセージを含んだエラーが吐かれる。
tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile failed to Create/Open: data\mscoco_label_map.pbtxt : \udc8ew\udc92?\udc82?\udc83p\udc83X\udc82\udcaa\udc8c\udca9\udc82?\udca9\udc82\udce8\udc82?\udcb9\udc82\udcf1\udc81B FileNotFoundError: [Errno 2] No such file or directory: 'test_images\\image1.jpg'
二回出たエラーを繋げて書いてみた。両方同時に出るわけではない。
パス問題を解消したが... 今度は次のエラーに泣かされた。
Traceback (most recent call last):
File "[LIBRARY_PATH]/models/ObjectDetection/objTest.py", line 18, in <module>
from utils import label_map_util
File "[LIBRARY_PATH]/models/object_detection\utils\label_map_util.py", line 22, in <module>
from object_detection.protos import string_int_label_map_pb2
ImportError: cannot import name 'string_int_label_map_pb2'
ディレクトリを見ると、.protoファイルはあっても.pyファイルがない。
.protoファイルから、.pyファイルを生成しなければいけないようだ。
このページの最新の圧縮ファイルのうち、win32.zipとついているものを落とす。
win64版が見当たらずにしばらく探したが、結局win32で妥協した。
Windows以外のOSを用いている場合、自力でビルドする必要があるらしい。
解凍して得られるprotoc.exeをmodelsに移し、次のコマンドをたたく。
> protoc object_detection/protos/*.proto --python_out=.
そうすると、確かに.pyファイルがディレクトリに追加されていた。
実行結果
もう一つ、海辺の画像が表示されるが、そのページは有名なので端折る。