DonkeySIM5:学習

5. 学習

いよいよDonkeyCarのAIを学習させます。学習はcolab環境で行います。

手順1. 学習データの圧縮★

 

手順2. colab環境への接続★

ここからはcolabインスタンスに接続します。
colab環境に接続します。接続が完了した後に、画面左側上から3つ目のフォルダアイコンを選択し、アップロードボタンを押下します。ローカル環境から圧縮したdata.zipを選択して、colabへ圧縮した教師データアップロードします。

手順3. colab環境の構築★

AIの学習を実行するため、colab環境にDonkeyCarの環境を構築します。次のセルを実行して、環境構築とワークスペースの作成を行います。

手順4. 学習データの展開★

環境構築完了後、次のセルを実行して学習データをDonkeyCarのワークスペース、mycarに展開します。data.zipを解凍して得られる、dataフォルダがmycar内のdataフォルダを上書きするように解凍します。

手順5. colabでの学習の実行★

次のコマンドを実行して、DonkeyCarの学習を実行します。

手順6. AIモデルファイルの配置★

ダウンロードしたmypilot.5hをローカル環境のワークスペース配下のディレクトリworkspace¥mycar¥modelsに移動させてください。

DonkeySIM4学習データの収集

4. 学習データの収集

ここではシミュレータ上のDonkeyCarを操作してAIに学習させるためのデータを集めます。

手順1. DonkeySIMのダウンロード

以下のURLからローカル環境のプラットフォームにあったDonkeySIMをダウンロードして、zipファイルを解凍します。バージョンは「May Race Edition v20.5.16」を選択しましょう。

手順2. DonkeySIMの実行★

ダウンロードしたDonkeySIMを開き、実行ファイルを実行します。

手順3. DonkeyCarソフトウェアの起動★

別ページを参照

手順4. コントロール画面への接続★

「手順3」を実行後、しばらくしたら以下のURLにWEBブラウザでアクセスしてください。コントロール画面が表示されます。

手順5. シミュレータの操作★

2つの操作方法のいずれかに従って、シミュレータを操作し、学習データを収集します。初心者の場合は「操作方法1 スロットル固定走行」で操作を行いましょう。走行によって取得されるデータ数は手順3のセルの出力に表示されます。1万データを目安に収集を行ってください。

 

事故データの消去

https://www.donkeycar.com/updates/how-to-clean-data

でWebサーバが立ち上がり、いらないデータ消したりできたと思います。

 

 

DonkeySIM3:設定ファイルの修正

3. 設定ファイルの修正

DonekyCarワークスペースにせ作成される「myconfig.py」ファイルを編集することで、DonkeyCarの設定を変更することができます。「STEP2.DonkeyCar」で作成したワークスペース内のmyconfig.pyにシミュレータ用の設定を実施します。
「mycar/myconfig.py」をテキストエディタで開き、以下のように設定値のコメントアウトを解除して値を変更してください。
元のファイルのバックアップをとって、修正後差分をみる。
chen@hongs-mbp mycar % cp -p myconfig.py myconfig_000.py
chen@hongs-mbp mycar % diff myconfig.py myconfig_000.py
243,247c243,247
< DONKEY_GYM = True
< DONKEY_SIM_PATH = “remote” #”/home/tkramer/projects/sdsandbox/sdsim/build/DonkeySimLinux/donkey_sim.x86_64″ when racing on virtual-race-league use “remote”, or user “remote” when you want to start the sim manually first.
< DONKEY_GYM_ENV_NAME = “donkey-mountain-track-v0” # (“donkey-generated-track-v0″|”donkey-generated-roads-v0″|”donkey-warehouse-v0″|”donkey-avc-sparkfun-v0”)
< GYM_CONF = { “body_style” : “donkey”, “body_rgb” : (128, 128, 128), “car_name” : “me”, “font_size” : 100} # body style(donkey|bare|car01) body rgb 0-255
< SIM_HOST = “127.0.0.1” # when racing on virtual-race-league use host “trainmydonkey.com”
> # DONKEY_GYM = False
> # DONKEY_SIM_PATH = “path to sim” #”/home/tkramer/projects/sdsandbox/sdsim/build/DonkeySimLinux/donkey_sim.x86_64″ when racing on virtual-race-league use “remote”, or user “remote” when you want to start the sim manually first.
> # DONKEY_GYM_ENV_NAME = “donkey-mountain-track-v0” # (“donkey-generated-track-v0″|”donkey-generated-roads-v0″|”donkey-warehouse-v0″|”donkey-avc-sparkfun-v0”)
> # GYM_CONF = { “body_style” : “donkey”, “body_rgb” : (128, 128, 128), “car_name” : “me”, “font_size” : 100} # body style(donkey|bare|car01) body rgb 0-255
> # SIM_HOST = “127.0.0.1” # when racing on virtual-race-league use host “trainmydonkey.com”

DonkeySIM2:ワークスペースの作成

2. DonkeyCarワークスペースの作成

DonekyCarではワークスペースという単位で作業を進めていきます。ワークスペースはDonkeyCarの設定やAIモデル、学習データを管理する単位です。ワークスペースを複数利用することで複数の設定を同時に残すことができます。走行させるコースごとにワークスペースを作ると良いでしょう。

ワークスペースを作成するコマンドはdonkey createcar --path <ワークスペース名>です。 <ワークスペース名>に指定されたフォルダが作成されます。相対パス、絶対パスで指定可能です。

ここではローカル環境でJupyter Notebookを起動したターミナルのカレントディレクトリ配下に「mycar」という名前のプロジェクトが作成します。次のセルを実行してください。

