画像説明文を編集して正確にするShow, Edit and Tellの論文要約

# Show, Edit and Tell: A Framework for Editing Image Captions

* Fawaz Sammani, Luke Melas-Kyriazi,  
* CVPR 2020
* https://arxiv.org/abs/2003.03107v1
* コード
    * https://github.com/fawazsammani/show-edit-tell



![スクリーンショット 2020-04-26 14.52.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/dc2cd408-4be0-6c73-1ae3-838bbe1445eb.png)



## ひとことまとめ


* **どんなもの？** 
    * 既存のイメージキャプションモデルが生成した文章を編集して，より適切な文章を生成するモデルの提案
* **先行研究と比べてどこがすごい？**
    * 比較相手に生成・編集モデル含めて，MS COCOのイメージキャプショニングでsota
* **技術や手法のキモはどこ？**
    * 基本はencoder-decoder
        * encoderはcaption encoder(言語入力), R-CNNベースのネットワーク(画像入力)からなる
        * decoderはCopy-LSTM，Selective Copy Memory Attention機構，attentionLSTMからなる
            * attentionLSTMは，[単語埋め込み，キャプションencoderの隠れ状態，画像特徴，言語LSTM(自分自身)の前の隠れ状態]をつなげたものを扱い，その出力は前者２つに送る
            * 前者２つで既存キャプション中の単語をコピーして出力するか，編集して出力するかを決定
    * それとは平行に，DCNetというデノイジングオートエンコーダを導入
        * 入力キャプションをノイズ付きとみなしてデノイズし，出力結果はCopy-LSTMの出力と合わせてMLPに送る
    * cross-entropyに加え，隠れ状態間のMSEを損失関数として使用している
* **どうやって有効だと検証した？**
    * イメージキャプショニングの有力モデルとBLEU(1-4 gram), ROUGE-L, CIDEr-D, SPICEの値を比較
    * 質的評価，アブレーションスタディ
* **議論はある？**
    * なし
* **次に読むべき論文は？**
    * [2]： Anderson et al. 2018
        * イメージキャプショニング用attention，bottom-up and top-down attention(Up-Down)を導入．本モデルでも各所で使用
    * [8]： Huang et al. 2019
        * イメージキャプショニング(生成モデル)のsota．attentionの後にattention-on-attentionモジュール追加
    * [23]： Jiang et al. 2018
        * 編集モデル．イメージキャプショニングの編集タスクを提案
    * [7]： Hashimoto et al. 2018
        * 自然言語からソースコードを生成するためのretrieve-and-editフレームワークを提案
    * [22]： Rennie et al. 2016
        * image captioning用の目的関数を導入


## abst

* フロムスクラッチでキャプションを生成するより既存のものを編集するほうが簡単
    * モデルはすでにキャプションに存在する情報(文章の構造など)は学習する必要がない
        * したがって詳細を詰める事に集中できる(繰り返された言葉を取り除くなど)
* 既存キャプションに対するrefinementの繰り返しによるイメージキャプショニング手法を提案する
    * モデルは２つのサブモジュールからなる
        1. EditNet: 
            * 適応的コピーメカニズム(Copy-LSTM)とSelective Copy Memory Attentionメカニズム(SCMA)を持った言語モデル
        2. DCNet:
            * LSTMベースのデノイジングオートエンコーダ
    * これらにより既存キャプションを直接コピーおよび修正できる
* sequenceレベルの訓練なしで，MS COCOでsotaの性能を示している

## 5. 結論

* 将来的にvisual question answeringやneural machine translationにも拡張できるだろう


## 1.イントロ


* イメージキャプショニングはビジュアルシーンに対して自然言語の説明をつけるタスク
    * この分野ではここ５年でニューラルencoder-decoderが人気
        * sotaはCNNのエンコーダ，LSTM(やTransformer)のデコーダ，とattention機構で構成されている
            * attentionによりデコーディングプロセスで画像の特定領域に注目することができる
                * [8, 2, 28, 16, 30]など研究が盛ん
