[論文メモ] Transfer Learning for Pose Estimation of Illustrated Characters
WACV2022
transfer learningで人間用のポーズ推定モデルを使ってキャラクター画像のポーズ推定(2D keypoint)を行う。
既存手法のポーズ推定は下記の論文
http://www.cs.cornell.edu/~pramook/papers/manpu2016.pdf
しかし、データセットが公開されておらず、またバックボーンとしてImageNet pretrainedなものを利用している(ドメインが合っていない)。
そこでデータセットを作成し、バックボーンもイラストのキャラクター用にドメインをあわせたtransfer learningを用いたポーズ推定を提案。
手法
アーキテクチャは図1を参照。
Feature Concatenation(精度は勝るがコストが高い)とFeature Matching(精度は劣るがコストが低い)の2つのアーキテクチャ。
ResNet Tagger
Danbooruのタグ予測を学習済みのResNet50をバックボーンの一つ目として利用する。
既存手法ではImageNet pretrainedなGoogLeNetを利用していたが、Danbooruでfine-tuningした(ドメインを合わせた)モデルにするとパフォーマンスが大きく向上。
Danbooruの頻出タグの中には画像のコンテクストのタグ(コピーライトやコスチューム変更など)も含まれているのでそれらを以外の画像に関係あるタグ(服装、髪色など)を利用。
ただし、似たタグ(青い髪 vs 水色の髪など)が多くあるのでDanbooruのwikiを見て手動でグルーピングを行った。
学習はbinary cross entropy(BCE) lossによる多クラス推定。
Character Segmentation & Bounding Boxes
2爪のバックボーンはセグメンテーションとBBox推定モデル。
1枚の画像に1キャラクターを仮定しており、BBoxの推定はセグメンテーションの出力の外接矩形で取得する。
DeepLabv3をベースにし、ピクセルレベルのBCE lossでfine-tuning。
またより細かい推定を行うために出力ヘッドに3つレイヤーを追加。
Pose Estimation Transfer Model
上記2つのモデルをバックボーンにしたポーズ推定モデル。
converterはconcatのためにチャンネル数の調整とlinear upsamplingで解像度の調整を行う。
keypoint head は僅かなconverterと2つのResNet Blockから成る。
出力は25のヒートマップで、keypointを中心としたガウシアンとのBCE loss。
25のヒートマップの内、17はCOCOと同じkeypointで残りの8つは既存手法と同じmiddle point(手首と肘の間や膝と足の付根の間とか)。
middle pointはそれを構成する2点の中点を正解とする。
予測時はガウシアンで平滑化した各ヒートマップのmaxをkeypointとする。
このままだと予測時もMask R-CNNを使うことになりコストが高いのでFeature Matchingモデルを作成(図1の下)。
小さいCNNモデルのmatcherを用意し、それにMask R-CNNの出力を模倣させMask R-CNNの代わりにする。
matcherはMask R-CNNの出力とのMSE lossで学習する。これによりMask R-CNNの特徴を利用しつつ、推論時は高速に動作が可能。
データ収集
この論文で重要な部分の一つ。ポーズデータ、タグデータ、セグメンテーションデータの3つをどうしたのか。
Pose Data
既存のものでAnimeDrawingsDatasetがあり、ポーズラベル付き全身かつ1キャラクターの画像が2k枚ある。
しかし顔のkeypointとBBoxが無い。そこで半手作業でラベル付け。
セグメンテーションモデルを使ってBBoxを、keypointはanime faceあたり?
また57枚の画像を削除(複数人入っていた)。
またデータセットに含まれないよくあるポーズ(振り返りや後ろ向きなど)を補うため2043枚のサンプルを手作業でラベル付けして追加。
合計4000枚のデータセットになり、そのうち3200枚を学習、313枚を検証、487枚をテストに利用。
augmentationとBBoxを中心としてスケールやクロップ、フリップ(keypointも反転)、360°の回転を採用。
ResNet Tagger Data
512px SFW Danbooru2019 datasetの一部を利用。
元は2.83M枚390kタグが合ったが、そこから抽出し837k枚1062クラスに(元は2027タグでグルーピングした)。
8:1:1で学習用等に分割。
実験
Pose Estimation Transfer
ポーズ推定の結果が表1。
はじめの4つが提案手法、
Feature Matchingは同じデータセットを使ってもFeature Concatenationにはわずかに劣るがパラメータ数などでコスパがよい
次の5つは大雑把な他のアーキテクチャ、
Task Fine-tuning Only) Mask R-CNNのバックボーンを固定、ヘッドをfine-tuning
Domain Features Only) ResNet Tagger(ResNet50)を固定してkeypoint用ヘッドを付けて学習
Task Fine-tuning w/ Domain Features) Task Fine-tuning Onlyでヘッドを学習後、バックボーンを学習済みResNet50に置き換える(合ってる?)
Adversarial (DeepFashion2)) Feature MatchingをMSEではなくadversarial lossに。小さいdiscriminatorを追加し、DeepFashion2のデータとDanbooruデータを分ける
Adversarial (COCO)) 上記の使うデータセットをDeepFashion2からCOCOに変更
Domain Features Onlyは簡単なアーキテクチャだがパフォーマンスがよい。
Mask R-CNNの特徴よりもドメインに関する特徴のほうが重要。
Adversarialモデルは学習が非常に不安定だったらしい。
次の2つはBBox推定の比較。
OpenPoseに比べMask R-CNNのほうが全然良い。OpenPoseは元のドメインに過適合しすぎていた。
最後の3つはResNet Taggerのバックボーンの比較。
詳細がないが、多分Feature concatでデータセットの追加なし。
OursはFeature Concatenation。
RF Backboneはバックボーンをgithubで公開されているDanbooruのタグ予測のモデルにしたもの。
ImageNet-pretrained Backboneは既存手法と同じくImageNet pretrainedなモデルをバックボーンにしたもの。
ImageNet pretrainedよりもDanbooru pretrained(ドメインが合っている)ほうが良いし、ドメインが合っていてもタグ等を調整したほうがよい。
Character Segmentation & Bounding Boxes
作ったセグメンテーション・BBox予測モデルを既存手法と比較。
比較対象はAniSegのFaster-RCNN、YAASが提供するSOLOv2とCondInstの合計3つ。
結果が表3。テストデータが自作なのでこれは少々怪しい。
Application: Pose-guided Retrieval
このポーズ推定を使ってポーズ検索システムを作成。最近傍探索で探索するシンプルな方法。
結果が図2。