#はじめに
リアルタイム画像認識Yoloを扱う機会があったので、
一度自分で学習データの用意から学習、テストまで一連の流れを実践しようと決意し、
アニメキャラのリアルタイム認識システムを構築しました。
自分でも画像認識システムを構築してみたい、
現状の画像認識の実力を確認したいという方に参考になれば幸いです。
特にYoloは大雑把な画像認識の知識とある程度のソフトウェア知識があれば
誰でも簡単に画像認識システムを構築できるので本当におすすめです。
#識別対象の紹介
今回は、アニメゆゆ式に登場する主要キャラクター7人を識別します。
それ以外のキャラはすべてモブとして識別します。
最初はごちうさのキャラでやろうと思っていたのですが、偉大な先駆者が何人もいたので題材を変えてみました。
#環境構築
###動作環境
- OS: Windows 10 Home
- CPU: Intel Core i7-8700K @ 3.70GHz
- GPU: NDIVIA Geforce GTX1080Ti
###環境構築の手順
Windows上で動作するYolo最新版であるYolov3の使用環境を整えていきます。
ここからYolov3を入手できます。
環境構築の手順の詳細はこのリンクに詳細に書かれているので参考にしてください。
また、学習やテストの手順や使用するコマンドもこのリンクに記されています。
#動画データの用意
学習データの基となる動画はニコニコ動画のゆゆ式公式チャンネルのアップロード動画を使用しました。
(当たり前ですが、違法アップロードされた動画をダウンロードすると違法になるため注意しましょう。)
今回使用する動画は8話と9話の2話分としました。
理由として、8話と9話は主要7キャラ全員が登場すること、
使用するデータ量が多いと後の学習データを作成する作業が大変になるためです。
#動画データを画像データに変換
はじめにmp4の動画データからjpgの画像データを取得します。
この作業にはYolo_markを使用します。
Yolo_markを使用して今回は60フレームごとにjpgの画像を取得します。
こうして2話合計で1392枚の画像データが手に入りました。
#画像データからOP, ED部分を削除
画像データからOPおよびED部分を削除します。
OPに関しては、構築した画像認識システムをOP映像でテストしたかったためです。
OP部分を学習に使用すると、OP映像に強い画像認識システムが生まれてしまい、不当に高い精度が出てしまうので避けました。
EDについては、絵のタッチがOPや本編と異なるためです。
1392枚の画像データからOP, ED部分を削除した1218枚を学習データとして使用します。
#学習データのラベル付け
画像認識プログラムを構築する上で一番ネックとなる部分です。
先ほどのYolo_markを使用して、ひたすらラベル付けしていきます。
ラベルは以下の8種類とします。
- yuzuko(野々原ゆずこ)
- yui(櫟井唯)
- yukari(日向縁)
- aikawa(相川千穂)
- kei(岡野佳)
- fumi(長谷川ふみ)
- mother(松本頼子)
- mob(その他)
計1218枚のラベル付けに6~7時間かかりました。
#学習
学習データを使用して、Yolov3で学習します。
(今回は時間の都合でバリデーションデータ=学習データとしています。)
学習の反復回数は12,000回とし、約半日かかりました。
#結果
今回の結果をニコニコ動画及びYoutubeにアップしました。
【YouTube】 Image Recognition for Anime Characters (Yuyushiki) with YOLOv3
気になる結果をいくつかピックアップします。
夕焼けで6人が映っているシーン。縁ちゃんだけモブと認識されてしまいました。
夕焼けだと紫の色が茶色に近い色になるせいでしょうか。
また、別の夕焼けシーンでは佳と間違えていました。
唯ちゃんがゆずこと間違えています。
唯ちゃんが目をつぶるシーンが無かったから?
唯ちゃん以外の2人が認識されていません。
顔が横を向いたり、上下逆になるシーンはあまりないので学習不足に陥りやすいですが
画像を上下左右に反転したものを学習に取り込めば解決できそうです。
#おわりに
画像を回転させたりなどする学習データの水増しや、閾値の変更など
改良する余地は多いです。
特にキャラが遠くにいるときの再現率は上げたいなと思っています。
後は、髪の色が同じで違うキャラはどれくらいの精度で識別できるのか気になりました。
#参考
ご注文はYOLOv3ですか!?~WindowsでYOLOv3を動かす~
ごちうさでの先駆者です。ニコニコでの動画で感銘を受けました。