* 高品質なキャプションは２つの要素からなる
    1. 一貫した自然言語の文(文章の構造)
    2. 視覚的に根拠のある内容(正確な詳細)
* 現在のモデルは画像特徴からキャプションへのマッピングをゼロから学習するが，[28, 2, 29]等の生成物を調べると，不正確，一貫性のなさ，内容の繰り返しがみられる
    * そのため[7, 23]などは文の生成ではなく，生成された文の編集という問題を考え始めている
        * 図1はsotaのモデルにより “A sandwich on a table with a table.”という文が生成されており，文の構造は正しいが，tableが繰り返されているため全体としてはおかしい
            * caption-editingモデルはこれを認識して “A sandwich on a table with a glass of wine”のように修正が可能
* 本手法はキャプション編集のデコーディングステップで既存キャプション(入力)内の単語が選択されて，それと対応するメモリ状態がLSTM(Copy-LSTM)の内部構造にコピーされる
    * Copy-LSTMはselective copy attention mechanism(SCMA)を持つことで，入力単語を編集するか，そのまま最終出力のキャプションへとコピーするか選択できる
        * 図１では最初の「table」はそのままcopy, 2つ目の「table」は「glass」へと編集している
* 今まで説明したのがキャプション編集フレームワークEditNetであり，それとは別にDCNetを提案する
    * DCNetは前のキャプションをデノイズすることを学習するデノイジングオートエンコーダ
        * 新しい目的関数(隠れ状態間のMSE)を最適化して訓練する．これにより単純で効率的にdecoderの性能改善が得られる


## 2. 関連研究

### 2.1. Image Captioning

* [27]はCNN encoder, LSTM decoderからなるモデルを提案
* [28]はattention機構を加えたことで[27]を劇的に改善した
* [2]はimage captioning用にbottom-up and top-down attention(Up-Down)というattention機構を設計した
    * attention LSTMを言語LSTMの前に追加することで画像の空間的特徴に選択的に注目できる
* [8]は現在のsota
    * 言語LSTMと通常のattentionの後にattention-on-attentionモジュールを追加
* [22]はimage captioning用の目的関数を導入
    * 従来は正解キャプションとの単語レベルのcross-entropyを最小化して訓練するのが普通だったが，sequenceレベルの目的関数を使った
        * CIDEr[26]やMETEOR[4]など

### 2.2. Sequence-to-Sequence による編集

* sequence-to-sequenceモデルの出力を編集すると多くのモデルで性能が改善する
    * [7]は自然言語からソースコードを生成するためのretrieve-and-editフレームワークを提案
        * code autocompletionタスクとHearthstone cards ベンチマークで通常のseq2seqモデルよりも性能が大きく改善している
* [23]は画像キャプションを編集するタスクを提案
    * deep averaging networkを使い，既存のキャプション(seq2seqモデルで出力)をencodeしてベクトルにし，このベクトルのgated outputとLSTMの出力を加え，LSTMモデルが残差情報を学習するようにした
        * sotaを上回ることはできていない
* 本手法は[23]で提案された編集タスク用のフレームワークであり，[23]やsotaの[8]と比べても大幅な性能改善が見られる

## 3. 提案手法

![スクリーンショット 2020-04-26 15.26.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/d5d078ab-838a-cfc1-15df-10e5faea40b1.png)



### 3.1. EditNet

* 入力キャプションにある単語を，編集するかコピーするか，ということを学習する
    * 次の要素をもつencoder-decoderである
        1. Selective Memory Attention Mechanism(SCMA)
        2. Copy LSTM decoder

#### 3.1.1 EditNetアーキテクチャ

* [2]のbottom-up and top-downアーキテクチャをベースにした
    * R-CNNベースのネットワークを使って，入力画像から36個の視覚特徴を抽出
        * これらの特徴は$V = \{ v_1, v_2, ..., v_k\}$と書き，$v_i \in \mathbb{R}^{2048}$であり，kは物体の数($k=36$)
    * encoderの出力と入力キャプションを使って，decoderは入力キャプションの編集版を出力する
        * [2]同様，decoderはattention LSTMと言語LSTMを持つ
            * 先行研究と異なり，入力キャプションLSTMとSCMAモジュールが追加されており，言語LSTMはCopy-LSTMと置き換える
        * 入力キャプションは単方向1レイヤLSTMでエンコードする．
            * エンコードされた結果は$\bar{h} = [ h_1^e, ..., h_n^e ]$と書き，nは入力キャプションの単語数
                * 対応するLSTMcellのメモリ状態は$\bar{c} = [c_1^e, ... c_n^e]$

-

* 次の入力をconcatenateしてattentionLSTMに送る
    1. 単語埋め込みベクトル
    2. キャプションencoderの最後の隠れ状態
    3. mean-poolされた画像特徴$\bar{v} = \frac{1}{k}\sum_i$
    4. 言語LSTMの前の隠れ状態
* $x_t^1 = [w_t; h_n^e; \bar{v}; h_{t-1}^2]$
* このattentionLSTMは通常のLSTMであり，SCMAモジュールから入力を取らないのでCopy-LSTMではない
    * attentionLSTMの出力$h_t^1$は２つのattention vectorを計算するのに使われる
        * 1つは視覚特徴，もう一つはtext特徴
        * これらはゲーティング機構で融合され，Copy-LSTMの入力に使う

-

* テキスト特徴のattention重みについてはSCMAモジュールの入力にも使う
    * SCMAモジュールは入力キャプションLSTMから選択してコピーすることを学習する
    * SCMAモジュールの出力はCopy-LSTMの入力に使う
* Copy-LSTMは次の入力を取る
    1. attention LSTMの出力
    2. visual attended vector
    3. gated textual vector
* Copy-LSTMは隠れ状態$h_t^2$を出力，これは最後のLinearレイヤに渡され，語彙に対してsoftmax 確率分布を予測する
    * この分布はデノイジングオートエンコーダの出力と融合され，最終的な出力単語となる


#### 3.1.2 Selective Copy Memory Attention (SCMA) 

![スクリーンショット 2020-04-26 22.24.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/30bf3cb7-cdab-b81b-c1ae-0c88fda48c0a.png)



* SCMAは入力キャプション中の単語に対応するメモリ状態を選択してコピーすることを可能にする
    * 最初のdecoder 出力$h_t^1$と前のキャプション中の各単語$\bar{h_s}$との類似度を，浅いニューラルネットワークとsoftmaxで次のように測る
        * $\alpha_p = softmax(w_a^T tanh(W_s \bar{h_s} + W_h h_t^1)) \tag{1}$
            * 通常のattention機構と異なり，$\alpha_p$は直接使わず，入力キャプションencoder LSTMの対応するメモリ状態を利用する
                * 最も類似度が高い($\alpha_p$からの出力で最も高いsoftmaxの値)に対応するメモリ状態$c_t^e$を入力キャプションencoderからコピーする

-　

* このindexing操作は微分不可能なので，re-parametrization trick[12]を使う
    * 二値マスク，シフティングマスクの２つを作成する
        1. 二値マスク$m_b$はソフトマックス出力$\alpha_p$の最大値のインデックスに1を持つ
        2. シフティングマスク$m_s$は最大の単語の$\alpha_pm_b$の結果が1になり，それ以外が0にできるような残差値を持つ
    * この操作(re-parametrization)は次式で表される
        * $c_S^e = \sum_{i=1}^n (\alpha_{p_i}m_{b_i} + m_{s_i}) c_i^e \tag{2}$
            * 最大単語のattention 重みが0.8だとすると，$m_{b_i} = 1$で$m_{s_i} = 0.2$
                * 抽出されたメモリ状態は$c_i^e(0.8 \cdot 1 + 0.2) = c_i^e$
            * 最大でない単語のattention重みが0.3だとすると，$m_{b_i} = 0$で$m_{s_i} = 0$
                * この場合$c_i^c(0.3 \cdot 0 + 0) = 0$
            * 最大の値より小さい確率の単語は0がかけられるので消えて，最大確率のmemory cell $c_i^e$だけが残る
                * コピーされたメモリ状態$C_S^e$はCopy-LSTMで利用する


