先端技術研究会2019④

先端技術研究会4回目に行ってきました。
早いもので全6回の研究会も折り返し地点です。

…が、最近めっきり寒くなったせいか、風邪により6名ダウン。
かくいう筆者も地味に絶賛体調不良中!皆様季節の変わり目には気を付けください。ご自愛を。(´;ω;`)

今回は、神情協こと神奈川県情報サービス産業協会の技術委員会会長、山口さんがいらっしゃいました。
毎年、技術委員会にてアプリケーションコンテストが主催されており
是非ここで学んだ事を活かして次回は参加してみてはどうかとの事。
今回作成したアプリで無謀にもエントリーしている筆者は、コンテストのお話などを興味深くお聞かせ頂きました。
そこまでお堅いというワケでもなく、皆さんが研鑽した技術を発表するだけでなく
毎年ユニークなアイデアがあったり、発表後は懇親会をしたりと楽しそうな雰囲気。
他社さんとの交流があるだけでも貴重ですね。折角なので楽しんで来たいと思います。(選考通れば。。。)

さて、前回長くなり割愛した部分も含めて紹介していきたいと思います。

今回「ペットは飼い主に似るか」をテーマにしたアプリを作成しています。
繰り返しになりますが、2つの画像を比較し信頼度(どれだけ同じと判断されるか)で類似度とします。
ザックリと動きを説明すると
① 飼い主の画像を読み込み学習させる
② ペットの画像を読み込み①と比較し、類似度を算出する
です。

比較対象である飼い主画像を学習させるのですが割と時間が掛かります…というか鈍足。
環境構築した時から薄々は気付いていたのですが、圧倒的にマシンスペックが足りないようです。

機械学習はGPUアクセラレータにかなり依存している様で、性能の8割以上(だったかな?)はそこで決まるらしいですが
そういう以前の問題で筆者のPCが最早限界。古い事もあり物理的にも劣化してるっぽいです。
AIとはなんぞや?から開始しようとしている身としてはTry & Errorでチマチマ進めたいのにそれも出来そうにありません。
このままでは筆者の寿命がストレスでマッハなのは確定的に明らか!

なので

Newパソコン購入しました。ヾ(*´∀`*)ノ

・OS
Windows 10 Home 64ビット
・CPU
AMD Ryzen 7 3700X プロセッサー ( 8コア / 16ス レッド / 3.6GHz / ブースト時最大4.4GHz / L3キャッ シュ32MB )
・メモリ
32GB メモリ [ 16GB×2 ( PC4-19200 / DDR4-2400 ) / デュアルチャネル ]
・SSD
256GB SSD ( M.2 SATA3 接続 )

今をときめくRyzenです。メモリも無駄に32G積み増した。(`・ω・´)コレで勝つる!

紆余曲折ありましたが、これで快適に実行できる環境は整ったので、いざ作成。

まず顔認証の方法ですが、第2回で紹介した通り顔推定器というものを使用します。
推定方式も色々用意されてます。
・Eigenface
・Fisherface
・Local Binary Patterns Histogram(LBPH)

正直どれがいいのか分からないのですが、今回は「Local Binary Patterns Histogram(LBPH)」を採用することにしました。

試行回数が少なくてなんとも言えないけど、あまり変化なかった。
実際問題どれが精度高くなるのかはもっと検証時間が必要そうです。
他の2つと比べ精度よく検出出来るらしいので、それを信じて今回はこちらを使うことにしました。

次に顔の認証についてはHaar-like特徴分類器と言うものを使用して認識させます。
この特徴分類器もスタンダードなものは提供されています。
自作も出来るみたいですが、精度を上げる為には膨大な画像を必要とするみたいです。
(正解画像7000枚、不正解画像3000枚程度)

★ 余談
実際、認証系アプリは、この特徴分類器の作成が9割の作業となるみたいで、ロジックはほぼオマケみたいな感じです。

アプリを作る手始めに、自分や動物の顔を認証するプログラムを組んでみたのですが
以外に嵌っていたのは「顔認証されていない」です。(根本的問題)

ペットの画像から、顔として認証した箇所を四角い枠で囲ってみたのですが・・・

・ネコとして認識されていない


・なぜか鼻がネコ…

たまに何もない空間に四角が出たり、見ちゃいけないものを捕らえたりもするので怖い。。。(見なかった事にしましょう)
夜、一人では遊ばないでください

上記の通り特徴分類器はOpenCVで提供されているカスケードファイルと言うものを使用しているのですが
目が丸い感じのネコは認識する傾向にあるっぽい(感想ですが)
角度などもあるのかもしれませんが、連射した際の2枚目みたいに
「何をしおった…?」的に警戒された顔は認識してくれないみたいです

人の場合も真正面からは認識できても側面を認識するには側面用の分類器が必要となります。
今回のアプリとしては人は正面から撮ればいいですが、ペットはじっとしていないので
ちゃんと認識する画像を用意する必要がありそう。
(´⌒`;)う~ん、今後の課題かなぁ。。。

ちなみに、先端技術研究会に参加の皆さんも同じようなところで嵌っていたようです。
全体的に多かったのは「そもそも対象画像として認識してくれない」という声でした。

ここら辺は「画像認証道における初心者あるある」とは研究会講師の方の談。
訓練用画像と比較画像とでグレースケール(またはカラー)に統一していない事が原因だった方が多かった様です。
(上記ネコの顔認証については二値に合わせてもダメでしたが)

他にも
・道路標識を認識するアプリで、反対車線の標識も認識してしまう
⇒道路標識は、画面を4分割した左上を認証の対象範囲とする。
(日本の車は左側通行、かつ標識は上側にあるので)

・ピースサインの指先を検出して指紋にモザイクをかけるアプリで、手のひらは認識するが指先が認識範囲外になる
⇒先に手を認識させ、そこから指を認識という流れでつくる。
また、手の画像を認証してジャンケンさせるアプリを立案した人がいたが、
画像から手を認識する事が割と難しかった為、予め手のみを写すような仕様にした。

など、色々なアドバイスを頂けました。
全部が全部をAI側に任せる必要はないと言うことですね。
なるほど、勉強になります。

といったところで頂いたアドバイスをアプリにも取り入れながら今回はこの辺で。

(´・ω・`)ノシ bye