Person Re-identification論文解説　Joint Discriminative and Generative Learning for Perosn Re-identificationを読む

#はじめに
今回はPerson Re-identificationに関する論文を取り上げて紹介します。
#Joint Discriminative and Generative Learning for Perosn Re-identification[^1]
[^1]: Zheng, Z., Yang, X., Yu, Z., Zheng, L., Yang, Y., & Kautz, J. (2019). Joint Discriminative and Generative Learning for Person Re-identification. Retrieved from http://arxiv.org/abs/1904.07223
##ざっくりどんな論文?
NVIDIAからCVPR2019のOralで発表されました。NVIDIAといえばStyle GAN,Vid2Vid,FUNITなどGANに関する論文を多くだしている印象ですが、今回はPerosn Re-identificationにもGANを利用して、精度をあげたという論文になっています。GANをperson Re-identificationに利用する研究はそれまでにもあったのですが、Generatorで作った画像をうまく利用することが出来ていませんでした。今回は上手く,Generatorがスタンドアローンにならないような仕組みを作ってあげることで、SOTAを達成しました。

##Person Reidentificationの難しさと先行研究
Person Reidentificationは図１に示すように同一人物であってもカメラ角度やPoseによるクラス内分散が生じます。したがって画像からいかにそれらを取り除いたid-relatedな情報にembeddingできるかが重要になってきます。
![スクリーンショット 2019-11-06 16.45.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/540d8030-09eb-dca1-7ee0-47558ac19deb.png)
図1 人物写真はMarket1501データセット[^2]より
 
[^2]: Zheng, L., Shen, L., Tian, L., Wang, S., Wang, J., & Tian, Q. (2015). Scalable Person Re-identification : A Benchmark University of Texas at San Antonio. Iccv, 1116–1124. https://doi.org/10.1109/ICCV.2015.133

先行研究ではSiameseやTriplet Lossなどを使い、Deep metric Learningとして定式化した研究が一般的だと思います。参考文献3[^3]などがあります。


[^3]: Hermans, A., Beyer, L., & Leibe, B. (2017). In Defense of the Triplet Loss for Person Re-Identification. Retrieved from http://arxiv.org/abs/1703.07737

また図2のようにOpenPoseなどと組み合わせて、intra class分散を上手く捉えようとする研究[^4]もあります。
[^4]: Su, C., Li, J., Zhang, S., Xing, J., Gao, W., & Tian, Q. (2017). Pose-driven Deep Convolutional Model for Person Re-identification. Retrieved from http://arxiv.org/abs/1709.08325

![スクリーンショット 2019-11-06 17.11.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/072f4b4e-cddc-c54c-5d6e-8e44cf5ad52a.png)
図2 論文[^4]Figより

さらに近年ではGANによる画像生成を組み合わせることにより、さらにロバスト性を上げようという潮流も存在します。
GANを用いるメリットとしてはGANで生成した画像をfreeなDataAugementationとして利用できることですが、生成した画像からintra class分散をモデルが上手く捉えているかを視覚化できるという嬉しさもあります。
研究の1例としては,GANで生成した画像にidの一様分布ラベルを与えてTrain画像に追加したら精度上がった[^5]というものや、図3のように、Pose-Guideな生成を行いIdentityとPose情報を分離した生成を行うといった研究[^6]があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/c7dac995-cd57-f3d0-f066-b1c77a8735ac.png)
図3 論文Fig[^6]より


[^5]: Zheng, Z., Zheng, L., & Yang, Y. (2017). Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in vitro. Retrieved from http://arxiv.org/abs/1701.07717
[^6]: Ge, Y., Li, Z., Zhao, H., Yin, G., Yi, S., Wang, X., & Li, H. (2018). FD-GAN: Pose-guided Feature Distilling GAN for Robust Person Re-identification. Retrieved from http://arxiv.org/abs/1810.02936

図３では入力画像から、idを保持したまま（同一人物でありながら）Poseのみを変えた画像が生成されていますね。これは上手くid Relatedな情報を分離できていることを意味しています。