#### 3.1.3 Copy-LSTM

![スクリーンショット 2020-04-26 22.24.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/b531d43c-9cce-17e3-c42f-fc5e0dea4631.png)


* 入力キャプションとSCMAモジュールの情報を言語decoderに組み込むためにLSTMを拡張
    * SCMAモジュールからの情報を，他の入力(視覚特徴と隠れ状態)に比べてどれくらい取り込むかを制御するcopy gateを持つ(3)
        * 通常のLSTMはforget, input, outputのゲートと，メモリ状態があり，次で示される
            * $f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$
            * $i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$
            * $\tilde{C_t} = tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$
            * $C_t = f_t * C_{t-1} + i_t * \tilde{C_t}$
            * $o_t = \sigma(W_o[h_{t-1}, x_t] + b_o)$
        * copy gate $c_{g_t}$を組み込む．これはコピーされたメモリ状態と現在生成された単語との類似度を計算していると考えることができる
            * $c_{g_t} = \sigma(W_n \cdot [C_t, C_S^e]) \tag{4}$
        * 両方のメモリ状態から取得する量を計算し，LSTMのメモリ状態を次のように修正
            * $C_{ap_t} = c_{g_t} * C_S^e + (1- c_{g_t}) * C_t \tag{5}$
        * 新しく構成されたメモリ状態をtanhして，出力ゲートの値をかけて隠れ状態が計算れる
            * $h_t = o_t * tanh(C_{ap_t})$
    * これらにより，Copy-LSTMは望みの情報を出力表現$h_t$に組み込める
        * この隠れ状態は出力レイヤに渡し，キャプション中の次の単語を予測する
        * ゲート$c_{g_t}$が1なら，入力キャプションの単語が完全にコピーされ，０なら前のキャプション(=入力キャプション)は無視されて単語が新しく生成される


#### 3.1.4 Context Gating

* 本モデルは既存キャプションの言語特徴に着目するが，もし既存キャプションが間違った情報を持っていた場合言語LSTMをミスリードする可能性がある
    * そこでソースコンテキスト(テキストのattended feature vector)とターゲットコンテキスト(word embedding featrue vector)にどれだけフォーカスするかを学習するcontext gateを組み込む
        * $c_m = z_t \odot tanh(W_s c_t) + (1 - z_t) \odot tanh(W_t \cdot [w_t; h_t]) \tag{7}$
            * $z_t = \sigma(W_z \cdot [w_t; h_t; c_t]) \tag{8}$
            * $c_t = \sum_{i=1}^n \alpha_{p_i}h_i^e \tag{9}$
    * この操作はattention vectorから要らない要素を完全に排除するのに良い

### 3.2. Denoising Captioner (DCNet) 

* EditNetとは並行して，DCNetというデノイジングオートエンコーダで入力キャプションのデノイズを行う
    * DCNetは双方向LSTM encoderとLSTM decoderからなる
    * テキスト特徴のみ扱う．視覚特徴は扱わない
    * EditNetとのパラメタの共有は行わない

### 3.3. 目的関数

* クロスエントロピー(XE)を最小化してモデルを訓練する
    * $L_{XE}(\theta) = - \sum_{t=1}^T log(p_{\theta}(y_t^* | y_{1:t-1}^* )) \tag{10}$
* XEで訓練した後，言語デコーダを，言語モデルの最後のデコーダ隠れ状態と正解キャプションの最後の隠れ状態との間で，mean-squared errorで更に訓練する
    * 正解キャプションの隠れ状態はデノイジングオートエンコーダのエンコーダに正解キャプションを通すことで得る
    * 誤差は次で表す
        * $L_{MSE} = \frac{1}{n} \sum_{i=1}^n (h_n^d - h_n^g) \tag{11}$
            * ここで言語モデルの最後の隠れ状態を，活性化関数なしで線形に写像する
            * $h_n^d = W_d h_n^2 + b_d \tag{12}$
    * この方法でDCNetのCIDERスコアが1.171から1.183に上昇した
        * 一般的なseqence-to-seqenceやvector-to-seqenceタスクに使用できる
