AIとエッジコンピューティングで猫の分析システムを作ってみた
本記事では、IoTカメラとAIを活用して、猫が映った映像やデータをクラウドに送信し、
データの分析可能な環境を構築するまでの手順を解説いたします。
*目次*
1.はじめに
こんにちは。
プラットフォームソリューション第二グループのfujishima.yです。
普段はサーバやネットワークを中心に設計や構築業務を行っております。
当ブログでは4回目の記事となります。前回は『VXLANを用いた拠点間通信とRancherによる監視システムの構築』について紹介させていただきました。
今回はエッジコンピューティングを主なテーマに解説したいと思います。
まずはじめに、貴方はエッジコンピューティングという言葉を聞いたことがありますか?
あまり馴染みがないかも知れませんが、実は今年のInteropTokyo2023では、注目テーマの一つに数えられるほどの成長分野となっています。
私自身はこの分野に約4年ほど携わってきましたが、当初は…いや、つい先日まで、そこまで強い関心を抱いてはおりませんでした。
それは専門がインフラ(サーバやネットワーク)のため、AIについての知識や理解に乏しく、心のどこかでAIのことを軽視していたからです。
ところが、昨今ChatGPTを筆頭とする生成AIが登場すると、瞬く間に普及し、AIを活用できる範囲が一気に広がりました。
そこでAIに対する認識を改め、エッジコンピューティングについて学び直すことで、現在に至っております。
本記事で紹介するのは、先日、社内の勉強会でエッジコンピューティングについて発表した際に、デモ用に構築したシステムがベースとなります。
システムの構成や仕組みに加えて、伝えきれなかった工夫ポイントなど、もう少し詳細に解説いたします。
本記事での解説を通じて、エッジコンピューティングの特徴や課題、将来的な可能性についてお伝えできればと思います。
なお、AIモデルの作成方法やディープラーニングの仕組みなどについては、本記事で扱う範囲を逸脱するため、割愛いたします。
(対象読者)
・インフラエンジニア向けです
・エッジコンピューティングの分野や仕組みに興味をお持ちの方
・IoT機器、クラウド、ネットワーク、サーバについて基本的な知識をお持ちの方
・AIを活用した具体的なユースケースについて知りたい方
2.そもそもエッジコンピューティングって何よ?
エッジコンピューティングを簡単に説明すると、元々はクラウド側で行なっていたAI処理を、拠点(エッジ)側で実行するようにしたものです。
クラウドだけの構成だと負荷が集中することで、レスポンスの遅延が発生する課題を解決するために、エッジコンピューティングの概念が生まれました。
例えば以下のように、特にリアルタイム性が求められるものでは必須の要件となります。
・自動車やドローンの自動運転システム
・医療での遠隔診断や操作
・工場での製品の不良品チェック
エッジコンピューティングとクラウドコンピューティングの特徴を比較するため、ユースケースを以下の表に分類してみました。
ただし、ここで重要なポイントは、エッジ側とクラウド側は互いに連携するものであり、どちらかを選択するものではない、ということです。
3.本記事でやろうとしてること
家の周りに多数生息している猫の生態を調査・観察するため、猫の通り道にIoTカメラを仕掛けます。
猫が通過した際の各種データをクラウドに送信し、閲覧・分析できるようにします。
デモとして以下の内容を実施しました。
①エッジがリアルタイムでIoTカメラから映像を取得
②取得した映像をエッジのAIモデルに推論させ、猫を検知・識別
③猫を検知してから5秒間の映像だけを録画
④検知の履歴データがクラウド(データ分析基盤)に送られ、蓄積
⑤kibanaにアクセスし、蓄積されたデータをグラフ化して分析
全体構成図の解説
検証に用いたプラットフォーム概要図(画像をクリックすると拡大表示)
ルータ、FW、APなどのネットワーク設備は設定済みであると想定。
・エッジデバイス
→機種:DELL製のタワー型PC、インテル製のCPU、メモリ8Gbyte(GPUは非搭載)
→OS:Ubuntu 20.04 LTS
→AI実行環境:OpenVINO(model zoo)
→スクリプト:Python3
→Docker:20.10
→データ送受信:kafka、logstash
・IoTカメラ:TP-Link Tapo C200
・クラウド:Azure
→データ分析基盤:Elastic Cloud(Elasticsearch、kibana)
Pythonで作成されたスクリプトを実行することで、①〜④まで一連の処理を自動で行います。
以下、スクリプトを実行した際の様子です。
AI処理により物体検出(object detection)と画像分類(classification)の推論処理を、1秒あたり15フレーム(15fps)のレートで実行しています。
そして、以下が⑤(kibana上で作成したダッシュボード)の様子です。
猫を検知した際のデータがリアルタイムに反映されていきます。
それでは、具体的な設定方法を解説していきます。
4.設定解説編
①IoTカメラの設定
・IPアドレス/Wifiの設定
スマートフォン用に提供されているIoTカメラのアプリを使い、初期設定でWifiに接続します。
・IoTカメラからの映像を取得できるようにRTSPを有効化
高度な設定→デバイスアカウントの順番に選択し、ユーザ名とパスワードを設定することで、RTSPが有効になり、映像が取得できるようになります。
②エッジデバイスの設定
・Python3など必要なパッケージのインストール
$ sudo apt-get -y install python3.8-venv
・OpenVINOツールキットのインストール
公式サイトの手順に従い、OpenVINOツールキットをインストールし、環境をセットアップします。
・Open model zooのダウンロード
$ sudo apt install -y git
$ git clone https://github.com/openvinotoolkit/open_model_zoo
$ cd open_model_zoo/
$ git submodule init
$ git submodule update –recursive
$ python3 -m pip install demos/common/python/
$ python3 -m pip install -r demos/requirements.txt
・JupyterLabのインストール
スクリプトの作成を容易にするため、対話型の開発環境を整えます。
$ mkdir jupyter
$ cd jupyter/
$ virtualenv environment
$ source environment/bin/activate
$ pip install jupyter
・Pythonスクリプトの作成
JupyterLabの環境上でコードを記述していきます。
物体検出(object detection)を実施してから、結果の画像を切り取り、画像分類(classification)を行うようにしています。
それぞれを組み合わせることで、猫を検出する精度を上げるのが狙いです。
・kafkaとlogstashのセットアップ
docker-composeによりコンテナとして立ち上げます。
kafka部分の設定で、network_modeを”host”にするのがポイントです。
$ cat docker-compose.yml
version: “2”
services:
kafka:
image: bitnami/kafka:latest
ports:
– “9092:9092”
– “9094:9094”
network_mode: “host”
volumes:
– “kafka_data:/bitnami”
environment:
– ALLOW_PLAINTEXT_LISTENER=yes
logstash:
image: logstash:8.7.1
build:
context: logstash/
volumes:
– ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
– ./logstash/pipeline:/usr/share/logstash/pipeline:ro,Z
network_mode: “host”
ports:
– 9600:9600
environment:
LS_JAVA_OPTS: -Xms256m -Xmx256m
restart: unless-stopped
volumes:
kafka_data:
driver: local
③クラウドの設定
クラウド側のセットアップ
・Elastic Cloudのリソース作成
→Azureのポータル画面から操作
・kibanaのセットアップ
→左側のメニューよりdashboardを選択
→分析したいデータを選択しdashboardを作成
システム構築の基本的な流れは以上となります。
あとはIoTカメラを猫の通り道に仕掛けて、ちゃんと猫を捉えることができるか実験してみます。
この通り、無事に猫を捉えることができ、5秒間の映像も取得することができました。
5.課題
エッジコンピューティングの課題としては、主に以下の3点が挙げられます。
①.AIの精度
AIを実装するには、要件に応じて、やりたいことを実現するためのAIモデルが必要です。
そして、十分な精度のAIモデルを作成するには、大量の学習用データが必要になります。
なお、本記事で利用したAIモデル(open model zoo)は、OpenVINOが提供しているデモアプリケーションです。
これを実際に動かしてみると、猫が写ったとしても、猫とは別の種類と判定されることも多いことが分かりました。
(以下の映像では、アラスカン・マラミュート犬と判定されている)
②.システム運用(管理 / 監視 / セキュリティ)の複雑化
連携するIoT機器や観測地点などの拠点が増えると、その分だけエッジデバイスも用意する必要があります。
そうなると必然的に機器の管理、監視、セキュリティ面が複雑になります。
他にも拠点間やクラウドまでのネットワーク構成なども、適切に設計する技量が問われます。
これらはインフラエンジニアが考える領域ですので、エッジコンピューティングの設計・構築はインフラ屋の仕事であると言えます。
③.多くのリソース(GPU)が必要
AIエンジニアにとっては常識だと思いますが、AIを動かすにはGPUが必要となってきます。
ただし、GPUはCPUより寿命が短く、さらに高性能なGPUほど電力を大量に消費するため、コストの算出が大事になります。
なお、本記事で紹介したエッジデバイスでは、4コアのCPUのみでGPUは非搭載でした。
その構成でも何とか動きはしたものの、動作中は2コアが常時100%となり、パワー不足感は否めず、GPUの必要性を改めて認識する結果となっています。
6.まとめ
昨今はスマートシティ化という言葉を、国や自治体の計画として聞く回数が増えてきました。
そのスマートシティ化を実現する上で要となるのは、間違いなくエッジコンピューティングです。
そして、エッジコンピューティングのシステムを構築し運用するには、先にお伝えした通りいくつかの課題があります。
それらの課題を解決するために、私達インフラエンジニアの技量が問われることも、先にお伝えした通りです。
しかし、AIを実装するために専門の知識も必須であり、両方を兼ね備えたエンジニアは少ないと感じています。
今後、さらにAIの進化と普及が加速化していく中で、需要の拡大に供給が追いついていないのが実情ではないでしょうか。
インフラエンジニアのスキルセットにAIが必須となる日は、もう目の前に迫っていると思います。
本記事がきっかけで、少しでもエッジコンピューティングに興味・関心を持っていただけたなら幸いです。