Mask RCNN Object Measurement Package (Mask RCNNで物体径計測)
About this ROS package こういうの作った
RealSenseのようなRGBDセンサを用いて、深層学習により複数の任意のオブジェクトを区別して推測し、それぞれのオブジェクト上の重心を通る最大・最小の径を算出する。結果はROSトピック(mrcnn/result)として取得可。
https://github.com/moriitkys/mrcnn_measurement
参考になったらLGTMお願いします。
こちらはスナップエンドウの大きさを計測する様子。以下で示すボルトや丸太も、自分で学習させた。学習方法についてはこちら( https://github.com/matterport/Mask_RCNN )を参考に。(要望があれば解説の記事書く予定)また、スナップエンドウのrosbagはmrcnn_measurementでダウンロード可。
原木材(丸太)の計測の様子。こちらは非常に数が多いので実行もリアルタイムでは難しい。
実行速度はMask RCNNの推測速度に大きく左右されるので(僕の実行環境で1回推測に約0.2s)、グラボを良くしたりバックボーンをモバイル向け(mobilenetなど)にするとよりリアルタイム性が向上する。
径計測にかかる時間は物体の数が多くなるにつれて増大するので注意。
2021/03/23追記 応用例として最近上げたものに以下のようなものがあるので、そっちの記事も見ていただけると幸いです。
Usage 使用方法
2021/03/23追記 以下のdownload_files.shがうまく実行されない場合は以下のリンクからbagファイルをダウンロードしてください。Notice! If you get an error by executing download_files.sh, please download from under URLs.
https://drive.google.com/file/d/1jDSxzqlHILCcwQGtHmI43A78a8lG1hSb/view?usp=sharing
https://drive.google.com/file/d/1rrKQBYAzL9TwhA3B7sgVlmE0XPD2Ji8f/view?usp=sharing
https://drive.google.com/file/d/1p6egLmlxAb4cv7UfUwLtZ0oZxJkFhBhs/view?usp=sharing
https://drive.google.com/file/d/1710BCuNIz8KxsLGuOWHk0Z8VsHMvR1iO/view?usp=sharing
センサがある場合
# 0, Download h5 & rosbag data <= First time only
sh download_files.sh # in this package directory
cd ~/catkin_ws
catkin_make
# 1, Turn on RealSnese D435
roslaunch realsense2_camera rs_aligned_depth.launch
# 2, Start mrcnn_measurement
roslaunch mrcnn_measurement mrcnn_measurement.launch
センサがない場合、rosbagでテスト
# 0, Download h5 & rosbag data <= First time only
sh download_files.sh # in this package directory
cd ~/catkin_ws
catkin_make
# 1, Start rosbag & mrcnn_measurement
roslaunch mrcnn_measurement mrcnn_measurement_rosbag.launch
- scripts/print_result.pyはmrcnn/resultトピックの中身を読んで表示するサンプルプログラム。物体が一つであればわかりやすく、csvなどにも書き出しやすい(そもそもこのパッケージは物体一つの計測を推奨している)。
- scripts/mrcnn_measurementは実行可能にする必要あるかも。(そのディレクトリでchmod +x mrcnn_measurementなど)
- shファイルを実行するとh5ファイルとrosbagがダウンロードされる。数百GBなので通信環境によってはしばらく待つ必要あり。
- launchファイルのparam name="~model" value="mymodel"のmymodelをcocoにするとmask_rcnn_coco.h5を読み込む。
- Mask RCNNへと入力する画像サイズによっては推測結果が大きく変わるので、注意。例えば、このパッケージではcocoの学習結果を用いる際320*240の画像サイズで入力しているが、640*480で入力すると結構変わる。
- self.array_lines(径計測用の配列)の定義では角度分解能self.angle_stepを6度としているが、より細かく形状の最大最小を見つけたい場合にはself.angle_stepを小さくすること。
- scripts/files/mymodel_classes.csvの"object"を別の名前に変更可。
Rough commentary ざっくり中身の解説
1, RealSenseからのRGB&Depthトピックを受け取る(message_filter)。
2, RGB画像をMask RCNN(ResNet)により物体推測。
3, 推測で生成されたマスク画像のエッジ(mask_i_xy_edges)と、クラス初期化時に作成した径計測用配列(self.array_lines)のアダマール積をマスク重心において実行し、各角度におけるオブジェクト径を計算、diameter_pointsにappendしていく。
self.array_lines | 径を求めるときの概念図 |
---|---|
4, オブジェクトの重心を通る最大径max(diameter_points)と最小径min(diameter_points)を求め、RealSenseのカメラパラメータfxとマスク部の深度平均(外れ値を除外)から幾何的にオブジェクトの実際の径を計算。
5, 可視化。
Error 誤差
現在調査中だけど学習の良し悪しも関係するのでざっくり10%くらい誤差がでると考えたほうがいいかも。丸太のような円形とかなら精度よくなるかも。
Task 課題
計測の誤差を小さくすること。
径計測にかかる時間を小さくすること(特にmaskのROIごとのfor文がネックになっている)。
Future work 今後
解説は充実させていくつもり。この記事は更新予定あり。
Requirements
ros kinetic
h5py==2.7.0
Keras==2.1.3
scikit-image==0.13.0
scikit-learn==0.19.1
scipy==0.19.1
tensorflow-gpu==1.4.0
GTX1060, cudnn==6.0, CUDA==8.0
realsense2_camera ( http://wiki.ros.org/realsense2_camera )
参考
http://wiki.ros.org/ja/ROS/Tutorials/WritingPublisherSubscriber%28python%29
http://wiki.ros.org/realsense2_camera
https://github.com/matterport/Mask_RCNN
https://qiita.com/_akio/items/5469913fce7fdf0c732a
本記事の著者
moriitkys 森井隆禎
ロボットを作ります。
AI・Robotics・3DGraphicsに興味があります。最近はいかにしてお金を稼ぐかを考え、そのお金でハードをそろえようと企んでいます。
資格・認定:G検定、Pythonエンジニア認定データ分析試験、AI実装検定A級、TOEIC:810(2019/01/13)
Author And Source
この問題について(Mask RCNN Object Measurement Package (Mask RCNNで物体径計測)), 我々は、より多くの情報をここで見つけました https://qiita.com/moriitkys/items/ad5d656c051a4c3055e1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .