組み込みAI入門ブログ(4) 「OIDv4を使って学習データの仕組みを見てみた」 ~低消費電力・小型FPGAで人検出AIを実装~

前回の記事で、Lattice社の人検出のリファレンスデザイン(Object Counting)で用いているニューラルネットワークモデルのトレーニングをおこなうためのLinux環境の構築をおこないました。


慣れないことをおこなったので早くもかなりHPが削られてきています…。

前々回ではLattice社のリファレンスデザインではGoogleのOpen Image Dataset V4(=OIDv4)が使用されていることが分かり、非常に便利そうだということまでは分かったのですが、Linux環境やPythonの実行環境がなかったため、ダウンロードのコマンド実行などができませんでした。しかしこれでやっと確認ができそうです早速やっていきます。

Open Image Dataset v4のダウンロード

まず、Open Image Dataset v4(以後OIDv4と表記)をダウンロードします。以下のコマンドでダウンロードするか直接Githubサイトからダウンロードできます。

 $ git clone https://github.com/EscVM/OIDv4_ToolKit.git

ダウンロードした中身を見てみるとmain.pyというpythonコードが入っており、これを実行することでトレーニングデータをダウンロードすることができるようです。

また、ダウンロードした中に含まれているrequirements.txtというテキストファイルには、OIDv4を使う上で必要になるライブラリーが記載されているようですので、これらのライブラリーもインストールします。

ただ、上記のうちopencv-pythonだけはconda installでインストールできませんでした。が、opencvがインストールされていれば問題なさそうなので、とりあえず進めます。

今回は人検出なので、"人"の学習データが必要になりますが、OIDv4では"Person"というクラスで定義されているようです。Personクラスの学習データを入手するには以下のようにmain.pyを実行することで入手できるようです。

コマンドを実行すると途中で何度かYes or Noの選択を求められますが、すべてYesで進めます。

ダウンロードが開始され、しばらくするとダウンロードが完了しました。Totalのダウンロード容量としては2.1GB程度あってダウンロードに結構時間がかかり、Intel Corei7・ メモリー16GB搭載のパソコンを使用したのですが、私の環境ではダウンロード完了するまで大体30分ほどかかりました。

ダウンロードした学習データは以下のようなフォルダー構成で保存されました。

jpgファイル(学習用画像)とtxtファイル(ラベル)との関係

PersonフォルダーとLabelフォルダーにはたくさんのjpgファイルとtxtファイルがダウンロードされました。今回の場合、それぞれ6436個のデータがダウンロードされた形です。jpgファイル名と同名のtxtファイルが格納されています。

1つピックアップして中身を見てみます。まずはjpgファイルの方を開くと男性が二人並んでいる写真になっています。

一方このjpgファイルと同名のtxtファイルを開くとこんな内容になっています。

jpg画像に対して、上記の座標情報を矩形として重ねると以下の通り。人が存在する座標情報を示していることが分かりますね。

このように検出したい対象の物体と、その物体の座標情報が記載されているtxtファイルと、これと同名の画像データ(jpgファイル)のペアを大量に使って、ニューラルネットワークモデルの学習処理を実行していくわけですね。学習のもとになる画像のようなデータに対して、写っている物体の種類やその座標などの情報を紐づけていくことを「アノテーションする」というようです。

これだけの大量のデータに対するアノテーションを自分で手作業で行っていくのは非常に大変ですが、あらかじめこのようにアノテーション済みのデータがあれば、かなり作業効率が上がりますね。そもそもデータ自体を集めるのも結構大変だと思いますので、非常に便利です。

また、今回は人(Person)のデータを使っていますが、他にも、よくありそうなCat、Dog、Carなどから、ice cream、Beer、Dinosaurなどまで、Open Image Dataset V4としては全部で600もの物体の種類が用意されているようです。データセットを差し替えればいろいろな物体の検出にも対応できそうです。

しかし、学習データの仕組みは分かりましたが、どのようなニューラルネットワークを用意すれば人検出のようなことができるのでしょうか?次回はLattice社が用意しているトレーニング用のPythonコードなどを見ながら、ニューラルネットワークモデルとはどういうものなのか?調べていきたいと思います。

お問い合わせ

評価ボードやサンプルデザインに関する不明点や、本ブログで扱ってほしい内容などありましたらお気軽にお問い合わせください!

AI関連情報