In [0]:
PROJECT_PATH="mycar"
!donkey createcar --path $PROJECT_PATH
実行結果:
using donkey v3.1.2 …
Creating car folder: mycar
making dir mycar
Creating data & model folders.
making dir mycar/models
making dir mycar/data
making dir mycar/logs
Copying car application template: complete
Copying car config defaults. Adjust these before starting your car.
Copying train script. Adjust these before starting your car.
Copying my car config overrides
Donkey setup complete.

DonkeySIM1:ソフトウェアのインストール

ローカルに、DonkeyCarソフトウェアのインストール

セルの実行方法はマウスでセルを選択後、表示される「三角ボタン」を押下する.

 

Collecting tensorflow==1.15.0
Downloading tensorflow-1.15.0-cp37-cp37m-macosx_10_11_x86_64.whl (124.0 MB)
|████████████████████████████████| 124.0 MB 46 kB/s
Collecting absl-py>=0.7.0
Downloading absl-py-0.9.0.tar.gz (104 kB)
|████████████████████████████████| 104 kB 14.7 MB/s
Collecting tensorboard<1.16.0,>=1.15.0
Downloading tensorboard-1.15.0-py3-none-any.whl (3.8 MB)
|████████████████████████████████| 3.8 MB 11.2 MB/s
Collecting numpy<2.0,>=1.16.0
Downloading numpy-1.18.5-cp37-cp37m-macosx_10_9_x86_64.whl (15.1 MB)
|████████████████████████████████| 15.1 MB 14.2 MB/s
Collecting google-pasta>=0.1.6
Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)
|████████████████████████████████| 57 kB 17.8 MB/s
Collecting gast==0.2.2
Downloading gast-0.2.2.tar.gz (10 kB)
Collecting protobuf>=3.6.1
Downloading protobuf-3.12.2-cp37-cp37m-macosx_10_9_x86_64.whl (1.3 MB)
|████████████████████████████████| 1.3 MB 36.9 MB/s
Requirement already satisfied: wheel>=0.26 in ./vdonkey/lib/python3.7/site-packages (from tensorflow==1.15.0) (0.34.2)
Collecting termcolor>=1.1.0
Downloading termcolor-1.1.0.tar.gz (3.9 kB)
Requirement already satisfied: six>=1.10.0 in ./vdonkey/lib/python3.7/site-packages (from tensorflow==1.15.0) (1.15.0)
Collecting wrapt>=1.11.1
Downloading wrapt-1.12.1.tar.gz (27 kB)
Collecting keras-applications>=1.0.8
Downloading Keras_Applications-1.0.8-py3-none-any.whl (50 kB)
|████████████████████████████████| 50 kB 14.7 MB/s
Collecting keras-preprocessing>=1.0.5
Downloading Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
|████████████████████████████████| 42 kB 3.1 MB/s
Collecting tensorflow-estimator==1.15.1
Downloading tensorflow_estimator-1.15.1-py2.py3-none-any.whl (503 kB)
|████████████████████████████████| 503 kB 4.9 MB/s
Collecting grpcio>=1.8.6
Downloading grpcio-1.29.0-cp37-cp37m-macosx_10_9_x86_64.whl (2.8 MB)
|████████████████████████████████| 2.8 MB 14.1 MB/s
Collecting opt-einsum>=2.3.2
Downloading opt_einsum-3.2.1-py3-none-any.whl (63 kB)
|████████████████████████████████| 63 kB 5.5 MB/s
Collecting astor>=0.6.0
Downloading astor-0.8.1-py2.py3-none-any.whl (27 kB)
Requirement already satisfied: setuptools>=41.0.0 in ./vdonkey/lib/python3.7/site-packages (from tensorboard<1.16.0,>=1.15.0->tensorflow==1.15.0) (47.1.1)
Collecting markdown>=2.6.8
Downloading Markdown-3.2.2-py3-none-any.whl (88 kB)
|████████████████████████████████| 88 kB 6.5 MB/s
Collecting werkzeug>=0.11.15
Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
|████████████████████████████████| 298 kB 16.1 MB/s
Collecting h5py
Downloading h5py-2.10.0-cp37-cp37m-macosx_10_6_intel.whl (3.0 MB)
|████████████████████████████████| 3.0 MB 35.2 MB/s
Requirement already satisfied: importlib-metadata; python_version < “3.8” in ./vdonkey/lib/python3.7/site-packages (from markdown>=2.6.8->tensorboard<1.16.0,>=1.15.0->tensorflow==1.15.0) (1.6.1)
Requirement already satisfied: zipp>=0.5 in ./vdonkey/lib/python3.7/site-packages (from importlib-metadata; python_version < “3.8”->markdown>=2.6.8->tensorboard<1.16.0,>=1.15.0->tensorflow==1.15.0) (3.1.0)
Building wheels for collected packages: absl-py, gast, termcolor, wrapt
Building wheel for absl-py (setup.py) … done
Created wheel for absl-py: filename=absl_py-0.9.0-py3-none-any.whl size=121931 sha256=0ebf2c60167c38cc1a7710fe398ffda06c5f3a90b1032e2dc8aaa04c88be8792
Stored in directory: /Users/chen/Library/Caches/pip/wheels/cc/af/1a/498a24d0730ef484019e007bb9e8cef3ac00311a672c049a3e
Building wheel for gast (setup.py) … done
Created wheel for gast: filename=gast-0.2.2-py3-none-any.whl size=7539 sha256=c0f7d62bd142cf70dd117cd53c7f3308b11d5121cd4cfadee95a109cc8ed5321
Stored in directory: /Users/chen/Library/Caches/pip/wheels/21/7f/02/420f32a803f7d0967b48dd823da3f558c5166991bfd204eef3
Building wheel for termcolor (setup.py) … done
Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4830 sha256=eae29569bece02a05534429923481614d786046411c02e3373bfa36cb4e00280
Stored in directory: /Users/chen/Library/Caches/pip/wheels/3f/e3/ec/8a8336ff196023622fbcb36de0c5a5c218cbb24111d1d4c7f2
Building wheel for wrapt (setup.py) … done
Created wheel for wrapt: filename=wrapt-1.12.1-cp37-cp37m-macosx_10_15_x86_64.whl size=32491 sha256=265f5a417eead6aecae94efc221bcd0b3514095f46b592f459f3be28ea8242ea
Stored in directory: /Users/chen/Library/Caches/pip/wheels/62/76/4c/aa25851149f3f6d9785f6c869387ad82b3fd37582fa8147ac6
Successfully built absl-py gast termcolor wrapt
Installing collected packages: absl-py, protobuf, grpcio, markdown, numpy, werkzeug, tensorboard, google-pasta, gast, termcolor, wrapt, h5py, keras-applications, keras-preprocessing, tensorflow-estimator, opt-einsum, astor, tensorflow
Successfully installed absl-py-0.9.0 astor-0.8.1 gast-0.2.2 google-pasta-0.2.0 grpcio-1.29.0 h5py-2.10.0 keras-applications-1.0.8 keras-preprocessing-1.1.2 markdown-3.2.2 numpy-1.18.5 opt-einsum-3.2.1 protobuf-3.12.2 tensorboard-1.15.0 tensorflow-1.15.0 tensorflow-estimator-1.15.1 termcolor-1.1.0 werkzeug-1.0.1 wrapt-1.12.1
Cloning into ‘donkeycar’…
remote: Enumerating objects: 13118, done.
remote: Total 13118 (delta 0), reused 0 (delta 0), pack-reused 13118
Receiving objects: 100% (13118/13118), 67.77 MiB | 6.81 MiB/s, done.
Resolving deltas: 100% (8296/8296), done.
/Users/chen/workspace/donkeycar
Branch ‘master’ set up to track remote branch ‘master’ from ‘origin’.
Switched to a new branch ‘master’
Obtaining file:///Users/chen/workspace/donkeycar
Requirement already satisfied: numpy in /Users/chen/workspace/vdonkey/lib/python3.7/site-packages (from donkeycar==3.1.2) (1.18.5)
Collecting pillow
Downloading Pillow-7.1.2-cp37-cp37m-macosx_10_10_x86_64.whl (2.2 MB)
|████████████████████████████████| 2.2 MB 3.0 MB/s
Collecting docopt
Downloading docopt-0.6.2.tar.gz (25 kB)
Requirement already satisfied: tornado in /Users/chen/workspace/vdonkey/lib/python3.7/site-packages (from donkeycar==3.1.2) (6.0.4)
Collecting requests
Downloading requests-2.23.0-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 14.6 MB/s
Requirement already satisfied: h5py in /Users/chen/workspace/vdonkey/lib/python3.7/site-packages (from donkeycar==3.1.2) (2.10.0)
Collecting moviepy
Downloading moviepy-1.0.3.tar.gz (388 kB)
|████████████████████████████████| 388 kB 40.4 MB/s
Collecting pandas
Downloading pandas-1.0.4-cp37-cp37m-macosx_10_9_x86_64.whl (10.0 MB)
|████████████████████████████████| 10.0 MB 8.7 MB/s
Collecting PrettyTable
Downloading prettytable-0.7.2.tar.bz2 (21 kB)
Collecting paho-mqtt
Downloading paho-mqtt-1.5.0.tar.gz (99 kB)
|████████████████████████████████| 99 kB 11.4 MB/s
Collecting matplotlib
Downloading matplotlib-3.2.1-cp37-cp37m-macosx_10_9_x86_64.whl (12.4 MB)
|████████████████████████████████| 12.4 MB 9.7 MB/s
Collecting idna<3,>=2.5
Downloading idna-2.9-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 10.5 MB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
Downloading urllib3-1.25.9-py2.py3-none-any.whl (126 kB)
|████████████████████████████████| 126 kB 34.4 MB/s
Collecting certifi>=2017.4.17
Downloading certifi-2020.4.5.2-py2.py3-none-any.whl (157 kB)
|████████████████████████████████| 157 kB 9.7 MB/s
Collecting chardet<4,>=3.0.2
Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
|████████████████████████████████| 133 kB 5.5 MB/s
Requirement already satisfied: six in /Users/chen/workspace/vdonkey/lib/python3.7/site-packages (from h5py->donkeycar==3.1.2) (1.15.0)
Requirement already satisfied: decorator<5.0,>=4.0.2 in /Users/chen/workspace/vdonkey/lib/python3.7/site-packages (from moviepy->donkeycar==3.1.2) (4.4.2)
Collecting tqdm<5.0,>=4.11.2
Downloading tqdm-4.46.1-py2.py3-none-any.whl (63 kB)
|████████████████████████████████| 63 kB 4.0 MB/s
Collecting proglog<=1.0.0
Downloading proglog-0.1.9.tar.gz (10 kB)
Collecting imageio<3.0,>=2.5
Downloading imageio-2.8.0-py3-none-any.whl (3.3 MB)
|████████████████████████████████| 3.3 MB 2.2 MB/s
Collecting imageio_ffmpeg>=0.2.0
Downloading imageio_ffmpeg-0.4.2-py3-none-macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (22.5 MB)
|████████████████████████████████| 22.5 MB 8.4 MB/s
Collecting pytz>=2017.2
Downloading pytz-2020.1-py2.py3-none-any.whl (510 kB)
|████████████████████████████████| 510 kB 7.2 MB/s
Requirement already satisfied: python-dateutil>=2.6.1 in /Users/chen/workspace/vdonkey/lib/python3.7/site-packages (from pandas->donkeycar==3.1.2) (2.8.1)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Users/chen/workspace/vdonkey/lib/python3.7/site-packages (from matplotlib->donkeycar==3.1.2) (2.4.7)
Collecting cycler>=0.10
Downloading cycler-0.10.0-py2.py3-none-any.whl (6.5 kB)
Collecting kiwisolver>=1.0.1
Downloading kiwisolver-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl (60 kB)
|████████████████████████████████| 60 kB 11.5 MB/s
Building wheels for collected packages: docopt, moviepy, PrettyTable, paho-mqtt, proglog
Building wheel for docopt (setup.py) … done
Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13704 sha256=1ed8fcb85a9ec872c113c6977422bdf9f2708419501cf184e5206d2eea36f663
Stored in directory: /Users/chen/Library/Caches/pip/wheels/72/b0/3f/1d95f96ff986c7dfffe46ce2be4062f38ebd04b506c77c81b9
Building wheel for moviepy (setup.py) … done
Created wheel for moviepy: filename=moviepy-1.0.3-py3-none-any.whl size=110727 sha256=c841358abb362d7d6f4fb5f5fc27014c495d20d374e97278b38053602933ff7f
Stored in directory: /Users/chen/Library/Caches/pip/wheels/56/dc/2b/9cd600d483c04af3353d66623056fc03faed76b7518faae4df
Building wheel for PrettyTable (setup.py) … done
Created wheel for PrettyTable: filename=prettytable-0.7.2-py3-none-any.whl size=13698 sha256=7a707229ae28bad4daf980fb0ecf36af8959d4c33d85eec4d066eaa44c293a44
Stored in directory: /Users/chen/Library/Caches/pip/wheels/8c/76/0b/eb9eb3da7e2335e3577e3f96a0ae9f74f206e26457bd1a2bc8
Building wheel for paho-mqtt (setup.py) … done
Created wheel for paho-mqtt: filename=paho_mqtt-1.5.0-py3-none-any.whl size=61415 sha256=d6c6b029c64bee8cf5cb83df8de4b483ccc865f2685ebe190bf69d4de436bbe5
Stored in directory: /Users/chen/Library/Caches/pip/wheels/0d/7c/fb/05123381bd60c57ffcdc6fcc1c26e585dedee85b8c1625e2c1
Building wheel for proglog (setup.py) … done
Created wheel for proglog: filename=proglog-0.1.9-py3-none-any.whl size=6146 sha256=e88b5e1b73a9ff77c324a69ce340bd15584c2eb126bc68073438eec518d13b1c
Stored in directory: /Users/chen/Library/Caches/pip/wheels/12/36/1f/dc61e6ac10781d63cf6fa045eb09fa613a667384e12cb6e6e0
Successfully built docopt moviepy PrettyTable paho-mqtt proglog
Installing collected packages: pillow, docopt, idna, urllib3, certifi, chardet, requests, tqdm, proglog, imageio, imageio-ffmpeg, moviepy, pytz, pandas, PrettyTable, paho-mqtt, cycler, kiwisolver, matplotlib, donkeycar
Running setup.py develop for donkeycar
Successfully installed PrettyTable-0.7.2 certifi-2020.4.5.2 chardet-3.0.4 cycler-0.10.0 docopt-0.6.2 donkeycar idna-2.9 imageio-2.8.0 imageio-ffmpeg-0.4.2 kiwisolver-1.2.0 matplotlib-3.2.1 moviepy-1.0.3 paho-mqtt-1.5.0 pandas-1.0.4 pillow-7.1.2 proglog-0.1.9 pytz-2020.1 requests-2.23.0 tqdm-4.46.1 urllib3-1.25.9
ERROR: gym-donkeycar is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with svn+, git+, hg+, or bzr+).
/Users/chen/workspace
Collecting gym
Downloading gym-0.17.2.tar.gz (1.6 MB)
|████████████████████████████████| 1.6 MB 2.9 MB/s
Collecting scipy
Downloading scipy-1.4.1-cp37-cp37m-macosx_10_6_intel.whl (28.4 MB)
|████████████████████████████████| 28.4 MB 5.6 MB/s
Requirement already satisfied: numpy>=1.10.4 in ./vdonkey/lib/python3.7/site-packages (from gym) (1.18.5)
Collecting pyglet<=1.5.0,>=1.4.0
Downloading pyglet-1.5.0-py2.py3-none-any.whl (1.0 MB)
|████████████████████████████████| 1.0 MB 6.8 MB/s
Collecting cloudpickle<1.4.0,>=1.2.0
Downloading cloudpickle-1.3.0-py2.py3-none-any.whl (26 kB)
Collecting future
Downloading future-0.18.2.tar.gz (829 kB)
|████████████████████████████████| 829 kB 5.0 MB/s
Building wheels for collected packages: gym, future
Building wheel for gym (setup.py) … done
Created wheel for gym: filename=gym-0.17.2-py3-none-any.whl size=1650891 sha256=681ab556d738088cd196205a956372aa5d866ad3f8addd5e21c0bf10064a1a9e
Stored in directory: /Users/chen/Library/Caches/pip/wheels/18/e1/58/89a2aa24e6c2cc800204fc02010612afdf200926c4d6bfe315
Building wheel for future (setup.py) … done
Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491058 sha256=993d38b324ae7137487f75a01b07d6c71a28e086ede9ca0920cb17b3e327e924
Stored in directory: /Users/chen/Library/Caches/pip/wheels/56/b0/fe/4410d17b32f1f0c3cf54cdfb2bc04d7b4b8f4ae377e2229ba0
Successfully built gym future
Installing collected packages: scipy, future, pyglet, cloudpickle, gym
Successfully installed cloudpickle-1.3.0 future-0.18.2 gym-0.17.2 pyglet-1.5.0 scipy-1.4.1
Cloning into ‘gym-donkeycar’…
remote: Enumerating objects: 773, done.
remote: Total 773 (delta 0), reused 0 (delta 0), pack-reused 773
Receiving objects: 100% (773/773), 2.94 MiB | 2.60 MiB/s, done.
Resolving deltas: 100% (430/430), done.
Obtaining file:///Users/chen/workspace/gym-donkeycar
Requirement already satisfied: gym in ./vdonkey/lib/python3.7/site-packages (from gym-donkeycar==1.0.14) (0.17.2)
Requirement already satisfied: numpy in ./vdonkey/lib/python3.7/site-packages (from gym-donkeycar==1.0.14) (1.18.5)
Requirement already satisfied: pillow in ./vdonkey/lib/python3.7/site-packages (from gym-donkeycar==1.0.14) (7.1.2)
Collecting pytest
Downloading pytest-5.4.3-py3-none-any.whl (248 kB)
|████████████████████████████████| 248 kB 3.5 MB/s
Collecting pytest-mock
Downloading pytest_mock-3.1.1-py3-none-any.whl (10 kB)
Requirement already satisfied: cloudpickle<1.4.0,>=1.2.0 in ./vdonkey/lib/python3.7/site-packages (from gym->gym-donkeycar==1.0.14) (1.3.0)
Requirement already satisfied: scipy in ./vdonkey/lib/python3.7/site-packages (from gym->gym-donkeycar==1.0.14) (1.4.1)
Requirement already satisfied: pyglet<=1.5.0,>=1.4.0 in ./vdonkey/lib/python3.7/site-packages (from gym->gym-donkeycar==1.0.14) (1.5.0)
Collecting more-itertools>=4.0.0
Downloading more_itertools-8.4.0-py3-none-any.whl (43 kB)
|████████████████████████████████| 43 kB 3.4 MB/s
Requirement already satisfied: attrs>=17.4.0 in ./vdonkey/lib/python3.7/site-packages (from pytest->gym-donkeycar==1.0.14) (19.3.0)
Requirement already satisfied: importlib-metadata>=0.12; python_version < “3.8” in ./vdonkey/lib/python3.7/site-packages (from pytest->gym-donkeycar==1.0.14) (1.6.1)
Collecting pluggy<1.0,>=0.12
Downloading pluggy-0.13.1-py2.py3-none-any.whl (18 kB)
Collecting py>=1.5.0
Downloading py-1.8.2-py2.py3-none-any.whl (83 kB)
|████████████████████████████████| 83 kB 5.0 MB/s
Requirement already satisfied: packaging in ./vdonkey/lib/python3.7/site-packages (from pytest->gym-donkeycar==1.0.14) (20.4)
Requirement already satisfied: wcwidth in ./vdonkey/lib/python3.7/site-packages (from pytest->gym-donkeycar==1.0.14) (0.2.4)
Requirement already satisfied: future in ./vdonkey/lib/python3.7/site-packages (from pyglet<=1.5.0,>=1.4.0->gym->gym-donkeycar==1.0.14) (0.18.2)
Requirement already satisfied: zipp>=0.5 in ./vdonkey/lib/python3.7/site-packages (from importlib-metadata>=0.12; python_version < “3.8”->pytest->gym-donkeycar==1.0.14) (3.1.0)
Requirement already satisfied: pyparsing>=2.0.2 in ./vdonkey/lib/python3.7/site-packages (from packaging->pytest->gym-donkeycar==1.0.14) (2.4.7)
Requirement already satisfied: six in ./vdonkey/lib/python3.7/site-packages (from packaging->pytest->gym-donkeycar==1.0.14) (1.15.0)
Installing collected packages: more-itertools, pluggy, py, pytest, pytest-mock, gym-donkeycar
Running setup.py develop for gym-donkeycar
Successfully installed gym-donkeycar more-itertools-8.4.0 pluggy-0.13.1 py-1.8.2 pytest-5.4.3 pytest-mock-3.1.1

DonkeySIM0:事前準備

ハンズオンはテキスト兼実行環境のJupyter notebookを利用します。このJupyter notebookは2つの環境に接続して利用します。一つはローカルのPC(以下ローカル環境)です。もう一つはGoogle ColaboratoryのGPUインスタンス(以下、colab環境)となります。ローカル環境は「教師データの収集」と「自動走行」に利用します。colab環境は「AIの学習」にのみ利用します。

env

ローカル環境が以下を満たすか確認してください。 >

  • [  ] Python3.7がインストールされていること。
  • [  ] pipがコマンドラインから実行できること。
  • [  ] Gitがインストールされコマンドラインから実行できること。

 

自分のMacは、最新版OSのPython、Gitも内蔵の利用するので、下記の2点不要と思う。

pythonのインストール方法はこちら

gitのインストール方法はこちら

 

準備1 colab環境の設定

下記リンクからColaboratoryを起動します。
「ノートブックの設定」ダイアログの「ハードウェアアクセラレータ」プルダウンメニューから「GPU」を選択して、「保存」を押下してください。

準備2 ローカルPCの設定

手順1. 仮想環境の作成

まずは演習用のフォルダを作り、pythonの仮想環境を作成します。

Last login: Mon Jun 15 08:06:57 on console
chen@hongs-mbp ~ % mkdir ~/workspace && cd workspace
chen@hongs-mbp workspace % pwd
/Users/chen/workspace
chen@hongs-mbp workspace % pip install virtualenv
ERROR:root:code for hash md5 was not found.
仮想環境の作成 失敗!!!
Python は古いから。。。。
ここは、pip3使うべき!

chen@hongs-mbp ~ % pip3 install virtualenv
Collecting virtualenv
Downloading virtualenv-20.0.23-py2.py3-none-any.whl (4.7 MB)

。。。。。。

Successfully built distlib
Installing collected packages: six, distlib, filelock, appdirs, zipp, importlib-metadata, virtualenv
Successfully installed appdirs-1.4.4 distlib-0.3.0 filelock-3.0.12 importlib-metadata-1.6.1 six-1.15.0 virtualenv-20.0.23 zipp-3.1.0
chen@hongs-mbp ~ %

Python3を最新版にすることで、virtualenv 成功した!!!

chen@hongs-mbp workspace % virtualenv vdonkey
created virtual environment CPython3.7.7.final.0-64 in 503ms
creator CPython3Posix(dest=/Users/chen/workspace/vdonkey, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/chen/Library/Application Support/virtualenv/seed-app-data/v1.0.1)
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
chen@hongs-mbp workspace %
こちらもOKです。

手順2. 仮想環境のアクティベーション

作成したPythonの仮想環境で作業ができるように設定を行います。以下のコマンドを実行すると、仮想環境が利用できます。

  • macOSの場合
    $cd ~/workspace
    $source vdonkey/bin/activate
    実行後ターミナルの表記が以下のようになることを確認する。
    (vdonkey)$

