Udacity自動運転エンジニアコースのTerm1を終えた感想

オンライン講座の[Udacity](https://www.udacity.com/)が提供する自動運転エンジニアコースのTerm1を修了したので，その感想を書こうと思います．

## Udacityとは
UdacityとはCourseraやedX等のオンライン講座MOOCの一つであり，自動運転エンジニアコース，AIコース，フルスタックエンジニアコースなど様々なコースがあります．他のMOOCとの違いは，Coursera等はどちらかといえば知識ベースであるのに対し，Udacityはプロジェクトベースであるという点です．また自動運転コースの講義はMercedes-Benz等からも提供されており，最先端の技術を学ぶことができます．

## 自動運転エンジニアコースとは
Udacityが2016年11月ごろからスタートしたプログラムであり，9ヶ月で自動運転エンジニアになるために必要な技術を身に付けることができるコースとなっています．Term1からTerm3の3つのタームに分かれており，それぞれのTermは3ヶ月ずつであり，Term1の3ヶ月でコンピュータビジョンや深層学習を学び，5つのプロジェクトをこなします．
Term1で用いる言語はPythonとなっており，Term2からはC++を主に用います．
2018年現在，自動運転に関する技術を包括的に勉強できるプログラムは本コース以外にはないものと思われます．本コースでは画像認識から始まり，自己位置推定，制御，経路計画そして実車走行まで勉強することができます．

（最近確認したところ，現在は3ターム制ではなく，2ターム制となっているそうです．削られた内容は，制御分野のモデル予測制御，ディープラーニングによる，道路領域のセグメンテーション，レーンアシスタントシステムに関する機能安全が無くなっていました．）

## Term1のプロジェクト
5つのプロジェクトの概要を簡単に説明します．詳細については，また解説する予定です．

###1. 車線認識
本プロジェクトはコンピュータビジョンの入門であり，キャニーエッジ検出法等を用いて，車線の認識を行います．コンピュータビジョンを使ったことがありませんでしたが比較的すんなりと進めることができました．

使用した主なライブラリ：OpenCV
![laneLines_thirdPass.jpg](https://qiita-image-store.s3.amazonaws.com/0/163685/9bf614e0-70cd-57a2-fb48-e0c4bd46daac.jpeg)

###2. 道路標識識別
TensorFlowを用いて道路標識を識別するプロジェクトとなっています．Deep Learningの入門となっています．
CNN(Convolutional Neural Network)について学べます．

使用した主なライブラリ：TensorFlow
![D2rGn+1B51nvAAAAAElFTkSuQmCC%0A.png](https://qiita-image-store.s3.amazonaws.com/0/163685/b5663479-896c-cdb9-697f-f30db68c625b.png)

###3.Behavioral Cloning
Deep Learningを用いてシュミレータ上の車をコースアウトせずにコースを走行する課題．人がシミュレータ上で車を運転する際に画像とハンドル角を保存する．保存された画像入力をもとに，ハンドル角を出力するようにCNN(Convolutional Neural Network)を用いて学習し，シミュレータ上で自動運転させるものとなっています．動画は[こちら]
(https://www.youtube.com/watch?v=HRvNs1jUHmI&feature=youtu.be)．

使用した主なライブラリ：Keras
 [![center_2016_12_01_13_30_48_287.jpg](https://qiita-image-store.s3.amazonaws.com/0/163685/46be84e6-1f79-9ee6-dfee-b4176f8b4ccc.jpeg)](https://www.youtube.com/watch?v=HRvNs1jUHmI&feature=youtu.be)

###4.車線認識（応用）
プロジェクト1が基礎的な方法であったのに対し，こちらは応用的な内容となっている．カーブや道路の明暗に関わらず車線を認識する方法を学ぶ．動画は[こちら](https://youtu.be/ZgajSY3k8IA)

使用した主なライブラリ：OpenCV
[![plot_back.png](https://qiita-image-store.s3.amazonaws.com/0/163685/4cd68662-e281-7821-c833-04f3e7ed9ff8.png)](https://youtu.be/ZgajSY3k8IA)

###5.車両検出
機械学習を用いた車両検出の課題．HOG特徴量(Histograms of Oriented Gradients)や色空間などの特徴量より車両を認識する学習器を生成し，その学習器を用いて画像中に車両があるかどうかを判別し，車両があれば車両をトラッキングする．動画は[こちら]((https://www.youtube.com/watch?v=NxMLEz48gVQ&feature=youtu.be))

使用した主なライブラリ：OpenCV, Scikit-Learn
[![link_to_video.png](https://qiita-image-store.s3.amazonaws.com/0/163685/bbbb91c2-4e94-2166-8ac6-853faa272554.png)](https://www.youtube.com/watch?v=NxMLEz48gVQ&feature=youtu.be)


4と5を統合したものがこちらの動画となります．
[![スクリーンショット 2017-03-26 15.30.34.png](https://qiita-image-store.s3.amazonaws.com/0/163685/36977f76-bf33-b0c6-8ed7-56d6da5e125f.png)](https://www.youtube.com/watch?v=LLP34kaGGpI)

## 感想
以上がTerm1に含まれる5つの課題であり，内容はコンピュータビジョンから機械学習，深層学習まで多岐にわたっている．これらの内容を3ヶ月でこなすのは，なかなか大変であり，1週間に最低でも約15時間を費やしていた．
また，それぞれのTermに800ドルずつかかるので合計で2400ドルかかることになる．これだけの時間とお金を費やす価値があるかというと，私は十分その価値があると思う．これまで画像認識はほとんど扱ったことがなかったが，3ヶ月で車両認識と車線検出を行うことができるようになり，さらに深層学習の知識も深まった．
また自動運転エンジニアとして働くことができれば，2400ドルは十分に投資する価値があるのではないでしょうか．



現在はTerm2の途中であり，そちらについても感想を書いていこうと思います．

## 追記
自動運転に関する無料の講義としては以下のものがあります．

[Deep Learning for Self-Driving Cars](http://selfdrivingcars.mit.edu/
)
MITの講義でDeep LearningやDeep Reinforcement Learningを用いた手法であり，全5回．
Deep Learningや機械学習の基礎からの講義となっています．

[Introduction to Mobile Robotics - SS 2016](http://ais.informatik.uni-freiburg.de/teaching/ss16/robotics/)
ドイツのUniversity of Freiburgの講義．講義自体は英語でありドイツ語は必要ありませんが，字幕を出すことができません．内容は自動運転車に搭載されるセンサー情報に関するものが多いです．例えば，センサー情報を統合する（センサーフュージョン）際に用いられるカルマンフィルタなどを扱っています．またSLAM（自己位置推定と環境地図作成を同時に行う方法）やPath Planning（経路計画）についての詳しい説明もあります．

<a target="_blank" href="https://www.amazon.co.jp/gp/product/4839952981/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4839952981&linkCode=as2&tag=ryo519-22&linkId=270304ba4e939b62254841b5f1f8904d">確率ロボティクス (プレミアムブックス版)</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4839952981" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />で扱われている内容に近いものとなっています．


<a target="_blank"  href="https://www.amazon.co.jp/gp/product/4839952981/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4839952981&linkCode=as2&tag=ryo519-22&linkId=5573347af88d6ea3ee8865ba7dcd5310"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4839952981&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=ryo519-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4839952981" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[iLectureonline](http://www.ilectureonline.com/lectures/subject/SPECIAL%20TOPICS/26/190)
こちらはセンサーフュージョンに用いられるカルマンフィルタについての講義です．個人的にはカルマンフィルタに関する講義の中でもっとも詳しく分かりやすいと思います．