ディー・クルー・テクノロジーズ Blog

bookmark_border駐車場の空きを教えるエッジAIを作る
(その1~ エッジAIモデルについて)

エッジAIとは?

ディー・クルーでは、エッジAI(IoT環境で動く人工知能)の研究を行っています。

IoTデバイスでは通信負荷が高まるとデータ転送に遅延が生じるなど、問題が起き始めます。

そこで、クラウド側に過度に依存せず、ローカル環境=エッジ側でセンシングー演算ーAI認識まで完結させて、レスポンス性能と通信負荷の低減を両立した環境にやさしいシステムを実現する。

これをめざしてディークルーで現在研究しているのが、AI開発「エッジAI」です。

すなわち、AIを組み込んだIoTデバイスやEDGEデバイスに AI オンチップ アクセラレータを組込むという構想です。

この構想のもと、私は電力負荷の高いGPU を使用せずに低電力 MCU で動作する軽量の AI システムを作りたいと思っていまして、今研究を進めています。

駐車場の空き監視AIを作ってみたきっかけ

今日は、そのなかでも、映像認識のエッジAI研究プロジェクトの1つ「駐車場監視AI」をご紹介します。

映像認識AIは例えば、今映像で映っているオブジェクト(対象物)が、人なら人、コップならコップといった具合に、「どこに、それがあるのか(ないのか)」を人工知能(AI)にリアルタイムに検出させる技術を用いて課題を解決する技術です。

当社はIoTシステムの開発案件を多く手掛けており、駐車場に関したシステムも開発していました。駐車場に止める「車」はAIモデルが認識しやすいオブジェクト(対象物)であります。

そこで、駐車場に設置したカメラから、駐車スペースの空きが分かる便利になると思い付き、AIによる駐車場空き監視システムを作ってみたので、少しご紹介したいと思います。

今回のAIモデルの概要

このプロジェクトのAIモデルについての概要を示します。

図1 AIモデル入力イメージ (368×528)
図2 AIモデル 出力マスク(23×33)

  1. 図1 入力イメージからのオブジェクト検出にFCNN(完全な畳み込みネットワーク)を用います。
  2. AIモデルは、図2 出力マスクを生成し、オブジェクトのおおよその位置を示します。
  3. AIモデルは、この出力マスクを使いオブジェクトの位置を特定、数えることができます。
  4. AI モデルは、Python向けの機械学習ライブラリである、Pytorch フレームワークを使用します。
  5. AI モデルは、Raspberry PI 4 上で 4 ~ 8 Hz のフレーム レートで実行されます。
  6. 学習用のデータセットソースは 、 Parking Lot Dataset | Kaggle を使用しています。

AIモデルの動作について

作成したAIモデルの動作についてはYoutubeの動画にしましたので、ぜひご覧いただければと思います。

図3 駐車場の空き監視AI デモ映像

次に、この映像で何が起きているかということをご説明します。

  • AIモデルが、映像上で「車」と認識している位置に、白い四角を打っています。
  • 動画の上部(UPPER)駐車スペースと、下部(LOWER)駐車スペースの「Parked」(満)と「FREE」(空)数で、AIが認識した数を数えて、それぞれの値を変えています。
  • AIが認識した駐車した車の数に合わせて、白い四角の数も変わり、これらの数字も刻々と変わっていくことがお分かりいただけるかと思います。

なお、映像がカクカクしているなとお感じかもしれません。これは、IoTならではの軽量システムでのパフォーマンスを維持するために、意図的にフレームレートを落としているからです。システム環境によっては、フレームレートを高め、AIモデルをそこに最適化することもできます。

次回は、このAIモデル作成時の課題や工夫したポイントなどについてお伝えしようと思います。

bookmark_borderネイル女子にやさしいキーボードを作ってみる
(その5~ センサの動作確認)

やわらかいセンサ、「ショッカクポット(POTU-001-1)」を使った、やさしいキーボードを作ってみよう!の5回目です。今回は、その4までで製作した装置を実際に指で触ってみて、装置のセンサ値の変化を確認してみます。

このセンサには爪で押すスポンジ部の内部に、4つのチャネル(センサの反応を記録するポイント) があります。スポンジを上から見て時計回りに、6時の位置にCH1、9時に CH2、12時にCH3、3時にCH4のが設置されています。

①スポンジを押したときのセンサ値の変化

