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

bookmark_borderUVをセンサで計測してみよう!③ ~センサを実際に動かしてみる

では、さっそくセンサを動かしてみましょう!

## ハードウェア

  • ML8511使用紫外線センサーモジュール(ML8511)

ML8511使用紫外線センサーモジュール: オプトエレクトロニクス 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

久しぶりの半田付けで少しドキドキしました(苦笑)

余裕のフリ…

感覚忘れないように定期的にしないとダメですね。頑張ります!

  • Arduino Leonardo

こちらは、以前のテーマ↓で使用したデバイスを流用しています。

  • USBケーブル(Micro USB Type-B 2.0)
  • Windows 11 PC 

そして、手軽に紫外線を照射する装置も必要です。

  • UV LED ネイルライト

これは、センサが紫外線に反応することを確認するために使用しました! 確認のために窓際や外に行くのも面倒なので、手元で確認できるものないかなーと探してみたところ、3COINSで発見!! 

私も大好きなぷっくりツヤっとしたジェルネイルを硬化させるために爪に当てて使用するものです。これで税別300円とは今回使用するセンサよりもさらにリーズナブルです!

3COINSさん流石ですね。。

UVLEDネイルライト/and us | 3COINS(スリーコインズ)レディース | PAL CLOSET(パルクローゼット) – パルグループ公式ファッション通販サイト

## ハードウェア接続

以下の図のように実際に接続しました。

以上でプログラム実装前の前準備が完了です。

## プログラム実装

今回使用するセンサからはUV光強度に比例したアナログ電圧が出力されます。

なので、定期的にアナログ値を取得して電圧値に変化する処理を実装すればセンサの値は取得できそうですね。ただ電圧値だけでは紫外線が強いのかわかりづらいので、電圧値からUVインデックスを求めてPCに表示するプログラムを実装したいと思います。

計算方法ですが、アプリケーションノートML8511_UV.pdf (sparkfun.com)

に詳細に記載されていましたので、この方法で求めていきたいと思います。

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

  1. 初期設定
    • PCとのHardwareSerial通信を開始
    • センサのイネーブルピンにHigh出力
    • 1secのタイマを開始
  2. タイムアウト時にセンサの出力ピンからアナログ値を取得
  3. 取得した値を電圧値に変換
  4. 電圧値からUVインデックス値に変換してシリアルで表示

Arduinoのツールに”Serial Plotter”というものがあり、シリアル出力した値をグラフ化してくれます。

簡単に状態変化をリアルタイムで確認できるので、かなり便利でした。

## センサ動作結果

UVライトのON/OFFとUVセンサのリアルタイムの状態変化が分かるSerial Plotterのグラフを一緒に動画にしてみました。

ML8511によるUVLEDネイルライトの紫外線計測結果をSerial Plotterのグラフ表示

動画8秒あたりから、UVライトONするとすぐセンサは反応してくれています!! 👏

UVを照射するとUVインデックス約2.5~3のあたり、弱い➡中程度のあたりでグラフ表示されますね。

今回より出力が高いUV LEDネイルライトだと数値が変わるのか興味があります。今回は室内というのもあり補正をしてないのですが、アプリケーションノートによると環境によってUVインデックスからの補正が必要なようで、条件によって誤差がありそうです。

よくよく調べてみるとSerial Plotterのグラフは複数データの表示もできるようです。ただY軸の範囲は自動で変更されるようなので、値の範囲が異なる数字を表示するときは注意が必要そうです。

おっと、UVインデックスのリファレンスとなるデバイスを用意していないです。あーリファレンスをどうしよう。。。

あ!そうだ気象庁情報です!!

気象庁で紫外線情報(分布図)を出しているのです。ピンポイントではありませんが、実験している場所付近の値をリファレンスにすればある程度は使えそうに思います!

気象庁| 紫外線情報(分布図) (jma.go.jp)

ちなみに気象庁紫外線情報のUVインデックスは11+が最高ではなく、さらに12や13+があるのですが、日本でしばしば12や13といった値が観測されるため、気象庁では実情に合わせて13+まで表示するそうです。恐るべし日本の夏!

さて、センサが動くことは確認できたので、次は外で実験する前にUVインデックスを無線で飛ばして確認できるように改造したいと思います!

外出先でPC+Arduinoを常に一緒に持ち歩いて計測するのも大変なので(トホホ)

