image

paper , code

TL;DR

  • I read this because.. : SGG 초기 논문
  • task : one-stage SGG
  • problem : RPN 없이 object 뽑고 relation도 뽑아보자
  • idea : multiperson pose estimation의 associate embeddings 아이디어 차용. body joint에서 비슷한 임베딩을 가진 애들끼리 같은 사람으로 묶는 네트워크.
  • architecture : hourglass + CNN + 1D CNN으로 object와 relation이 있을 것 같은지 각각의 heatmap 생성. train 때는 GT, infer에는 top k activation 된 픽셀에 대해 object는 anchor based box regressor, cls id 예측. relation은 relation class, subject object id를 예측.
  • objective : bbox regression loss + sigmoid loss for heatmap + ce for subject / object id +pull together loss + push apart loss
  • baseline : VRD with lanugage prior , Scene Graph Generation by Iterative Message Passing
  • data : Visual Genome
  • evaluation : SGGen, SGCls, PredCls
  • result : SOTA
  • contribution : first one-stage SGG
  • limitation / things I cannot understand : feature vector가 예측도 해야되고 자기들끼리 가까워지고 멀고 하는 loss도 추가적으로 있는 것 같은데 상이한 방향인 것 같은데 한 공간에서 학습하는게 신기하네

Details

image

그냥 그림이 귀여워서 한 컷

Preliminaries : Hourglass network

https://deep-learning-study.tistory.com/617 image

u-net이랑 비슷한 느낌의 네트워크. pose estimation할 때 local과 global 정보 모두 필요해서 쓰임.

Architecture

image
  • Detecting graph elements image -> hourglass network -> CNN -> 1 x 1 conv + sigmoid로 object와 relation(sbj, obj의 중앙값으로 bbox 정의)에 대한 heatmap을 뽑도록 함 -> (학습 시에는) GT vertex, edge를 가지고 feature를 뽑은 뒤에 1) obj는 faster RCNN 방식으로 anchor 기반 offset regression, cls, id 예측 2) rel은 rel cls, sbj(논문에서 src) id, obj(논문에서 dest) id 예측

  • Connecting elements with associative embeddings 위에는 object, relation id들만 뽑았었고 이제 그 조합을 하는걸 해야됨. 각 vertex에 대해 vector embedding이 나오는데 그 vector embedding이 vertice끼리는 다양하게 학습되어야 하고 edge의 경우 subject와 object의 id를 표현할 수 있는 임베딩이 되어야 함 그래서 pull together, push apart loss를 추가

pull together loss

image

$h_i\in\mathbb{R}^d$ : vertex $v_i$의 임베딩 $h_{ik}’$ : vertex $v_i$에 연결되어 있는 모든 edge의 임베딩. $k=1,…K_i$.

push apart loss

image

서로 다른 Node가 다른 embedding을 갖도록

Result

image