なんかいろいろしてみます

Dec 18, 2018 - 1 minute read - Dlib

隣にVTuber(学習データ作成編)

前回構築した環境を用いて表情認識を行うための学習済みモデルを作成します.

概要

通常人の表情認識には「顔の部分を画像全体から抜き出し」 -> 「抜き出した部分から表情を認識」を行う必要があります. dlibでは「顔の部分を画像全体から抜き出し」の機能は既に用意されており,後者の「抜き出した部分から表情を認識」に関しても学習済みモデルが提供されています.

しかしVirtualYoutuberである因幡はねるさんには現実の人に対する表情認識が利用できないため,「顔の部分を画像全体から抜き出し」と「抜き出した部分から表情を認識」の両方を自前で準備する必要があります.

そのため

  1. 画像データを集める
  2. 画像から「顔の部分を画像全体から抜き出し」を行うためのラベル付けを行う
  3. ラベル付けしたデータから判別用のモデルを学習
  4. ↑と同様に「抜き出した部分から表情を認識」のためにlandmarkをラベル付けする
  5. ラベル付けしたデータから表情認識用モデルを学習

を行います.

上記の処理は前回構築したbash on ubuntu on windowsのpython環境で行い,一部画像のラベル付けにWindowsを利用します. 利用したスクリプトとラベル付け用プログラムは以下に公開しています. 詳しいスクリプトの使い方はreadmeに記載しています.

以降の説明で利用します.

https://github.com/akihiro0105/DlibLandmarkToolkit

1.学習データ集め

2.物体認識ラベル付け

  • 画像を集めたらキャラクターの顔を認識するためにラベル付けを行います.
  • 画像をフォルダに集めてbash on ubuntu on windows環境からdetectXml.pyを実行してラベル付けファイルのひな形を作成します.
  • 次にWindows環境に戻ってViewerプロジェクトをVisual Studioで開いて実行します.
  • Viewerプログラムを利用して顔の部分を枠で囲んでいきます.

緑が物体認識用の枠,青い点が表情認識のためのlandmarkです.

3.物体認識モデル学習

  • ラベル付けが完了後bash on ubuntu on windowsのpython環境でtrainDetect.pyを実行して物体認識モデルを作成します.
  • 学習されたモデルデータは.svmファイルとなります.

4.表情認識ラベル付け

  • 表情を認識するために顔の必要な部位にlandmarkを設定します.
  • 3.物体認識モデル学習で作成した物体認識モデルを利用してlandmarkXml.pyで表情のラベル付けファイルのひな形を作成します.
  • 2.物体認識ラベル付けと同様にViewerでラベル付けを行います.
  • landmarkは番号と配置部位を決めておく必要があります.
  • Meetupの時のデータは
    1. 右目上
    2. 右目下
    3. 左目上
    4. 左目下
    5. 右口角
    6. 左口角
    7. 上唇
    8. 下唇

として設定しています.

5.表情認識モデル学習

  • ラベル付けが完了後bash on ubuntu on windowsのpython環境でtrainLandmark.pyを実行して表情認識モデルを作成します.
  • 学習されたモデルデータは.datファイルとなります.

まとめ