winner's_interview_第4回AIエッジコンテスト:FPGAを使った自動車走行画像認識_アイデア賞_松尾康弘

これからさらにAIの社会実装を進めていくには電力消費量や通信環境などの制限下でも安定的に稼働できるエッジAI技術のさらなる発展が不可欠だ。 そんなエッジAIに関する新しいアイデアや人材を発掘するべく開催されたのが「AIエッジコンテスト」だ。これまでの開催回数は計4回にのぼり、延べ約2000人が参加、5000件近くの応募が集まり、まさにエッジAIの人材のハブとなりつつある。 2020年7月1日〜12月31日に開催された第4回では、FPGAを用いたAIハードウェア開発を行い、「ハードウェア・ソフトウェアを含めたエッジコンピューティングを意識したハードウェアシステム開発」が課題に設定された。 課題で挙げられたのはFPGAを使った自動車走行画像認識だ。車両前方カメラ画像から、ピクセルレベルで物体に対応する領域を分割するアルゴリズム(セマンティックセグメンテーション)を作成し、ハードウェアアクセラレータなどの設計を行い、ターゲットのFPGAボードへのアルゴリズム実装を行う。 今回は全6回のシリーズを通して経済産業省主催 第4回AIエッジコンテスト(実装コンテスト②)の受賞者のインタビューをお届けしていく。 本記事では第2回として、アイデア賞を受賞した松尾さんのインタビューの様子をお届けし、コンペティションでの勝ち筋や工夫点を明らかにしていく。

[021]Winner's-Interview 4

▼動画はコチラ▼


Q.まずは簡単に自己紹介をお願いします。

仕事は、日系メーカーでカメラ開発をしております。FPGAによるディープラーニングの高速化に興味があり、AIエッジコンテストに参加をしました。 入賞者の方を見ると回路設計者などFPGAを使い慣れた方が多かった印象ですが、私はFPGAを扱う専門家というわけではありません。そのため、今回のコンテストでは、開発ツールをどこまで上手く使いこなして実装をするかということに挑戦しました。

コンテスト参加への経緯

[021]Winner's-Interview 1

Q.SIGNATEに登録した経緯を教えてください。

SIGNATEには、AIエッジコンテスト参加がきっかけで登録しました。AIエッジコンテストは、他のコンテストと違い、FPGAを用いたAIハードウェア開発までを行うということで興味を持ち参加を決めました。 私は、FPGAを扱う専門家ではないですが、2015年のMicrosoftのFPGAの取り組みを見て、いつか自分でもFPGAを使ったディープラーニングの高速化に取り組みたいなと考えていました。 当時、勉強会に参加し、FPGAを触ったりしたのですが、AIエッジコンテストのようなディープラーニングの実装となるとハードルがぐっと上がり、実装することができませんでした。当時はツールがまだ発展途上ということもあり、そこまでチャレンジするのは難しかったですね。 いまはXilinxなどのツールが出揃っていて、それを活用できればある程度のものは作れる状況になっていると思います。XilinxのVitis AIは自分でフルスクラッチ実装するのに比べ、とても簡単でした。 ※Xilinx (ザイリンクス)…FPGAを中心としたプログラマブルロジックデバイスの開発を手掛けるアメリカの半導体製造企業 ※Vitis AI(バイティスエーアイ)…Xilinx社のハードウェアプラットフォーム上でAI推論を実現するための開発プラットフォーム

参加を決めてからの進め方

[021]Winner's-Interview 2

Q.AIエッジコンテストの準備はどのように進めましたか?

コンテスト参加登録が開始された2020年7月に参加を決めました。最初は論文調査や、前回(第3回AIエッジコンテスト)の表彰式を見たりしました。 また、これまでディープラーニングをきちんと動かし、検出精度改善までしたことがなかったため、MATLABを使い事前準備を進めました。 MATLABはパッケージソフトで、煩雑なバージョン管理もなく、ドキュメントも整備されているため、当たり検討にはとても便利です。 今回のコンテストでは、mIoU=0.6という高い検出精度のボーダーがあったので、このボーダーにかすりもしないネットワークを回路化してもどうしようもないと考え、まずは選定したネットワークである程度の検出精度が出るかを確認しました。 ※MATLAB(マトラボ)…アメリカのMathWorks社が開発を手掛ける数値解析ソフトウェア

