논문 | Learning Visual Commonsense for Robust Scene Graph Generation (ECCV 2020)
Scene Graph Generation (SGG) task에 관한 논문이다. SGG를 간략하게 설명하자면, 이미지가 주어졌을 때 해당 이미지 안에 존재하는 다양한 관계를 그래프로 생성하는 태스크라고 설명할 수 있다. 보통 <subject-predicate-object>로 구성된다. 예를 들어 "사람이 컵을 들고 있는 이미지"가 존재한다면 이 이미지에서 <사람-들다-컵> 이런 triplet (graph)를 만들어낼 수 있을 것이다.
컨셉
Learning Visual Commonsense for Robust Scene Graph Generation 논문은 제목에서 알 수 있듯이 "commonsense 즉, 일반적인 상식를 이용해서 SGG를 더 잘 하겠다!"는 논문이다.
위의 사진은 본 논문에서 제시한 모델이 어떤 일을 하는지 한 눈에 보여주는 이미지이다. 이미지의 위의 부분을 먼저 보면, Perception 이라는 모듈이 객체 사이즈가 작고, 어두워서 bird를 bear라고 잘못 인식했다. 하지만, 일반적인 상식으로 bear보다는 bird가 가지 위에 있는 것이 더 말이 되기 때문에 Commonsense 라는 모듈은 bear를 bird로 바꾼 그래프를 만들었다. Fusion 모듈은 Perception과 Commonsense 모듈이 만든 각각의 그래프를 보고, 어떤 그래프를 채택할지 선택하는 역할을 한다.
이미지의 아래 부분은 Perception 모듈이 명확하게 코끼리를 인식했지만, 일반적인 상식으로는 사람이 그림을 그리는 것이 더 말이 되기 때문에 Commonsense 모듈은 코끼리를 사람으로 바꾼 그래프를 생성했다. Fusion 모듈은 아까와 마찬가지로 두 그래프를 비교하고, Perception이 정확하게 코끼리를 인식했다고 판단하여 최종 그래프를 생성한다.
본 논문은 다른 SGG와 다르게 scene graph를 조금 다른 형식으로 표현한다. 다른 SGG 논문에서는 일반적으로, subject와 object는 node로 표현하고 그 사이의 predicate를 edge로 표현한다. 하지만, 이 논문에서는 subject, object 그리고 predicate 까지 모두 node로 표현한다. 이를 통해, 동일한 subject, object pair 사이에 여러 predicate이 존재하는 경우도 표현할 수 있다고 한다. (일반적인 scene graph의 표현방식을 이 논문처럼 바꾸는 것도 어렵지 않음!)
SGG task의 목표는 $P(G|I)$ 를 최대로 하는 graph를 생성하는 것이다. $P(G|I)$는 $P(I|G)P(G)$ 와 동일하고, 각각 perception과 commonsense로 바라볼 수 있다. commonsense는 어떤 것이 말이되고 어떤 것이 말이 안 되는지 결정하는 것을 의미하는데 따라서, 가능한 모든 경우에 대한 사전 분포로 $P(G)$로 볼 수 있다.
Perception($f_p$)은 아무 SGG 모델을 의미한다. 이미지를 input으로 받아서 graph ($G_P$)를 생성한다. Commonsense($f_C$)는 perception이 생성한 그래프($G_P$)를 input으로 받아서 또 다른 그래프($G_C$)를 생성한다! 위에서 언급했듯이 각 모듈이 생성한 그래프를 Fusion 모듈이 받아서 최종 그래프를 생성한다.
Global-Local Attention Transformer
Global-Local Attention Transformer (GLAT) 라는 것을 본 논문에서 제안했는데, 가장 큰 특징 2가지는 다음과 같다.
- BERT 처럼, 노드 중 일부를 masking하고 missing node를 예측하도록 학습한다.
- Transformer에 local attention을 추가한다.
GLAT는 perception 모듈이 만든 그래프 $G_P$를 input으로 받는데, 이 때 entity와 predicate이 모두 node로 표현되어 있다. 각 레이어마다 node feature $X^{(l)}$를 새로 만든다.
$H_l$은 layer $l$의 attention head 집합을 의미하고, 아래와 같다.
$H_l^G$는 global attention head를, $H_l^{LS}$와 $H_l^{LO}$는 각각 subject와 연결되어 있는 노드 사이의 local attention head, object와 연결되어 있는 노드 사이의 local attention head를 의미한다.
global attention은 모든 노드를 보는 일반적인 multi-head attention을 생각하면 되고, local attention은 이웃한 노드 사이의 attention을 의미한다.
바로 위의 수식한 subject node의 local attention을 의미하는데, $A_s$는 subject node의 Adjacency matrix를 의미한다. object node에 대해서도 마찬가지로 계산한다.
쨋든 위의 과정 (global-local attention transformer)를 통해서 context vector를 얻는데, 이를 이용해서 $G_c$를 생성한다. 이 때 이를 위해서는 각 node가 entity인지 predicate인지 분류와 node pair 사이에 edge가 subject, object, no edge 중 어디에 해당하는지 분류하는 작업을 진행한다. 이는 cross-entropy loss를 이용해서 학습한다.
Fusing Perception and Commonsense
Perception 모듈과 Commonsense 모듈을 통해서 얻은 그래프를 어떻게 섞을 수 있을까?는 Fusion 모듈이 해결해야할 일이다.
$L_i^P$는 $G_P$의 node i의 logit vector를 의미한다. $G_C$의 node i에 대해서도 동일하게 구해준다. 이 때, GLAT는 순서를 바꾸지 않기 때문에 $G_P$와 $G_C$의 node i는 동일한 entity 혹은 predicate을 의미한다.
위의 수식을 통해서 node i에 대한 fused logit $L_i^F$를 구할 수 있다. 여기에 softmax를 씌워서 node i의 classification distribution을 계산할 수 있다.
Experiments
위의 표를 보면, 그냥 SGG 모델을 사용했을 때 보다 전체적으로 성능이 오른 것을 확인할 수 있다!
이 외에 더 자세한 내용은 논문을 직접 읽어보는 것을 추천한다!
관련 자료
Paper 📑 https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123680630.pdf