経験値ゼロのハードウェアエンジニアがAIを理解して動かすことができるようになるまで
前回の更新からだいぶ間が開いてしまいましたが、また勉強したことのアウトプットを再開していきます。
今回は今までとはちょっとテイストが変わりますが、表題の通り、AIに関して何も知らなかった私がどのようにAIを勉強して理解できるようになったかを書いていきたいと思います。これからAIやDeep Leaningを始めたいという方の参考になれば幸いです。
背景知識
まず、AIを始める前にやっていたことをご紹介します。
職業は家電メーカーのハードウェアエンジニア。主な担当は電気回路設計やデジタル信号処理。ソフトウェアは大学の時に授業でC言語を習った程度で、実務で使ったことはほとんどなし。
上司からの無茶ぶり
約2年前、突然、当時の上司から「うちの商品にAIを乗せたい。どうすれば作れるか調べて動くものを作れ」という無茶ぶりを受ける。当時開発部隊の中にAIが分かる人は誰もおらず、どこから手をつければいいかも分からない状態。
AIの勉強をとりあえず始める
①通信講座を受ける
会社の研修システムを調べたところ、e-LearningでDeep Leaningの講座が受けられることが分かり、まず手始めに受けてみることに。内容は大学の先生が機械学習からDeep learningまで基本的な内容を講義されているものでした。一方的に講義を聴くだけで演習はなし。
ついていくのに苦労したが、結果としてDeep Leaningの概論を効率的に学ぶことができた。後から考えると、この講座によって系統立ててDeep Leaningを理解でき、このような講座を会社経由で受けられたのは幸運だったと思います。
②画像処理を勉強
今回、AIでやりたかったことは画像認識です。しかし、当時画像処理に関してほとんど何も知らなかったので、テキストを購入して画像処理の勉強を開始。
結構ボリュームがある本ですが、同僚と一緒に毎週勉強会をして何とか完遂。Pythonで画像を扱う際、画像処理の知識が大いに役に立ちました。やってて損はないです。
③OpenCVの講座を受講
画像処理を勉強していた時に友人にOpenCVというソフトウェアライブラリがあることを初めて知る。(恥ずかしながら知りませんでした。。。)
②で勉強したことを実際に試すのによいと思い、①の講座と同様に会社経由で外部セミナーを受講。期間は1日、演習もほとんどなく座学ばかりだったが、OpenCVでどんなことができるのか概要は理解できた。会社でいろいろOpenCVを試したいと受講後は思ったが、結局この時はやらずじまい。
面倒な環境構築をセミナー内で済ますことができたのはよかったです。
演習ができる環境を探す
④「ゼロから作るDeep Leaning」を読む
通信講座で何となくDeep Leaningがどういうものかはわかったのですが、どうやって作ったらいいか見当もつかないという状態。通信講座には演習がないのが原因だと思い、自分で手を動かせるものを求めてこちらの本をやってみました。
いろんなところで紹介されていますが、はっきり言って名著です。
学習、推論それぞれで具体的にどのような計算をしているか数学的な計算とPythonでの実装が記されていて、講座で学んだことの理解がさらに深まりました。
一方、演習を求めて始めたという点では物足りない内容。ネットから本に書かれているソースコードをダウンロードでき、自分のPCで動かすことが可能。しかし、与えられたものをPythonで実行するだけという感じで、やり終えても自分で作れる感じは全くなし。
また、この本で初めてPythonを使う。Pythonに関しては必要なところだけ説明されているだけなので、読後感は「Python何となくわかった気がする」という感じ。(実際は全くわかってない!)
⑤Aidemyの講座を受ける
このあたりからブログを始めて勉強した内容をアップすることにしたので詳細は記事を見ていただければと思います。
広告で見かけたAidemyというAIの学習サービスの「コードを書きながら学べる」という所に惹かれて、手始めに無料講座を受けてみる。
動画で学んだことを使ってコードを入力するという形式だったが、問題が穴埋めだったり、形式的なもので、やはり自分でできる気はせず。すぐに次を探し始める。
⑥からあげさんのnoteを購入
いろいろ調べた結果、からあげさんのこちらのnoteに行きつきました。
自分で画像を集めて学習し、その結果を評価するという一連の流れの手法を知ることができるということで、思い切って購入しました。価格は500円。
このチュートリアルをなぞることで実際のAIモデル開発でどのようなことをするかイメージできるようになりました。また、このチュートリアルを応用して、自分の「カメラ」を認識するモデルを作ってみたりしました。
Githubで公開されているモデルを動かす
⑦YOLO, SSDなど有名なDeep learningのモデルを動かしてみた
もう少し自分でコードをいじるために、Githubで公開されているものを動かしてみることに。有名どころのモデルはすでに日本語のマニュアルを作ってくださっている方がいるので、とっつきやすいです。それに従って画像の推論をやってみました。
マニュアル通りにやるだけでは面白くないので、こうしたらどうなるだろう?ということがいろいろ浮かんでくる。しかし、Pythonのコードがスムーズに読めない。「ゼロから作るDeep Leaning」の範囲内の知識では太刀打ちできないことを知る。
⑧Pythonを体系立てて勉強
「みんなのPython」を購入して1冊通して勉強しました。
読み終えたころにはオブジェクト指向が何となくわかり、Githubのコードも読めるように!また、Pythonに関して困ったことがあってもネットで調べれば自力で大体解決できるようになった。
⑨Githubのモデルを動かす
⑦で行き詰ったことに再度チャレンジ。いろんなモデルに対して、USBカメラで取得した映像をモデルに入力してリアルタイムに推論するコードを自作しました。
画像の前処理、後処理にOpenCVを使うことが多く、うまくいかない時に試行錯誤することでOpenCVのことも大体使えるように。
からあげさんのnoteで動かしたフレームワークがTensorflow/Kerasだったので、Tensorflow/Kerasのモデルを探して、異なるモデルで同じことを繰り返しました。これにより、フレームワークの基本の型のようなものも習得できた。
全て公開されている学習済みモデルを使っているので、学習プロセスは経験できないものの、Deep Leaningの推論に関してはある程度の経験値を得られたと思います。
習得したものを社内で共有
平行して進めたことも含めて、ここまで約一年でDeep Leaningの理論を習得して、実際に動かすことができるようになりました。習得したものをまとめて、社内の関係者に勉強会という形で発表しました。人に説明するには、あいまいなところがあっていはいけないので、文献を読み直すなどして知識を整理することが必要になります。この発表により、さらに自分の理解を深めることができました。
結局、人に教えることが一番自分の勉強になります。
まとめ
上司に無茶ぶりをされたことをきっかけに、Deep Leaningを習得するために取り組んできたことを書いてきました。今から約2年前のことですが、振り返ってみると約1年間でかなりのスキルアップができたのだと感じます。
改めてポイントだったと感じることは
・学問的知識、理論を知っておくことは重要
いきなり演習にチャレンジするよりまず理論を勉強するほうが近道
・実際にコードを触って動かすことが一番理解が深まる
・社内に教えてもらえる人がいなかったので、知り合いのつてを辿ったり、有料研修を利用
・理解したことを説明できればさらに定着する
私もDeep Leaningの技術者としてはまだまだで、できることは非常に限定的です。今も仕事やプライベートで勉強を重ねている身ですが、この記事がこれからDeep Leaningの勉強を始める方の一助となれば幸いです。