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

勤労感謝の日を利用して, 初めて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ライセンスを入れておいた. これであっているのか.
コードも結構ぐちゃぐちゃだし, コメントもつけてないし, もっとがんばらないとなと思った.

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

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


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。