LoginSignup
4
5

More than 5 years have passed since last update.

論文まとめ PG2:Pose Guided Person Image Generation

Posted at

はじめに

NIPs2017で採択されたPG2(Pose Guided Person Image Generation)という論文をまとめてみた。
NIPs上の該当ページはこちら。
https://nips.cc/Conferences/2017/Schedule?showEvent=8837

論文の本文はこちら。
http://papers.nips.cc/paper/6644-pose-guided-person-image-generation.pdf

解説用Videoはこちら。
https://www.youtube.com/watch?v=FBW6drMpK3U&feature=youtu.be

要点

PG2はある人物の画像を任意のポーズに変換する仕組みである。具体的には、ある人物Aの画像(Condition Image)と、その画像にはない別のポーズB(Target Poses)を入力として、人物AがポーズBをした画像を生成するシステム。(下図参照)
スクリーンショット 2017-12-30 14.15.20.png
(Supplementary materials Pose Guided Person Image Generation Figure4より)

モデルは2つのステージからなる。1つ目のステージ(G1)でCondition ImageとTarget PosesをU-netに似たネットワークに入力してtarget poseをしたCondition imageの人の粗い画像を出力する。

2つ目のステージ(G2)でその画像をやはりU-netに似た仕組みに入力し、GANsの学習方法でrefineする。(下図参照)
スクリーンショット 2017-12-30 14.13.40.png

ステージ1(G1)

上述のように、ステージ1(G1)ではCondition Image $I_A$ とTarget Poses $P_B$ をネットワークに入力してtarget poseをしたCondition imageの人の粗い画像 $\hat{I} _{B1}$ を出力する。詳細は以下。

G1モデルのアーキテクチャ

以下のようにU-netを模している。
スクリーンショット 2017-12-30 15.36.20.png
(Supplementary materials Pose Guided Person Image Generation Figure1,2より)

複数回畳み込んだ後に、全結合で64次元のベクトルまでencodeする。その後元のサイズまでup-conv(upsamplingした後にconv)する。U-netなので複数のskip connectionがある。

ただし、オリジナルなU-netと違い、上図下側のようにresidual blockを用いている。これにより精度をさらに上げている。

Pose mask loss

G1のLossとして、単に出力と実際のTarget画像 $I_B$ をL1ノルムなどで計算してもうまくいかないだろう。なぜなら人でない部分・・・back groundが違いすぎるため、そこのlossを縮めようとするだろうから。

そこでback groundの影響を少なくするため、Pose mask lossというものを用いる。これは以下の図のようにTarget Poseをもとに作成した、人の体を覆うようなmaskである。
スクリーンショット 2017-12-30 14.13.51.png
(Figure3より)

このmask $M_B$ を用いて、lossは以下のように計算する。

L_{G1}=||(G1(I_A,P_B)-I_B) \odot (1+M_B)||_1

hadamard積の左側はG1モデルからの出力 $G1(I_A,P_B)$ とTarget画像 $I_B$ とのpixel wiseな差。

hadamard積の右側がmaskの部分。mask $M_B$ は人の部分が1で他が0。これに1を加えるので、人の部分が2で他が1となり、人の部分の影響が他の部分の2倍となる。

ステージ2(G2)

G1で生成された画像はおおまかに目的のポーズを捉えているものの、画質が粗いものとなる。よってG2でこれをrefineする。

G2は上述の通り、generator部分とdiscriminator部分とからなる。

generator G2のアーキテクチャ

G2のgenerator部分も下図のようにU-netを模したものとなっている。

スクリーンショット 2017-12-30 15.36.29.png

G1で生成した画像 $\hat{I} _{B1}$ とcondition image $I_A$ から $\hat{I} _{B1}$ をrefineするための差分を出力する。これを $\hat{I} _{B1}$ に加えることでrefineされた画像を得る。

U-netの構造でG1と大きく違う点は、全結合を用いていない点だ。これはcondition image $I_A$ のdetailをより用いるためだ。

Discriminator D

discriminatorはpix2pixモデルのように、本物のペア(condition imageとtarget image)か偽物のペア(condition imageとrefined result)かを識別する。具体的なアーキテクチャはDCGANとほぼ同じ。(下図参照)
スクリーンショット 2017-12-30 14.13.40のコピー3.png
(Figure2より)

Lossの計算

lossは以下のようになる。まずdiscriminatorに関しては

L^D_{adv}=L_{bce}(D(I_A, I_B),1)+L_{bce}(D(I_A,G2(I_A,\hat{I}_{B1})),0)

となる。第1項は本物ペアを入れた時のbinary cross entropyで、第2項は偽物ペアを入れた時のbinary cross entropy。このへんは通常のGANsと同じ。

一方で、generatorの方はadversarialなlossとさきほどの $L_{G1}$ との和となる。まずadversarialなlossは

L^G_{adv}=L_{bce}(D(I_A,G2(I_A,\hat{I}_{B1})),1)

で、これを用いて

L_{G2}=L^G_{adv}+\lambda L_{G1}

となる。

個人的に面白いと思うところ

同じく学習用データの水増しモデルであるsimGANとかDA-GANなどと比較した場合、画像をsynthesizeするところも含めている点が興味深い。このsynthesizeを達成するために、着目物体以外の影響を小さくしたmaskの仕組みは他のtaskにも応用が利きそう。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5