機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

Graph R-CNN for Scene Graph Generationを読んだのでメモ

はじめに

Graph R-CNN for Scene Graph Generationを読んだのでメモ.

手法の概要

まず,Iを入力画像,VIの物体領域と対応したグラフのノード,Eを物体間の関係性(グラフのエッジ),O,\:Rが物体と関係性を示すラベルとしてそれぞれ定義.ゴールとしてはP(S=(V,E,O,R)|I)というモデルを作ること.言葉で言えば画像を入力とした時に物体位置とそれらの関係性を出力するようなモデルを作りたいということ.この論文では以下のようにモデルを3つの要素(物体検出,関係性検出,グラフラベリング)に分解して考える.

\displaystyle
P(S|I)=\overbrace{P(V|I)}^{Object\: Region\: Proposal}\underbrace{P(E|V,I)}_{Relationship\: Proposal}\overbrace{P(R,O|V,E,I)}^{Graph\: Labeling}

要は物体を検出してから物体同士の関係性を結ぶ処理をend-to-endにやったというもの.グラフラベリグは最終的なrefinementと考えていいらしいが,処理的には物体の分類と関係性の分類(人と服に対して"wear"を出力するようなこと)をする.

Object proposals

object proposalsはFaster R-CNNで実装したとのこと.出力として空間的な位置r_i^o=[x_i,y_i,w_i,h_i],poolされた特徴ベクトルx_i^o\in\mathbb{R}^d,クラス推定ラベルp_i^o\in\mathbb{R}^Cの3つ.これらをproposalの数n並べたものをR^o\in\mathbb{R}^{n\times 4},\:X^o\in\mathbb{R}^{n\times d},\:P^o\in\mathbb{R}^{n\times C}とする.

Relation Proposal Network

Object proposalsによってn個の物体領域候補が得られた際,\mathcal{O}(n^2)の可能なconnectionがある.ただ基本的には多くの物体ペアは実世界の規則性から関係性を持たないことが知られているため,Relation Proposal Net (RePN)なるものを用いてその規則性をモデリングするというのが論文のコントリビューションの一つ.RePNは物体間の関連度合い(relatedness)を効率的に推定できるらしく,関連度の低いエッジを切ることでscene graph候補を減らしていく.

Relatednessの推論にはクラス推定結果の分布P^oを使う.具体的にはP^oが得られたらエッジの方向を含んだ全ての組み合わせn\cdot(n-1)についてrelatedness s_{ij}=f(\mathbf{p}_i^o,\mathbf{p}_j^o)を計算する.fは学習によって得られる関数で,ここでは[\mathbf{p}_i^o,\mathbf{p}_j^o]を入力とする多層パーセプトロンを考える.ただし,愚直に実装すれば入力のペアの二乗回計算が必要になるため,次のようなカーネル関数を使ってこれを避ける.

\displaystyle
f(\mathbf{p}_i^o,\mathbf{p}_j^o)=\langle\Phi(\mathbf{p}_i^o),\Psi(\mathbf{p}_j^o)\rangle

\Phi(\cdot ),\Psi(\cdot )はそれぞれ,relationshpにおけるsubjectsとobjectsのための関数で,論文ではそれぞれ2層の多層パーセプトロン(MLP)を使ったとのこと.このように分解すれば,score matrix S=\{s_{ij}\}^{n\times n}が行列積で表現できる.注意としてスコアの範囲を0から1にするために最後にsigmoid関数をかますとのこと.スコア行列が得られた後はソートしてtop Kを選ぶことで物体ペアの候補を選ぶ.ただし,以下で計算されるIoUを使ってNMSを行う.

\displaystyle
IoU(\{u,v\},\{p,q\})=\frac{I(r_u^o,r_p^o)+I(r_v^o,r_q^o)}{U(r_u^o,r_p^o)+U(r_v^o,r_q^o)}

I,Uはそれぞれbounding box間のintersection領域とunion領域を示す.一般的に検出で使われているIoUとの違いは入力が二つの物体ペア\{u,v\},\{p,q\}(つまり4つのbounding box)であること.以上の操作によってm個の物体ペアを表現したグラフ\mathcal{g}=(\mathbf{V},\mathbf{E})を得て,各々のペアのunion boxからvisual representations X^r=\{x_1^r,\dots,x_m^r\}を取得する,

Attentional GCN

出来上がったグラフの構造からcontextual informationを得るためのモデル,attentional graph convolutional network (aGCN)について.

