追記:ベータ版完成しました!こちらで学習済みモデルの配布を行っています。
有名な「lbpcascade_animeface」よりも高性能な顔認識・顔検出モデルが欲しいなと思っている方は多いんじゃないかなと思って作成頑張ってます。というより、私がどうしても欲しかったので自作しています。ネットを探せば誰か作ってるんじゃないかと思ったんですが、良さそうなものがなくて残念…
学習データがまだ少ないので公開はもう少し先になりそうですが、現在の成果の共有とプログラムの構成について記事を書こうと思います。もし早く欲しいなって方がいらっしゃったら、Twitterかニコニコ動画で煽ってくれたらやる気出して頑張れると思います。
(学習データ作るの本当に地獄です…)
全体概要についてはこの動画を見てください。
プログラムの構成は?
学習データ
kaggleからダウンロードできる「Tagged Anime Illustrations」を使用しています。
大量のアニメ画像が含まれたデータセットです。
https://www.kaggle.com/mylesoneill/tagged-anime-illustrations
顔認識モデル
「Retinaface」の非公式実装を使用しています。Tensorflowで実装されており、他と比べてシンプルで追加学習がしやすいよう記述されています。
https://github.com/peteryuX/retinaface-tf2
アノテーション作成
「VGG Image Annotator」を使用しました。webベースのアプリケーションで、出力がCSVやJSONなど汎用性が高いのでおすすめです。操作性がよく、無料で使えるので感謝です。
https://www.robots.ox.ac.uk/~vgg/software/via/
アノテーションの形式変換
今回実装した唯一の部分です。アノテーション作成で出力されたJSONファイルをRetinafaceで読み込めるように形式変換を行うスクリプトです。実装を解析して(ただのリバースエンジニアリング)、学習使用されている変数を割り出したり、フォーマットを合わせる必要がありました。
精度どんな感じ?
左が「 lbpcascade_animeface 」、右が今回学習させたモデルです(データ数250枚)。
全体的に作成したモデルは検出率が異常に高いです。一方、「 lbpcascade_animeface 」 は認識しないものは多いですが、誤検出がとても少ないんですよね…
色々実験してみると、モデルによって良さや特性が見えます。
「 lbpcascade_animeface 」はたしか十年前くらいに作られたモデルなのですが、現役で使える偉大なモデルです。
顔が回転している画像
お借りしました:https://seiga.nicovideo.jp/seiga/im1015270
MMDモデルの画像
お借りしました:https://seiga.nicovideo.jp/seiga/im6068292
ラフな絵の画像
お借りしました:https://seiga.nicovideo.jp/seiga/im10686979
進捗どうですか?
現在アノテーション作成が250枚です。最終目標が1万枚、デモバージョン目標が1000枚なのでまだまだ足りません…頑張ります。
また進捗報告の記事書きます。