AIエッジコンテスト(実装コンテスト)のチュートリアル【1: イントロダクション】

### はじめに
みなさまはじめまして。[彼氏にしたくない大学](https://comingout.tokyo/1806)で働いているNakaharaと申します。[AIエッジコンテスト](https://signate.jp/competitions/191)（ハードウェア実装）が開催されています。FPGAという書き換え可能LSIを使ったガチンコハードウェア実装コンテストで苦戦していると思います。私も10年くらいFPGA設計していますが、未だによくわかりません（笑）。~~てかGPU楽すぎだよそっちがいいっすよ~~[^1]

ディープラーニングやってるけど、FPGAは初めてなんだよねぇ。。とか、バリバリロジック書いていますけど、AIもやってみたいねぇ、、とか、ソフトウェアは知ってるけど、ハードウェアやってみたいなぁ、と考えてる初心者向けのチュートリアルです。卒研とか修論が終わって春休みに暇しているかたとか大歓迎。数回に分けて連載しますのでお付き合いください。

### AIエッジとは
AI(Artificial Intelligence)が賑わっていますが、具体的な定義や説明は専門の本を読むか、[人工知能学会の説明](https://www.ai-gakkai.or.jp/whatsai/AIwhats.html)でも見てください。私個人の感想レベルですが、AIというか、機械学習というか、ディープラーニング(深層学習)のことを大袈裟に言っているだけだと思います。

それは置いておいて、最近AI＋エッジコンピューティングというキーワードが組込み業界を賑わせています。組込みシステムにAIを入れて~~金を上乗せ~~付加価値を付けようとしているみたいです。

<img width="403" alt="スクリーンショット 2020-02-21 2.15.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589480/d971ee7d-3ef4-f055-e5c1-968cd1ee7981.png">

例えば車の衝突回避システムをAIで実現することにしましょう。ディープラーニングをクラウドで実現する場合、大規模なモデル（例えばResNetとかEfficientNetとか）を載せることができますし、大量の画像[^2]を使って学習もできます。しかし、車の衝突判定する処理はリアルタイム応答が必要なので、カメラからの画像を送って制御していては間に合いません。一方で、車にAI専用のコンピュータを載せることができれば少なくともクラウドへの通信時間はなくなりますね。これがエッジで行いたい理由です。ほかにも

+ 専用用途にすることでコスト・電力を抑える
+ 無駄な計算資源を削減して小型化する
+ 通信による情報漏洩を防ぐ
+ クラウド料金高い、通信量どーすんの、インフラは？

など色々な理由があるんですね。これにAIという~~金儲けのネタ~~最新技術を入れ、システムを高性能化してより生活を便利に豊かにしよう！と。

### AIエッジの難しさ
みなさまもご存知のように色々なエッジデバイスが世の中に存在します。

<img width="649" alt="スクリーンショット 2020-02-21 3.15.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589480/9b6979f7-79cc-2023-f63b-132f9f48d838.png">

ラズパイ(ARMプロセッサ), GPU(NVIDIA), FPGA(Xilinx), Edge TPU(Google)と用途や出荷数、必要性能（＝電力）で様々なデバイスが百花繚乱状態です[^3]。一言にAI処理（深層学習）と言っても、必要なタスクと応答時間、コストがあるので必要なデバイスを選ぶ必要があります。また、コンテストの題材に関わってくるのですが、学習から推論処理までを一気通貫でできる技術者が求められてます。これからはハードもソフトもそこに載せる機械学習モデルも設計できないといけない状況になりつつあります。学習データの処理とか収集もやって、メンテナンスとかも考えたらどうしたらいいんでしょうか、これ。~~てか教えることができる人っていないような。~~

### （ハードウェア人材を育成目的とした）AIエッジコンテスト
そこでコンテストを開催することになりました。コンテストの趣旨の前半は

>米国・中国を中心にしたスタートアップや大手ベンダーで、AIハードウェアへの参入が加速しており、我が国でもソフトだけではなく、LSI・FPGAを始めとするAI処理を加速するためのハードウェアの人材、産業育成が急務となっています。

だそうです。人材大事。開催趣旨の後半は

>こうした背景の中で、AIハードウェア開発として導入のCベース合成HLS → RTL設計 → LSI開発及び、これらスタートアップの育成、さらには、産業の育成を図るべく、今回のコンテストを実施します。

とのこと。前回のAIエッジコンテストでは機械学習の学習モデル精度と推論時間に焦点が当てられていたのですが、もう一歩進んで推論デバイスまでやってしまおうということです。総合格闘技！なんでもこい！

…だとカオスになってしまうので、今回はFPGAが選ばれました。なんで？

### FPGA(Field Programmable Gate Array)
日本語に訳すと現場で(F)書き換え可能な(P)ゲートアレイ(GA)です。ゲートアレイ、皆さんのコンピュータの基本素子である論理ゲートをアレイ上に並べたものです。それにユーザが工場にわざわざ持っていかなくてもその場で中身を書き換えられる機能をつけたものです。要は専用LSIを手元で手軽にできるデバイスです。こんな感じに中身の回路が書き換えられるので色々な回路が実装できます↓

<img width="290" alt="スクリーンショット 2020-02-21 3.40.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589480/0aaaa568-2a72-5888-38c8-2c711893aab9.png">

何で書き換えできるの？それって美味しい話だけじゃないよね、絶対デメリットもあるよね、と気になる皆様、とても素晴らしいので是非とも[教科書](https://www.amazon.co.jp/FPGA%E3%81%AE%E5%8E%9F%E7%90%86%E3%81%A8%E6%A7%8B%E6%88%90-%E5%A4%A9%E9%87%8E%E8%8B%B1%E6%99%B4/dp/4274218643/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3LJMX5MCN7MJY&keywords=fpga%E3%81%AE%E5%8E%9F%E7%90%86%E3%81%A8%E6%A7%8B%E6%88%90&qid=1582224149&sprefix=FPGA%2Caps%2C299&sr=8-1)読んでください。大事なところはチュートリアルの後半でちょっと説明します。

あくまでコンテストなので、

+ ハードもソフトもできるデバイスだと両方の技術が必要なAIの勉強に良い
+ そこそこの値段で入手できる（今回は８０枚提供！）
+ 開発環境も無料で準備できる
+ ~~FPGA技術者（研究者）を増やしたい[^4]~~

という視点でFPGAが選ばれた（そうです？）。ということで、今回のチュートリアルを通してAIを専用ハードウェアに実装する技術を身に付けましょう！

### チュートリアルの内容
あくまで初心者向けですが、とりあえず、まずは動かさないと~~ボードが没収される~~コンテストに参加できないので、以下の手順でまずは画像を学習してUltra96ボードで動かしてみましょう。

<img width="633" alt="スクリーンショット 2020-02-21 3.51.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589480/1d2e7700-81db-22dc-fabc-98e532950d71.png">

Ultra96ボードとそこそこのスペックのPCさえ用意できれば設計できる環境にしました。まず、コンテストで提供されている画像を使って深層学習のモデルをクラウド上で学習します。Google社がColaboratoryというブラウザ上で学習できる環境（時間制限はあるが、TPUやGPUが使える！<font color="red">無料</font>）を使います。学習後のモデルからコードを生成してUltra96ボードに転送します。初回だけですが、Ultra96ボードに[PYNQ](http://www.pynq.io/)というFPGA上に生成したハードウェアをPythonで制御できるフレームワークと[PyTorch](https://pytorch.org/)というディープラーニングのフレームワークをセットアップして学習したモデルを推論してスコアと速度を求めます。これでコンテストに参加できる！<font color="red">しかも無料</font>。

無料とは言っても頑張って設計すればこんな感じ↓に速くて消費電力電力が少ないAIエッジ処理ができるんですよ！（共同研究~~ほとんど開発してくださった~~シンコム様ありがとうございます、、、）

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/QvQNhut3ooE/0.jpg)](http://www.youtube.com/watch?v=QvQNhut3ooE)

Ultra96ボードに載っているFPGAは少し特殊な構造になっていて、ARMプロセッサというPS(Processing System, 要はCPU)と昔FPGAと呼んでいたPL(Programmable Logic)で構成されているZynqというデバイスファミリーを搭載しています。いきなりPS+PLを使ったソフト・ハード協調設計だ！だと、誰もついてこれないので、とりあえず、学習をColaboratoryで回して、推論はCPUでやりましょう。

ということで、次回までに以下の準備をしておいてください。

+Googleアカウント登録
+githubのアカウント登録
+ネットに繋がるPC（この記事を読んでいる時点で準備できてますよね）
+Ultra96ボード（と電源アダプタ）
+SDカード
+USBケーブル

それでは次回をお楽しみに！

[^1]: 一瞬本音が出たようですが、キニシナイキニシナイ。講義でよく暴言を吐いては学生さんにツイートされてよくバズります。バズったら宣伝していいと聞いているので、コンテストの宣伝させて！

[^2]: そういえば、ちょっと昔にビッグデータってキーワードがバズっていましたね。

[^3]: 日本発ってやつがほとんどないんですよねぇ。。

[^4]: 私の研究分野の事情で申し訳ございませんが、本当に日本人の若い人がいないんです。。というか、海外の学会で発表している日本人研究者がほぼいない（来週[FPGA2020](http://isfpga.org/)といううちの分野でトップの会議だと、発表する日本人は私だけ。。）という状況で洒落になりません。是非ともFPGA研究者になって救ってくださいくださいおねがいします。