Pythontaka-say.hateblo.jp上記記事の続きです。復習は面倒だが役に立つ前回の記事では、ガッキーの顔とそうでないものの二値分類を行うモデルを作成し、実際に動画への適用を試みました。残念ながら上手くいきませんでした。忍耐は辛いが役に立つ2前回の取り組みで顕在化した問題に対処していきます。対処方法として、分類するクラスを増やすことで解決を図ります。上記の7クラスの分類を行う顔判別機を作る方針でいきます。本来であれば、各々の顔を前編でやったような手法で収集しなければいけませんが、面倒だったので、恋ダンス動画自体から顔データの収集を行います。顔画像取得のコードは下記の通りです。str(int(movie.get(cv2.CAP_PROP_POS_FRAMES))))前回作成したモデルは、ガッキーかそうでないかを判別する能力はありませんでしたが、顔検出した箇所が、顔っぽいかそうでないかを判別する能力はありそうだったので、その予測値を利用して保存するディレクトリを選択しています。この事前分類をしておくことで、後の分類負担を多少緩和できます。処理が終わると、恋ダンスの動画中で顔だと思われる箇所が全て保存されるはずです。あとは、冒頭で示した7つのクラスに合致するように、手動で画像を各々のディレクトリに分類していきます。ディレクトリ名は下の画像のように、数字の接頭辞を付けておくとよいです。最終的に動画から切り出した顔画像の枚数は、ガッキー:1516出演者A:349出演者B:398出演者C:295出演者D:452その他顔:85その他物:2591となりました(アンバランス!)。前編で用意したデータと統合すると、顔画像データは合計で7,525枚になりました。繰り返しは気怠いが役に立つ新しい顔画像データで再度学習を行っていきます。修正箇所は下記の2ヵ所です。枚数が多くなったせいかそれなりに学習に時間がかかります。最終的な学習経過はこのようになりました。若干学習途中のような気がしないでもないですが、とりあえずこれで良しとします。結果は怖いが役に立つでは新しいモデルでの処理結果をいくつかご紹介します。動画中の顔データを使っているので当たり前といえば当たり前ですが、ある程度求めていた処理が行われているように思います。異なる動画中の顔を正しく判別することはできるでしょうか。検証のため、予告動画に対して同様の処理を試みます。多少うまくいっているパターンダメダメなパターン上手く判別が行えている箇所も散見されましたが、上出来というには程遠い状態でした。顔データの学習画像が少なすぎるかつ似たパターンばかりという問題は大きいようで、きちんとした予測モデルを構築するためには、個々人の顔データを別途集め直す必要がありそうです。Augmentation処理をしたモデルも作成してみます。正直なところ、各パラメータの真偽でどのように扱いが変わるのかが分かりかねるので(勉強不足!)、設定に関してはいい加減です。元々のソースコードのmodel.fit()部分を下記のように書き換えて試みます。callbacks=[checkpointer])先程上手く判別できていなかった箇所はこのようになりました。正しく判別できています。このシーンだけに着目するとかなり改善されたように思われますが、実際には誤判別も増えていたので、今回の場合はrecall増えてprecision減ったという印象でした。逃げるは恥だが役に立つ前編から引き続き、判別モデルの問題点解消に取り組みました。当初の目的として掲げた、「恋ダンスでただガッキーだけを見ていたい」という目標はいくらか達成されたように思います。記事中の検証用gifでは顔検出の枠線が多すぎてかなり気が散りますが、顔の上書きだけを行った動画を見ると、それなりに快適度がアップしており、個人的には満足しております。いえ、画像収集に実施した手法(動画からの切り出し!)がイマイチだったため、モデルの汎用性にはかなりの問題が見られました。学習に使用するデータの重要性が再認識できたように思います。Meスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。