まず、CH2→CH3→CH4→CH1の位置に合わせて、順に爪でスポンジを上から押し、それぞれのセンサ値の変化をグラフで確認。次に、各チャネルの間の位置を押した時の動作も確認しました。

その様子を動画にまとめていますので、ご覧ください。

想定通り、各チャネルの上を爪で押すと一番近くのチャネルのセンサ値が変化し、各チャネルの間を押すと、近いチャネルのセンサ値が変化しました。

ただ、指に対するセンサの大きさのためか、設定した閾値を超えない程度ですが、他のチャネルの値も変化するため注意が必要そうです!

そこまでは予測していたのですが、今回一番想定外だったのは、スポンジの表面を軽く触れるだけでもセンサ値が1mmほどと変化があったことです。つまり、予想していた以上に感度がよかった。逆に言えば、思った以上に「繊細」くんなのです。

だから、「どんな触れ方をしたかによって、どう反応させるか」

この微妙な区別をつけるのが次のSTEPの課題になりそう、ということが分かりました。

②スポンジをつまんだときのセンサ値の変化

さて、取扱説明書によると「つまむ」動作の検出が可能ということで、センサの側面のスポンジをつまんだときのセンサ値の変化を確認してみました。

スポンジの側面のいろんな位置をつまんでみて、センサ値の変化を記録してみましたが、爪でつまむと、おもしろいようにセンサ値が変化。各チャネルが「つまむ」動作を細かく判別することもわかりました。

動画で見るとわかるのですが、左や上はつまみにくかったのか、センサ値が弱めだったので、右や下の時は、両手指(というか私の場合は爪です)でキューブをしっかりとホールドしながら操作しましたら、しっかりとセンサ値が反応したようです。

側面の操作にしっかり反応を示す結果をみて、新たな入力方法を思いつきました!

スポンジ側面を爪で刺すと反応する、といった入力方法。

爪が伸びている前提ではありますが、これはアリかもしれません。爪で刺すと動くアプリって具体的にはまだよくわかりませんが、面白いので、このアイデアをどうするかも次STEPの課題にしたいと思います。

さて今回は「やさしいキーボードを作ってみる」のセンサの動作確認を行いましたが、正常に動作してひとまず安心しました。

次はこのセンサ値からの入力判定を行おうと思います! 

いかに誤判定しないように入力判定を持っていくかがポイントですが、これが曲者。思い切ってキャリブレーション機能もつけようかなあ。

フゥー… 悩みどころです。。

〇ユキグマ〇

工作&モノづくり系好き女子。電子工作グッズは無地のメイクボックスに入れてお部屋の雰囲気を保ちます。
フランボワーズケーキに目がないです

bookmark_borderネイル女子にやさしいキーボードを作ってみる
(その4~プログラムを実装する!)

お待たせしました。いよいよキーボードのプログラムを実装します!

プログラムの実装

今回、Arduino側には取得したセンサ値をシリアル通信でPCに送信するプログラムを実装しました。

なお、センサとの通信方法は同梱の取扱説明書に基づいて実装しました。
この取扱説明書、日本語で書かれているのでわかりゃすい!

しかも、説明書って長いことが多いのですが、こちらはたった8ページなので、すぐ読み終わりました。

いろんな意味で私に親切なセンサ君です(笑)

Arduino側のプログラム動作手順概要:

さて、実装プログラムはおおむねこんな流れで動作しています。

① 初期設定

・センサとのSoftwareSerial通信を開始
・PCとのHardwareSerial通信を開始
・100msのタイマを開始

② タイムアウト時にセンサへコマンド(0x6D)を送信

③ センサからのセンサ値を受信

④ 受信したセンサ値を文字列に変換してPCに送信

特に大きく困るポイントはなく、サクサクと実装を進められました。

私にはとても扱いやすい、素直なセンサ君でしたね。

あっ、今思い出しました。1点だけクセがありました。

このセンサの出力データフォーマットのCHの順番ですが、
「CH1,CH4,CH2,CH3」

となっているのですね。(下図で赤い字で示した部分です)

頭の中でコードを考えているときCH1からCH4の順番であると勝手に考えていて、実際に動作させたとき少し焦りました。。。

数字の順番にならんでいないので少しモヤっとしましたが、動かせばすぐに分かります。

皆さん実装するとき、ここだけ注意してくださいね。

〇ユキグマ〇

工作&モノづくり系好き女子。電子工作グッズは無地のメイクボックスに入れてお部屋の雰囲気を保ちます。
フランボワーズケーキに目がないです。