SlideShare una empresa de Scribd logo
1 de 24
ROS,GazeboとChainerを用いた
畳込みニューラルネットワークに
よる3次元形状の学習
ROS Japan UG #18 関西勉強会
自己紹介 金田浩明(かねだひろあき)
• 株式会社ブリリアントサービス勤務
• ソフトウェアエンジニア
• Android技術者
• 移動型ロボット、ROS、センサー
• https://www.facebook.com/hiroaki.kaneda
ROS入門記事なども書いてます
• 詳しい内容は
http://bril-tech.blogspot.jp
オブジェクトの認識
• LiDARやRGBDカメラからの3D情報
• 大量のPointCloud(点群)データ
• 効率に処理することが難しい
• 3D形状(2.5D)をNNで学習できないか?
• PCLで3Dの特徴量
Convolutional Neural Network(畳み込みNN)とは
• 深層学習の定番テーマ
• 特徴量を畳み込み
• 画像を圧縮
• 画像の特徴をよくとらえられる
chainer.links.ConvolutionND
• Convolution2D 2次元の画像の学習や音声学習
• ConvolutionND 任意の次元のCNNを作成
3次元畳み込みニューラルネットワーク
• 入力データの前処理(PCL)
• ユークリッドクラスタ抽出
• 32 x 32 x 32の3次元格子空間voxcelに分割
• 各voxcelの占有率を求め閾値により1または0を決定
• 正規化したデータは3次元畳み込みニューラルネットワ
ークへの入力
PCLで抽出し、正規化したデータ
3次元畳み込みニューラルネットワーク
3次元畳み込みニューラルネットワーク
• 入力層
• S×S×Sのvoxcelの固定サイズ配列を受け入れ。S = 32
• 畳み込み層C1
• チャネル数Nは1となりますので、SxSxSxN。LxLxLxN'の3次元フィルタで畳み込む
• N'個の特徴マップを作成、ReLU活性化関数使用
• プーリング層P1
• 最大プーリング(ダウンサンプリング)
• 畳み込み層C2
• 再び3次元フィルタで畳み込みN’'個の特徴マップを作成します。
• プーリング層P2
• 畳み込み層C2の出力に対し同様にプーリングを行います。
• 全結合層
• 隣接層間のノードすべてを結合した層を2層配置
• 最終層は通常のニューラルネットと同様の設計(クラス分類)
3次元畳み込みニューラルネットワーク
• ネットワーク構成 重みの可視化
畳み込み層C1で学習されたフィルタwを可視化。
データセット作成
• 実データ収集は難しい
• 実用的な認識率を出すには大量のデータセットが必要
• ロボットシミュレータgazebo
• Gazebo内で仮想ToFセンサーを搭載した仮想ロボット
を稼働させ、ToFセンサーデータを集める
データセット作成
• ロボットシミュレータgazebo
データセット作成
Deep Learningに使う点群データの取得ツールについ
て
• 点群キャプチャツール
• 物体切り出しクラス分けツール
• 32x32x32のvoxcelへと正規化
点群キャプチャツール
物体切り出しクラス分けツール
32x32x32のvoxcelへと正規化
• 32×32×32のvoxelを用意し、配列 [x][y][z] となる配列
[32][32][32] を用意する。
• データがあれば、1、データがなければ0とする。
• 出力される配列は1次元配列データ形式
学習結果
10クラスを分類
利用
Voxcel Chain
• https://github.com/hiroaki-kaneda/voxcelchain
TurtleBot3
• 組立簡単!(約2時間で組み上げ)
• ROSの管理団体であるOpen RoboticsとROBOTISが共
同開発
• 教育、研究、製品開発向け
• パーツのCAD情報が全てインターネット上で閲覧可能
• 360度LiDER搭載
ご静聴ありがとうございました

Más contenido relacionado

Similar a Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識

cvsaisentan20141004 kanezaki
cvsaisentan20141004 kanezakicvsaisentan20141004 kanezaki
cvsaisentan20141004 kanezakikanejaki
 
Android app Development by Rhodes
Android app Development by RhodesAndroid app Development by Rhodes
Android app Development by RhodesHitoshi Kuroyanagi
 
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Yoshiyuki Nakamura
 
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦Tatsuya Matsushima
 
TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017
TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017
TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017Kazuyuki Arimatsu
 
Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programmingKiyotomoHiroyasu
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Tokoroten Nakayama
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Drecom Co., Ltd.
 
RDBってなに?
RDBってなに?RDBってなに?
RDBってなに?Soudai Sone
 
社内 DDD 勉強会第1回
社内 DDD 勉強会第1回社内 DDD 勉強会第1回
社内 DDD 勉強会第1回shingo suzuki
 
ROS User Group Meeting #28 マルチ深層学習とROS
ROS User Group Meeting #28 マルチ深層学習とROSROS User Group Meeting #28 マルチ深層学習とROS
ROS User Group Meeting #28 マルチ深層学習とROSHiroki Nakahara
 
Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
Soft Rasterizer: A Differentiable Renderer for Image-based 3D ReasoningSoft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
Soft Rasterizer: A Differentiable Renderer for Image-based 3D ReasoningKohei Nishimura
 
