Translate

2019年2月25日月曜日

ブログ記事「Lingvo: A TensorFlow Framework for Sequence Modeling for Sequence Modeling」を勝手に翻訳してみた

今朝のタイムラインに流れていたブログ記事 Lingvo: A TensorFlow Framework for Sequence Modeling for Sequence Modeling を勝手に翻訳したものです。

--------

Lingvo: シーケンスモデリングのための TensorFlow フレームワーク

  • 2019年2月23日
  • Jonathan Shen

Lingvo とは、 国際語エスペラント語 で「言語」を表します。Lingvo と命名したことは、まさにLingvoフレームワークのルーツを暗示しています - Lingvoは、機械翻訳、音声認識、そして音声合成のような言語関連タスクのためのシーケンスモデルに焦点を合わせてTensorFlowを使った一般的なディープラーニングフレームワークとして開発されました。
内部的には、Lingvoフレームワークは勢いを増し、Lingvoを使用している研究者の数はバルーンのように膨らんでいます。その結果、Lingvoを使用して作成された最先端の結果を含む出版済みの 論文 が今では多数あります。サポートされているアーキテクチャは、従来のRNNシーケンスモデルからTransformerモデルおよびVAEコンポーネントを含むモデルまで多岐にわたります。私たちの研究コミュニティの支持を示し、再現可能な研究努力を奨励するために、私たちはフレームワークをオープンソース化し、私たちの論文で使われているモデルを公開し始めています。

図1:Lingvoフレームワークの概要。評価と提供のためにモデルをインスタンス化、トレーニング、およびエクスポートする方法を概説しています。

Lingvo は共同研究を念頭に置いて構築されており、さまざまなタスクで共通のレイヤの実装を共有することでコードの再利用を促進しています。さらに、すべてのレイヤが同じ共通のインタフェースを実装し、同じ方法でレイアウトされています。これにより、よりクリーンでわかりやすいコードが生成されるだけでなく、他の人が別のタスクに対して行った改善を自分のタスクに適用することが非常に簡単になります。この一貫性を強化するには、より多くの規律 (dicipline) と共通語 (boilerplate) が必要になりますが、 Lingvo では、これを最小限に抑えて研究中の反復時間を短縮することを試みています。

コラボレーションのもう1つの側面は、再現可能な結果を共有することです。Lingvoは、チェックインモデルのハイパーパラメータ設定を集中管理する場所を提供します。これは重要な実験を文書化するのに役立つだけでなく、同一のモデルを訓練することによってあなたの結果を簡単に再現する方法を他の人に与えることになります。

def Task(cls):
  p = model.AsrModel.Params()
  p.name = 'librispeech'

  # encoder パラメータの初期化
  ep = p.encoder
  # データは240次元フレーム(80x3フレーム)で構成されており、
  # それらを個々に80次元フレームとして再解釈します。
  # 詳細は LibrispeechCommonAsrInputParams も参照のこと。
  ep.input_shape = [None, None, 80, 1]
  ep.lstm_cell_size = 1024
  ep.num_lstm_layers = 4
  ep.conv_filter_shapes = [(3, 3, 1, 32), (3, 3, 32, 32)]
  ep.conv_filter_strides = [(2, 2), (2, 2)]
  ep.cnn_tpl.params_init = py_utils.WeightInit.Gaussian(0.001)
  # Conv LSTM レイヤを無効化
  ep.num_conv_lstm_layers = 0

  # decoder パラメータの初期化
  dp = p.decoder
  dp.rnn_cell_dim = 1024
  dp.rnn_layers = 2
  dp.source_dim = 2048
  # unrolling ベースに基づく間、機能を使用する。
  dp.use_while_loop_based_unrolling = False

  tp = p.train
  tp.learning_rate = 2.5e-4
  tp.lr_schedule = lr_schedule.ContinuousLearningRateSchedule.Params().Set(
      start_step=50000, half_life_steps=100000, min=0.01)

  # Setting p.eval.samples_per_summary を大きな値に設定すると、
  # dev, devother, test, testother は完全に評価され(これらの各セットの
  # num_samplesは5000未満なので)、トレーニングサマリは5000サンプルで計算される
  p.eval.samples_per_summary = 5000
  p.eval.decoder_samples_per_summary = 0

  # オーバーフィットを防ぐために、可変重量ノイズを使用
  p.vn.global_vn = True
  p.train.vn_std = 0.075
  p.train.vn_start_step = 20000

  return p


Lingvo は NLP に焦点を当てることから始めましたが、それは本質的に非常に柔軟性があり、画像セグメンテーションや点群分類などのタスクのためのモデルはフレームワークを使ってうまく実装されています。Distillation、GAN、およびマルチタスクモデルもサポートされています。同時に、このフレームワークはスピードを犠牲にすることはなく、最適化された入力パイプラインと高速分散トレーニングを特徴としています。最後に、Lingvoはプロダクションの容易さを目指してまとめられており、モバイル推論のためのモデルの移植への明確な道筋さえあります。