それではまた!

bookmark_borderUVをセンサで計測してみよう!②~UVセンサとは?

今日も猛暑日予想です💦

こんにちは。UV計測ガジェットを作るシリーズの2回目です。

紫外線を計測できるお手頃なモジュールはいろいろありますが、今回は

ML8511使用紫外線センサーモジュール: オプトエレクトロニクス 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)
このセンサーモジュールを使用します。約10mm角のコンパクトでとっても使いやすそうな形状です。

## ML8511のセンサ特性

このML8511はUV-AおよびUV-Bに対する光センサで、センサ値はアナログ値で出力されます。

280nm-400nmの紫外線領域をしっかり計測してくれます(スペック表より)

## UV-A,UV-Bの定義

ちなみに、前回の記事でお肌に影響のある紫外線の波長にはUV-AとUV-Bの2種類あると触れましたが、定義がいくつかあるようで、気象庁ではこういう分け方をしています。

  • UV-B 280-315nm(ナノメートル)
  • UV-A 315-400nm

ちなみにML8511はUV-AとUV-B両方が合わさった値が出力されます。せっかくなのでそれぞれの値も知りたかったところですが、まあ今回はUV対策グッズの効果をみるのが目的ですので全く問題ないですので、このセンサで評価していこうと思いますm(__)m

## UV対策グッズの効果の評価指標

ML8511が計測したセンサ値をわかりやすく表示するために指標があると便利ですね。WHOが提示した紫外線の人体への影響度合いに関する指標として”UVインデックス”というものがありますので、センサ値からこのUVインデックスを求めて、UV対策グッズを使用した場合どう表示が変わるのか確認する装置を作っていきましょう。

ML8511から出力されるセンサ値は電圧値が出力されるので、電圧値からこのUVインデックスを求めることになるのですが、今回のテーマはここの作り方に気を付ける必要がありそうです。

### UVインデックス (環境省紫外線環境保健マニュアル)

(引用) UVインデックスとは、日常生活で使いやすい数値(影響度合いの一つの目安)とするため、地上に達する紫外線の波長毎の強さと、人体への影響度(紅斑作用スペクトル)を掛け合わせた数値を、使いやすい数値(0~11+)に指標化したものです。(引用ここまで)

WHOの基準を基に、UVインデックスに応じた対策が定義されていますが、12段階あるインデックス値を、環境省はさらにシンプルに5段階に分け対策指標化していますね。

次回は、実際にセンサーを使ってUV計測を行います!

bookmark_borderUVをセンサで計測してみよう!① ~UVとは?

お盆もとうに過ぎ、もうすぐ衣替えの季節というのに、燦々と輝く太陽の光はいまだ真夏の様。

会社帰りに好きなブランドのウィンドウショッピングしてると、どの店ももう秋物の新作ばかり並べています。めちゃくちゃ欲しいけど、暑さが和らぐ気配もみじんもなく、一体いつ着られるようになるかしらと、購入には二の足三の足?踏んでます。

あら私、今日はUV対策のお話をしたかったのですが、話が秋物選びに飛んでしまいました笑 

皆さんはUV対策としてどんなことをされていますか?

ちなみに私は、日焼け止めに日傘、帽子、手袋ってとこでしょうか。

最近は男女、大人も子供も関係なく日傘を差しているのをよく街でみますね。数年前まではここまで日傘人口をみなかったように個人的には感じてます。

実際私も日ごろ日傘には大変お世話になっています。最近はゲリラ豪雨も頻繁なので晴雨兼用の日傘を常に持ち歩いています。(便利ですね)

そこで今回は、日傘などのUV対策グッズで実際どれくらいのUVカットになっているのか、ガジェットを作って確認してみよう!と思います。

※今回の検証はあくまで個人的興味です。試した製品のUVカット効果を検証し賛否することが目的ではありませんのであしからずご了解ください。

以下、蛇足:

このブログを書くにあたって紫外線にしらべていたところ、環境省の紫外線環境保健マニュアルに日焼け止めについて記載されていて、詳しくて素晴らしかったのでご紹介しますね。

https://www.env.go.jp/content/900410650.pdf 紫外線環境保健マニュアル2020(環境省HP)

まず、紫外線に種類が3つあり、お肌に大敵なのはそのうち2つで、「UV-A」と「UV-B」と呼びます。

  • UV-A:降り注ぐ量は多いが、お肌への影響は比較的小さい。ただし長く当たりすぎるとNGのタイプ。
  • UV-B:降り注ぐ量は少ないが、お肌への影響が大きいので、短期間でも当たりたくないタイプ。

そして、日焼け止め。これも「紫外線吸収剤」「紫外線散乱剤」の2種類あるんです。これも知らなかったです。

紫外線防止剤の種類とその特徴 (出典) 紫外線環境保健マニュアル2020

さらに、日焼け止めクリーム等に記載されている紫外線を防ぐ強さを示すSPFPAという指標。これもなんとなく「数字が大きいのがより防いでくれるものさ」といった程度の印象で使っていました。実際は、SPFがUV-Bに対する指標。PAがUV-Aに対する指標なのでした。

紫外線防止用化粧品と紫外線防止効果 (出典) 紫外線環境保健マニュアル2020

普段私が通勤で日焼け止めとして使用しているファンデーションはSPF 50のPA+++なので、炎天下のレジャー向きでした💦 平日は外に出るのは通勤とランチのみ、というような生活だと過剰防御かもしれませんね。

本論からどんどんずれますが💦マニュアルにあった日焼け止めの塗り方も目から鱗だったので載せておきます。皆さん、ファンデは丁寧に塗って、しっかり紫外線を防ぎましょうね!

(出典) 紫外線環境保健マニュアル2020

さてさて次回は、センサモジュールの準備についてご紹介します。

bookmark_borderハイルドライバー方式の振動子をツイータに搭載。D-CLUEオリジナル ハイレゾスピーカを展示

ハイルドライバー式スピーカセット
シリンダー型ハイレゾスピーカ。中央はメディア再生用アンプ。

今や音楽視聴はデジタルが当たり前という時代ですが、逆にアナログレコードが再ブームで非常に良く売れているという話をよく耳にします。その理由はいろいろあるようですが、1つには、デジタル音源でカットしている超音波領域が再生でき、これが心地よいと思う人が増えたこともあるようです。

これは、近年登場したハイレゾオーディオの特長とも共通します。

今回は、そんなハイレゾ音源が再生でき、当時国産スピーカーでは存在していなかったハイルドライバー(AMT(Air Motion Transformer)とも言います)方式を採用した弊社オリジナルスピーカーセットについてD-CLUEエンジニアの渡辺さんにお伺いしました。

渡辺さんは回路設計エンジニアでありながら、趣味でもうすぐ50年になるオーディオに関する幅広い知見がある方で、オーディオ機器や電子楽器の開発者に対して様々な知見を提供してこられました。

ハイルドライバー方式(Heil Driver)で独自開発

D-CLUEが2017年に開発したこのスピーカーは、弊社に参画する前の当時の渡辺さんが、当時国内メーカが採用していなかったハイルドライバー方式として独自開発していたツイータを、D-CLUEが当時の自治体ベンチャー補助金を得ながら、共同でスピーカーに仕立てたものです。

DCT渡辺さん

D-CLUEオリジナル ハイレゾスピーカーの特長

音量や生産効率を重視した当時主流のコーン型を採用したスピ―カーと違いハイルドライバー方式を採用した本スピーカには以下のような特長があります。

  • 一般的なスピーカーにみられるお椀のような振動子(音の発生源)とちがい、薄くて軽いフィルムを蛇腹状にした特殊な振動子をマウントしています。
  • 打楽器の音抜けが良く、中高域の立ち上がりも素早い。例えばバイオリンのような弦楽器や鳥のさえずりなど繊細かつリアルな音源をくっきりと鮮明に再現します。
  • 平面波という、中高音域の音が均一遠くまで同じように出せるという特長があります。均一で減衰の少ない再生音が、演奏の奥行き感と臨場感をもたらし、可聴位置を選ばない360度立体音場再生を可能にします。

ハイレゾはさらに心身をリラックスさせる効果もあるそうで、大学研究機関と一緒に当社のスピーカーを使って検証実験も行われたそうです。

ツイータ部。スリット内に蛇腹状のハイルドライバー型振動子が見える

大手オーディオメーカー視聴会での評価

「先ず音を聞くと打楽器のリアルさに誰もが一番気が付くと思います」と語ってくれた渡辺さん。

私も実際に楽器演奏のハイレゾ音源を聞いてみました。ドラム音がクリアに耳に入ってきますし、弦楽器は力強く伸びがあります。打楽器・高音域が得意という渡辺さんの言う通りでした。雨上がりの山の自然音源に変えてみると、木の葉から滴る水滴のパラパラという音は打楽器のような粒立ち。小鳥の声は本当に頭上でさえずっているようで、音の素人の私でも強いリアル感、臨場感を感じました。

実際に当時の音響メーカー何社かに対し、実機のプレゼンテーションを行ったそうです。その担当者さん達の評価についても教えてくれました。

  •  バイオリンの音色の立ち上がりが良い。
  •  打楽器の音(と仕上がり)が素晴らしいです。
  •  ギターの高音が良く、スピーカー素材のカラレーションが良い。
  •  現在主流となっているツイーターの金属的な音がしない。
  •  素材の泣きのような音が一切しない。癖がなく素直に音が出ている
  •  スピーカーの素材感を感じさせない、自然な音がする。
  •  再生音の情報量がとても多い。

私も聞いてみて納得しましたが、その当時のオーディオのプロの方々の客観的な評価も素晴らしかったのですね。

仕様概要

本スピーカーの仕様概要をまとめました。

形式:2WAY シリンダー型バスレフ
中高音域:コンパクト型ハイルドライバー
低音域 :8cmコーン型ウーファー
出力音圧レベル:85dB/W (1m)
周波数帯域:70Hz~50KHz(-10dB)
クロスオーバー周波数:2KHz

弊社展示ルームにてリスニング可能

このほど渡辺さんに実機を調整いただいたあと、現在弊社の応接ルームに設置。再生デモをお楽しみいただけるようにしました。弊社にお越しの際はぜひお試しください。

 

bookmark_border駐車場の空きを教えるエッジAIを作る (その3~データセットの課題解決) 

こんにちは。

オープンソースを活用しながら、低コストでエッジ デバイスやさらに小さなIoT デバイスで使用できる小さな AI モデルを作成する、駐車場AI R&D チャレンジの3回目です。

作成したPOCには大きく3つの課題がありました。どのような対策を施し克服したのかご紹介します。

データ注釈の課題克服

まず、時間のかかるプロセスである、データ注釈(アノテーション)の課題解決です。

利用可能なオープンソースの注釈ツールはいくつかありますが、今回のPOCの目的「AI モデルのトレーニングに使用される”ビットマップ マスク イメージを生成する”」こと。この 要件に一致するものはありませんでしたので、私はPython で OpenCV API を使用し自ら注釈モデルを作成しました。

製作した注釈モデルアプリケーション

このアプリケーション製作は慣れていれば非常に簡単です。アプリケーションは 2 つのウィンドウで構成されています。 左側が入力画像、右側が出力マスクです。

ユーザーの作業は基本的に、

「車の位置にある左側の画像をクリック」する、

たったこれだけです。 これにより、右側のマスクが自動的に更新されます。

ちなみに同じ場所をもう一度クリックすると削除できます。キーコントロールで画像を保存、次の画像を選択、ポイント設定という流れでザクザクと設定を進められます。 (すべての画像が同じディレクトリにあると想定ですが)

簡単とはいえども、画像数が多いと当然ながら非常に時間がかかります。もっと楽をしたいので私は、手動で1,000 枚の画像に注釈を付けた後で、その注釈付きの画像を活用して注釈付けAIのトレーニングと AI モデルを作成しました。

このトレーニング済みの AI モデルを使用して、残りの画像に注釈を付け作業を簡略化できました。

そもそもの元画像にミスが多かったせいで、手動で手直しも発生しましたが、とはいえゼロから画像に注釈を付けるよりもはるかに高速で処理できました。

AIモデルの課題克服

次に、注釈モデルアプリの中のAIモデルですが、IoT環境で使うため、プログラムサイズの軽量化が必要です。

注釈モデルアプリの処理の流れ

私の製作した注釈モデルアプリのAI モデル(上図中央)は以下の 2 つの部分で構成されています。

  • 前工程:事前学習された Mobilenet バックボーン (モデルの一部のみ)
  • 後工程:カスタム FCNN (完全畳み込みネットワーク)

