Graph R-CNN for Scene Graph Generationを読んだのでメモ
はじめに
Graph R-CNN for Scene Graph Generationを読んだのでメモ.
手法の概要
まず,を入力画像,
を
の物体領域と対応したグラフのノード,
を物体間の関係性(グラフのエッジ),
が物体と関係性を示すラベルとしてそれぞれ定義.ゴールとしては
というモデルを作ること.言葉で言えば画像を入力とした時に物体位置とそれらの関係性を出力するようなモデルを作りたいということ.この論文では以下のようにモデルを3つの要素(物体検出,関係性検出,グラフラベリング)に分解して考える.
要は物体を検出してから物体同士の関係性を結ぶ処理をend-to-endにやったというもの.グラフラベリグは最終的なrefinementと考えていいらしいが,処理的には物体の分類と関係性の分類(人と服に対して"wear"を出力するようなこと)をする.
Object proposals
object proposalsはFaster R-CNNで実装したとのこと.出力として空間的な位置,poolされた特徴ベクトル
,クラス推定ラベル
の3つ.これらをproposalの数
並べたものを
とする.
Relation Proposal Network
Object proposalsによって個の物体領域候補が得られた際,
の可能なconnectionがある.ただ基本的には多くの物体ペアは実世界の規則性から関係性を持たないことが知られているため,Relation Proposal Net (RePN)なるものを用いてその規則性をモデリングするというのが論文のコントリビューションの一つ.RePNは物体間の関連度合い(relatedness)を効率的に推定できるらしく,関連度の低いエッジを切ることでscene graph候補を減らしていく.
Relatednessの推論にはクラス推定結果の分布を使う.具体的には
が得られたらエッジの方向を含んだ全ての組み合わせ
についてrelatedness
を計算する.
は学習によって得られる関数で,ここでは
を入力とする多層パーセプトロンを考える.ただし,愚直に実装すれば入力のペアの二乗回計算が必要になるため,次のようなカーネル関数を使ってこれを避ける.
はそれぞれ,relationshpにおけるsubjectsとobjectsのための関数で,論文ではそれぞれ2層の多層パーセプトロン(MLP)を使ったとのこと.このように分解すれば,score matrix
が行列積で表現できる.注意としてスコアの範囲を0から1にするために最後にsigmoid関数をかますとのこと.スコア行列が得られた後はソートしてtop
を選ぶことで物体ペアの候補を選ぶ.ただし,以下で計算されるIoUを使ってNMSを行う.
はそれぞれbounding box間のintersection領域とunion領域を示す.一般的に検出で使われているIoUとの違いは入力が二つの物体ペア
(つまり4つのbounding box)であること.以上の操作によって
個の物体ペアを表現したグラフ
を得て,各々のペアのunion boxからvisual representations
を取得する,
Attentional GCN
出来上がったグラフの構造からcontextual informationを得るためのモデル,attentional graph convolutional network (aGCN)について.
まずベースとなるGCNについて.グラフの各ノードが特徴量
を持つとし,隣接ノードの特徴量を
とする.ここでは学習される重み
と隣接行列
を使って以下のような変換を行う.
は非線形関数を表し,
は特徴量を並べた行列.隣接行列はノード
が隣接関係にある時
でそれ以外は0の値を持つ.ただしここでは対角成分は1としている.つまるところ重み行列に隣接行列をかけることで隣接関係があるところのみ重みが残るというもの.
この論文では上のGCNのを2層MLPを使って次のように求めてしまおうというもの.
は学習パラメータで
はconcatenationを表す.また,
はsoftmaxの値にかかわらず対角成分1,隣接関係が無いノードに対応する要素は0にするそう.要は隣接行列にアテンションの構造を突っ込んだということ.
ここまででの物体と
の関係性が得られていて,上記のaGCNを使って物体と関係性の表現を更新しようというもの.ただし,その時aGCNが処理するグラフは今までの流れで得られたグラフにスキップコネクション(離れたノード同士を繋げるもの)を導入したグラフになる.これは従来研究で取られていた方法でパフォーマンスが向上するらしい.ここで注意として,現状得られたグラフにはobject
relationship,relationship
subject,object
objectに関する接続がある.さらに言えば,subjectからrelationship方向とrelationshipからsubject方向で接続の意味合いが変わることが考えられる.そこでタイプ
からタイプ
への変換(例えば
subjectsから
objectsへの変換)の重み行列を
と定義する.色々ごちゃごちゃした説明が続いたが,この論文における最終的なaGCNの計算は以下のように行われる.objcetに関する特徴量の更新は次のように行われる.
次にrelationshipに関する更新は
として計算される.ただし,ここでの各隣接行列はを除き対角成分は0.
論文中ではobjectとrelationshipのノードの特徴量の初期値はopen choiceだと述べられていて,intermediate feature (多分物体検出で使われるCNNの中間出力のことかと)か検出の時のsoftmax関数を噛ませる前の特徴量が選べるとのこと.
loss function
最初に三つに分けたプロセスそれぞれ教師ありで学習する.
はfaster RCNNのRPNで使われたロスと同様のものを使う.
はbinary cross entropyを使って各objectペアの関係性のあるなしを学習.最後に
はmulti-class cross entropyを使って物体の分類,術語の分類を学習.
まとめ
去年くらいGCNの研究を少ししてたけど,どうしてもノード数が増えてくると演算回数,メモリ共に厳しくなるからその辺誰か解決してくれないかなという気持ち.後,今回はGCNへの入力となるグラフのノード数は物体の数に依存して可変な気がするけどどうやって扱っているのでしょう.