NNKproject Japanese version
NNKproject Japanese versionNNKproject Japanese version
NNKproject Japanese versionnao takatoshi
 
NNKproject Japanese version2
NNKproject Japanese version2NNKproject Japanese version2
NNKproject Japanese version2nao takatoshi
 
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】RND cpp
 
Rデータ入力編
Rデータ入力編Rデータ入力編
Rデータ入力編Monta Yashi
 
Yu Sasaki Bachelor Thesis
Yu Sasaki Bachelor ThesisYu Sasaki Bachelor Thesis
Yu Sasaki Bachelor Thesispflab
 

Similar a Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識 (20)

cvsaisentan20141004 kanezaki
cvsaisentan20141004 kanezakicvsaisentan20141004 kanezaki
cvsaisentan20141004 kanezaki
 
AndroidのAR最新動向
AndroidのAR最新動向AndroidのAR最新動向
AndroidのAR最新動向
 
Android app Development by Rhodes
Android app Development by RhodesAndroid app Development by Rhodes
Android app Development by Rhodes
 
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
 
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
 
TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017
TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017
TensorFlow Object Detection API を使った取り組み@つくばチャレンジ2017
 
Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programming
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
RDBってなに?
RDBってなに?RDBってなに?
RDBってなに?
 
社内 DDD 勉強会第1回
社内 DDD 勉強会第1回社内 DDD 勉強会第1回
社内 DDD 勉強会第1回
 
ROS User Group Meeting #28 マルチ深層学習とROS
ROS User Group Meeting #28 マルチ深層学習とROSROS User Group Meeting #28 マルチ深層学習とROS
ROS User Group Meeting #28 マルチ深層学習とROS
 
Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
Soft Rasterizer: A Differentiable Renderer for Image-based 3D ReasoningSoft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
 
Vue.js ハンズオン資料
Vue.js ハンズオン資料Vue.js ハンズオン資料
Vue.js ハンズオン資料
 
MongoDB3.2の紹介
MongoDB3.2の紹介MongoDB3.2の紹介
MongoDB3.2の紹介
 
NNKproject Japanese version
NNKproject Japanese versionNNKproject Japanese version
NNKproject Japanese version
 
NNKproject Japanese version2
NNKproject Japanese version2NNKproject Japanese version2
NNKproject Japanese version2
 
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】
 
Rデータ入力編
Rデータ入力編Rデータ入力編
Rデータ入力編
 
Yu Sasaki Bachelor Thesis
Yu Sasaki Bachelor ThesisYu Sasaki Bachelor Thesis
Yu Sasaki Bachelor Thesis
 

Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識

