はじめに
AAAI 2021より以下の論文のまとめ
[1] Z. Zhao, et. al. Robust Lightweight Facial Expression Recognition Network with Label Distribution Training
-
公式コード
https://github.com/zengqunzhao/EfficientFace
-> pytorch
-> 完全な学習済みモデルは提供されてないので、再学習させる必要あり
概要
- 1枚の画像から感情を読み取る系のモデル
- 既存の精度を上回りながら、高い推論速度・低パラメータ数を実現した
- localの特徴量をよりいかすため、local feature extractorを導入した
- 明確に分類し難い表情タスクに対応するため、labelの確率分布を目標値とするlabel distribution lossを導入した
手法
全体のアーキテクチャ
全体のアーキテクチャは以下。
まず全体的に見ると、層も深くなく、かつ随所にdepth-wise conv, point-wise convが使われているため、簡素で高速な作り。
下部のlabel distribution generatorは事前に学習しておき、本学習時はパラメータを固定してラベルのdistributionを生み出す役割。
local-feature extractor
このモジュールはよりlocalな特徴量を披露ためのもの。
上図左上において、input Feature Mapsを空間的に縦2つ、横2つと4等分し、それぞれに対してdepth-wiseで畳み込む。
以下の図は既存モデルとCAMでsalient mapを比較したもの。
Channel-spatial Modulator
ここではよりglobalな特徴量を取得するが、既存の表情読み取りモデルにおいてはglobalな畳み込みは冗長であるとし、2系統のシンプルなモジュールとしている。
1系統目はGAPして完全にglobalなものとし、fc2回を行う。
2系統目は3x3畳み込みとpoint-wize convを2回ずつ行う。
Label distribution generator
先に挙げたように、label distribution generatorはtargetとなる確率分布を生み出す。
従来の分類的な手法だと、「neutral, happiness, sadness, surprise, fear, disgust, angry」に無理やり分類して学習するが、実際の表情はそれらの組み合わせであったり、中間で合ったりするらしい。
例えば「満足げに恐れ慄く」みたいな表情は happiness=0.5, surprise=0.1, fear=0.4 などとした方がよいだろうか。
具体的には、このモジュールから出たlogitにsoftmaxをかけて確立分布とし
d_i = \frac{exp(v_i)}{\sum^{c-1}_{j=0} exp(v_j)}
この i クラスの確立とmainのモデルから出力される確立 $\tilde{d_j^i}$ とで
\mathcal{L} = -\frac{1}{N \times c} \sum^{N-1}_{i=0} \sum^{c-1}_{j=0} d^i_j log (\tilde{d_j^i})
と交差エントロピーを求める。
以下は各表情画像とそのラベルとなる確立分布。
実験と結果
RAF-DB による精度、パラメータ数、速度の定量的評価
以下が結果。
パラメータ数、速度で既存手法を大きく上回りながら精度も若干上回っている。
ablation study
以下が各モジュールを加えていったときの精度等の変化。
正直言って、各モジュールはあまり寄与してない。