さて、いずれの研究もGANを用いてロバスト性が上がったという報告がなされていますが、紹介する論文ではこれらのGeneratorがStandaloneに成りがちで上手く利用できていないのではという指摘がされています。
せっかくGeneratorで画像を水増しのようなことをできるのだから、よりDirectにembeddingに役立つように利用できないか？、という課題を持った上で研究の提案手法に移っていきましょう。
##提案手法
図4が提案手法のネットワーク図になっています。
![スクリーンショット 2019-11-06 18.07.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/807d942a-3555-5648-5715-8b61e2701362.png)
図4
 

Person ReidentificationのDiscriminationとGenertorの画像生成を単一ネットワークで扱うことで生成画像を上手く利用できるような仕組みになっています。
詳細に見ていきましょう。
図の緑色のオブジェクト$E_a$はAppearance空間(ここではid-relatedな情報をもつことを意味)へのEncoderになっています。これはimageを与えるとそのPerosn-id $a$を出力します 
$a=E_a(x)$
青色のオブジェクト$E_s$は逆にStructure空間(pose,body sizeなどid-relatedではない情報)へのEncoderです
$s=E_s(x)$
そして黄色のオブジェクト$G$はエンコードされた$a$,$s$から画像を生成するGeneratorになっています。
$x=G(a,s)$
これらを組み合わせたネットワークに画像のPositive Pair(同一のid画像)とNegative Pair(異なるidの画像)を入れてLossをとることで、$E_a$,$E_s$,$G$が理想の出力に近くなるよう学習します。
###Positive Pairを与えたとき
まず同一のidの画像($x_i,x_t$)をいれたときですが、これはネットワーク図の下側に該当し、見やすいように取り出すと図5になります。
![スクリーンショット 2019-11-06 18.10.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/106503ac-55c6-bb39-74f3-f0467b91977f.png)
図5
画像をそれぞれ$E_a$,$E_s$でエンコードし、$G$で再構成しますが、再構成された画像は元の画像と一致するはずなので以下のように、再構成損失が計算できます。
![スクリーンショット 2019-11-06 18.15.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/52850311-195d-6992-ff00-a5b535af76b3.png)
また再構成する際にid-relatedな$a$を互いに入れ替えても,pose情報もid情報も変わらないので、これも元の画像と一致するはずです。
![スクリーンショット 2019-11-06 18.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/062a207d-3008-52e7-6a8c-744399b22837.png)
さらに$E_a$によるid予測が正しいかというクラス予測損失が計算できます。
![スクリーンショット 2019-11-06 18.16.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/0f80b1b4-4674-2fee-e4c0-0abe26a256dc.png)

###Negative Pairを与えたとき
別々のidの画像($x_i$,$x_j$)を与えた時はネットワーク図上側に該当し図6のようになります。
![スクリーンショット 2019-11-06 18.25.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/f7aaae8e-ff13-60f1-7ed3-292e80f2e854.png)
図6

こちらもEncodeして再構成しますが、ここで$a$と$s$のどちらか片方の情報だけを入れ替えて再構成し、再度Encodeすると、入れ替えていない情報は一致するはずです。したがって以下２つのロスが計算できます。
![スクリーンショット 2019-11-06 18.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/aa792112-e529-2986-b926-4b088dd3c493.png)
またEncodeしたあと、Structure情報だけを入れ替え、再度idを推定しても予測できるはずなので予測損失が加えられます。
![スクリーンショット 2019-11-06 18.29.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/1575403c-cd54-5274-70ed-25418cc045c8.png)
そして、Generatorにはrealな画像を生成してほしいので、おなじみGANのadversarial lossを計算します。
![スクリーンショット 2019-11-06 18.30.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/ce0f901a-722c-23b0-ade2-50fcefa26bc0.png)

さてパズルのようにLossを計算してきましたが、これだけではなく、Generatorの生成画像を上手く利用できるようにさらに、Primary feature learningと Fine-grained miningという２つの学習の枠組みを提案しています。