学習データ セットが小さかったため、私はこのアプローチを採用しました。 本AI モデルでは、小さなカスタム FCNN セクションのみがトレーニングされますので効率的です。 前工程のMobilenet は事前にトレーニングされているため、画像内の多くの低レベルの特徴を検出できます。後工程の カスタム FCNN のほうは、前工程のMobilenetの検出後画像をさらにフィルタリングし、車のみが検出できるようにしました。この結果私の製作した AI モデルのプログラムサイズは、float32 パラメーターでは約 6 メガバイトでしたが、(パフォーマンスは 1 パーセント (0.3%) ほど低下したものの)量子化 (int8) によって 4 分の 1 (2.5 メガバイト)にまで縮小できました。

データの増強とデータセットの制限の克服

次に、データセットの問題です。

前回2回目のブログで私は、駐車場画像のデータセットに偏りがあると、駐車場監視AIモデルの学習がうまく進まないこと、駐車場においては主に7つのデータセットの課題があるとお伝えしました。

そこで私は駐車場データの増強やデータセットの制限を克服するために、以下のようなアプローチを試みました。

1. データサンプリング

データ分析において、データセットの中から有意な情報を得るため、データの一部を抽出することをサンプリングと言います。また、ヒストグラムの棒のことを英語ではbinビン)と言いますが、ある抽出データがどのビンに属するのかの定義を決めていきます。

まず、駐車場の画像データを、ビン(bin)に配置します。

駐車場の場合は駐車台数がキーになります。たとえば、車が 0 台の画像用のビンが 1 つ、車が 1 台しかない画像用のビンが 1 つなどと決めていきます。駐車場AIデータのトレーニング中は、これらのビンに配置した画像をランダムに選択しAIに答えさせていきます。

さて、昼と夕方では明るさが違うので、AIにより賢くなってもらうには、これらの状態でのサンプリングも必要になります。そこで私はビンをさらに 駐車台数 ✖ 画像の明るさレベル (平均)、明るい、中間、暗いへと分けました。
こうして(影や車の色の違い <明るい白から黒まで>も存在するため、これだけですべての問題が解決するわけではありませんが)様々な明るさ✖台数の駐車場データを設けることで、トレーニング データをより均等に分散させて、トレーニング中のバイアスを減らすことがAIにより賢くなってもらうために必要です。

2. ランダム化によるデータ増強

特定の駐車台数、特定の明るさのデータが十分にない区間も存在します。こうしたトレーニングデータのバイアスを補い均質化する技術としてランダムパッチがあります。

画像の一部分にランダムなパッチを当てて、ふたをします。こうすると、画像内の車の数が変化しますので、違う台数条件のデータを学習させることができます。

ランダム化には他にも方法がありますが、今回のデータの課題の特性を見ながら、ランダムな明るさの変化と、ランダムなコントラスト変更 (ぼかし、シャープ化)も必要と感じ実施しました。

3. ミラーリング

データ増強の方法にミラーリングというものがあります。画像をランダムな角度に水平方向に反転させ、鏡映しのような画像をつくるのですが、私は今回これも用いてみました。

結果

AIモデルのトレーニングには、過学習(オーバーフィッティング)を減らし、バランスの良い学習でAI モデルの堅牢性を向上させる必要がありますが、以上のアプローチの実施後、現時点のデータセットでのAIモデルの認識パフォーマンスは 99% 以上をマークすることができました。

今後の展開

今回のAI モデルは、FCNN (完全な畳み込みネットワーク) と組み合わせた MobileNet バックボーンを使用しましたが、プログラムサイズがまだかなり大きくて、約 2.5 メガバイトでした。 (ただしARM M7 Cortex で MobileNet モデルを実行することは可能です)

プログラムサイズに関しては、Mobilenet バックボーンの削除+完全にカスタム化された AI モデルの作成を行うこと、そしてNeural Architecture Search(NAS)を使ってニューラルネットワークの構造自体を最適化すれば1 メガバイト未満のモデルも構築できると想定しています。

それより重い課題は主な課題はトレーニング データです。 現在のデータセットはおそらく小さすぎて、AI モデルをゼロからトレーニングできません。費用と時間がそれなりにかけて、より多くのデータを収集していく方法は当然ありますが、予算や時間が限られる研究者も大勢いると思います。

