勤労感謝の日を利用して, 初めてQiitaに投稿します. よろしくお願いします.
#要約
- Tensorflowの学習済みMNISTが動くROSのノードを作った.
- スクリプトをGitHubにあげた.
#背景
ROSというロボット開発環境がある. (ROS公式サイト)
ROSではカメラ等センサからのデータを統合的に処理し, ロボットを動かしたりシミュレーションしたりすることができる.
ここにDeepLearningを組み込みたい!!
#やったこと
まずやるならチュートリアルでしょ!ということでTensorflowのDeep MNIST for Expertsの学習済みモデルをROS上で動くようにした.
以前に物体認識をする学習済みのTensorflowのモデルをROS上で動かしている方がいたので, それを参考にして, モデルを見える化した.
モデルを陽に書くことで他のタスクにも応用しやすいスクリプトになったと思う.
(ネットワーク構成も変えられるし, 先に学習しておけば動かせる. )
#処理手順
では実際に何をするスクリプトを書いたのかというと, 以下のようになる.
- CNNを構成して学習済みファイルの読み出し
- カメラノードから画像情報をSubscribe
- 画像情報をMNISTのCNNに入るよう, 28*28に圧縮&白黒反転2値化
- CNNに画像を見せて数字を推定
- 結果を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された数字. ちゃんと正解している.
手書きの9に関してもちゃんと認識された.
ただし, カメラの性質などにより認識精度は結構上下する.
カメラと画像との距離を工夫したり, CNNに入れる前にnumpy使ってトリミングしたり, 2値化の数値をいじったりするといい.
#あとがき
とりあえずちゃんと動いたので良かった!!
GitHubにもQiitaにも初投稿で緊張した.
特にGitHubのライセンスがどうとかを調べて, 理解するのに結構戸惑った.
結果, このサイトを参考にAphache2.0ライセンスを入れておいた. これであっているのか.
コードも結構ぐちゃぐちゃだし, コメントもつけてないし, もっとがんばらないとなと思った.
勤労感謝の日に圧倒的感謝!!
#本文中に載せられなかった参考資料: