変わりモノがいい!

変わりモノには価値がある・・・ハズ?

PiCar-V Self-driving tensorflow + keras編 進捗報告-4

1週間、いろいろと調べました。

Deep Learningの基礎を勉強しないで(本はちょっとは読んではいますが)Self-driving用のアプリの作成を行なってきたわけですが、問題が発生した時の時間のかかり方は半端ないですね。
コレが原因なのだろうか?アレが原因なのだろうかとネットを調べ、コードを修正し、コードを実行し、結果を確認、違った、を幾度も繰り返してきました。
やっとのことでエラーは消え、訓練におけるLossを小さくするためのパラメータも実験によって決めました。
自信をもってコードを最後まで走らせ、テストにおけるLossを見たところ、頭の中に???が沢山。
ステアリング角度のLossが訓練の時の値(1以下)とテストの時の値(500以上)が違いすぎて???となった次第です。
この原因究明と対策に1週間使ってしまった、という状況です。
解決できたか、というと、解決はできてはいないが、原因の候補の理解ができ、モデルの重要性と学習データの重要性を再確認できたと思います。
備忘録として今回の件を記録しておきます。

f:id:ken2017:20201024083859p:plain

 

何が起きたのか?

一言で言えば精度がでなかった、ということです。
このことに関する記事がネットにありました。

qiita.com

この記事によると精度が出ない時の対策としては以下のようなものがあるようです。

  • トレーニングデータをもっと集める
  • 特徴量 を減らす
  • 特徴量 を増やす
  • 高次の特徴を追加する(
  • 正則化の係数 を小さくする
  • 正則化の係数 を大きくする

精度が出ない原因としては、2つあって、過学習と学習不足になります。
上の対策は、過学習や学習不足への対策ということになります。
過学習、学習不足に関する記事としては以下のようなものがありました。

www.tensorflow.org

 皆、同じような悩みを持っているんだろうなと感じた次第です。
ということで、まずは過学習への対応をしていくこととしました。

モデルを見直しました。

まずは、モデルを見直しました。
これが変更前のモデルです。

f:id:ken2017:20201006074803j:plain
これをSelf-drivingが完璧ではないものの2周は走ることができたChainerで使ったモデルと比べました。
これがChainerでのモデルです。

f:id:ken2017:20201024090451p:plain
Chainerのモデルのほうが次数が小さくシンプルであることが判りました。
これはPytorchで上手く動かなかったので、Tensorflow+Kerasでモデルを作るときに次数が大きいほうがいいだろうと勝手に解釈して大きめの数値にしていたものでした。
これを最終的には下のようなモデルに変えました。

f:id:ken2017:20201024091043p:plain
この結果、訓練時のLoss低減を抑制出来はしましたが(表現が変ですが)、テストのLoss改善にはつながりませんでした。
  変更後の訓練終了時のLossとテストにおけるLoss
  SteelingのLossは訓練終了後に24にも係わらずてすとでは558とけた違いに大きい

f:id:ken2017:20201024092531p:plain
悪い対策ではないのでモデルは変更後を使うこととし、テストのLossが大きいことが実際の走行時の処理にどのような影響があるかを調べることとしました。
その結果がコチラ。
これは、テストに使った画像を学習モデルにかけて速度とステアリング角度を推定したものです。
画像ファイルの名前には実際の速度とステアリング角度を入れています。
例えば、一番上の画像は、実際の速度は40でステアリング角度は45度です。
それに対してモデルを使って求めた速度は39.86、ステアリング角度は43.7度です。
悪くないじゃない、と思ってしまいます。
では、なぜテストのLossが500以上と大きいの?と思ってデータを見ていると、
ありました、実際のステアリング角度が135度なのにモデルを使って求めた角度が44.6度となっています。
どうやらこういうことが起きるようです。

f:id:ken2017:20201024092911p:plain
これを回避できないかと、色々とパラメータを振って実験を繰り返しましたが結論を言えば、今のデータを使う限りは無理そうでした。
最終パラメータでの結果を添付します。
最初に比べると改善はできていますが、不適切な状態をゼロにはできていません。
今から思えば、Pytorchで学習は上手く言ったように見えて実際の運転は上手くいかなかったのは、今回と同じようなことが起きていたのかな、と思います。

f:id:ken2017:20201024093638p:plain

f:id:ken2017:20201024093703p:plain

今後の予定

この1週間で何が起きたかを理解することができました。
完璧な状態ではありませんが、前に進みたいと思います。
このモデルを使った学習結果を使ってSelf-drivingを行ってみます。
今までの作業はSurface Laptop2でのものでしたが、この結果をPiCar-Vに移植します。
来週はこの作業に入ります。
上手くいけばSelf-driving開始です。
乞うご期待!

では、また。

(記事後記)
買ってしまいました。
RPLIDAR
レーザー距離センサです。
これをPiCar-VまたはAdeeptに載せてSelf-Drivingさせようと思います。 

プライバシーポリシー お問い合わせ