この作業は新しくターミナルを起動する毎に実施する必要があります。仮想環境から抜けたい場合はターミナルを閉じることで終了します。

 

$cd ~/workspace
$source vdonkey/bin/activate
実行後ターミナルの表記が以下のようになることを確認する。
(vdonkey)$
ターミナル閉じるなど、仮想環境終了した場合、再開する際この仮想環境のアクティベーションから再開してください

手順3. Jupyter Notebookのインストール

(vdonkey) chen@hongs-mbp workspace % pip3 install jupyter jupyter_http_over_ws
。。。。。。。
Successfully installed MarkupSafe-1.1.1 Send2Trash-1.5.0 appnope-0.1.0 attrs-19.3.0 backcall-0.2.0 bleach-3.1.5 decorator-4.4.2 defusedxml-0.6.0 entrypoints-0.3 importlib-metadata-1.6.1 ipykernel-5.3.0 ipython-7.15.0 ipython-genutils-0.2.0 ipywidgets-7.5.1 jedi-0.17.0 jinja2-2.11.2 jsonschema-3.2.0 jupyter-1.0.0 jupyter-client-6.1.3 jupyter-console-6.1.0 jupyter-core-4.6.3 jupyter-http-over-ws-0.0.8 mistune-0.8.4 nbconvert-5.6.1 nbformat-5.0.7 notebook-6.0.3 packaging-20.4 pandocfilters-1.4.2 parso-0.7.0 pexpect-4.8.0 pickleshare-0.7.5 prometheus-client-0.8.0 prompt-toolkit-3.0.5 ptyprocess-0.6.0 pygments-2.6.1 pyparsing-2.4.7 pyrsistent-0.16.0 python-dateutil-2.8.1 pyzmq-19.0.1 qtconsole-4.7.4 qtpy-1.9.0 six-1.15.0 terminado-0.8.3 testpath-0.4.4 tornado-6.0.4 traitlets-4.3.3 wcwidth-0.2.4 webencodings-0.5.1 widgetsnbextension-3.5.1 zipp-3.1.0
こちらも成功!!!

