概要
昨今、IoTで取得したデータをAIに活用する事例が見られてきたので、弊社でもその実現に向けてある企業に協力していただき機械学習を使った画像認識を行いました。今回は機械学習の中の深層学習(Deep Learning)を使用しています。
実施内容
注)掲載しているお菓子画像は解像度を下げています。
今回検証したのは上の画像のように箱にぎっしり詰まったお菓子の個数をカウントすることができるか?というものです。依頼内容としては正確な個数を出力させて箱の中のお菓子の数が100個でなかったらアラートがでるようにしてほしい、というものでした。最初はお菓子自身を検出しようと思ったのですが、検出部分が重なっていると個数の出力が難しいと考えたため、お菓子の袋に付いている小さなプラマークを認識させることにしました。
学習方法
今回使用した方法はDeep Learningの一種であるCNN(Convolutional Neural Network)です。これは主に画像認識に使用されるネットワークで画像の勾配の特徴を抽出することで学習します。ネットワークの概要は以下の図にある通りです。
今回は画像の一つずつの画素がプラマークであるかを判定するために注目画素(プラマークか判定する画素)を中心とした13px×13pxを入力の画像として使用しています。学習させるときに重要なのが正解データと間違いデータの比率です。正解データばかりを覚えさせると正解と間違いの境界がわからなくなるためある程度の間違いを教えることも大事です。なので基本的には正解データと間違いデータは1:1の割合で学習させます。
実装結果
いただいたデータの一部を先ほどの方法で学習させてテスト用の画像を入力した時の結果が下図右のようになります。
元画像(上図左)の右下のお菓子のプラマークもしっかり検出してくれました!!
少しの誤検出があるものの100個のプラマーク全てを検出することができました。
いただいた画像は2枚でその画像のうちの半分ずつを学習するだけでこんなにも高い精度が出ることに驚きました。
検証結果
今回の依頼であるお菓子の個数カウントには機械学習は適さないことがわかりました。
理由は以下の通りです。
- 機械学習を使用して100%の精度は困難である
今回はお菓子が100個かそれ以外かを認識する必要がありました。
そのため誤検出や未検出が許されず、「実装結果」のように検出部分がひっついてしまうと正確に個数を出力することもできません。
機械学習は基本的に正解率100%を出すことは難しいため、こういった正確性を求められるものには向いていないということを改めて実感しました。 - 費用対効果が悪い
私たちが検証を行った環境では画像を取り込んでから、「プラ」マークを認識するまで約12分間かかりました。
サーバスペックなどにより、時間の短縮は見込めますが、やはりコストが増大します。
今回の用途では人間が直接個数をカウントした方がはるかに早く・安く把握できます。