【受付時間】 10:00〜18:00(土日祝日を除く)
【受付時間】 10:00〜18:00
(土日祝日を除く)
本記事では、SynSense社が開発しているAIチップ付きイベントカメラ、Speck™について解説していきます。
これは、人間でいうところの「目」にあたるイベントカメラと、「脳」にあたるAI推論チップを、1つのチップにまとめたカメラになります。
今回はまず、脳がどうやってものを見ているのかというところから、その仕組みを模したスパイキングCNNについて解説し、Speckの特徴を紹介した後、実際にキットを動かしてジェスチャー認識を行ってみます。
通常のカメラで写真を撮ると、画面全体の明るさが1枚の画像として記録されます。一方で、私たちの目はそういう見方をしていません。
網膜から脳へ伸びる神経の本数は、光を受け取る細胞の数よりずっと少なく、すべての点の明るさをそのまま送っていては間に合いません。そこで網膜は、「さっきと比べて明るくなった/暗くなった」という変化を検出し、変化があった場所からだけ信号を送り出しています。
さらにその信号は、映像データのような連続的な数値ではなく、スパイク(発火)と呼ばれる短いパルスの列です。脳は常に全力で計算を回さずに、「入力が来た部分だけが、来たタイミングで働く」という仕組みによって、「少ないエネルギーで視覚処理をこなしています。

「この網膜の仕組みをセンサーにしたものがイベントカメラです。
普通のカメラが一定の間隔で画面全体を丸ごと撮影するのに対して、イベントカメラは画素(ピクセル)ごとに独立して「明るさが変化した瞬間」を記録します。この1つ1つのデータをイベントと呼び、人間の網膜をヒントにしていることからニューロモーフィック(神経模倣型)センサーとも呼ばれます。
「変化した画素しか扱わないため、通常のカメラにない次の特長が生まれます。
※ イベントカメラそのものについては、iniVation社のイベントカメラを扱った記事でも解説しています。あわせてご覧ください。
画像認識でよく使われるCNN(Convolutional Neural Network、畳み込みニューラルネットワーク)は、RGB画像のように「全画素が値で埋まった1枚のフレーム」をまとめて計算するネットワークです。
しかしイベントカメラの出力は、変化があった場所だけがポツポツと点在する疎(スパース)なデータです。これをCNNで扱うには、イベントを一定時間溜めて1枚のフレームに変換し、ほぼ何も写っていない画像に対して全画素分の計算を回すことになります。
そこで登場するのが、スパイキングCNN(SNN)です。
「スパイキングCNNは、脳のニューロンと同じ動き方をします。イベント(スパイク)が1つ届くと、影響する範囲のニューロンだけが内部の膜電位を更新し、しきい値を超えたニューロンだけが次の層へスパイクを送ります。イベントが来なければ、計算は起こりません。
さらに、ニューロンが膜電位を保持し続けるため、直前までの入力の履歴が自然に状態として蓄積され、時間的な変化を扱うことができます。これによってジェスチャーのような「時間方向に意味がある入力」を理解することができます。

| 項目 | 通常のCNN(GPU / NPU) | スパイキングCNN(Speck DYNAP-CNN) |
|---|---|---|
| 入力 | フレーム・テンソル | 非同期イベント |
| 計算契機 | フレーム単位・レイヤー単位 | イベントが到着した瞬間 |
| ニューロン状態 | 推論ごとに計算し直す | 膜電位を継続保持 |
| 時間の表現 | 複数フレームを明示的に入力 | ニューロン状態に自然に蓄積 |
| 消費電力 | 比較的大きい | 常時監視向けの極低電力 |
「SynSense社のSpeckは、ここまで説明してきた「網膜を模したイベントカメラ(DVS)」と「脳を模したスパイキングCNNプロセッサ(DYNAP-CNN)」を1つのチップに統合した、センサ・演算統合型のニューロモーフィック・ビジョンSoCです。

主な仕様は以下の通りです。
SpeckのSoC基盤自体に認識結果用の出力ピンがあるため、直接画像を取得することなく、認識結果を得ることができます。これはプライバシーや消費電力を気にするような環境での活用に適しています。
それでは、実際にSpeck Dev Kitを動かしてみます。
キットにはカメラ+SoC本体、通常レンズ、魚眼レンズ、PC接続用のケーブルが含まれています。SoC本体にレンズを取り付け、ケーブルでPCとつなぐだけで準備は完了です(本記事ではUbuntu 24.04を使用しています)。

Speckを動かすためのソフトは以下のものを使用します。
https://github.com/nanoxeed/speck-quickstart
デバイス設定やパッケージインストールなど細かいセットアップ手順は、リポジトリのREADMEおよびクイックガイドをご確認ください。
まずは、SpeckのDVSが捉えた映像をそのまま表示してみます。ターミナル上で以下を実行します。

この状態で、カメラの前で手を振ったり、止めたりしてみてください。手を動かしたときだけ赤と緑の点が現れ、止めると消えることが確認できます。赤と緑はイベントの極性、つまり「明るくなった」「暗くなった」の違いを表しています。

次に学習済みのAIを用いたジェスチャー認識を行なってみます。既に用意されているジェスチャー認識モデルをSpeckに書き込んで、リアルタイムに認識します。

上記コマンドを実行すると、読み込みなどで少し時間が経った後に、ビューアが立ち上がり以下のような画面が表示されます。

画面の見方は次の通りです
カメラの前で手を振ってみると、右側の表示が「right hand wave」のように切り替わります。ここで使用しているモデルは、IBMのDVS Gestureデータセット(腕回し、拍手、左右の手振り、時計回り/反時計回りの回転、エアドラム、エアギターなど11クラス)で学習されたものです。(レンズの調整や立ち位置によっては認識されにくいことがあるので、その場合はピントと距離を調整してみてください)
そしてこの認識が、ホストPCのGPUではなくSpeckのチップ内部で実行されているという点に注目してください。PC側では、モデルを書き込むことと、出てきた結果を受け取って表示することのみ行なっています。
さらに、下段の消費電力グラフを見ながら手を動かしたり止めたりしてみてください。動きがない間と動かしたときとで、消費電力の出方が変わる様子が観察できます。2章で説明した「スパイクが来たときだけ計算する」というスパイキングCNNの性質が、消費電力という形で目に見えるかたちで現れます。
本記事では、脳と網膜がどのようにものを「見て」いるのかというところから、その仕組みを模したイベントカメラとスパイキングCNNについて解説し、その両方を1チップに統合したSynSense社のSpeckを実際に動かしてみました。
Speckの活用としては、ジェスチャーによるデバイスやゲームの操作、AR/VRでの視線・まばたきの検出、暗い場所や屋外の道路での人・車の検出といった、「「常に見張っていたいが、電力やプライバシーが気になる」場面での期待ができます。
この記事を読んで、このカメラ面白いなと感じていただけた方はぜひ下記リンクよりお問い合わせ下さい。
最後までお読み頂きありがとうございました。
製品に関するご相談、デモ機器、お見積・納期などに関して お気軽に問い合わせ下さい
※は入力必須項目となります。