(vdonkey) chen@hongs-mbp workspace % jupyter serverextension enable –py jupyter_http_over_ws

Enabling: jupyter_http_over_ws
– Writing config: /Users/chen/.jupyter
– Validating…
jupyter_http_over_ws 0.0.7 OK

 

手順4. Jupyter Notebookの起動

ターミナル閉じるなど、仮想環境終了した場合、再開する際手順2. 仮想環境のアクティベーションから再開してください
(vdonkey) chen@hongs-mbp workspace % jupyter notebook –NotebookApp.allow_origin=’https://colab.research.google.com’ –port=8888 –NotebookApp.port_retries=0
[I 00:23:03.645 NotebookApp] Writing notebook server cookie secret to /Users/chen/Library/Jupyter/runtime/notebook_cookie_secret
jupyter_http_over_ws extension initialized. Listening on /http_over_websocket
[I 00:23:04.424 NotebookApp] Serving notebooks from local directory: /Users/chen/workspace
[I 00:23:04.424 NotebookApp] The Jupyter Notebook is running at:
[I 00:23:04.424 NotebookApp] http://localhost:8888/?token=083c0c6333e2aee5d7687bda7c4476a7b50a5eb33ae75728
[I 00:23:04.425 NotebookApp]  or http://127.0.0.1:8888/?token=083c0c6333e2aee5d7687bda7c4476a7b50a5eb33ae75728
[I 00:23:04.425 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 00:23:04.436 NotebookApp]
    To access the notebook, open this file in a browser:
        file:///Users/chen/Library/Jupyter/runtime/nbserver-17083-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=083c0c6333e2aee5d7687bda7c4476a7b50a5eb33ae75728
     or http://127.0.0.1:8888/?token=083c0c6333e2aee5d7687bda7c4476a7b50a5eb33ae75728

準備3 colab環境とローカル環境の切り替え

colab環境のブラウザで、colab環境とローカル環境の切り替え方法を確認します。

まずはローカル環境へ接続します。画面右上の「編集」左側にある下矢印をクリックし、「ランタイム選択」のプルダウンリストを表示します。

「ローカルランタイムに接続」を選択して

  1. ローカル環境に接続する場合 – ローカルランタイムに接続を選択
  2. colab環境に接続する場合 – ホスト型ランタイムに接続を選択

 

DonkeySIM4.3:ソフトウェアの起動

DonkeyCarのコントーラはpython manage.py driveコマンドで起動します。次のセルを実行します。これまでのセルとは違い、実行を手動で停止させるまで完了することはありません。
$ python manage.py drive

