ROS: mask_rcnn_rosのインストール

mask_rcnn_rosをインストールしたときのメモ。

  • 環境
    • Ubunutu16.04
    • ROS Kinetic
  • 次のサイトからgit cloneする
  • Pythonの仮想環境virtualenvを使う。ライブラリバージョンの依存関係が強いのでvirtualenvを使うと便利。なお、サイトではpython3でないと動かないとあるが、ROS Kineticはpython2推奨なのでpython2でインストールする。学習などはROSパッケージではないmask_rcnnを使う。
    • インストール
      • sudo pip2 install virtualenv
      • sudo pip2 install virtualenvwrapper
    • 環境設定
      • ~/.bashrcに以下を追加
        • export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2
        • export WORKON_HOME=~/.virtualenvs
        • source /usr/local/bin/virtualenvwrapper.sh
    • 仮想環境の生成
      • $ venv_name=mrcnn
      • $ mkvirtualenv --python=python2 $venv_name
    • 依存関係のインストール
      • $ cd ~/catkin_ws/src/mask_rcnn_ros
      • $ workon mrcnn
        • 仮想環境に入るとプロンプトの前に(mrcnn)と表示する
      • (mrcnn) $ pip install -r requirements.txt
      • 仮想環境から抜ける
        • (mrcnn) $ deactivate
  • パッケージのダウンロード
    • $ cd ~/catkin_ws/src/mask_rcnn_ros
    • $ git submodule update --init
  • ビルド
    • $ catkin build mask_rcnn_ros
  • 実行
    • $ workon mrcnn
    • Publisherとしてノード実行
      • (mrcnn) $ roslaunch object_detector object_detector.launch image:=<image_topic_name> is_service:=false debug:=true
    • Serviceとしてノード実行
      • (mrcnn) $ roslaunch object_detector object_detector.launch image:=<image_topic_name> is_service:=true debug:=false
    • roslaunchの引数
      • image: 画像トピック名
      • is_service: サービスのときはtrue、それ以外はfalse
      • debug: trueにするとデバッグ用に画像がopencvのcv.imshow()で表示される。
      • detection_threshold: 検出の閾値 [0, 1]
      • model: kerasモデルファイルのパス. モデルの拡張子はh5。
      • class_labels: クラス名とラベルがマッピングされたテキストファイル
  • エラーがでた場合
    • 実行時に以下のエラーがある場合:mask_rcnn_ros/src/mask_rcnn_ros/model.pyのtopologyをすべてsavingに置換する。
      • Module 'keras.engine.topology' has no attribute 'load_weights_from_hdf5_group_by_name'
      • File "/src/mask_rcnn_ros/src/mask_rcnn_ros/model.py", line 2004, in load_weights
        topology.load_weights_from_hdf5_group_by_name(f, layers)
        NameError: global name 'topology' is not defined

以上

コメント

タイトルとURLをコピーしました