[ICLR2019] Few-Shot Learning by Exploiting Object Relation

# 0. はじめに

ドーモ。まっくす([@minux302](https://twitter.com/minux302))というものです。挨拶は大事。
自分の研究でこの "Few-Shot Learning" という分野を扱っており、タイトルの "Object Relation" という言葉が気になったので[この論文](https://openreview.net/forum?id=rkzcvoA9YX)を選定することにしました。
内容としては [1] のマイナーチェンジです。この [1] のイントロと関連研究の章は Few-Shot Learning の概観を簡潔にまとめていると思うのでオススメです。 (この論文自体は submission が著者らによって取り下げられている) (後で気づいた)
Few-shot Learning について知らない方も多いと思うのでそこらへんの説明に重点を置いています。

# 1. 概略
Few-Shot Learning において、認識したい画像のクラスは訓練データに含まれないが、その構成要素は含まれている可能性がある。そこで本手法では、画像全体ではなく構成要素レベルでの認識を行うことで、訓練データの情報を効果的に転移させるモデルを提案する。

[1] では画像全体の比較を行っていたが、本手法では特徴マップの位置 (物体の構成要素) も考慮した比較が行える、という考えが本論文の一番主張したい内容です。

#2. 背景
## 2.1. Few-Shot Learning
画像認識の分野において深層学習の手法が大きな成果をあげて注目されていますが、これは ImageNet 等の大規模データセットに大きく依存しています。ImageNet では各クラス数百〜数千枚数、計1000クラスの画像データから構成されており、近年の多くの手法はこのような大規模データセットで学習することで汎化性能を獲得し、高い認識精度を叩き出しています。
しかしこのような大規模データセットに依存している場合、既存のクラスに含まれない新たなクラスへの対応が難しくなります。例えば ImageNet に含まれないようなクラス (工場の器具や新しい商品など) に対応しようとした場合、それらのクラスの画像を新たに大量に用意する必要があり、非常にコストが高くなります。Fine-Tuning などのテクニックもありますが、それでも各クラス数十〜数百枚の画像が必要となります。
一方我々人間は、一枚の画像を見るだけで同じクラスの画像を認識できる能力を持っており、現在の深層学習の認識手法との間には大きな乖離があります。

そこで、新しいクラスの画像が極端に制限されている場合でも認識できるモデルを追求する Few-Shot Learning という分野があります。これは新しいクラスの画像が1~5枚程度の場合での認識精度を競うタスクとなります。

# 2.2. Few-shot Learning の問題設定
Few-Shot Learning の問題設定について述べます。まず大きく分けて以下の2つのデータセットが与えられます。

1. 各クラスにつき潤沢に正解ラベルが使用できるデータ (訓練データ)
2. 各クラス1~5枚数程度の正解ラベルが使用できるデータ (サポートデータ)

1と2のデータセットのラベルの積集合は空集合、つまり共有しているラベルは1つもありません。
基本的には訓練データで特徴抽出器を学習し、サポートデータのクラスの認識精度を競います。

例として訓練データに [MNIST](http://yann.lecun.com/exdb/mnist/) を、サポートデータに [notMNIST](http://yaroslavvb.blogspot.com/2011/09/notmnist-dataset.html)から3クラス、各1枚ずつ取り出したデータを使用します。青枠が訓練データ、オレンジ枠がサポートデータ、緑枠が認識したいテストデータとなります。
モデルは青枠のMNISTで特徴抽出器を学習し、オレンジ枠のサポートデータを使って、緑枠のテストデータを分類することを目標とします。

<img width="1000" alt="スクリーンショット 2018-12-06 17.08.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/108325/84ae0b41-30fc-ca3c-c54a-7bcfca68015c.png">


サポートデータのクラス数が N、各クラスのデータの枚数がそれぞれ K のとき、このタスクを K-shot N-way と呼びます。
例えば上記の設定は 1-shot 3-way タスクと呼びます。


# 3. 既存研究
新しいクラスの画像が極端に少ない場合、Fine-Tuning をしてしまうとすぐに過学習を起こしてしまいます。
そこで多くの手法は、訓練データからテスト時と同じ設定のタスクを大量に作成し、それらのタスクの学習を通じて有用な情報を獲得する Meta-Learning を用いるアプローチをとっています。
このアプローチをとる手法は大きく分けて二つに分けられます。
一つは転移学習を、もう一つは近傍法を最適化する手法です。(RNN を用いる手法 [2] や Data Augmentation を用いたアプローチもあるけど今回は割愛) 
以下、Meta-Learning の学習方法と2つのアプローチについて簡単に述べます。
Meta-Learning については [3] が簡潔にまとまっていてオススメです。

## 3.1. Meta-Learning
2.2. で Few-shot Learning には訓練データとサポートデータを用いると述べました。
Meta-Learning では訓練データからテスト時と同じ状況のタスクを大量に作成し、それらのタスクの学習を通じて、どのタスクを解くためにも有用な情報を転移させることを意図しています。
下図 ([4]より引用) のようにテスト時と同じタスクを訓練データから大量に作成しています (Meta-Train)。
この場合、訓練データから 5-way 1-shot タスクを大量に作成しています。この各行のタスクをエピソードと呼びます。
エピソードごとにタスクが異なっており、例えば一番上のエピソードでは {1:鳥, 2:戦車, 3犬, 4：歌手, 5, ピアノ} がサポートデータとして与えられ、右の画像(犬、ピアノ)を判定するタスクとなっています。次のエピソードは別のタスクとなっています。

このように毎回のタスクでクラスを変えて学習することにより、識別するクラスに大きく依存しない情報を学習することができます。


<img width="762" title="図2" alt="スクリーンショット 2018-12-06 18.07.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/108325/a1f0f8d9-0826-e19e-504d-f2e50227cc2f.png">


## 3.2. Fine-Tuning の方法の学習
こちらの手法は Meta-Train のそれぞれのタスクにおいて、サポートセットのデータを用いて Fine-Tuning を行います。
そのままでは過学習してしまうので何か工夫が必要です。
[5] ではタスク間に共通する良い初期値 (数ステップの学習で良い精度を得られるような初期値) が存在するという仮説の下、そのような初期値の探索を Meta-Learning で行います。また [6] では、初期値に加え最適化手法も学習します。


## 3.3. 近傍法に適した特徴抽出器の学習
こちらの手法は Meta-Train を通して、Few-shot Learning において近傍法がうまく機能する特徴抽出器を学習します。
[7] では重みつき k-NN を学習します。[7] は Few-Shot Learning で Meta-Learning 用いることを最初に提案した手法です。
[1] はサポートデータとテストデータの特徴量を Concat し、同じクラスであるかどうかを判定するモデルを学習します。
近傍法はノンパラメトリックモデルなので、3.2. のようにテスト時に学習する必要がなく、  End-to-End に学習できるところがポイントです。



# 4. 提案モデル

## 4.1. 概要
本手法は次のような仮説を立てています。
> 下図のような Segway を例に考えましょう。我々は Segway については知らなくともそれらが見慣れたもの、つまり車や電動バイクについているタイヤ、を部品に持つことがわかります。よって我々はそれが乗り物であると推測できます。さらに言えば、我々人間は画像に写っている物体を分解して解析することができます。例えば、 Segway と乗り物の関係に気づくことができます。このような関係性の発見は異なる種類の乗り物と Segway を認識する際に有用です。しかし既存の手法はこのような Object-Level の情報を考慮せず画像全体のみを考慮した手法となっています。
~~
このような Object-Level の関係性はラベルを共有していない訓練データとテストデータにおいても存続していると考えられます。例えば訓練データに車と電動バイクがあった時、車輪と乗り物という関係はテストデータにある Segway を認識する際に役立つと考えられます。

<img width="1331" alt="スクリーンショット 2018-12-06 20.53.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/108325/bf272391-2589-a821-41e3-ab0f698b6fb9.png">


画像全体ではなく構成要素に着目した認識を行えば、より広い意味(カテゴリ)で物体を捉えることができるため、訓練時の情報を効率よくテスト時の認識に活用できる、と言うことでしょうか？
例えば、車や電動バイクを広い意味で乗り物 (車輪がついた何か) として捉えられれば、同じ乗り物である Segway を認識する際に役立ちます。訓練データとテストデータに同じラベルがなくとも、同じ「カテゴリ」ならあるでしょ、と言うことですかね。
結局のところは、画像全体ではなく局所的な情報に着目した比較を行おう、ということを述べています。

この仮説に下づき、本手法は関係性を抽出する relation extraction network と類似度計算を行う distance learning network から構成されるモデルを提案しています。このモデルの構造自体は [1] と同じですが、 relation extraction network では構成要素を考慮した比較を行います。本手法は Fine-Tuning を必要としない近傍法モデルを識別器に採用しています。

## 4.2. モデルの詳細
以下にモデルの概略図と式を示します。説明のため 5-way 1-shot の場合を考えます。
$p$はサポートデータの画像で、計5枚存在します (ex. 鳥, 犬, 車, 船, 飛行機 が一枚ずつ)。$q$はテスト画像です。

$f()$は特徴抽出器でそれぞれの画像を$h\times w \times c $の特徴マップに変換します。 ((1)式)

次がこの論文での一番のポイントです。
[1] ではこの二つの特徴マップをチャネル方向にそのまま Concat していたのですが、本手法では全てのピクセルの組み合わせで Concat します。チャネル方向に関して、それぞれ $h \times w$ の個のピクセルからなるので、計 $(h \times w) \times (h \times w)$ 通り考えられます。
最終的に$(h \times w) \times (h \times w)$行 2c列の行列が得られ、これを $g()$に入力します。((2)式)
この$f(), g()$が relation extraction network です。本論文曰く、 特徴マップの (i, j) 要素は物体の一部として考えることができるので先ほどの仮説をもとにこのような設計にしているようです。

最後に得られた特徴量を行方向に要素毎に足し合わせ((3)式)、Sigmoid関数に入力し類似度として算出します((4)式)。


<img width="1475" alt="スクリーンショット 2018-12-06 22.11.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/108325/9577eac3-b59e-ef9a-c817-19f43e5ffc90.png">


<img width="1346" alt="スクリーンショット 2018-12-06 22.14.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/108325/872d6cd6-350b-6a63-8e87-0fab4715e5ed.png">

## 4.3. 学習と推論
4.2. と同様 5-way 1-shot のタスクを考えます。
学習時のあるエピソードにおいて下の(5)式で Loss を計算します。
入力$p$と$q$が同じクラスだった際のモデルの出力は$s_{pq}$です。$p$と$q$が同じクラスだった時、$t_{pq}=1$、そうでない時に0となるように設定した Cross Entropy Loss です。
エピソード毎に$p$と$q$のクラスが変わります。

推論時は、$q$が入力として入った時、サポートデータである5種類の$p$との類似度を計算し、一番類似度が高いクラスを認識結果として出力します。

<img width="1078" alt="スクリーンショット 2018-12-06 22.48.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/108325/98c4ec30-a00a-34a4-4ddd-c9088e94a0b2.png">


# 5. 実験
Few-Shot Learning では主に Omniglot と MiniImageNet と言うデータセットがベンチマークとして使用されます。Omniglot ではほぼ差がでない (だいたいどの手法も98%くらい出る) ので今回は MiniImageNet の結果について述べます。

MiniImageNet は [7] で提唱されたデータセットで、ImageNet はでかくて毎回計算するのキツいから比較的小さいデータセット使おうや、みたいなスタンスで導入されました。
ImageNet から選ばれた 100 クラスのデータセットで、各クラス600枚の計600000枚の画像データで構成されています。 
通常、$84 \times 84$にリサイズするのですが本論文では$224\times 224$に画像をリサイズしています。
100クラスのうち、64クラスを Train、16クラスを Validation、20クラスを Test として使用しています。通常のタスクと異なり、それぞれでクラスラベルを共有していません。

600エピソードでテストしたとき(明記してないけど多分各エピソードで計80枚テストを行っている)の結果が以下のようになります。平均の値に加え95%信頼区間の値が記述されています。
数値だけ見ると非常に高い結果が出ています。

<img width="1332" alt="スクリーンショット 2018-12-07 0.40.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/108325/7489b6ee-5357-563f-6d5d-e3cb29c07a98.png">


# 感想
実験について
画像サイズを他の手法とそろえなかった理由について明記して欲しかったです。
追加実験で Learn2Compare([7]) を$224 \times 224$ にしたときそれほど精度が向上していない、と言うことを述べていますが、本手法で$84 \times 84$ にした際のことは述べられていません。あくまで推測ですが、本手法は入力のピクセルサイズで精度が大きく変わることが推測されます。それはそれで面白いのでもっと解析して欲しかったです。

個人的な感想として、結果は出ていますが、お気持ち成分が強く、理論的背景が乏しいように感じます。
"Object-Relation"のところの説明の意味はなんとなくわかりましたが、なぜこのモデルでそれが反映できているのか？もう少し説明が欲しかったです。ただ、訓練データとテストデータに同じラベルは存在しなくとも同じカテゴリは存在するでしょ、的な視点は非常に面白いと思いました。
内容について間違った解釈をしていたら優しく指摘してください。それはそうと修論がヤバイ(爆発四散！)

# 参考文献 
[1] Sung et al, Learning to compare: Relation network for few-shot learning. CVPR 2018.
[2] Santoro et al, One-shot learning with memory-augmented neural networks. arXiv preprint arXiv:1605.06065, 2016.
[3] https://bair.berkeley.edu/blog/2017/07/18/learning-to-learn/
[4] Ravi et al, Optimization as a model for few-shot learning. ICLR 2017
[5] Finn et al, Model-agnostic metalearning for fast adaptation of deep
networks. ICML 2017.
[6] Li et al, Meta-SGD: Learning to Learn Quickly for Few
Shot Learning. In: arXiv preprint arXiv:1707.09835
[7] Vinyals et al, Matching networks for
one shot learning. NIPS 2016.