/Users/chen/workspace/mycar
using donkey v3.1.2 …
loading config file: /Users/chen/workspace/mycar/config.py
myconfig myconfig.py
loading personal config over-rides from myconfig.py
config loaded
cfg.CAMERA_TYPE PICAM
starting DonkeyGym env
connecting to 127.0.0.1 9091
/Users/chen/workspace/vdonkey/lib/python3.7/site-packages/gym/logger.py:30: UserWarning: WARN: Box bound precision lowered by casting to float32
warnings.warn(colorize(‘%s: %s’%(‘WARN’, msg % args), ‘yellow’))
waiting for sim to start..
loading scene 4 mountain_track
Adding part DonkeyGymEnv.
Starting Donkey Server…… you can now go to hongs-mbp.lan.local:8887 to drive your car.
Adding part LocalWebController.
Adding part ThrottleFilter.
Adding part PilotCondition.
Adding part RecordTracker.
Adding part ImgPreProcess.
Adding part DriveMode.
Adding part AiLaunch.
Adding part AiRunCondition.
Tub does NOT exist. Creating new tub…
New tub created at: /Users/chen/workspace/mycar/data/tub_1_20-06-18
Adding part TubWriter.
You can now go to http://localhost:8887 to drive your car.
Starting vehicle at 20 Hz
WARNING:tornado.access:404 GET /favicon.ico (::1) 7.78ms
WARNING:tornado.access:404 GET /favicon.ico (192.168.86.104) 4.66ms
WARNING:tornado.access:404 GET /favicon.ico (192.168.86.104) 3.88ms
recorded 10 records
recorded 20 records
recorded 30 records
INFO:gym_donkeycar.envs.donkey_sim:crossed start line: lap_time 0
recorded 40 records
recorded 50 records
recorded 60 records
recorded 70 records
recorded 80 records
INFO:gym_donkeycar.envs.donkey_sim:crossed start line: lap_time 0
INFO:gym_donkeycar.envs.donkey_sim:crossed start line: lap_time 30740
recorded 90 records
recorded 100 records
recorded 110 records
recorded 120 records
recorded 130 records
recorded 140 records
INFO:gym_donkeycar.envs.donkey_sim:crossed start line: lap_time 27760

DonkeyCar Part3:250ドル未満で自動運転を学ぶ

これはシリーズのパート3です。パート1および2へのリンクを次に示します。数日間の苦労の末、ようやくドンキーカーで地下の線路を自律的に走行できるようになりました!ここに短いビデオがあります:

 

だからここで私がつまずいたのです。MacからPiにモデルをアップロードし、「ドライブ」コマンドを実行すると、モデルの読み込みエラーが発生していました。ステップを再実行し続け、同じエラーが発生しました。ドンキーカーと新しいバージョンのTensorFlow(1.8)の古いバージョンを実行していることに気づくまでに数日かかりましたMacBook Pro上のTensorFlow 1.12のバージョン。また、Donkey CarのヘルプSlackチャンネルに質問を投稿し、新しいTensorFlowバージョン1.12で構築されたモデルがTensorFlowの古いバージョンでは動作しないことを確認しました。MacでTensorFlowをダウングレードする方法を見つけたら(1行のpipシェルコマンド)、トレーニングを再実行し、SCPを使用して新しいモデルをPiに転送しました。カメラのレンズキャップをつけたままにしていた…

約16Kの画像からなる比較的小さなトレーニングセットから始めました。TensorFlow 1.12ではトレーニングに55分かかりましたが、TensorFlow 1.8では75分かかりました。1.8は2018年4月にリリースされました。DonkeyCarイメージがすぐにアップグレードされ、これらのパフォーマンスの改善をすべて活用できることを願っています。また、トラックを反時計回りに走行するテストセットを使用していました。実際のレースでは、時計回りと反時計回りの両方の走行で車を訓練します。しかし、それはまた、モデルを構築する時間を追加します。

車はトラックを回避できますが、床のライトの反射や側面のその他の白い物体に簡単にだまされます。これは、床に白いテープを1本だけ使用しているためです。それはビジョンシステムが使用するのに十分な信号ではありません。しかし、妻が本当にロバの公式トラックが使用しているように、真ん中に黄色いストライプのある広い黒い「道路」を描くことを望んでいたとは思わない。

私がついに自動車を自律モードで動作させるようになったとき、それは非常に満足でした。しかし、それは少し「不気味」でもありました。私は実際に小さな脳に床の線をたどるように「教えた」。それはほとんど私の貧しい運転を模倣するように見えた。ストレートでスピードアップする方法を学び、タイトなカーブでスローダウンしました。それは本当にクールでした!

TensorFlowとKerasを使って仕事をしていましたが、手順の多くは少し抽象的でした。一度ロバ・カーで遊ぶようになったとき、物事はより理解しやすくなりました。システムの長所と短所の両方が明らかになりました。また、トレーニングシステム(私のMacBook)と推論システム(Pi)の間でPythonとTensorFlowライブラリのバージョンを同期させることが重要なステップであることに気付きました。

すべての手順を一度行った後、ほとんどのコンポーネントを理解し、他の人がドンキーカーを実行するために知っておくべき概念を理解するために使用できる「コンセプトマップ」を作成しています。

私は今、学んだすべてのステップをたどり、そのステップを、地元のCoderDojoクラブのコンセプトカードを作成した以前の作業と統合しています。これは、ブログ投稿の上部にある図です。コンセプトマップの各ボックスは、最終的にアクティビティと質問が前面に、回答が背面にある1/2枚のラミネート紙になります。これらはビットサイズの学習であるため、CoderDojoでは「寿司カード」と呼ばれます。「Electric Motors」コンセプトカードのサンプル画像を次に示します。