Q.ディープラーニングの構築は今回が初めてだったんですね。

ディープラーニングには興味があったので、教科書を買って読んだりしていました。環境を整備して、簡単なコードを動かしたことはありますが、自分でネットワークを選定して検出精度を改善したり、ネットワークを改良したりといった経験はありませんでした。 最初は様々なネットワークモデルが用意されているTensorFlow公式のレポジトリを参考に進めていたのですが、Tensorflow1系と2系のコードが混在していたこともあり、自分でうまくコードに手を加えることができず、利用を断念しました。 そこで、GitHubに個人の方が公開しているコードを利用しました。シンプルなコードだったため、読みやすく、簡単に手を加えることができ、とても役立ちました。 ※TensorFlow(テンソルフロー)…Googleが開発を手掛け、オープンソースで公開している、機械学習用のソフトウェアライブラリ

Q.当たりをつける上でどのような点を重視しましたか?

まずは選定したネットワークを動かして、ある程度セグメンテーションができていることを確認しました。その上で、どこがボトルネックになるかを考えました。 仕事柄ということもありますが、セグメンテーションした画像を1枚ずつ自分の目で確認して、課題抽出を行いました。 画像を分析した結果、小さい信号機の検出が難しいことや、夜間の画像で検出精度が悪いことに気づき、これが検討方針を立てる上でとても役立ちました。

コンテストの勝ち筋・工夫したポイント

Q.工夫した点を教えてください。

今回の実装では2つの工夫をしました。 1つ目は、領域を2分割して2回セグメンテーションを行う手法です。 2つ目は、明るさ調整をした上で学習、推論を行い、検出精度を改善する手法になります。 普段はカメラの開発に関わっているのですが、カメラの開発では、最初にハードウェアの設計があり、その後にソフトウェアでハードウェアを使いこなすという流れで進めます。 また、カメラの開発ではリソースが限られているので、できるだけシンプルなアルゴリズムを使い、データや解きたい問題に合うようにチューニングをしながら性能を引き出すということを行います。 そのような開発イメージが頭の中にあったので、今回のコンテストでも同じような発想でVitis AIを使ったネットワークの回路化を先に行い、その後に検出精度改善や、高速化に取り組みました。 そんな中で、先ほど挙げた2つの方法を思いつき、それがアイデア賞につながりました。

Q.いままでの経験で役に立ったことはありましたか?

数年前に参加した勉強会で学んだディープラーニングのFPGAへの実装技術や、高速化技術の知識が役に立ちました。 Vitis AIを使うにあたっても、勉強会で身に付けた事前知識があったため、抵抗なく使うことができました。 また、仕事柄、画像データを見て検討方針の当たりをつける経験は多く積んでいたので、今回も同じようにデータをよく分析して、筋が良い検討方針を立てることができました。

Q.実際にデータを見て発見はありましたか?

他の入賞者の方も指摘されていましたが、暗いシーンや小さな信号機の検出精度が悪いなと感じていました。 0.6というボーダーラインは、車道、車、歩行者、信号機、4種類の平均スコアなので、信号機のスコアが下がってしまうと、どうしても0.6を超えられなくなってしまいます。 そのため、信号機の検出精度がポイントになると考えていました。 コンテスト開始直後の当たり検討でこの事実に気が付いたので、検討を進めるうえで大きなアドバンテージになったと思います。

苦労したポイント

Q.どこで一番苦労しましたか?

