我々ハートランド・データが取り組んでいるのはテストツールだけではありません。
元々はシステム開発をメインとしていた会社であり、
いまも各種IoTソリューションや、それらを使ったシステム開発の受託を取り扱っています。
そんなソリューションのひとつに、
小型なのに1080pの高解像度で撮影できるカメラモジュール “CM0002”
があるのですが、
ちかごろ、このカメラモジュールにこんな(↓)ご要望をもったお客さまがいらっしゃいました。
「カメラモジュールの映像から得られる情報だけが欲しくて、でも映像はいらないんです。」
え?カメラなのに映像いらないんですか?その心は?
「プライバシーを重視する顧客も増えているので。」
なるほど、確かに。
そこで、考えました。この要求を実現するためにはどうすればよいのか。
小型というところは崩さず、情報だけを取り出すカメラ。そんなカメラがあればさぞ便利でしょう。
そうだ、AIのせよう。
ということでAIカメラを作ってみました。
今回はAIカメラソリューションの開発の様子をご紹介しつつ、
AI学習とはどういうものか、についてお届けします。
CONTENTS
AIとは
はやってますよね、AI。
何かにつけて目にする言葉ですが、ずばり、AIとは何ですか、と聞かれると
「じ…人工知能…。なんか、あたまのいいやつ…。」
みたいな答えになってしまいがちです。
そこで、AIとはどんなものか、一度知識を整理してみました。
AIとは、Artificial Intelligence(人工知能)の略です。
機械による人間の知能のシミュレーション、ひらたく言うなら、
「あるデータと目的を与えたときに、まるで人間のような思考と判断ができる機械」といえるでしょう。
実際にAIを構築するには、大雑把に分けて2つの工程が必要です。
・機械に「学ぶ」機能を与え、学習させる
・学習をベースとして、各種問い合わせに対する適切な回答を導き出せるようにする
精度のよいAIを作り上げるためには、とにかく大量のデータを機会に読み込ませる「学習」が重要になります。
また、ひとくちにAIといっても、学習したデータから結論を導く方式によっていくつか種類分けされています。
たとえば↓
・事例ベース推論:類似している過去の事例をベースに結論を導くもの
・ベイジアン・ネットワーク:振る舞いに基づいて結論を導くもの
・ニューラルネットワーク:データを解析して得られた一定のパターンから結論を導くもの
・ファジィ制御:ファジィ集合(曖昧さを許容する集合)を利用した計算で結論を導くもの
など等。
AIを利用する目的に向いているものを使うことが大切です。
AIカメラ、かんがえてみよう
まずは、世の中にどのようなAIカメラが存在するのかを調査しました。
今回の要件では、「小型であり映像がモジュール外に出ない」ことが必要です。
しかし、世の中にAIカメラはいくつかあれど、
それらの多くは、カメラで撮影した映像を解析マシンに送ってAI解析を行なう構成になっていました。
最低限の機能がカメラ側にて動作するものは有りますが、PCなどに映像を送って演算処理していることが多い印象で、
カメラ単体にて完結するものはほぼ存在していない事が分かりました。
そこで、これらのハードルを解決するために
「低コストで、かつ単体でAI処理ができるカメラモジュール」
の開発を始めることにしました。
まずは、作るAIの種類を定める必要がありますが、そのためにはAIの利用目的が明確になっている必要があります。
AIって、学習のさせ方次第では何でも実現できてしまうので、
目的が定まっていないと、どのようなAIを使ってどのような学習をさせるのか、ひたすら迷うことになります。
今回の開発では、いまの世の中でより必要とされているであろう事項のひとつ「混雑具合」に着目。
AIで人を検知して、
人数をカウントし、
混雑状況のデータだけを出力できる
そんなカメラモジュールを開発することにしました。
目的が「人間の検知とカウント」に定まったので、使用するAIの種類も決まってきます。
今回は特定のパターン(映っている物のシルエット)から結論(人間であるか否か)を導けばよいので、
カメラモジュール上にニューラルネットワークAIをビルドインして学習させていきます。
AIカメラ、つくってみよう
さて、ここまでは構築するAIシステムの仕様を考える過程をご紹介しました。
ここからは、どうやって実際に動くAIカメラを仕立てたのかについて、3つの要点に分けてご紹介します。
AIフレームワークの導入
まずは、ベースとなるAIフレームワークが必要です。
AIフレームワークとは、機械に学ぶ機能を与えるためのプログラムです。
AIフレームワークは数多くありますが、導入したいAIの種類によってそれぞれ異なります。
今回の試作で必要になるのは、前述の通り
「人型」や「人の頭」のような物体をパターン識別をするための
ニューラルネットワークAI
でした。
ニューラルネットフレームワークには
「Caffe」や「Darknet YOLO」
などがありますが、
今回は導入が容易なDarknet YOLOを使うことにしました。
データセットとアノテーション
AIフレームワークを導入したら、次はAIに学習をさせます。
AIに学習させるためのデータのまとまりを「データセット」と呼びます。
データセットは目的に応じたもの(例えば、人間の検出が目的なら人間が映った画像)を収集する必要があります。
また、無料で使用できるオープンデータセットなども提供されています。
今回の試作は人の検出なので、もちろん人や人の頭が映った画像のデータセットが必要です。
そこで、最初は「人」や「頭」のオープンデータセットを使って人の検知をさせてみました。
しかし、使用したオープンデータセットは写真の枚数が少なく、
理想とする精度で人間を検出するためには、さらに大量のデータが必要なことが分かってきました。
そこで、オリジナルのデータセットを作成することにしました。
社内の皆さんの手、いえ、体をお借しいただいて、立っていたり歩き回ったりしているところを録画!
録画データのすべてを画像化して、画像に映っている人間や頭の位置をマーキングするのですが、
このマーキングの作業を
アノテーション
と言います。
データを1枚ずつ丁寧にアノテーションすることで、より有用なデータセットを作成できるのです。
その枚数、ざっと3万2千枚。
アノテーションって、大変なんです・・・。
学習とモデル作成
続いて、準備したデータセットを学習させて「モデル」を作っていきます。
モデルとは、すなわちAIの知能になる部分です。
モデルの作成にはPCを使用します。
各AIフレームワークにはモデル作成のためのフレームワークコマンドがあり、
PCからそのコマンドを実行することで、データセットを何回も何回もAIフレームワークに読み込ませます。
今回の学習では、作成したデータセットの画像3万2千枚を、なんと50万回まで読み込ませました!
本当に膨大なデータを読みこませるため、使用するPCには、それなりのスペックが求められます。
この学習で使用したPCのスペックはCPU:i9、GPU:RTX 3070。
かかった時間はなんと約3日!
学習って、大変なんです・・・。
しかしその甲斐あって、理想の「モデル」が完成しました!
AIカメラ、うごかしてみよう
さあ、モデルが完成したら、いよいよAIに読み込ませます。
といっても、ここでやることは簡単。
完成したモデルをSDカードなどでカメラモジュール内部へ配置。
AIフレームワークにモデルを配置した場所を指定してあげると・・・
動きました!
人と頭の検知もしっかり出来ていて、人数のカウントもほぼ間違えることのない数字が出ています!
AIカメラの試作、成功です。
まとめ
さて、今回はAIカメラの構築の過程をご紹介いたしました。
いかがでしたか。
このようなAIがビルドインされたカメラモジュールによって、
人数カウントの用途に限らず、カメラで撮った映像を人がチェックして判断するようなことは、いらなくなります。
しかも単独で動作するので場所を選ばず設置でき、
製造ラインの部品確認とか、顔認識とか、マスク有り無しの確認なんてこともできるでしょう。
撮った映像を誰かが見ることもないので、プライバシーもしっかり確保。
AIと聞くと、小難しそうだったり大変そうだったり、様々だと思いますが、
これからAIを始める方のご参考になれば幸いです。
また、今回ご紹介したAIカメラは、なんと10月末に幕張メッセで開催されるESEC秋で展示予定!
実際に動いているところをご確認いただけます!
ご興味ある方、ぜひハートランド・データのブースまでお越しください。
AIともども、ご来訪をお待ちしています。