まずベースとなるGCNについて.グラフの各ノードiが特徴量z^i\in\mathbb{R}^dを持つとし,隣接ノードの特徴量を\{z_j|j\in\mathcal{N}(i)\}とする.ここでは学習される重みWと隣接行列\mathbf{\alpha}を使って以下のような変換を行う.

\displaystyle
\mathbf{z}_i^{(l+1)}=\sigma\left(WZ^{(l)}\mathbf{\alpha}_i\right)

\sigma非線形関数を表し,Z\in\mathbb{R}^{d\times Tn}は特徴量を並べた行列.隣接行列はノードi,jが隣接関係にある時\alpha_{ij}=1でそれ以外は0の値を持つ.ただしここでは対角成分は1としている.つまるところ重み行列に隣接行列をかけることで隣接関係があるところのみ重みが残るというもの.

この論文では上のGCNの\mathbf{\alpha}を2層MLPを使って次のように求めてしまおうというもの.

\displaystyle
u_{ij}=w_h^T\sigma(W_a[\mathbf{z}_i^{(l)},\mathbf{z}_j^{(l)}]) \\ \displaystyle
\mathbf{\alpha}_i=\mathrm{softmax}(\mathbf{u}_i)

w_h,W_aは学習パラメータで[\cdot,\cdot]はconcatenationを表す.また,\mathbf{\alpha}はsoftmaxの値にかかわらず対角成分1,隣接関係が無いノードに対応する要素は0にするそう.要は隣接行列にアテンションの構造を突っ込んだということ.

ここまででNの物体とmの関係性が得られていて,上記のaGCNを使って物体と関係性の表現を更新しようというもの.ただし,その時aGCNが処理するグラフは今までの流れで得られたグラフにスキップコネクション(離れたノード同士を繋げるもの)を導入したグラフになる.これは従来研究で取られていた方法でパフォーマンスが向上するらしい.ここで注意として,現状得られたグラフにはobject\leftrightarrowrelationship,relationship\leftrightarrowsubject,object\leftrightarrowobjectに関する接続がある.さらに言えば,subjectからrelationship方向とrelationshipからsubject方向で接続の意味合いが変わることが考えられる.そこでタイプaからタイプbへの変換(例えばs=subjectsからo=objectsへの変換)の重み行列をW^{ab}と定義する.色々ごちゃごちゃした説明が続いたが,この論文における最終的なaGCNの計算は以下のように行われる.objcetに関する特徴量の更新は次のように行われる.

\displaystyle
\mathbf{z}_i^o=\sigma(\overbrace{W^{skip}Z^o\mathbf{\alpha}^{skip}}^{Message\:from\:Other\:Objects}+\overbrace{W^{sr}Z^r\mathbf{\alpha}^{sr}+W^{or}Z^r\mathbf{\alpha}^{or}}^{Messages\:from\:Neighboring\:Relationships})

次にrelationshipに関する更新は

\displaystyle
\mathbf{z}_i^r=\sigma(\mathbf{z}_i^r+\underbrace{W^{rs}Z^o\mathbf{\alpha}^{rs}+W^{ro}Z^o\mathbf{\alpha}^{ro}}_{Messages\:from\:Neighboring\:Objects})

として計算される.ただし,ここでの各隣接行列は\mathbf{\alpha}^{skip}を除き対角成分は0.

論文中ではobjectとrelationshipのノードの特徴量zの初期値はopen choiceだと述べられていて,intermediate feature (多分物体検出で使われるCNNの中間出力のことかと)か検出の時のsoftmax関数を噛ませる前の特徴量が選べるとのこと.

loss function

最初に三つに分けたプロセスP(\mathbf{R},\mathbf{O}|\mathbf{V},\mathbf{E},\mathbf{I}),P(\mathbf{E}|\mathbf{V},\mathbf{I}),P(\mathbf{V}|\mathbf{I})それぞれ教師ありで学習する.P(\mathbf{V}|\mathbf{I})はfaster RCNNのRPNで使われたロスと同様のものを使う.P(\mathbf{E}|\mathbf{V},\mathbf{I})はbinary cross entropyを使って各objectペアの関係性のあるなしを学習.最後にP(\mathbf{R},\mathbf{O}|\mathbf{V},\mathbf{E},\mathbf{I})はmulti-class cross entropyを使って物体の分類,術語の分類を学習.

まとめ

去年くらいGCNの研究を少ししてたけど,どうしてもノード数が増えてくると演算回数,メモリ共に厳しくなるからその辺誰か解決してくれないかなという気持ち.後,今回はGCNへの入力となるグラフのノード数は物体の数に依存して可変な気がするけどどうやって扱っているのでしょう.