LoginSignup
16
9

More than 5 years have passed since last update.

Tensorflowを使ってROS上でMNISTをやるノードを立てる

Last updated at Posted at 2016-11-23

勤労感謝の日を利用して, 初めてQiitaに投稿します. よろしくお願いします.

要約

  • Tensorflowの学習済みMNISTが動くROSのノードを作った.
  • スクリプトをGitHubにあげた.

背景

ROSというロボット開発環境がある. (ROS公式サイト
ROSではカメラ等センサからのデータを統合的に処理し, ロボットを動かしたりシミュレーションしたりすることができる.

ここにDeepLearningを組み込みたい!!

やったこと

まずやるならチュートリアルでしょ!ということでTensorflowDeep MNIST for Expertsの学習済みモデルをROS上で動くようにした.

以前に物体認識をする学習済みのTensorflowのモデルをROS上で動かしている方がいたので, それを参考にして, モデルを見える化した.

モデルを陽に書くことで他のタスクにも応用しやすいスクリプトになったと思う.
(ネットワーク構成も変えられるし, 先に学習しておけば動かせる. )

処理手順

では実際に何をするスクリプトを書いたのかというと, 以下のようになる.

  1. CNNを構成して学習済みファイルの読み出し
  2. カメラノードから画像情報をSubscribe
  3. 画像情報をMNISTのCNNに入るよう, 28*28に圧縮&白黒反転2値化
  4. CNNに画像を見せて数字を推定
  5. 結果をPublish

ROSのノードの説明
PublisherとSubscriberの説明

コード解説

別の記事に書いた

動かし方

GitHubのREADME.mdにあるように
$ roscore

$ python tensorflow_in_ros_mnist.py image:=/cv_camera/image_raw

$ rosrun cv_camera cv_camera_node

$ rostopic echo /result

をする. TensorflowやROS, cv_bridge, カメラのドライバ, OpenCV, numpyは事前準備が必要. 実行する順番を間違えたりするとエラーが出るが動くので気にしない.

結果

パソコンにペイントで画像を表示してそれにカメラを向けると下図のようになった.
右の画像がカメラから入ってきた画像で左のdata:がCNNが予想してPublishされた数字. ちゃんと正解している.
Screenshot from 2016-11-23 15_41_51.png

手書きの9に関してもちゃんと認識された.

Screenshot from 2016-11-23 15_44_07.png

ただし, カメラの性質などにより認識精度は結構上下する.
カメラと画像との距離を工夫したり, CNNに入れる前にnumpy使ってトリミングしたり, 2値化の数値をいじったりするといい.

あとがき

とりあえずちゃんと動いたので良かった!!
GitHubにもQiitaにも初投稿で緊張した. 
特にGitHubのライセンスがどうとかを調べて, 理解するのに結構戸惑った.
結果, このサイトを参考にAphache2.0ライセンスを入れておいた. これであっているのか.
コードも結構ぐちゃぐちゃだし, コメントもつけてないし, もっとがんばらないとなと思った.

勤労感謝の日に圧倒的感謝!!

本文中に載せられなかった参考資料:

16
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9