深層学習を用いたコンポーネント群の作成

深層学習を用いたコンポーネント群の作成

Author: 
root

概要・特徴

  • 近年,深層学習を用いた物体認識に関する研究が広く行われてきているが,こうしたパッケージをミドルウェアプラットフォームに適用した事例は見られない. そこで, 本コンポーネントは予め構築した深層学習モデルを用いて, 取得した画像を深層学習の処理にかけ物体認識を行う.

仕様

  • 言語: Python
  • OS: Ubuntu16.04
  • RTミドルウェア:OpenRTM-aist-1.1.2
  • DeepLearningエンジン : Caffe
  • CUDA : CUDA8.0
  • cuDNN : cuDNN_v5

ソースコードおよびマニュアル

関連マニュアル

概要スライド

pdf

認識結果画像

DeepLearning物体認識結果.png

動画

投稿URL : https://www.youtube.com/watch?v=-R-1AGQN92M&t=44s

ライセンス

MITライセンス

注意

本コンポーネントはrbgirshick様から提供されているライブラリを使用しています. そちらのライセンスに関してはこちらの指示に従ってください.

問合先(メールアドレス): 
140447008<at>ccalumni.meijo-u.ac.jp
Project Information
OS: 
Linux
言語: 
Python
OpenRTM ver.: 
1.1
Average: 
3.75
Average: 3.8 (4 votes)
Last modified: 
Tue, 2017-12-19 17:58

Comments

Author: 

nmsやrpnというフォルダに入っているファイルは別の人が作ったものだと思うのですが、ライセンス文のファイルは同梱しなくても大丈夫なのでしょうか?

Author: 

宮本様 早速の貴重なコメントありがとうございます. おっしゃるとおり,nms,rpnなどのライブラリは他者が著作権を持つライブラリとなります.ライセンスの範囲を明確にする意味で,公開してたRTCの中身の修正及び,ドキュメントと,HPへのライセンスに関する注記をいれました. その他,お気づきの点ございましたらコメントいただければ幸いです.

Author: 
産総研の高橋です.更新ありがとうございます.
内容を確認させていただきました.
IDLを提案されており,流行りの深層学習を利用したRTCということで有用性の高い作品と感じました.
何点かコメント&質問させていただきます.
  • py_faster_rcnn.py 内で,同じ処理の中で result.jpg ファイルとして書き出した後に再度読み込むのは性能的にロスが大きいと感じました.高速なロジックを活かすためにも,上記処理を非同期的に行うか,参照渡しした方が良いと思います
  • 物体認識インタフェースですが,最近はステレオカメラやTOFカメラもあるので,奥行き(距離)情報も追加してみてはと思いました.
Author: 

高橋様 ご意見ありがとうございます. 一つ目ご意見に関しては, 少しでも高速性を追求するためにMat型を参照渡しで実装し, ソースコードをgithubの方で更新させて頂きました. 二つ目のご意見に関しては, 奥行き情報は物体インターフェースを拡張するより, 共通カメラインターフェースの拡張を行うべきだと考えております. 間に合うかわかりませんが, 共通カメラインターフェースを拡張する形で検討致します.

Author: 

ソースコードを読んだのですが、以下の点が気になりました。

  • onExecute関数内で、TimedCameraImageのデータをNumPyの配列にコピーしようとしている箇所がありますが、for文を使うのは効率が悪いように思いました。NumPyのfromstring関数を使えば以下のようにデータをコピーできます。

 img = np.fromstring(indata.data.image.raw_data, dtype=np.ubyte)
 img = img.reshape(height, width, channels)

  • onExecute関数内でself._inImageIn.read()を2回呼び出していますが、これはどういう意図があるのでしょうか?
  • onActivated関数内でm_datasetの値によって条件分岐している箇所がありますが、m_datasetがcocoの時にはself._CLASSESという変数にCLASSES_COCOを格納していますが、m_datasetがvocの時にはself._CLASSESを変更していません。何か意図があるのでしょうか?
Author: 

宮本様 ご意見ありがとうございます. 1つ目のご意見に関しましては, 宮本様から教えていただいたコードを使わせていただきました. for文で画素値を入れるよりも遥かに速度向上を求めることができました. ご指摘ありがとうございます.

2つ目のご意見に関しましては, self._inImageIn.readを2回呼び出している理由ですが, 当初は出力する際にself._inImageIn.read()からのデータを引き継いで画像データの部分のみを入れ替えて出力するという意図でコードの方を書かせていただきました. 宮本様からご指摘を受け再度ソースコードの方を確認した結果self._inImageIn.readを2回呼ぶ必要がないことがわかり, ソースコードの方を改善いたしました.

3つ目のご意見に関してましては, 宮本様のおっしゃるとおり, m_datasetがvocの場合はonActivated内でself._CLASSESを変更は致しておりませんでした. 理由と致しまして, vocはデフォルトとしてinitの方で宣言した方が良いのではないかと思いそちらで宣言しておりましたが, onActivatedのif文内の同一性をもたせる方に改善いたしました.

今回行った3つの改善に関しましては再度ソースコードをgithubの方で更新いたしました. また, 再度ご質問・ご意見がございましたら, よろしくお願いします.

Author: 

対応していただいてありがとうございます。

ただ、NumPy配列からTimedCameraImage型に変換する場合についても、for文ではなくtostring関数を使った方が効率的だと思います。

 self._d_outImage.data.image.raw_data = img.tostring()

Author: 

宮本様 再度のご意見ありがとうございます.

NumPy配列からTimedCameraImage型に変換する場合に関しても宮本様から教えて頂いたコードを扱わせてもらい, githubの方でソースコードを更新致しました.

また, ソースコードを改善することにより処理速度が早くなりましたので, 「py_faster_rcnnマニュアル」の5ページ目も更新致しました.

Author: 

菅です.

コメントです. 独自データ型を使ってもらえて本当に嬉しいです(笑)

ところで,TimedObjectParam型については,もうすこし慎重に設計した方が良いと思います. 出力ポートを監視しているだけでは,必要な情報が全て得られないので, たとえば,入力として受け取った画像のサイズ等も出力ポートに入れたほうがいいと思います. 冗長に思えるかもしれませんが,コンフィグ等で設定するよりも便利だと思います.

また,特に,今回の物体認識のCNNは,R-CNNですから,この論文のモデルですよね? https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf

再帰結合やLSTMが無いモデルだと思いますので,内部状態を持たないと思います. であれば,サービスポートを使ったリクエスト・レスポンス系の方法のほうが,どの画像に対する認識結果なのかが明らかであり,認識失敗なども受け取れるので,サービスポートの活用も検討していただければと思います.

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK