猫の不調をいち早く見つけるためのIoTガジェットを作るにあたり,猫の個体識別は必須といって良いでしょう。複数の猫を飼っている,いわゆる多頭飼いの場合は,センサで取得したデータがどの猫のものなのかがわからないとデータの価値が激減します。
そこで,猫の個体を識別する方法を検討することにしました。
Contents
Tensorflowで猫の個体識別をする
画像さえ用意できればある程度の認識精度はすぐに出せそうなので,まずはTensorflowを使ってやってみることにします。
手順1:画像データを集める
今まで撮りためた写真はGoogle Photosにぶち込んであるので,「猫」で検索をかけて猫の写真のみダウンロードして猫フォルダを作成します。
PinoとJillの顔画像が93個ずつ用意できました。
手順2:猫の顔部分を切り出す
猫フォルダの写真から猫の顔部分のみ正方形で切り出して保存します。こちらのモデルをお借りしてOpenCVで猫の顔を認識して切り出しました。
手順3:猫の顔画像のファイル名にラベルを入れる
あとで使いやすいように,猫の顔画像のファイル名のプリフィックスに,猫のIDを入れます。
ここまでの作業で,こんな画像ができました。撮影に使ったカメラも撮影した場所もバラバラなので,画像に統一感がありません。
画像は学習用と評価用に分けておきます。とりあえず今回は学習用:評価用=8:2くらいにしました。
手順4:猫の顔画像を学習させる
世の中にはすばらしい先人がいらっしゃるものですね。以下のコードを参考に,猫の顔画像と猫のIDのリストをCSVで出力し,それを使ってモデルを作ります。
https://github.com/kenmaz/momo_mind/tree/master/deeplearning
gen_testdata.py,mcz_input.py,mcz_model.py,mcz_main.pyを流用して学習を行います。
学習用に用意できた画像が少なかったので,正解率100%のモデルができあがりました。
手順5:識別できているかを確認する(評価)
学習が終わったら,評価用に分けておいた画像を使って個体識別が上手くいくか確認します。手順4のGitHubのmcz_eval.pyを流用しました。
正解率90%でしたが,誤回答だった赤枠の画像は確率100%で自信満々に間違えていました。間違えるにしても,もう少し自信なさげにならんものか。
まとめ
先人の知恵をお借りしてさくっと試してみましたが,なんとなく行けそうな感触を得ました。学習データを増やしたりモデルを変えてみたりして,正答率が高く,間違えるときは自信なさげになるような方法を引き続き探してみようと思います。
コメントを残す