이 논문은 3D point clouds part segmentation에서
compositional zero-shot learning을 수행하는 논문이다.
본 논문의 큰 기조는 object에서 part를 구한 뒤
part정보들로 부터 classification을 수행하는 것이다.
ECCV'22
https://arxiv.org/abs/2111.14673
3D Compositional Zero-shot Learning with DeCompositional Consensus
Parts represent a basic unit of geometric and semantic similarity across different objects. We argue that part knowledge should be composable beyond the observed object classes. Towards this, we present 3D Compositional Zero-shot Learning as a problem of p
arxiv.org
Abstract
저자들은 3D Compostional Zero-shot Learning(3D-CZSL)을
제안하여 segmenting과 classifying을
seen/unseen object에 동시에 수행하는 task를 제안한다.
저자들은 Compositional-PartNet dataset을 제안하여 benchmark를 제공한다.
저자들은 Decompositional Consensus를 제안하여
part segmentation network와 pat scoring network를 결합한다.
두 network는 object마다 part prior이 정의된
서로다른 part 조합을 추론하여
가장 알맞은 segmentation mask를 만들어낸다.
이것은 compositional zero-shot segmentation과
zero-shot classification이 수행가능하다.
3 Proposed Approach
Problem formulation
$\mathcal{T}$은 instances (x,o,z)가 잇는 training set이다.
x는 intput object point cloud $\mathbb{R}^{3}$다.
o는 object class label이다.
z는 모든 가능한 part의 집합 $\mathcal{P}$으로 부터 part $p$에 해당하는
part segmentation mask다.
o에 대해서는 $O_{s} \cap O_{u} = \varnothing$다.
이때 저자들은 unseen object인 $O_u$의 part도
모든 가능한 part의 집합 $\mathcal{P}$에 속한다고 가정한다.
저자들은 모든 class에 대해 모델이 part prior에 접근 할 수 있다고 가정한다.
part prior은 한 class $o$에 대해 구성된 사전 지식이라고 할 수 있고
$P_{o} = \left\{p_{1}, ..., p_{l}\right\}$라고 한다.
Laptop Part Priors의 경우 $l$은 2고 screen, surface로 구성된다.
Method overview
기존 point clouds segmentation 방법은
특정 class에 특화된 개별 모델을 학습하거나
객체 클래스 레이블을 모델 입력으로 제공하여
조건부 모델로 학습한다.
그러나 이러한 방법은 input으로 입력되는 class가 어떤 것인지
모델에 알려주어야 하므로 unseen에서는 수행할 수가 없다.
이렇게 모델에 입력 class정보를 주는 것을 object prior라고 한다.
저자들의 방법은 먼저 이 object prior 방법론을 지우고
compositional part segmentation을 제안한다.
또 앞 단계에서 얻은 part segmentation으로부터
obejct class를 예측하는
DeCompositional Consensus를 제안한다.
이것은 레고 블럭과 같이
segmentation 가설과 part-based object classification에 대해 학습한다.
다음은 논문 파이프라인이다.
3.1 Compositional Part Segmentation
input point clouds $x$가 입력될 경우
learnable parameter $W$를 사용하여
모든 part set $P$에 중에서 각 part $p$에 대한 part score를 반환하는
part segmentation 함수 $\mathcal{F}\left(x, p\right)$를 정의한다.
이때 출력되는 output은 PointNet기준
하단의 point features다.
training time때,
저자들은 segmentation loss $L_{Seg}$를
part prior $\mathcal{P}$에 있는 모든 set이 아닌
ground-truth $o$에 해당하는 $\mathcal{P}_{o}$에 대해
cross-entropy로 계산한다.
inference time때,
object $o$의 예측된 part segmentation mask $\widehat{z}(o)$는
part prior에 있는 모든 part에 대해 score가 계산된다.
이 mask는 part prior의 $o$개수 만큼 가지게 된다.
이렇게 만들어진 $|O|$개의 segmentation masks (hypotheses)를
Hypothesis Bank (HB)라고 한다.
위 모델 구조를 보면 backbone network로 부터 $M$차원의 벡터가 출력된다.
아마 미리 정의된 part class 종류가 $M$개가 있을 것이고
Part Prior $P$를 통해
output $M$차원 중에 해당하는 part class만을 떼어내서
output 확률을 구하는 것으로 예상된다.
(확실하지 않으니 주의)
3.2 DeCompositional Consensus
DeCompositional Consensus(DCC)는
최종적으로 part-based object classification을 하는 것이다.
Hypothesis driven part pooling
part segmentation mask $\widehat{z}(o)$에 대해
max pool 연산을 통해
각 hypothesis에서 발견된 part $p$에 대한
part descriptors $d$가 있는 set $\mathcal{D}(o)$를 반환한다.
여기서 반환된 $|\mathcal{D}(o)|$는 $|\mathcal{P}(o)|$와 다를 수도 있다.
Learning DeCompositional Consensus
저자들의 DCC 모델은 part scoring function $\mathcal{G}$를 배운다.
part descriptor $d$에 대해
함수는 score $\mathcal{G}(d,p)$를 반환한다.
이것은 part $p$에 속하는 part descriptor의 likelihood를 측정한다.
DCC score는 다음과 같이 정의한다.
likelihood는 참고로 확률 분포의 모수가
어떤 확률변수의 표집값과 일관되는 정도를 나타낸 값이다.
이는 다음과 같이 cross-entropy loss를 통해 학습한다.
$L_{DeComp}$는 Hypothesis Bank 전체에 대해 계산되기 때문에
segment가 어려운 part의 bias를 방지하기 위해
각 input의 ground thuth segmentation mask $z$에 대해
part classification loss $L_{Part}$를 계산한다.
Inference
input point clouds $x$에 대한 object class prediction $\hat{o}$는
다음과 같이 구한다.
$\hat{o}$에 대응되는 hypothesis에 따라 최종 part segmentation output이 결정된다.
4 Compositional PartNet Benchmark
PartNet의 데이터 레이블을 비슷한 요소끼리 통합하고
또 seen unseen부분을 나눠서 C-PartNet benchmark를 제안하였다.
5 Experiments
모델 구현에 대해 조금 살펴봤는데
우선 모델 구조에서 max pool은
PointNet의 max pool이 아니다.
backbone feature를 생성할 때 이미 PointNet max pool이 적용되었다.
또 Part Scoring Function $\mathcal{G}$는
2개의 MLP 층이라고 했는데 보통 MLP는 input size가 고정이다.
그러나 그림사에서는 input size가 2개, 3개 다양한 것을 볼 수 있다.
코드를 대강 살펴보니 one-hot encode를 feature에 곱하는 방식으로
필요한 feature값만을 살리고 나머지는 0으로 만드는 방식을
사용하는것으로 보인다.
이 부분은 확실하지 않으니 주의하기 바란다.
해당 부분은 저자의 github의
ferjad/3DCZSL/shaper/models/part_cls/model.py
부분에서 살펴보면 될 것이다.