だからこそ、私はより高度な AI モデルを使用してトレーニングデータを合成する方法で解決できる可能性に期待しています。大規模なジェネレーティブ AI モデルがトレーニング用データを合成し、その合成データを、今度はIoT やエッジ デバイスで動作する AI モデルのトレーニングに使用するプロセスです。

”合成データは AI データの未来である”

大きなAIがエッジAIのトレーニングをサポートすることが当たり前の世界に1歩でも近づけていきたい。私はこのように強く思っています。

次は、他のエッジAI開発事例についても、お話しできればと思います。

bookmark_border駐車場の空きを教えるエッジAIを作る
(その2~AIモデルおよびデータセットの課題) 

エッジ デバイスやさらに小さなIoT デバイスで使用できる小さな AI モデルを作成する、駐車場AI R&D チャレンジの2回目です。オープンソースを活用しながら低コストでの開発をしています。

今回はそうしたエッヂAI開発でありがちな、乗り越えなければならない課題をお話します。

AI モデルのサイズとパフォーマンス

オープンソースのオブジェクト検出 AI モデルはたくさんあります。 なかでも有名なのはYolo(You only look once) です。 こうしたオープンソースの検出モデルは、多くの研究データ セットで高いスコアを達成する素晴らしいものです。

人や車を検出する、オープンソースのオブジェクト検出AI

ただ、小さなオブジェクトやオブジェクトが密集しているケースなどでは、検出パフォーマンスが低下する傾向があります。加えて、CPUを集中的に使用し、GPU をサポートしないようなエッジ デバイスやIoTデバイスでは、画像のフレーム レートは遅くなるので、さらにパフォーマンスに影響を与えます。

Yoloモデルのサイズは、数百メガバイトから 5 ~ 10 メガバイトまでさまざまあるのですが、 最適化されたモデルが小さいほど、パフォーマンスが低下しますので、今回のエッジAI開発のような、メモリの小さな環境ではかなり厳しい想定はありました。

とはいえ、今回の目的はそうした環境下でも「画像内の 1 つ以上のオブジェクトタイプを検出できる AI モデルを作成すること」です。

もしCPU のみのエッジ デバイスで 5 以上のフレーム レートで機能するAIモデルが実現できれば、さらに難度の高いAI/IoT デバイスでもAIモデルが実行できる可能性がありますのでやる価値はあります。

私は今回のAI モデルのサイズの目標を、エッジ デバイスの場合は 2 Mb 以下、さらに小さなAI/IoT デバイスの場合は 400kB 以下と置いて開発をすすめました。

データセットの注釈(アノテーション)

オリジナルデータ→ アノテーション記録 → イメージマスク出力(AI学習後)

AIモデルの実行環境と同じくらい重要なのが、データセットの注釈(アノテーション)です。

有料のアノテーション済の学習データ(教師データ)は便利ですがご存じの通り高価ですので、今回は無料で扱えるKaggleのデータベースを使うことにしました。

Kaggleのデータセットのデータは4000ほどありましたが、アノテーションが付いておりません。

付けなければなりませんが、人によるアノテーションはお察しの通り途方もない作業で、開発者が自ら行うのは無理があります。そこで、前述の著名な物体検出 AI モデルの「 Yolo」 で車を認識させアノテーションを自動設定しようと試みました。

 ところが、これがうまくいかないのです。

私の感覚ですと、どうもこの「Yolo」はおおまかに1画像に移っている車の数の20%~40%程度しか車を認識しませんでした。

 なぜか。

どうやら映像内で並んでいる車のサイズが小さすぎて、前述した「小さなオブジェクトやオブジェクトが密集しているケース」に相当してしまいYoloが認識できないのが原因のようでした。

結論として今回Yoloが使えないことが分かったので、もう自作しかないと思った私は、映像内の車の位置を記録するアプリケーションをカスタム製作することにしました。

詳細はまた機会があればご紹介しますが、このアプリがうまく各車の位置をアノテーション記録してくれたので、AIモデル学習、その後のAIモデルのイメージ マスク出力までできるようになりました。

データセットのバランス

データ セットの課題はもう1つあります。それはデータセットのバランスです。

データセットのバランスとは、極端に似たデータばっかりセット内に存在するとか、逆にあまり存在しないデータがあるといった不均衡、不均一なデータであることで、そのままAIが学習するとAIモデルの性能評価に偏りが生じる可能性があります。

