Hitachi × インテル_AI Hackathon -エキシビジョンチームとして参戦！- (後編)

# はじめに

こんにちは。(株) 日立製作所の [Lumada Data Science Lab.](https://www.hitachi.co.jp/products/it/lumada/about/ai/ldsl/index.html) の小幡拓也です。

2021年6月に、日立製作所Lumada Data Science Lab.とインテルが共同で主催したAIハッカソンが開催されました。
私はこのイベントに、日立製作所Lumada Data Science Lab.とインテルの混成エキシビションチームメンバーとしてハッカソンに参加しました。

[AIの民主化を目指すハッカソンに潜入 〜日立 × Intel AI Hackathonレポート](https://zine.qiita.com/event/202108-hitachi/)

この記事ではエキシビションチームが検討・開発したソリューションについて、実現手段をメインにご紹介いたします。



# プロトタイプの要素技術と開発分担

プロトタイプの開発は、エッジコンピュータ側は日立のメンバー、クラウド側はインテルのメンバーでそれぞれ分担して実施しました。

開発は分担して実施しますが、それぞれの要素技術としては次のとおり連携しています。

 - エッジコンピュータで収集した画像データをクラウドでラベリング
 - クラウドでラベルに基づく学習を基にモデルを生成
 - クラウドからエッジコンピュータにモデルをデプロイ
 - エッジコンピュータ側でモデルに基づき対象を認識し、声でお知らせ

  

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/faa2d79a-eb3a-19c2-c299-df33cda1fb54.png)




# エッジコンピュータ側の処理

エッジコンピュータ側の処理内容は下図のフローのとおりです。エッジコンピュータにはOpenVINO™ ツールキット環境がプレインストールされており、このDockerイメージから作成したコンテナ上で動作します。

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/4c484b8f-5689-74b8-aa67-e468ea41f787.png)

**①最新モデルダウンロード＆デプロイ**

起動時に最新モデルをクラウドからダウンロードして所定のフォルダに置くことでデプロイします。

**②物体検出と距離取得**

物体検出を行い検出された物体までの距離の取得を行います。

**③状況判断とナビゲーション**

得られた物体情報から状況を判断し、ナビゲーションが必要であればナビゲーション音声を出力します。

**④「覚えてフラグ」のチェック**

「覚えてフラグ」のチェックをします。「覚えてフラグ」がTrueの場合、画像をクラウドストレージにアップロードします。そして物体検出に戻り、以降は①～④を繰り返します。

> 💡 「覚えてフラグ」とは、一定の閾値を超えた音量の「覚えて」という言葉が入った時にTrueになるフラグです。別スレッドで常にマイクからの音声入力を監視しています。



ちなみに、装置一式を装着したときの姿はこんな感じです。背負っているリュックの中にエッジコンピュータの本体が入っています。一見重たそうに見えますが、本体は4kg程度です。

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/d32a001d-2164-068f-e6bb-57c0e637e4f1.png)



# エッジ側の主要な要素技術

エッジコンピュータ側の主要な要素技術となる「物体検出」「距離取得」「状況判断」「音声入出力」のロジックを紹介します。

#### １．物体検出

モデルを構築するために、点字ブロック、トイレマークの学習用の画像を取得しました。人の認識モデルは既存のものを使用しています。

###### 点字ブロックは複数の形、複数の角度のデータを取得

![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/cc3ccccb-e50c-9f4f-6b7c-240e9c1989ad.png)

###### トイレマークは複数の背景、複数の角度のデータを取得

![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/6945d98b-8f9a-ddfb-f8c9-1451e8b1f78a.png)

学習済みのモデルを使って、トイレマークや点字ブロックが認識できるかを確認しました。

![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/6394e4d4-7316-b681-5893-93cee0b87c8b.png)

トイレマークと点字ブロックを正しく認識しました。学習モデルが作成できたことがわかります。



#### ２．距離取得

距離をカメラの深度画像から算出しています。音声出力までのラグ（１歩分）を考慮し、今回は簡易的に**３メートル先＝３歩先**と定義しました。

３メートル以内にある物体を検知するように設計しました。

深度画像とは、画面に映ったものが近くにあるのか遠くにあるのかを表す方法です。近いものは赤く、遠いものは青く表現されています。

![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/929c1596-22a6-770b-9463-e6ef2e5e74a2.png)



#### ３．状況判断

トイレマーク、点字ブロック、点字ブロックと人など、カメラの視野に入ったものが何であるかを判断する方法について説明します。まず、カメラの視野を次のように３分割して、どこで物体が検知されたのかによって、状況協判断を行いました。

![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/a64b22d5-0bc5-ee3a-1a41-e8b4c6a2eb04.png)

- トイレマーク

  画像を縦に３分割し、座標を用いて左右/中央の判定を行いました。本当は視角を考慮すべきですが、今回は簡略化しました。

![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/62886ace-697a-296c-6e41-39b7fdc05f77.png)



  この例の場合、状況判断処理では以下のように画面左側にトイレマークがあると判断し、「トイレは正面左側です」というアナウンスを行います。

![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/38234ed4-ee25-5660-377b-d512db0597de.png)

  
- 点字ブロック

  ３分割した画像の中央にあると認識された場合に、点字ブロックがあることを知らせました。

  ![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/04da36d3-bc64-795b-30de-b2bb64832666.png)


  この例の場合、状況判断処理では真中に点字ブロックがあると判断し、「点字ブロックがあります」というアナウンスを行います。

  ![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/78d91058-921e-6472-1ff8-fe167d6ab56a.png)