Vitis AIを動かすのに苦労しました。Vitis AIは、TensorFlowで出力したネットワークを簡単に回路化できて非常に便利なのですが、動かすまでに時間がかかってしまいました。 今回、トータルで500~600時間程度かかったのですが、自分が使いたいネットワークを回路化するまでに200~300時間程度かかっています。 コンテスト向けに用意されたVitis AIの丁寧なチュートリアルがあるのですが、ツールの進歩が早く、最新のバージョンでは大きく変わったりすることがあるため、環境構築には苦労しました。 また、環境構築後、実際にネットワークを回路化する際も、ネットワークの層によってはVitis AIで指定できるサイズに制約があり、ツールに合わせてネットワークを修正する作業に時間がかかりました。 開発途中で様々なエラーが出ましたが、エラーメッセージをGoogleで検索して、同じような悩みを抱えていた人の解決法を調べてなんとか解決できました。

今後の展望

[021]Winner's-Interview 3

Q.AIエッジコンテンストの経験は今後どのように活かされると思いますか?

ネットワークの選定、ネットワークの回路化、検出精度改善と一通り経験することができたので、ディープラーニングの開発を行うときに、全体像をイメージしながら仕事に取り組めると考えています。 規模の大きい会社に勤めているので、自分で手を動かして開発できるのは全体のごく一部となります。今回のように、一通りを自分で作るという経験は会社ではなかなか体験できないことなので、とても良い経験になったと思います。

Q.精度が上がらず困っている方にアドバイスはありますか?

簡単でも良いので、思いついたアイデアをとにかく試してみることをおすすめします。 今回、夜間の暗い画像の検出精度が悪いことに気づいたときに、ガンマ補正を行うことを考えました。しかし、計算処理が重く、実装の手間もかかるため、当初は実装を諦めていました。 その後、シンプルに画素の平均値からゲインを算出して、画面全体にゲインをかけて明るくしても同じ効果が得られるのではないかと気づき、実装したところスコアが大幅に改善しました。 開発の現場では、教科書通りの実装や、高度な実装をする必要はなく、その実装によって効果が得られるかが問われます。 コンテストでも開発と同じように限られたリソースの中で、スコアや計算時間を改善することが求められるので、課題を明確にしたうえで、簡単な解決手法で良いので試してみることをおすすめします。

Q.これからAIエッジコンテストに参加する方々にメッセージをお願いします。

エッジAIの分野に興味があるという方であればぜひ参加をおすすめしたいです。特に、FPGAに興味があるが、触ったことがないという方におすすめしたいです。 FPGAによるディープラーニングの高速化というテーマは、将来性があり、面白いテーマであるため、興味を持っている人は多くいると思いますが、手を出すにはハードルが高い技術だと感じています。 SIGNATEでは、他ではあまり見かけないFPGA実装コンテストを開催し、評価ボードの提供、チュートリアルや掲示板といった充実したサポートもあり、この難しいテーマに対して挑戦しやすい環境を用意して頂いたと感じています。 おそらく、このような場がなければ、数年前から挑戦したかったFPGAによるディープラーニングの高速化を実現することはできなかったと思います。 AIエッジコンテストは、6か月という余裕がある長い期間が設けられ、暫定処理時間提出というチェックポイントもあるので、興味がある方は、暫定処理時間提出をペースメーカーにして、とりあえずツールを使い動くものを作ってみることをおすすめします。 検討を始めた当初は、ツールが用意されているので、みんな同じようなものを作るのではないかという心配がありました。しかし、蓋を開けてみると、自分がツールを使いこなして実装したものはオリジナリティがあり、アイデア賞を受賞することができました。 おそらく便利なツールにも様々な制約があり、その制約の中で試行錯誤したものがオリジナリティに繋がったのだと思います。なので、興味がある人はツールの使いこなしで構わないので、とりあえず動くものを作ってみるのが良いかと思います。 次回のAIエッジコンテストでは、私と同じようにFPGAの専門家ではない方の参加者が増えて、オリジナリティのある実装が1つでも増えることを楽しみにしています。 < 第4回AIエッジコンテスト(実装コンテスト②)の入賞者レポートはこちら >

この記事をシェアする