TensorFlowを用いたロボットの教示


あなたが私のようであるならば、あなたはあなた自身のR 2 - D 2またはBB - 8ロボット仲間を持つために、ほとんど何でもします.ちょうどあなたが一緒に持っている魅力的な冒険を想像してみてください!
私は、それを報告するのを楽しみにしますAnki Cozmo あなたが探していたドロイドです.
Cozmoは大きな個性をitty bittyリビングスペースに詰め込まれます.あなたはCozmoと再生するコードを知っている必要はありません-しかし、あなたがしている場合- Cozmoはさらに表現力の宇宙パワーを持っています.
この記事では、FlydHubのTensorFlowを使った転送学習を使用して日常のオブジェクトを認識するために独自のCOZMOをどのように教えるかを教えていきます.

セットアップ


インストールCozmo Python SDK , 新しいvirtualenvを作成し、クローンcozmo-tensorflow ローカルマシンへのプロジェクト.
virtualenv ~/.env/cozmo -p python3
source ~/.env/cozmo/bin/activate
git clone https://www.github.com/whatrocks/cozmo-tensorflow
cd cozmo-tensorflow
pip install -r requirements.txt
次へ- FlydHub CLIへのログインfree account here ). あなたがfloydhub cliをインストールする必要があるならばcheck out this guide 我々の中でdocumentation .
floyd login

トレーニングデータを生成するためにCOZMOを使う


深い学習プロジェクトのために十分なトレーニングデータを得ることは、痛みでありえます.しかし、ありがたいことに、私たちは走り回るのが好きで、彼のカメラで写真を撮るのが好きであるロボットを持っています.
おいしそうなセルツァー缶から始めましょう.直接の缶の前でCozmoを置いてください.それは写真を撮っている間、あなたのロボットが缶の周りに回転するのに十分なスペースを持っていることを確認します.COZMOがあなたが動くとき、撮影しているオブジェクトの名前を入力してくださいcozmo-paparazzi スクリプト.
python3 cozmo-paparazzi.py seltzer

このように多くのオブジェクト(ラベル)のためにこの手順を繰り返してコズモを学ぶにしたい!これで、すべてのイメージラベルが/data ローカルディレクトリのフォルダ.

データセットのアップロード


次はアップロードしましょうFloydHub としてFloydHub Dataset . これは、私たちの今後のモデルトレーニングとモデルFloddHubの仕事を提供中にこれらのイメージをマウントすることができます.FloydHubのデータセットは、バージョン管理されたデータセットを参照するあなたのトレーニングの仕事のための簡単な方法です.
cd data
floyd data init cozmo-images
floyd data upload
私たちの場合、私はこのイメージデータセットcozmo-images . 私はそれを作ったpublic dataset , だから自分のCOZMOプロジェクトでそれを使用する自由を感じる!

FlodHubにおけるモデルのトレーニング