* 最終的な目的関数は
    * $L = L_{XE}(\theta) + L_{MSE} \tag{13}$

### 3.4. 実装の詳細

#### EditNet

* 視覚特徴には[2]のbottom-up特徴，言語特徴には[8]のキャプションを使った
* LSTMエンコーダ，デコーダのembeddingと隠れ層サイズは1024，attention次元は512
* EditNetをcross-entropyで15epoch訓練．MSE最適化は行わない
* ADAMを使用し，バッチサイズ80，初期学習率5e-4，3エポックごとに0.8の倍率で学習率を減衰
* scheduled sampling probabilityが5エポックに0.05[5]
* CIDEr-Dスコアをsequenceレベルの訓練で25epoch最適化した
    * 初期学習率5e-5，CIDER-Dスコアが１エポックで何も改善しなくなったらアニール0.5
    * ラベルスムージングは使用しない 

#### DCNet

* encoder LSTMについては
    * 各方向とも隠れサイズ512，最後が1024
* decoderは
    * top-down decoder[2]を使用．隠れサイズ1024，埋め込み次元1024, attention次元512
* cross-entropyで4エポック訓練
    * その後MSEで１エポック追加訓練
* バッチサイズ60, EditNetと同じ最適化設定を使った(XEとCIDER-Dについて)

## 4. 実験

### 4.1. データセット

* MSCOCOで評価
    * 123,287 枚の画像
    * それぞれの画像が，5人の別々の人によってつけられた5つのキャプションを持つ
* 標準的なKarpathy データ分割 [10]を使ってoffline 性能比較
    * 5000枚validation, 5000枚test, 113287枚訓練
* 文章はすべて小文字にし，3回以下しか現れない単語は取り除く
    * 語彙13368単語になった
* 評価方法はBLEU(1-4 gram), ROUGE-L, CIDEr-D, SPICE


### 4.2. 量的解析

![スクリーンショット 2020-04-26 23.14.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/4994afa0-e165-0270-8bd1-47cedf54a61c.png)
![スクリーンショット 2020-04-26 23.14.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/3227836f-9552-1b17-0e82-e0ce545ccc4c.png)


* 表1のcross-entropy誤差について，SPICE以外で本モデルは最も高いスコア
* sequenceレベルの最適化で，CIDER-D以外で最も高いスコア
* 本モデルと同じキャプション編集モデルはModification Networks(MN)[23]のみ比較しているが，それよりもかなり高い性能を示した

### 4.3. 質的解析

* 図5，６
![スクリーンショット 2020-04-26 23.12.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/ef7b18aa-1adf-6ae0-72d3-d5e5e7efdf3a.png)
![スクリーンショット 2020-04-26 23.13.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/fbbc0082-dd45-8440-4a91-ec2f87c541f4.png)

### 4.4 アブレーションスタディ

* 次のことに関して調査する
    1. cross-entropyによる訓練のあとにMSEを使うかどうか
    2. Copy-LSTMとSCMAを一緒に使うかどう
        * 視覚特徴，context gate, DCNetを取り除いてEditNetをcross-entropyのみで訓練
            * 事前訓練されたAoANetとだいたい同じ程度の結果になった
        * 視覚特徴なしでcontext gateの性能を調べると，CIDER-Dを117.3から117.5に上昇させていた
        * 視覚特徴，context gate 両方を持つEditNetだと，全体的にスコアが向上
* non-differentiable indexingの代わりにメモリ状態にsoft-attentionを使うとCIDER-Dが低下する

![スクリーンショット 2020-04-26 23.13.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/0a4450e5-800c-8567-f551-c3bbd1739255.png)