Notas del editor

  1. オブジェクトの認識はロボットが現実の環境のなかで自律的に行動できるためには重要な技術です。LiDARやRGBDカメラといったセンシング技術はロボットにとって必要な豊富な3D情報を提供する重要な技術となっています。しかしながらこの情報は大量のPointCloudデータであり、効率的に処理するのは難しいのが現状です。 もしくはPCLで3Dの特徴量を計算するなど、本稿では「VoxcelChain」を提案します。VoxcelChainはディープラーニング(深層学習)による3次元形状の畳み込みニューラルネットワークを利用することにより、この問題を解決します。
  2. 深層学習用のフレームワークであるChainerでは、主に画像の学習や音声学習で用いられるConvolutiono2DのほかにConvolutionNDというものが用意されています。任意の次元のCNN実装は、たぶんChainer特有、もしくはChainerが一番早かったかと思います。 今回はこのConvolutionNDで3次元形状を学習してみます。
  3. はい、ではどのように作っていくかをご説明します。 まずは入力データの前処理、これはPCLという点群処理ライブラリの ユークリッドクラスタ抽出を用い、オブジェクト候補を抽出、物体を認識しています。 抽出したオブジェクト候補を、32かけ32かけ32のボクセルにします。 すると、次のスライドのようなデータになります。
  4. はい これは、私の全身データのVoxcelになります。人っぽさをのこしつつデータ量を下げている感じですね。こういったデータ処理が手軽に行えるのがPCLの魅力ですね。
  5. 正規化したデータは3次元畳み込みニューラルネットワークであるVoxcelChainへの入力となります。このニューラルネットによりオブジェクトクラス検出を行い、最終的に入力されたオブジェクト候補のクラスが判定されます。
  6. CNNの特徴は畳み込み層およびプーリング層を交互に接続した構造を持つことにあります。画像の場合、畳み込み層により一般的な画像処理での畳込みと同等な画像のぼかしやエッジの強調などといったフィルタが得られますが、3次元のCNNにおいては、3次元空間の畳み込みによって有用な空間フィルタが得られると考えられます。空間フィルタは平面やコーナーと言った空間構造を表すフィルタとなります。畳み込み層の出力はプーリング層への入力となり、プーリング層では画像認識の場合と同様に、空間のどの位置でフィルタの応答が強かったという情報を一部捨て、空間構造内に現れる特徴の微小な位置変化に対する応答の不変性を得られる事が期待されます。 畳み込み層C1 チャネル数Nは1となりますので、畳み込み層はSxSxSxNの入力を受け取ります。 この層ではLxLxLxN'の3次元フィルタで畳み込むことによってN'個の特徴マップを作成します。その後ReLU活性化関数を経て畳み込み層の出力とします。畳み込みではnarrow convolutionを使用しzero paddingは行いません。 プーリング層P1 この層では受容野空間の各ノードからの入力の最大値を出力とする最大プーリングの手法により各ノードの値を1つの値に置き換えることでボリュームの、ダウンサンプリングを実現します。プーリングの処理はストライドsを用いて間引いて行います。 畳み込み層C2 チャンネル数N'のプーリング層の出力を受け再び3次元フィルタで畳み込みN''個の特徴マップを作成します。 プーリング層P2 畳み込み層C2の出力に対し同様にプーリングを行います。 全結合層 隣接層間のノードすべてを結合した層を2層配置します。この最終層は通常のニューラルネットと同様の設計であり、今回クラス分類が我々の目的であるため、目的のクラス数と同数のノードn個を配置し、活性化関数にソフトマックス関数を用います。
  7. さて、NNはできたのですが、学習するためにはデータが大量に必要になります。点群のデータなんてその辺に転がっているわけではありませんし。かといって、3DCADデータを使うのでは、実データではないですし、デプスカメラの2.5次元でーた、つまり後ろっかわ、センサーの影になるデータがないでたーにならない、うしろまであるでーたになっちゃう。そうすると、認識率の限界が来るのが目に見えています。そこで、実用的な認識率を出すには大量の実データ、となるわけですが、収集が難しい。 そこで、Gazeboの出番です。
  8. じゃあ具体的にどうやって、点群データを取り出すかというと、 センサーから得られる点群には壁も床もその他対象物以外のオブジェクトも含まれるため、対象物だけ切り出す処理が必要。(写真と一緒ですよ、認識したい被写体も写っていればそうでないものも写っている、だから「ここからここが対象物ですよ」とおしえてやる、切り出してやる、そうやって教師データを作るんですね。画像の場合そういうツールが沢山あります。点群の場合それがないので、自作しました。 以下にそのツールの使い方を説明する。 ツールは3つのフェーズにわかれていて、 点群キャプチャツール これは点群をキャプチャしてファイルに保存する処理である。例えるなら写真を撮るのと同じですね。 物体切り出しクラス分けツール これは、点群キャプチャファイルを開き、物体をクリックするとタップした物体だけを抜き出す。 カテゴリ分けが表示されるので、物体のカテゴリをクリックすると、フォルダ分けして物体の点群が保存されるようになっている。 最後に、 32x32x32のvoxcelへと正規化 して、ディープラーニング用シュリンクデータの作成を行います。
  9. これが、写真を撮るのと同じで、キャプチャボタンを押すとその瞬間のPointCloudデータをファイルに保存します。
  10. ラベリングを行います。 クリックすると、クリックした場所を中心に物体とおもわれる場所を自動的に切り出してくれます。切り出した点群は「人」「自転車」「車」などにラベリングして、個別のファイルとして保存しています。
  11. ディープラーニング用シュリンクデータの作成 上記「物体切り出しクラス分けツール」で切り出ししたデータをvoxel単位にシュリンクした0,1データへと変換する。 処理は以下 • 32×32×32のvoxelを用意し、配列 [x][y][z] となる配列 [32][32][32] を用意する。 • データがあれば、1、データがなければ0とする。 • 出力される配列は1次元配列データ。チェイナーで処理しやすいよいうに加工しています。 Voxcel化したデータはこのようにビューワーで閲覧できるようにしています。このビューワーもPCLのものだったかと思います。
  12. 学習は2,000件のデータのうち1/5をテストデータとし、学習を行った。 人、テーブル、バイク、自転車、ポスト、犬、パイロンといった10クラスを分類 青が精度、緑が誤差関数の値である。学習が進むにつれ精度が1に近づいている様子が確認できる。
  13. 実際にこの深層学習データを使って、GAZEBO内で物体の認識をさせているところです。自転車を正しく自転車として認識することができています。
  14. なおこの3次元のCNNのChainerのソースコードと、サンプルの学習データ一式をgithubにおいていますのでソースやデータなど参考にしていただければと思います。
  15. 余談ですが、TurtleBot3購入しました! TurtleBot3はROSの学習機、6万〜7万円で、360度LiDERを搭載! これの魅力は、パーツのデータがオープンなことです。3Dデータや細かなパーツのメーカーリストが入手可能なので、追加で購入したり、パーツを3Dプリンタで印刷することができます。 いまやっと本体組み上げたところです。いまからラズパイにUbuntu入れて動かしてみるところ。 これから、これにIntelのRealSense ZR300を搭載してみたいともくろんでいるところです。