そして今、楽しみが始まります.まず、プロジェクトのルートディレクトリにあることを確認し、FlydHubプロジェクトを初期化し、FlodHubの完全に構成されたTensorFlowクラウドGPUマシンのモデルをモデル化することができます.
側の注意-その最後の文が一握りのように聞こえたならば、floydhubがあなたのGPUによって動かされた深い学習実験の準備ができているように、あなたのクラウド・マシンのすべてを構成して、最適化することを気にかけるということを知っていてください.あなたが使用したい正確な深い学習フレームワークを指定できますmore - そして、floydhubはあなたのマシンがすぐにトレーニングを開始するために必要なすべてを持っていることを確認します.
では、プロジェクトを初期化しましょう.
floyd init cozmo-tensorflow
今、我々はFlodHubの深い学習トレーニング仕事を始める準備ができています.
注意すべきこと
  • 我々は、とのいくつかの簡単な転送学習を行いますInception v3 model Googleによって提供されます.スクラッチからモデルを訓練する代わりに、我々はこの事前に訓練されたモデルから始めることができて、それからちょうど我々が我々がCozmoを学ぶことを望むオブジェクトを認識するように教えることができるように、最終的な層を交換することができます.転送の学習は非常に便利なテクニックであり、あなたはそれについての詳細を読むことができますTensorFlow's website .
  • COZMOが作成したイメージデータセットをマウントする予定です--data でのフラグ/data 我々のfloydhub機械のディレクトリ.
  • 私はこの仕事のためにTensorboardを--tensorboard 私の仕事のトレーニングプロセスを視覚的に監視できるように
  • 編集しましたretrain.py スクリプトinitially provided by the TensorFlow team ) 出力を/output ディレクトリ.これはfloydhubを使用しているときにとても重要です.なぜなら、floydhubのジョブは常に/output ディレクトリ).我々のケースでは、我々は、我々の再訓練されたImagenetモデルとその関連トレーニングラベルを仕事の/output フォルダ.
  • floyd run \
      --gpu \
      --data whatrocks/datasets/cozmo-images:data \
      --tensorboard \
      'python retrain.py --image_dir /data'
    
    それだ!AWS上で何かを設定する必要はありませんし、インストールしたTensorFlowやGPUドライバやそのようなものをインストールしてください.(もしあなたが細心の注意を払っているなら、私は--env フラッグハブのデフォルト環境にはTensorFlow 1.1.0とKeras 2.0.6が含まれているので、それは私のトレーニングに必要なすべてです😎).
    あなたの仕事が完了すると、あなたは2010年に新しく再訓練されたモデルを見ることができるでしょうyour job's output directory .
    私はあなたのジョブの出力をスタンドアロンのFlodHubデータセットに変換することを推奨します.ジョブの出力ページの「作成データセット」ボタンをクリックすることで、これを行うことができます.と呼ばれるデータセットをチェックするcozmo-imagenet 私の再訓練されたモデルとラベルを見るために.

    COZMOの我々の再訓練されたモデルへの接続


    FlydHubで別の仕事を実行することで、新しく再開発されたモデルをテストできます.
  • マウントretrained model and labels
  • モデルサービングのためのパブリックレストエンドポイントを設定する
  • Model-serving FlodHubの実験機能です-私たちはあなたの話を聞くのが大好きだ!この機能を動作させるためには、単純なフラスコアプリを呼び出す必要がありますapp.py プロジェクトのコードで.
    我々の現在のプロジェクトのために、私はポストリクエストでCozmoからイメージを受け取る簡単なフラスコアプリを作成しました.COZMOは、それが特定のオブジェクトを見ているかどうか決定するために結果を使用することができます.
    floyd run \
      --data whatrocks/datasets/cozmo-imagenet:model \
      --mode serve
    
    最後に、実行しましょうcozmo-detective.py COZMOに特定のオブジェクトを見つけるためにオフィスを動き回るよう依頼するスクリプト.
    python3 cozmo-detective.py toothpaste
    
    Cozmoが動くたびに、ロボットはFlydHubの上でモデルエンドポイントに見ているものの白黒のイメージを送ります、そして、floydhubはこのイメージに対してモデルを走らせます.
    {
      'answer': 
        {
          'plant': 0.022327899932861328, 
          'seltzer': 0.9057837128639221, 
          'toothpaste': 0.07188836485147476
        }, 
      'seconds': 0.947
    }
    
    Cozmoは、少なくとも80 %は、問題のオブジェクトを見ていると確信している場合、ロボットはそれに向かって勝利する!

    Cozmoのすべてのあなたの行方不明のオブジェクトを見つけた後、FloydHubであなたのサービング仕事をシャットダウンすることを忘れないでください.

    新しい希望


    それは魔法の世界、cozmo、ol 'バディです.レッツゴー探検!
    私は、あなたとあなたのCozmoがFlydHubであなたの友人からの少しの援助とともに、一緒に見つけることができるものを見るのを熱望しています.私たちと共有あなたの発見!

    参考文献


    このプロジェクトは
    Cozmo visual recognition projectGoogle Code Labs TensorFlow for Poets project . 私もこのプロジェクトについて書きましたpersonal site - ショートサーキットとゼルダの伝説へのより多くの参照を除いて.