- 人

  ３分割した画像の中央にいると認識された場合に、人がいることを知らせました。

　![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/6c9cccb6-0e48-4a07-9749-667248b30f96.png)



　この例の場合、状況判断処理では歩行者の動線上に人がいると判断し、「人がいます」というアナウンスを行います。

　![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/3184da61-61a7-b072-b3ec-c100f4fc3d37.png)


- ##### 点字ブロック + 人

  点字ブロックおよび人が画像中央で認識された場合、点字ブロック上（動線上）に人（障害物）があると定義し、危険を知らせました。

  ![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/1e8e4b47-5e38-7635-c89c-d65d9ac96151.png)
  
  ![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/74aeb667-dc65-8d37-06ef-00254246fcc7.png)



#### ４．音声入出力

今回は時間の関係上、マイクから閾値以上の音が入力された場合に、音声を認識したと定義しました。
また、危険をお知らせする音声は、あらかじめツールを用いて作成し、状況判断に合わせて再生しました。



# Edge-to-Cloud 継続的自動再学習ソリューション

エッジコンピュータにおけるAI推論とクラウド上でのモデルの自動再学習の実現方法を紹介します。主にクラウド側の仕組みに関して記載いたします。

## 処理の流れ

![017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698645/7cb5494d-2ea3-b403-448b-a8c9280368d7.png)


**①エッジコンピュータからクラウドへ画像をアップロード**

エッジコンピュータ上ではディープラーニングモデルを使用した推論処理が行われております。ただし、モデルの運用中に正確に認識できなかった画像（映像からフレーム切り出し）や追加で学習させておきたい画像などを都度クラウドストレージへアップロードします。

**②アノテーション**

アノテーション担当チームが定期的にクラウドストレージの中身を確認し、アノテーション作業を行います。

**③再学習用サーバーの自動生成**

アノテーション終了後に担当者が作業完了通知をシステムに送信します。すると、それをトリガーとして学習用のサーバーが自動で生成され、学習が開始されます。

**④モデルの再学習**

サーバー上でデータ前処理およびモデルの学習処理が実施されます。データセットのボリュームにもよりますが、数分から数時間程度かかります。

**⑤再学習完了通知とサーバー自動削除**

学習が完了すると、学習サーバーはその旨を完了通知としてシステムに送信します。それをトリガーとして、学習サーバーは自動で削除されます。

この処理により、学習用サーバーを学習処理の間のみ起動しておくことができるため、クラウド利用コストの最適化が実現できます。

**⑥モデルの性能検証**

モデルの学習が完了すると、AIエンジニアによりモデルの性能検証が行われます。これは現在使用しているエッジコンピュータ上での性能検証、または、その他のデバイスでの性能検証も含まれます。

**⑦モデルの公開**

検証が完了したモデルは確認用にWebアプリケーションとして公開されます。これにより非技術系の関係者もWebブラウザからを簡単に試すことができます。

**⑧エッジコンピュータへのモデルデプロイ**

学習済みモデルのエッジコンピュータへの取り込みはエッジコンピュータ側のタイミングで行います。具体的には、デバイス未使用時やデバイス起動時などに学習済みモデルをクラウドからダウンロードして使用します。



# 所感

エキシビションチームメンバーに今回のAIハッカソンに参加してみての感想を聞きました。

**エキシビションチームとしての活動はいかがでしたか？**

- インテル社のエンジニアの方とのコラボによりクラウド技術に関する知見を深められました。また、クラウドを利用したソリューションの考え方を学ぶことができました。
- 普段の業務では約２週間で実際に動くものを作り上げて、デモンストレーションまで行うという経験がなかったので、非常に貴重な機会をいただき楽しかったです。

**作成したアプリについて気づきなどありましたら教えてください。**

- 実際にデバイスを装着してデモを行ったのですが、音声によるガイドは音声を聞き終わるまで待機しないといけないということがわかりました。可能な限り短文でガイドしてくれると待機時間が少なくストレスフリーになると感じました。

**今回のハッカソンはすべてオンライン上での実施でしたが、やりにくさなどありましたでしょうか？**

- 全てオンライン上で完結するハッカソンは初めて経験しましたが、イベントを成立させるための工夫が随所にありました。現在テレワークがメインとなっていますが、ブレストの進め方など、実業務に応用できそうなものもありました。

**ハッカソンでは開発に必要なデバイスやツールが提供されました。使用してみていかがでしたか？**

- CE50-10はDockerを用いてプリインストールされたAI開発環境（OpenVINO™ ツールキット）を容易に構築することができ、スムーズに実装に着手できました。

- 本来は推奨されないかもしれないのですが、今回のデモではCE50-10をバックパックに入れて持ち歩くという排熱的に過酷な使い方をしました。しかし、不具合を起こすことはありませんでした。高い耐環境性の一端を確認できたと感じています。

- CE50-10のスペックを実感できたので、今後エッジAIが必要なプロジェクトでは選択肢の一つとして考えていきたいです。

  

# おわりに

いかがでしたでしょうか？

後編では、日立製作所Lumada Data Science Lab.とインテルがタッグを組んだ、エキシビションチームが作成したソリューションの実現手段について解説しました。

このソリューションのコンセプトをまだ見ていない方は、ぜひ[前編](https://qiita.com/t-obata/items/3274f24780affac04659)をご覧ください。

最後まで読んでくださり、ありがとうございました。



### 商標

- Azureは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
- Docker は，Docker Inc. の米国およびその他の国における登録商標もしくは商標です。
- Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。