Posted at

Labellioで作った分類器を自前のubuntuで動かそうとした時に出たエラーと解決策

More than 3 years have passed since last update.


背景

aplacaさんのLabellioという便利なサービスを使って作ったモデルを自分のサーバーに載せたいと思いましたが、Caffeのインストール時(?)にハマったので、解決策をメモしておきます。


注意

原因の究明まで出来ていません。

こんな状態で曖昧な情報を公開するのは良くないと思いますが、同じ状態で困っている人が居るかもしれませんので、対処法として公開しておきます。


環境構築&問題にぶつかるまでの流れ


  1. labbelioで分類器作ってみた

  2. 作ったモデルをWebで公開したい(公開の方法はこちら

  3. ubuntuサーバー持ってない

  4. CentOS6で頑張ろうとしたが挫折した

  5. konohaでubuntu14.04を借りた


  6. こちらの記事を参考にインストールしていった

  7. caffeのインストールは出来た(「make runtest」は通った)

  8. app.pyを実行すると、こんなエラー出た

Gdk-CRITICAL **: gdk_cursor_new_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

Traceback (most recent call last):
File "app.py", line 8, in <module>
from labellio import Classifier, Config, ImageLoader, Label
File "/usr/local/lib/python2.7/dist-packages/labellio/__init__.py", line 2, in <module>
from labellio.classifier import Classifier
File "/usr/local/lib/python2.7/dist-packages/labellio/classifier.py", line 6, in <module>
from labellio.net import Net
File "/usr/local/lib/python2.7/dist-packages/labellio/net.py", line 4, in <module>
import caffe
File "/root/caffe/python/caffe/__init__.py", line 1, in <module>
from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver
File "/root/caffe/python/caffe/pycaffe.py", line 15, in <module>
import caffe.io
File "/root/caffe/python/caffe/io.py", line 2, in <module>
import skimage.io
File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 15, in <module>
reset_plugins()
File "/usr/local/lib/python2.7/dist-packages/skimage/io/manage_plugins.py", line 93, in reset_plugins
_load_preferred_plugins()
File "/usr/local/lib/python2.7/dist-packages/skimage/io/manage_plugins.py", line 73, in _load_preferred_plugins
_set_plugin(p_type, preferred_plugins['all'])
File "/usr/local/lib/python2.7/dist-packages/skimage/io/manage_plugins.py", line 85, in _set_plugin
use_plugin(plugin, kind=plugin_type)
File "/usr/local/lib/python2.7/dist-packages/skimage/io/manage_plugins.py", line 255, in use_plugin
_load(name)
File "/usr/local/lib/python2.7/dist-packages/skimage/io/manage_plugins.py", line 299, in _load
fromlist=[modname])
File "/usr/local/lib/python2.7/dist-packages/skimage/io/_plugins/matplotlib_plugin.py", line 3, in <module>
import matplotlib.pyplot as plt
File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 114, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
globals(),locals(),[backend_name],0)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk3agg.py", line 11, in <module>
from . import backend_gtk3
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk3.py", line 58, in <module>
cursors.MOVE : Gdk.Cursor.new(Gdk.CursorType.FLEUR),
TypeError: constructor returned NULL


解決策

https://github.com/BVLC/caffe/issues/861

ここを参考にして、実行時にMPLBACKEND=Aggを付けると動きました。

こんな感じ→「MPLBACKEND=Agg python app.py