[論文メモ] Transfer Learning for Pose Estimation of Illustrated Characters

arxiv.org

WACV2022

transfer learningで人間用のポーズ推定モデルを使ってキャラクター画像のポーズ推定(2D keypoint)を行う。

既存手法のポーズ推定は下記の論文
http://www.cs.cornell.edu/~pramook/papers/manpu2016.pdf

しかし、データセットが公開されておらず、またバックボーンとしてImageNet pretrainedなものを利用している(ドメインが合っていない)。

そこでデータセットを作成し、バックボーンもイラストのキャラクター用にドメインをあわせたtransfer learningを用いたポーズ推定を提案。

手法

アーキテクチャは図1を参照。
Feature Concatenation(精度は勝るがコストが高い)とFeature Matching(精度は劣るがコストが低い)の2つのアーキテクチャ
f:id:Ninhydrin:20211108092456p:plain

ResNet Tagger

Danbooruのタグ予測を学習済みのResNet50をバックボーンの一つ目として利用する。
既存手法ではImageNet pretrainedなGoogLeNetを利用していたが、Danbooruでfine-tuningした(ドメインを合わせた)モデルにするとパフォーマンスが大きく向上。
Danbooruの頻出タグの中には画像のコンテクストのタグ(コピーライトやコスチューム変更など)も含まれているのでそれらを以外の画像に関係あるタグ(服装、髪色など)を利用。
ただし、似たタグ(青い髪 vs 水色の髪など)が多くあるのでDanbooruwikiを見て手動でグルーピングを行った。
学習は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で学習用等に分割。

Character Segmentation Data

AniSeg データセットには945枚のデータがあるが手作業のためピクセルレベルで正しくない。
そこでDanbooruからRGBAの画像を取得し、それを背景タグの画像やPixivデータセットのテクスチャ画像と合成してセグメンテーション用データセットを作成。

実験

Pose Estimation Transfer

ポーズ推定の結果が表1。
f:id:Ninhydrin:20211109085743p:plain

はじめの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。テストデータが自作なのでこれは少々怪しい。
f:id:Ninhydrin:20211109093746p:plain

Application: Pose-guided Retrieval

このポーズ推定を使ってポーズ検索システムを作成。最近傍探索で探索するシンプルな方法。
結果が図2。
f:id:Ninhydrin:20211109093922p:plain

所感

ドメインに適したモデル2つを組み合わせるだけのシンプルな手法。
手作業でデータセットを作成しているのは偉い。
Feature Matchinでパラメータ数を削減するのはコスパ良さそう。
セグメンテーションのモデルの精度には少々疑問。
DanbooruのRGBA画像を見ると結構背景も混ざっている画像もある。
提案手法ではそこも学習しているだろうが既存手法は人物に特化していて多少ドメインが提案手法有利になっていそう。