SSDでひなまつりバージョンのチロルチョコが検知できるか試してみた(Pythonで作るプログラム#2)

2020年9月1日

もうすぐ、ひなまつりですね。

ということで、今日はSSD(物体検知ができるAIプログラム)でひなまつりバージョンのチロルチョコが検知できるか試してみました。

SSDって何?って言う人は前回の記事を参考にしてください。

今回の検知対象

今回SSDで検知させるのは、ひなまつバージョンのチロルチョコです。

家の近くのトライアルという激安スーパーで、269円(税抜き)で買いました。1箱に20個入ってます。しかも、お内裏様とお雛様はちょっと大きいビスケット入りのタイプです。この時期限定ですかね。

値段269円(税抜き)
数量20個入り
味の種類・ビス
・ふんわりピーチ
・いちごバニラ

早速、ひな壇を組み立てて、おひなさまチロルをのせてみました。

あれ!!!

5人ばやし(一番最下段)は飾れないじゃないですか。紙ですよ。存在感、薄いっす。たぶん、スペースの関係で置けないとのご判断だったのでしょう。チロルチョコ(株)さんのお気持ち、お察しします。

でも、さすがに5人衆のチョコは全種類入ってますよね・・・

太鼓が4人で、鼓が3人で笛が2人で、小鼓が1人で・・・あれ、1人いない。

扇もった人がいないですよ、チロルさん!

太鼓の人そんなにいらないっすよ・・・ガックシ。

分かってますよ。確率の問題ですよね。おとなの事情ってやつですね。

まあ、とりあえずいる人たちで検知できるか試すことにします。

それでは、おひなさまたちを学習させてみましょう。うまく認識してくれるかな。

学習条件

今回の学習は以下の条件で実施しています。なお、学習に使用したパソコンのスペックは前回記事を参考にしてください。

画像数347枚
アノテーションデータ作成時間約60分
学習回数3000回
転移学習あり(base:VGG16)
学習時間30~40分

表中にアノテーションデータ作成時間とありますが、アノテーションデータとは物体の位置情報をXMLファイル形式で作成する作業になります。この辺も、気になる人には気になると思います。話せば長くなるので、また別の機会にお話ししたいと思います。

学習結果

学習結果を以下に示します。

3000回の繰り返し学習を行い、loss(これが小さい方が精度が良い)は約1.5くらい。できれば、1.0を切りたい所ですが、これでも十分おひなさまを検知できました。学習率を変えて、1万回くらい計算するともう少しlossは下がるかもしれません。ちなみに、lossが低いモデルの方が推論時に計算負荷が小さくなる(推論に要する時間が短くて済む)のでリアルタイム推論するなら、なるべくlossの小さいモデルを作るのが良いと思います。

基本的に、学習させる際は、何をどのような状況で検知させたいかを明確にしておく必要があります。なぜなら、精度の高いモデルを作るために、どんな画像を学習させれば良いのかが分からないですからです。

例えば、ひな壇にのった状態で各人を高い精度で識別させたいなら、ひな壇にのった状態の画像を学習させるのがもっとも精度が高いモデルが作成できます。また、複数人を同時に精度よく識別したいなら、複数人が映った画像でアノテーションデータを作成して学習させるのが効果的です。

また、画像の枚数よりもバリエーションが多い方が良いです。ここで言うバリエーションとは背景も含めた物体が映っている様子のことです。通常Deep Learningで学習させる際は、CNN(Convolutional Neural Network)を用いて画像の特徴量を抽出しフィルターを作成します。この作成したフィルターの中には物体の特徴を捉えたもの以外に、背景の特徴を捉えたものも含まれています。フィルターがどのような特徴をその物体の特徴としているのかにもよりますが、経験上、認識精度を上げるには背景も重要性だと感じています。つまり、物体と背景はセットで考えるべきだと思います。色々な背景、角度、縮尺の画像で学習させた方が精度の良いモデル(外乱に強いモデル)が作れると思います。

検知結果

ひな壇にのった状態とテーブルに置いた状態の2パターンで確認しました。

まずは以下の画像をご覧ください。

ひな壇にのった状態で検知
テーブルの上で検知

ひな壇にのったチロルチョコも、テーブルに置いたチロルチョコも、お内裏様とかお雛様とかちゃんと識別して検知してることが確認できます。

お内裏様は緑色の枠で検知し、お雛様は紫色の枠で検知し、それ以外の人は水色の枠で検知しています。枠の上に表示されている文字は、各チロルチョコの識別名(例:odairisama)と認識率(例:1.00 = 100%)を表示しています。

また、左側のウィンドウには、上から順に、分類数(識別している数)、総数(全員の数)、識別した人が何人いるか(例:odairisama は 1人)、何列目にいるか(一番上の[ ]に表示された人は最上段、二番目の[ ]に表示された人は二段目 等)を表しています。

右上のウィンドウには判定表示(お内裏様が認識されたらOK表示)、右下は検知したチロルチョコの合計金額(お内裏様とお雛様は各20円とし、それ以外の人は各10円で計算)を表示させています。

検知の様子(動画)

SSDでひなまつりチロルチョコを検知してみた

お内裏様とお雛様を追加して、3人のはやし達(太鼓、鼓、笛)も追加してみました。

うん。ちゃんと検知してますね。いい感じです。

まとめ

今日は、SSDを使っておひなさまチロルチョコを検知できるか試してみました。

結果:チロルチョコでも全然できる。

ぶっちゃけ、たぶん何でもできると思います。やはり、認識や検知のポイントはどう学習させるかですね。ここが一番のノウハウだと思います。今後も色々試して、何か分かったらどんどんノウハウを書いて行きたいと思います。

この技術、マジで何かに使えないかな。なんかもっといいことに使えそうなんだけど。