コードに直接ジャンプするには、GitHubページcodelab を調べてください。Lingvoまたはそれがサポートする高度な機能の詳細については、私たちの 論文 を参照してください。
-----

個々に乗ってるコードを読む限りでは、自然言語処理系DLは基本エンコーダデコーダで、それぞれのレイヤ群をあらわすオブジェクトにパラメータをセットするだけでモデル構築ができるフレームワークのようだ。

でもね..機械学習やディープラーニングで苦労するのはモデルよりもデータの口金(くちがね)にあわせることであって、特に日本語などの分かち書きから始めないとだめな言語はとっても面倒になるのよ..そのあたりをカバーするフレームワークが本当はほしいんだけどなあ..

 

2019年2月6日水曜日

pip install mpi4py したら mpi.h がないと怒られた件

Ubuntu 18.04 LTS 環境下のPython3(python3-dev)で


pip install mpi4py

したら、

    _configtest.c:2:10: fatal error: mpi.h: No such file or directory
     #include
              ^~~~~~~
    compilation terminated.
    failure.
    removing: _configtest.c _configtest.o
    error: Cannot compile MPI programs. Check your configuration!!!
   
    ----------------------------------------

Command "/home/tasuku_hori/env/bin/python3 -u -c "import setuptools, tokeni
ze;__file__='/tmp/pip-install-8php8m1j/mpi4py/setup.py';f=getattr(tokenize,
 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec
(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-xt1ud26
w/install-record.txt --single-version-externally-managed --compile --instal
l-headers /home/tasuku_hori/env/include/site/python3.6/mpi4py" failed with
error code 1 in /tmp/pip-install-8php8m1j/mpi4py/


というエラーが出た。

いろいろ調べてみたら、

sudo apt install -y libopenmpi-dev

を実行後再度実行すると成功した。


調べている間、openmpi-binだとかmpichだとかをapt install しろ書いてあったが
私の環境では libopenmpi-dev だった。

ご参考まで。

2019年2月4日月曜日

Donkey Car走行会に参加した


AIでRCカーを走らせよう
ハンズオン&走行会&見学会
https://lab-kadokawa74.peatix.com/

というイベントが有り、2月2日の走行会のみ参加してきた。

手持ちのDonkey Carは 
Robocar Store で購入した標準車の rocinante号
と、
WARRIORシャーシベースで作った emperor 号
の2台。

安定しているのは rocinante なのだけど、
やっぱり走行経験がほとんどない emperor 号を持っていった。

emperor 号は 1/28 RCカーシャーシベースなので
Mac Book Air 11inchと一緒にお弁当小袋で持っていけるし..

着席と同時にセットアップをはじめたのだが..




イベントは最初の1時間だけトーク..
といってもスピーカの自己紹介と
海外事情についての話があり、作業途中だったけど
聴講モードへ..

じつはここでつまずいていた。
本体の電源を入れっぱなしにしたので、
バッテリが放電していて、
ESCの起動LEDがつかなくなる..

しょうがないので充電を開始..
1時間ほどで充電できたので
早速つなごうとしたら..

今度はターミナル接続が
とぎれとぎれでつながらない..

やっぱり◯ァーウェイ製ルータはまずかったか..

講師の方の助力で、ダイレクトに接続させてもらいことなきを得る。

が、キャリブレーション中にステアリングが右にまがったままもどらない..

PCA9536のチャネルを買えてもステアリングだけ動かない..

PCA9536より先ステアリングサーボまでの間に問題が発生..

でも、テスターは自宅だしボタン電池が切れてて使えない..
サーボの動作確認するにはオスオスのジャンパケーブル3本がいるけど
今日は持ってきていない..

ということで1センチも走行できずリタイヤ...


ずーっと他の人の走行を眺めてました..



くそー、rocinanteも持ってくりゃよかった..








電気系でリタイヤとは..
(ザクスピードの)鈴木亜久里かよっ

..っていっても、伝わらないだろうなあ..

2019年2月1日金曜日

GitHub:Learning to Drive Smoothly in Minuts 実装リポジトリのREADME.md を翻訳してみた

以下のドキュメントは、 GitHub 上の Learning to Drive Smoothly in Minuts の再現用リポジトリのREADME.md を翻訳したものです。

-----

Learning to Drive Smoothly in Minuts


Donkey Carシミュレータ、強化学習アルゴリズムである Soft Actor-Critic(SAC) と Variational AutoEncoder(VAE) を使用して、数分でスムーズな運転を学習します。

  • 媒体上のブログ記事:リンク
  • ビデオ



VAE レベル0VAE レベル1


VAEをダウンロードVAEをダウンロード
事前トレーニング済みエージェントをダウンロード事前トレーニング済みエージェントをダウンロード


注意 : 事前トレーニング済みのエージェントは logs/sac/ フォルダに保存する必要があります(事前トレーニング済みのエージェントを使用するには --exp-id 6 (フォルダのインデックス) を渡す必要があります)。

クイックスタート


0. シミュレータをここからダウンロード、もしくは ソースからビルド
1. 関連パッケージのインストール (cf requirements.txt)
2. (オプションだが推奨) 事前学習済み VAEのダウンロード:VAEレベル0 / VAEレベル1

3. Soft Actor-Critic (SAC) コントロールポリシを5000ステップトレーニング
python train.py --algo sac -vae path-to-vae.pkl -n 5000

4. 2000ステップのトレーニングを受けたエージェントをエンジョイ
python enjoy.py --algo sac -vae path-to-vae.pkl --exp-id 0 -n 2000

別のレベルでトレーニングするには、config.py内のLEVEL=0LEVEL=1に変更する必要があります。
 

Variational AutoEncoder(VAE) のトレーニング


1. 遠隔操作モードを使って画像を収集
python -m teleop.teleop_client --record-folder path-to-record/folder/

2. VAEをトレーニング
python -m vae.train --n-epochs 50 --verbose 0 --z-size 64 -f path-to-record/folder/

遠隔操作モードでのトレーニング


python train.py --algo sac -vae logs/vae.pkl -n 5000 --teleop

遠隔操作モードでのテスト


python -m teleop.teleop_client --algo sac -vae logs/vae.pkl --exp-id 0

潜在空間を探索


python -m vae.enjoy_latent -vae logs/level-0/vae-8.pkl

結果の再現


ビデオに表示されている結果を再現するには、 `config.py` でさまざまな値を確認する必要があります。
 

レベル0
 

config.py :
MAX_STEERING_DIFF  =  0.15  # 非常になめらかな操作の場合は0.1を指定、ただしより多くのステップが必要
MAX_THROTTLE  =  0.6  # MAX_THROTTLE = 0.5でもよいが高速走行のために
MAX_CTE_ERROR =  2.0  #通常モードのみで使用される、遠隔操作モード使用時は10.0に設定
LEVEL = 0

通常モード(なめらかな操作)でトレーニング、5~10分かかる
python train.py --algo sac -n 800.,0 -vae logs/vae-level-0-dim-32.pkl

通常モード(非常になめらかな操作、MAX_STEERING_DIFF = 0.1を指定)でトレーニング、~20分かかる
python train.py --algo sac -n 20000 -vae logs/vae-level-0-dim-32.pkl

遠隔モード(非常になめらかな操作、MAX_CTE_ERROR = 10.0を指定)でトレーニング、5~10分かかる
python train.py --algo sac -n 8000 -vae logs/vae-level-0-dim-32.pkl --teleop


レベル1

注意 : レベル1では、遠隔モードのみ有効

config.py :
MAX_STEERING_DIFF = 0.15
MAX_THROTTLE = 0.5 # MAX_THROTTLE = 0.6 でも動作するが最も急なターンであるためトレーニングが難しい
LEVEL = 1

遠隔操作モードでトレーニング、~10分かかる
python train.py --algo sac -n 15000 -vae logs/vae-level-1-dim-64.pkl --teleop

注意 : VAEのサイズはレベル0と1で異なりますが、これは重要な要素ではありません。

オンボードカメラでビデオ録画


トレーニングを受けたモデルが必要です。たとえば、最後のトレーニングを受けたSACエージェントで1000ステップを記録する場合は、次のようになります。

python -m utils.record_video --algo sac --vae-path logs/level-0/vae-32-2.pkl -n 1000

プロジェクトの引用


このリポジトリを引用するには:

@misc{drive-smoothly-in-minutes,
  author = {Raffin, Antonin and Sokolkov, Roma},
  title = {Learning to Drive Smoothly in Minutes},
  year = {2019},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/araffin/learning-to-drive-in-5-minutes/}},
}

クレジット


関連論文: Learn to Drive in a Day]() / 日本語訳


-----

最初てっきり Learn to Drive in a Dayの作者のリポジトリだと思っていたのだけど、読んでいるうちに別人と判明した。
こっちは in Minuts になってるのね...
関連論文に紹介されているってことは、あきらかにオマージュということかな..

でも Smoothlyが入ってるところが、お前よりぬるぬる動くし学習も速いぜ、とドヤ顔でいいたいのかもなあ..

Raspberry Pi 4B(Raspbean buster lite) へ pyrealsense2 をインストールする

DonkeycarでIntel RealSense T265 トラッキングカメラを使おうと思ったのだけど、ドキュメントにUSB3.0推奨とある記述をみつけだ。 どうもUSB2.0でも動作するのだけど、イメージストリームを使う場合などは3.0のほうが良いのだろう。白黒の800...