(未完)python3でcaffeを使用可能にする
最近流行りのchainerを使用して機械学習の挙動を勉強しており、そろそろDeepDreamに手を付けるべくその方法を調査した所、どうやらcaffeが必要だとわかりました。
しかし問題があります。caffeはpython3を公式サポートしておりません。そのためか、普通にcaffeを使おうと思うとエラーが出ます。
動作環境はMacOS10.10、Python 3.4.3です。
今回は先人様のコードをお借りします。
Chainerで入力画像の最適化 - mktozkの日記
Traceback (most recent call last): File "TestDeepGoggle.py", line 14, in <module> func = caffe.CaffeFunction('bvlc_reference_caffenet.caffemodel') File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_function.py", line 104, in __init__ raise RuntimeError('CaffeFunction is not supported on Python 3') RuntimeError: CaffeFunction is not supported on Python 3
chainerコード内のエラーです。python3を使用しているとこの先に進めなくなります。
とりあえずここのコードをいじって無理やり先に進みます。
# in chainer/functions/caffe/caffe_function.py # caffe_pb2 does not support Py3 # if sys.version_info < (3, 0, 0): if sys.version_info < (4, 0, 0):
続いてprotobuf
内にエラーが出ました。
Traceback (most recent call last): File "TestDeepGoggle.py", line 9, in <module> from chainer.functions import caffe File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/__init__.py", line 1, in <module> from chainer.functions.caffe import caffe_function File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_function.py", line 13, in <module> from chainer.functions.caffe import caffe_pb2 File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_pb2.py", line 7, in <module> from google.protobuf import reflection as _reflection File "/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/google/protobuf/reflection.py", line 68, in <module> from google.protobuf.internal import python_message File "/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/google/protobuf/internal/python_message.py", line 848 except struct.error, e:
なんか途中でpip経由のものを抜けて偉いところにあるpythonファイルを使ってそうです・・・
python3版のprotobufがあるらしいのでこちらを使います。
pip3 install python3-protobuf
続くエラーはこちら。
Traceback (most recent call last): File "TestDeepGoggle.py", line 9, in <module> from chainer.functions import caffe File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/__init__.py", line 1, in <module> from chainer.functions.caffe import caffe_function File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_function.py", line 13, in <module> from chainer.functions.caffe import caffe_pb2 File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_pb2.py", line 905, in <module> has_default_value=True, default_value=unicode("constant", "utf-8"), NameError: name 'unicode' is not defined
protobufからは抜けられました。caffe内はPython3に対応していないらしく、python2にあったunicode
関数が使われています。ちょろっと書きなおして先に進みます。
# in chainer/functions/caffe/caffe_pb2.py unicode("", "utf-8") -> "" unicode("warp", "utf-8") -> "warp" unicode("constant", "utf-8") -> "constant" unicode("L2", "utf-8") -> "L2"
えーっと次なるエラーは・・・
Traceback (most recent call last): File "TestDeepGoggle.py", line 9, in <module> from chainer.functions import caffe File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/__init__.py", line 1, in <module> from chainer.functions.caffe import caffe_function File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_function.py", line 37, in <module> class CaffeFunction(function.Function): File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_function.py", line 207, in CaffeFunction @_layer('Concat', 'CONCAT') File "/usr/local/lib/python3.4/site-packages/chainer/functions/caffe/caffe_function.py", line 22, in decorator typevalue = getattr(caffe_pb2.V1LayerParameter, oldname) AttributeError: type object 'V1LayerParameter' has no attribute 'CONCAT'
だめだ、なんでこのエラーが出るのか、どう対処すれば良いのかわからない・・・