###Primary feature learning
ここではデータセットの画像ではなく、先ほどのStructure,Appearance情報を入れ替えて生成した画像を使用します。
![スクリーンショット 2019-11-06 18.37.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/834782db-c7d9-c0e0-87ce-831aaa55b612.png)
図7

Generatorで生成した画像でもid予測の訓練を行たいのですが生成された画像には当然ながらidラベルが存在しません。そこでまず、ResNetなどのシンプルなCNNをあらかじめid予測問題で訓練させ、それをTeacher Modelとして使用します。
生成した画像をTeacher Modelと$E_a$それぞれにいれたときに出力したid予測の確率が一致するようにKL-Divergenceを最小化してあげることでラベルなしでの学習を可能にします。
![スクリーンショット 2019-11-06 18.46.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/b29da415-47ca-db8d-39c1-8afb558e27d9.png)

このとき、あくまでargmaxする前の予測確率分布を利用することがpointだとのこと。Dynamic Soft class labelingというらしいですが、Hard labelingより学習が上手くいったそうです。
###Fine grained feature mining
さてこの項が論文読んでてややこしかったところです。今まで、Appearance空間へのEncode $E_a$は人物の服装に大きく左右され、同じ色の服装はid-relatedな情報だと扱ってきました。($E_s$に入力する画像はpose情報などに依存するようにグレイスケールに変換して入れています)
しかしながら実際には似たような服装で別人だということもあるわけなので、生成画像を用いて同一人物における服装の違いをシミュレートさせ、この区別に役立つような特徴を探索することを目指します。
図8のGeneratorで生成した青枠の画像pair(今まで別人としてきたpair)を同一人物とみなし、体の大きさ、髪、帽子、カバンといった服装とは独立したID識別に役立つ情報を探索させます。
![スクリーンショット 2019-11-06 19.01.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/664bc6aa-be1b-2fc3-9ca2-29b26737d3e5.png)
図8

すると下のようなLossが計算でき、今までのLossとは違うMulti Task学習を課すことによりよりロバストなモデルになるそうです。

![スクリーンショット 2019-11-06 19.53.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/247aa68e-7568-d218-e442-3db22904aa7a.png)


###損失関数
最終的な損失は今までのやつを全て足し合わせたものになります。
![スクリーンショット 2019-11-06 19.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/c416dea9-ef17-eb57-74d7-72c0927d9335.png)

多い...

##実験結果
Market 1501での実験結果です。まずは生成画像から。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/7cbb72a7-e55d-2942-de44-f97df594974f.png)
図9

表1
![スクリーンショット 2019-11-06 19.20.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/bbc272b4-d69d-df65-9411-9feef3063f6d.png)

生成画像の綺麗さ、多様さともに先行研究よりよくなっています。
特筆したいのが,Appearence情報と、Structure情報を分離して画像を生成できていることです。Pose情報を一切与えていないのにも関わらず、lossを工夫することでここまでできるのは驚異的です。

次にRe-identificationのスコア
![スクリーンショット 2019-11-06 19.26.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/1c7ae9a7-3d2d-df66-202f-bd5a20b5ca43.png)


![スクリーンショット 2019-11-06 19.25.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221156/989a2435-36fc-f3e0-1670-8a5fd014fb45.png)

発表当時SOTAを達成しています。(11/6現在 paper with codeによると4位)
Primary feature learningと Fine-grained miningを加えることによりスコアアップが確認できるので生成画像を上手く利用できているということでしょう。

##まとめと感想
GeneratorをStandaloneにならずに組み合わせていく様子はすごいです。ただネットワークが複雑で、損失関数7はあまりにも..(実際に使う時は学習済みの$E_a$に入れるだけだからいいということか)
特にFine-grained miningは下手するとnetwarkを混乱させて、精度落ちるだけになりかねないのでloss重みのハイパラも大事そう。

長かったとは思いますが、ここまでお読みいただきありがとうございます。