私の友人Jon Herkeは、ドンキーカーを使用して、AIとロボット工学について子供たちに教えることを目標とする「AIレーシングリーグ」を構築することにも興味があります。ハックデイの基礎と、10週間、4時間/週のサマーキャンプタイプのプログラムを構築できるかどうか、ご期待ください。私たちは、これらのプログラムに少女や恵まれない若者を巻き込むことを望んでいます。あなたが私たちが始めるのを手伝うことに興味があれば教えてください。

DonkeyCar Part2:トレーニングデータの構築、調整、および生成

DonkeyCar(ロバ車) Part2:トレーニングデータの構築、調整、および生成

これは、ロバ車の3部構成シリーズのパート2です。これがパート1パート3です。ではパート1、私は私の新しいドンキーカーが稼働してラズベリーパイに基づいて、カメラの接続作業を持ってしまったかについて話しました。カメラをRPi Cam Web Interfaceでテストし、家の1階を走り回って車の感触と操作方法を確認しました。

このモードでは、PiはWebサーバーの背後にある携帯カメラであり、Webページにビデオ画像を送信していました。RCカーは、同梱されている2.4 Ghzコントローラーによって完全に制御されていました。RPi Cam Web Interfaceソフトウェアを実行するには、Piでターミナルを開き、githubサイトからコードをダウンロードしました。次に、Webサーバーを起動するstartup.shスクリプトを実行しました。

カメラで画像がキャプチャされてから、Webページで目の前に表示されるまでにどのくらいの遅延があるのか​​興味がありました。遅れは無視できたので、ウェブページの画像を見るだけで車を運転できました。これは、カメラとPi間の入出力が高速であり、WiFiチップを介したWebブラウザーへの画像の変換が高速であることを意味しました。基本的に、リアルタイムのリモートビデオドライビングを行うのに十分な馬力がPiにあることが証明されました。

次に、RCカーに付属の2.4GHzレシーバーからコネクターを取り外し、Amazonに注文したサーボコントローラーに接続を移動しました。このサーボコントローラーボードは最大16個のサーボを制御するように設計されていますが、必要なサーボは2つだけです。1回はスピードのため、もう1回は車の回転のためです。また、サーボコントローラーからPi 40ピンGPIOバスに4本のワイヤーを接続する必要がありました。これらの接続の写真は次のとおりです。

次のステップは、ステアリングと加速度計のキャリブレーションです。これを行うには、PiにSSH接続してキャリブレーションを実行する必要がありました。Electronic Speed Controller(ESC)の多くは少し異なるため、このプロセスは少し注意が必要です。こちらのロバカーサイトに文書化されています。私の「STOP」周波数が正しくないため、車を後進させることができないようです。最終的な結果は、スロットルのパラメーターと車のステアリングをエンコードする構成ファイルです。

これが完了したら、テストトラックを回る準備ができました。妻の悔しさの多くに、私は地下の家具を部屋の片側に移動し、地下の床に白い電気テープを置いた。床にクールなエポキシコーティングを施しましたが、白いテープのコントラストは良好でした。

また、床のライトの多くの反射を見ることができます。トレーニングプロセスでは、光の反射を無視し、床の白いテープにのみ「注意」をすることを学ばなければなりません。注意は、ディープラーニングの重要な概念です。

次に、壁のプラグからPiを取り外し、Amazonで購入した新しい6800 mAHパワーパックを使用して電源を入れました。プラットフォームの下にパワーパックを固定するためにテープを使用しました。ESCからのGNDおよびVCCワイヤは、RCカーで使用される2.4GHzレシーバーのデジタル回路に電力を供給することに注意してください。ただし、この電流はPiに電力を供給するのに十分ではありません。テストとして、Piの実行中にUSP電流計を車に接続しました。結果は下の写真にあります:

トレーニングデータの生成

車をすべて組み立てたら、トレーニングデータセットを生成する準備ができています。次に、PiにSSHを実行し、ドライブプログラムを起動しました。

$ python manage.pyドライブ

これは、カメラの内容を表示するWebサーバーを起動するpythonプログラムであり、トレーニングセットをキャプチャするためのコントロールも提供します。ドライブプログラムが実行されたら、任意のWebブラウザーに移動し、ポート8887を使用して車のIPアドレスを入力できます。今度は難しい部分です。トレーニングセットを作成するには、トラックを10回運転しなければなりませんでした!

問題は、キーボードのキーで車を制御することはできましたが、操縦するのが非常に困難だったことです。また、Webインターフェースの「ポインター」を試しましたが、操縦するのも困難でした。最後に、携帯電話を取り出して、電話のブラウザーでドンキーカーのWebページを表示しました。Webブラウザーは、スマートフォンの前方および側方の傾きを検出するのに十分なほどスマートであり、これを速度と回転に変換します。非常に賢い!約1時間の練習で、コースを回ることができました。その後、「記録開始」を押して、約10周後に「記録停止」を押しました。これが完了したら、Donkey CarにSSHで接続し、ディレクトリを「tub」フォルダーに変更しました。そのフォルダーには、約30Kの.jpgおよび.jsonファイルがありました。各JSONファイルには、画像への参照、タイムスタンプ、および浮動小数点数としての加速とステアリングがありました。これはトレーニングデータです。

JSONファイルのサンプルは次のとおりです。

{
「user / angle」:0.18989955357142868、
「user / throttle」:0.7175781250000001、
「user / mode」:「user」、
「cam / image_array」:「1000_cam-image_array_.jpg」、
「timestamp」:「2019–01– 05 17:09:35.184483”
}

そのJSONファイルに対応する画像を次に示します。

その後、トレーニングのためにドンキーカーからラップトップに画像をコピーしました。これについてはパート3で説明します。