今回の駐車場のデータセットでもいろいろとありましたが、まとめるとこんな感じです。

  1. 気象条件による明るさの変動
  2. 影による画像の明るさの変化
  3. 明るい日差しの中で白い車
  4. 暗い場所の黒い車
  5. 植物の問題
  6. データセット大きな偏り
  7. 一部の車種の形状

以下簡単にご説明いたします。

1.気象条件による明るさの変動

これは、霧がかかった冬の日から、明るい夏の日までさまざまな状態があります。こうした季節や気象の変化で駐車場の映像の明るさも刻々と変化します。この変動はAIモデル学習に影響を与えます。

2.影による画像の明るさの変化

また、1日の時間帯の条件も難しい時があります。朝から夕方までの太陽の位置で周囲の明るさ自体が変わります。また特に朝夕などで太陽の位置が傾いているときの映像データですと、出来る影が車の周囲に発生をして、これが邪魔をしてAIモデルが車を見分けにくくなることがあります。

日なたと日かげのある条件

3.明るい日差しの中で白い車

たとえば、明るい朝の日差しの中に白い車があるような状況です。こうなると周囲の明るさに車が埋没するので、カメラ センサーが飽和状態になり、車の特徴が見分けにくくなります。

明るいと白い車が飽和しがち

4.暗い場所の黒い車

これは前述の逆パターンで、薄暗くなった夕方になって駐車場へやってきた黒い車は、車とその周囲の明るさが似ていてAIが認識しにくい、という問題を引き起こします。

夕方の黒い車

5.樹木の問題

これもよく問題になります。この駐車場データの右下にある車は、その前にある木々の枝が茂っており、部分的に遮られています。落葉樹ですと冬には葉がありませんが、夏には葉がもっと茂るので、認識率もさらに変わってくることになります。

(右下)木の葉が多い茂っている

6.データセットの大きな偏り

この重要度は前述しましたが、駐車場の映像でのデータセットの偏りとは、なんだかわかりますか?

実は「駐車台数」です。

実際に学習用に入手できた駐車場画像は0~3台ほどが停車しているものが大半で、Kaggleでは4台~というものがほとんどなかったのです。ですので、このまま学習をすすめると、学習に大きな偏りが生じる、という問題を発生させます。

7.一部の車種の形状

こちらも前述いたしましたが、車の形状が大きく違う場合、認識率が落ちることがあります。たとえば、RVやセダンなどが多い国の映像を中心に学習していると、たまに停めに来る大型トラックなどを車と認識しない、ということが起きます。

以上、オープンソースを活用しながら低コストでエッジAI開発をするときの、AI モデルのサイズとパフォーマンス、そして駐車場データセットの課題についてまとめてみました。

いかがでしょうか。皆様の開発の参考になると嬉しいです。

次回は、これらの課題克服のポイントなどについてお伝えしようと思います。

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の順番であると勝手に考えていて、実際に動作させたとき少し焦りました。。。

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

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

〇ユキグマ〇

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

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

では実際にハードウェアをつなげてみましょう。

ハードウェア接続

購入したセンサには付属のケーブルがついているのですが、コネクタの受け側が手元にないので、ケーブルの片側を切断し、Arduinoに接続できるように改造します!

センサをGROVEのコネクタにはんだ付けしてGROVE-ベースシールドにつなげようと思ったのですが、Arduino用だけではもったいないのでピンヘッダにはんだ付けしました。

久しぶりのはんだ付けで時間かかったのと、きれいにできなかったのは反省です。。

はんだ付けは、勘がにぶらないように定期的に練習しないとだめですね。頑張ります!

GROVE ケーブル

 https://www.switch-science.com/catalog/798/

・GROVE – ベースシールド

 https://www.switch-science.com/catalog/1293/

というわけで、以下の図のように実際に接続しました!

!! ご注意 !!

付属のケーブルの色がすべて同じ色で区別がつかないので、コネクタ切断前に各線を間違えないよう、シールをはっておいて正解でした。貼っておかないとケーブルがまとまっているのもありどこにつながっているのか判別が難しいので、製作の参考にしてください。

以上でハードウェアの準備が完了です。

次はいよいよプログラム実装をしていきます!

このブログを書いている人:

〇ユキグマ〇

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