NeruIPS 2022년에 나온 논문이다. 

source free domain adaptaion의 문제인데 이를 간편하게 Attracting과 dispersing으로 풀었다는데 문제를 한번 보자. 

Attracting과 dispersing의 개념은 상반되 개념으로 끌어당김과 분산을 의미하는 바이다. 

이 논문에서는 간편한 방법으로 풀었다고 하며 clsutering의 upperbound에 대해서 해결방안을 제시하며 다른 방안으로도 문제를 풀었다. 

이 논문의 경우 Srouce free말고도 , domain adaptation, contrastive learning에도 적용할수 있는점이 강점으로 가지고 있는 듯 하다. 

 

Method 

우선적으로 사용되어지는 수식은 다음과 같다. 

sample dataset $D_t = \{x_i^t\}^{N_t}_{i=1}$ 

output features : $z_i = f(x) \in \mathbb{R}^C$ , $z_i \in \mathbb{R}^h$

classifier output : $p_i = \delta(g(z_i)) \in \mathbb{R}^C$

softmax : $\delta$

 

Attracting and Dispersing for Source-free Domain Adaptation

저자는 SFDA의 문제를 attracting와 dispersing으로 풀었으며 이때 $z_i$를 2개의 memory bank를 사용하여 문제를 풀었다. $z_i$에 가까운 set을 KNN으로 $C_i$로 만들고 가깝지 않는 것에 대해서는 $B_i$로 하여 정의를 하였따. 이러한 2개의 memory bank의 경우에서는 계속 하여 update가 되어지며 이러한 $B_i, C_i$에 있는 Prob의 경우에서는 아래의 식과 같이 구성이 되어진다. 

이러한 2개의 prob를 KL loss로 풀게 되었는데 이는 밑의 수식과 같다. 

분모의 부분과 분자의 부분은 1로 가까워짐으로 이는 contrastive처럼 동작이 되는데 $P(C_i)$의 경우는 점점 가까워지게 되고 $P(B_i)$의 경우는 $B$와

는 점점 멀어지게 된다. 

이러한 수식의 풀이는 밑의와 같이 진행이 되어진다. 

 

 

이러한 수식은 아주 간편하게 하나의 Loss로 되어진다.

그렇다면 기존의 discriminability (dis) and diversity (div)로 구별이 되어지는 loss는 어떻게 되어지는지 표에서 보자. 

Mutual informtaion maximizaing의 경우에서는 다른 논문에서 적용했던 방법론으로 unsupervised clustering에서는 많이 사용이 되어진다. $H(Y|X)$의 unambiguous의 부분은 최소화하고 entropy 부분인 $H(Y)$의 경우는 전체 data에 대한 Entropy를 높여서 ambiguous한 부분을 밀어내는 영향이 있다. 

 

Batch Nuclear-norm Maximization (BNM)의 방법은 Frobenius norm을 사용해서 사용하였으며 second term의 경우에서는 rank로 하여서 구성하였다. 

 

Neighborhood Clustering (NC)의 경우에서는 주변의 KNN의 distance에 대당하는 값의 경우 weight를 주어서 cluster가 되도록 하며 다른 diversity의 부분은 멀게 하는 방법으로 사용이 되어진다. 

 

결과는 아래와 같이 나오게 되어진다. 

 

 

DA의 방법은 Source data의 접근이 가능해야 MMD같은 방법을 사용할수 있음. 또한 ADDA parameter를 share해서 새로운 adversarial framework를 제시하지만 각 domain마다 다른 mapping을 해서 문제를 풀었음. 

특히나 source model에서 나온 Distribution을 전부다 기존의 loss로 shift시킬수 없으니 Information maximization을 시킨다. (신기..)

maximum mean discrepancy (MMD) : source domain 과 target domain간의 discrepancy를 최소화하는것 

반응형

들어가며

세상에는 많은 데이터가 있다보니 labeling하기에는 시간과 노동이 소요된다. 이를 해결하기 위해서 Doamin Adaptaion(DA)방안이 제안 이 되었으며 label 과 unlabel과 함께 학습하여 unlabel된 doamin에도 유사한 성능이 나올 수 이도록 하는 기법이 많이 연구가 되었다.

하지만 DA의 방식은 개개인의 Device나 환경에서 학습을 할려면 source data와 Weight를 다시 가져서 학습을 해야된다는 단점이 있다.

기존에는 Unsuperivsed DA (UDA)의 문제로 접근을 하여 data를 주면서 학습했던 반면 저자는 source model을 주어서 학습을 하는 방안을 제안을 하였다. 그렇게 되어지면 source domain에 대해서는 privacy를 보존할수 있으며 가볍게 학습을 하여 효과적으로 target | domain에 대해서 사용할수 있도록 만들수 있다.

저자는 soruce model를 data represntation하는 encoding module과 classification을 해주는 Classfier로 나뉘어주었고 target하 는 data에서 encoding module만 represntation을 잘하게 되어지면 classifiter은 잘 동작할 것이라고 가설을 내새웠다.

이에 Source HypOthesis Transfer (SHOT)를 방안을 제시하며 encoder와 classifiter를 freeze한 상태로 target domain에 서 학 습을 하였으며 target represntation learning을 하기 위해서 pesudo label를 방안을 제시하였다.

 

Method

이 방법의 notion으로 정리를 하게되면 아래와 같다.

  • label samples : Sixis, y^i_s\}^(n_x)_{i=1]$ , source domain : $D_s$
  • unlabeld samples : $\{x^i_t\^{n_t)_{i=1}$ , target domain : $D_t$
  • predict label : $\{y^i_t\}^{n_t}_{i=1}$
  • source task :  $X_s \to Y_ s$, target task $X_t \ to Y_t$ 
  • source model : $f_s: X_s \to Y_s$
  • SHOT의 model은 $f_t : X_t \to Y_t$ 로 $\{y^i_t\}^{n_t}_{i=1}$ 로 예측을 한다.
  • closet-set : source, target domain 에서 label space가 같을 경우
  • open-set : source, target domain 에서 몇몇이 unseen classes일때
  • partial-set : source label space가 target domain작을때

UDA에서 사용되었던 3가지 step으로 학습을 하게 되어지며 간략하게 source model을 만든후에 $D_t$ 에 source data 없이 transfer learning을 한다음 adpataion performace를 향상시키는 방안으로 진행이 되어진다.

설명했던 방안에 대해서 그림과 같이 차례대로 보자.

 

source model genetator 

첫째로 $f_s: X_s \to Y_s$ 의 경우 cross entropy로 인하여 데이터를 만들게 되어지며 K개의 class를 가질 경우 

K dimensional vector $a$를 만들게 되어지며 이는 $q$개의 one-of-K의 encdoing이 되어지도록 만든다. (B,C,K 로 만든다는 소리)

이때 $y_s, q_k$랑 같으면 1 다르면 0으로 되어지게 되며 target data의 alignment를 위해서 label smoothing도 넣게 된다. 

이때 $q^{ls}_k = (1-\alpha)q_k + \alpha / K$로 구성되어진다. 

 

Source Hypothesis Transfer with Information Maximization (SHOT-IM)

source model ($f_s$)의 경우에서는 $g_s : X_s \to \mathbb{R}^d$와 $h_s : \mathbb{R}^d \to \mathbb{R}^K$로 구별되어지면 최종적으로 $f_s(x) = h_x(g_s(x))$로 되어진다. 

기존에서는 DA에서는 sharing을 하면서 학습을 하였지만 이 방안에서는 $g_s $만 학습이 되어진다. 

특히나 이 논문에서는 같은 $h_s$를 사용하기 때문에 비슷한 domain끼리 학습에 유용하다.

또한 source data는 활용하지 않다보니 distribution이 다르게 $D_t$에서는 domain gap차이가 적어야 함으로 infomation maximization(IM) loss를 사용하게 된다. 

이는 distribution간의 거리를 최소하게 하는 loss로 자주 사용한다. 

 

Source Hypothesis Transfer Augmented with Self-supervised Pseudo-labeling

이전에 사용되었던 IM loss를 통해서 distribuion간의 cluster가 되지만 밑의 그림에서와 같이 label이 잘못 뭉쳐져있다,

이는 target domain에서 output이 [0.4,0.3,0.1,0.1,0.1]처럼 entropy가 높으며 이를 해결하기 위해서 pesudo label를 넣게 되어진다. 

Deep cluster의 방안을 사용하여서 pesudo label를 만들게 되어지며 이는 k-means clustering을 통해서 만들어진다 .

이떄 $\hat{y}_t 는 cetntroids를 바탕으로 pesudo label를 만들어진다. 

 

최종적으로 정리를 하자면 $f_s(x) = h_x(g_s(x))$ 와 pesudo label를 만들고 hypothesis(classifer)부분은 freeze한 상태로 학습을 진행을 하게 되어진다. 

Network Architecture fo Source Model 

source model에 대해서는 weight norm을 사용하였음. 

 

Experiments

office, office-home, VisDa-C, Digits로 사용하였음.

 

반응형

Contrastive Test-Time Adaptation (CoTTA)

 

들어가며 ..

DNN은 training과 test의 data의 distribution은 따라서 학습이 되어지지만 unseen data에 대해서는 domain shift가 되어지는 단점을 가지고 있다. Dsitribution shift는 labeled source 데이터가 새로운 target domain에 대해서 transfer knowlege를 하는것이 목적이다.

최근에는 test-time, source free라는 조건으로 Domain adpataion(DA)를 접근을 하고 있으며 source data는 test data에 대해서는 더이상 사용하지 않는 개념을 가지고 있다.

TTA는 source model에 대해서만 접근을 할 수 있으면 된다.

 

TTA는 2가지의 조건이 있는데

1. 어떻게 target domain representation을 GT annoitation없이 어떻게 학습을 할 것인가?

2. 어떻게 traget domian calssifier를 적절한 soure domain classifiter만 가지고 만들어야되는가?

이러한 해법을 위해서 image/featuer generation, class prototypes, entropy minimization, SSL, Pesudo lable, SSL with auxiliary task가 있다.

 

Genteration의 경우는 capaicity가 많이 필요하며

Entropy minimization (EM)의 경우는 competitve하지만 entropy의 disrupt를 야기하는 단점이 있다.

Pesudo labeling은 promise한 result지만 noisy한 label를 만듬.

SSL의 방법은 auxiliary rotate prediction task를 source와 target에 training을 하게 되어지며 이 방법의 단점은 source 에 traninig protocol이 추가적으로 들어각 ㅔ되는점이다.

Contrastiive learning의 paradigm을 적용하여 학습 하는 방안의 경우는 transferalbe rotate의 비교하여 하는 방법으로 최근에 pre-training stage에서 ssl를 학습을 하는 방법을 제안한다.

저자는 이 이전의 방법의 경우 SSL을 최대한 활용하지 못한다고 말한다. 특히나 adaptation stage에 대해서 ...

 

이번 저자는 TTA를 SSL 사용하며 더 좋은 representation을 학습을 하게 pesudo labeling을 사용하여 향상 시켰으며 auxiliary contrastive learnin을 통해서 online pesudo label를 만들면서 정확도를 올렸다.

이를 활용하기 위해서 MOCO에서 사용했던 memory bank르 사용하였따. 기존의 방식보다 hyperparemter의 tuning의 폭이 커졌다.

 

 

 

TENT SHOT의 단점은

the entropy minimization objective does not model the relation among different samples and more importantly, disrupts the model calibration on target data due to direct entropy optimization.

the pseudo labels are updated only on a per-epoch basis, which fails to reflect the most recent model improvement during an epoch.

 

 

Method

Source 모델을 얻기 위해서 Stand cross entropy를 사용하여서 softmax를 이용하여서 학습을 하였으며

Online pseudo label refinement방법을 사용하였음.

target data에 대해서 pesudo label을 만들기 위해서 Source model의 weight를 가져왔었으며 한 epoch이 끝날때마다 peusudo label를 update를 하였으며 , refinement nearest -heighbor soft voting으로 update되어진다.

soft k nearest neighbors : https://github.com/DianCh/AdaContrast/blob/c3c8b880131f2658d6fd0d5ed14d71f326174d57/target.py#L123

위의 첨부한 그림을 기반으로 설명을 하자면 $x_t$라는 Test case에 weak augmenation ($t_w$)를 적용을 하며 Random distribution $T_w$ 를 이러한 Feature들을 vector화를 시켜 $w=F_t(t_w(x_t))$ 로 뽑아내게 되어지게 되어지면 feature들에서 target feature space와 유사한 nearest neighbors가 나오게 되며 argmax를 사용하여 peusdo label를 뽑아지게 되어진다. 이때 나온 값을 $\hat{y}$라고 한다.

code link : https://github.com/DianCh/AdaContrast/blob/c3c8b880131f2658d6fd0d5ed14d71f326174d57/target.py#L240 

 

class AdaMoCo(nn.Module):
    """
    Build a MoCo model with: a query encoder, a key encoder, and a memory bank
    https://arxiv.org/abs/1911.05722
    """

    def __init__(
        self,
        src_model,
        momentum_model,
        K=16384,
        m=0.999,
        T_moco=0.07,
        checkpoint_path=None,
    ):
        """
        dim: feature dimension (default: 128)
        K: buffer size; number of keys
        m: moco momentum of updating key encoder (default: 0.999)
        T: softmax temperature (default: 0.07)
        """
        super(AdaMoCo, self).__init__()

        self.K = K
        self.m = m
        self.T_moco = T_moco
        self.queue_ptr = 0

        # create the encoders
        self.src_model = src_model
        self.momentum_model = momentum_model

        # create the fc heads
        feature_dim = src_model.output_dim

        # freeze key model
        self.momentum_model.requires_grad_(False)

        # create the memory bank
        self.register_buffer("mem_feat", torch.randn(feature_dim, K))
        self.register_buffer(
            "mem_labels", torch.randint(0, src_model.num_classes, (K,))
        )
        self.mem_feat = F.normalize(self.mem_feat, dim=0)
        
    @torch.no_grad()
    def _momentum_update_key_encoder(self):
        """
        Momentum update of the key encoder
        """
        # encoder_q -> encoder_k
        for param_q, param_k in zip(
            self.src_model.parameters(), self.momentum_model.parameters()
        ):
            param_k.data = param_k.data * self.m + param_q.data * (1.0 - self.m)

 

그 이후에서는 

Memory Queue

 

memory quete : $$ Q_w $$ 를 통해서

weak augmented target sample과 currnet mini batc에서 같은 source weight에서 momentum을 추가하여준다.

 

Joint self supervised contrastirve learning

contrastive learning 을 적용하기 위해서 pair-wise 하게 접근을 하는것이 기반이 되어야 한다. 저자는 self supervised랑 test data간의 contrastive learning을 합쳐서 적용하기 위해서 같은 영상에 다른 view끼리 positivie pair로 하게 하면서 다른 이미지간에서는 밀어내어 학습을 하게 한다.

이를 위해서 target image는 $x_t$로 정의를 하며 strong augmentation의 경우는 $t_x, t'_x$로 정의가 되어지며 최종적으로 $t_x(s_t), t'_s(x_t)$간의 contrastive로 학습을 하게 되어진다. 

 

encoder initialization by source

MOCO의 모델과 유사하게 target encoder $f_t$를 source model wieght로 적용을 하며 momentum encoder $f'_t$로 initialize하게 된다. 이 momentum encoder로 $Q_w$를 updating하면서 학습을 하게 되어진다. 

 

Exclusion of same-class negative pairs

앞전에 init하였던 encoder들의 바탕으로 augmentation을 달리하여 q와 k라는 feature를 뽑아내어 infoNCE loss를 사용하여 cosine distnace를 minimize를 하여준다. 

이 loss를 바탕으로 postivie간에는 push하지 않고 다른 image간에는 negtaive로 밀어내게 되어진다.

 

Additional regularization

FixMatch에서 영감을 받아서 psudo label를 만들어내었으며 weakly-augmentation 과 strong augmentationd의 몇가지 중요한 distinctions를 하여 만들었다.

1. 절대 GT를 접근을 하지 않으며, 이전에 사용했던 Pesudo label를 refine하며, confidence한 threshold를 만들지 않으며 source initialization을 한 바탕으로 시작을 하는것을 전제로 하였다. 이를 정규화를 하기 위해서 Cross enotropy를 사용한다.

 

 

 

 

 

 

반응형

introduction

이번 논문에는 Neurlps 2019에 나왔던 weakly supervised instance segmentation에 관한 논문이다. 

아마 bbox annotation만을 가지고 instance segmentation을 하는 방법에서 multi instance learning(MIL)을 사용했다는 점에서 새로운 방식으로 접근을 하였다. 

논문의 코드는 https://github.com/chengchunhsu/WSIS_BBTP. 해당 링크에 있다. 

 

Method 

기본적인 instance segmentation의 pipeline의 경우는 대표적 two stage instance segmentation의 방식 중에 하나로 Mask-RCNN으로 구성이 되어있는 것을 볼 수 있다. 

밑의 있는 그림에서 나와있듯이 첮번째로는 ResNet101에서 RPN을 통해서 ROI를 추출한 다음 ROI aline을 한 후 Bbox를 추출하는 건 일반적인 object detection의 방식과 같은 형식으로 진행이 된다. 

저자가 제안한 방법은 segmentation branch의 방법으로 이때 MIL을 사용하여 진행을 하게 되어지며 이때 tightness prior를 주게 된다. 

그렇다면 MIL을 어떻게 하였을까? 

  • 일반적으로 MIL의 경우는 postive, negative  bag의 설정이 중요하다.
  • MIL의 경우는 image내에서 해당하는 class가 있을때를 postivie bag로 설정하며 없을 때는 negative bag로 설정하여 bag들을 섞어서 postivie bag일 때 해당 class를 classification을 하는 방법을 말한다. 
  • 이를 통해서 image classification에 해당 class에 localization을 잘할수 있는 장점이 있다.
  • weakly supervised object detection중 대표적인 예시로  "C-MIL: Continuation Multiple Instance Learning for Weakly Supervised Object Detection"가 있으며
  • 이 논문에서는 저자는 밑의 그림과같이 한 개의 이미지 내에서 bbox를 무작위로 추출한 다음 IOU기준으로 높은 곳을 positive box로 하며 그 외의 것을 negative로 하여 MIL을 적용하며 좀 더 개선하기 위해서 subset의 개념들을 들고 와서 문제를 풀었다 

  • 이번 논문에서는 ROI에서 추출된 bbox끼리 MIL을 적용하는 방식을 사용하게 되는데 
  • Bbox에서 나온 여러개의 bbox를 horizontal & vertical으로 sample들을 무작위로 추출하게 된다. 
  • 이때 해당 label bbox에서 나온 sample을 반듯이 instance기준으로 pixel들이 반듯이 들어가기 때문에 positve bag으로 설정하며 다른 bbox에서 나온 sample들은 해당하는 pixel들이 들어가지 않음으로 negative bag로 설정을 한다.

 

  • 이로 인해서 training set의 경우 $D = \left\{I_n, B_n \right\}^B_{n=1}$으로 되며 MIL을 적용하게 되면 $D = \left\{I_n, B_n,\tilde {B}_n \right\}^B_{n=1}$으로 되며 $tilde {B}_n$에서는 k개의 positive & negative bags들이 포함이 되어있다. 

 

  • 이를 수식적으로 풀어보면 밑의 수식으로 되어지는데 
  • segmentation branch에서는 instance score map 나오게 되며 이를 $S$로 부르며 positive & negative bags는 $\hat{B}^+ , \hat {B}^-$와 함께 MIL을 적용하게 된다. 
  • 총 2가의 term으로 loss가 구성이 되어져있있으며 전자를 unary term과 pariwise term으로 구성이 되어있다.

unary term loss

  • positive & negative bags에서 tigthness constraints를 $S$를 바탕으로 loss를 적용하게 되는데 이는 mask를 좀 더 tight 하게 만드는 효과가 있다고 제안한다. 
  • positive bags의 경우는 $S$에서 반듯이 instance pixel이 있어야 함으로 maximal prediction score를 뽑아지도록 Loss를 주게 되며 반면에 negative box의 경우에서는 $S$에서는 pixel이 없어야 하므로 모든 pixel들이 minimize 되도록 하게 하는 형식이다. 
  • 이때 $P\left( \hat{b} \right)=max_{p\in \hat {b}} S\left ( p \right )$로 되며 probability의 경우 maximum이 된 경우 positive bag로 되어지면 반대의 경우는 negative bag로 예측이 되게 된다. 

Pairwise term

  • 전체의 obejct내에서 CAM을 이용한 결과와 argumentation의 하기전을 다시 적용하여 2개의 regulization을 했다고 보면 된다. 
  • 우리가 아는 consistency regulization을 적용했다고 보면 되겠다. 

 

  • 밑의 표와 같이 다양한 논문에 비교를 하였으며 해당 loss에 대해서도 ablation study도 실시한 것을 볼 수 있다. 
  • 그림은 상당히 준수한 수준으로 나왔다. 

 

하지만 이러한 좋은 방법에도 불구하고 같은 instance에 대해서는 아쉬운 성능을 보였으며 이는 추후의 개선점으로 보인다. 

반응형

Abstract

  • One-stage instance sementation의 새로운 방식으로 제안한 방법
  • FCOS base로 구성이 되어있으며 BlendMask가 나오기 이전에 제일 좋은 성능을 내었던 방식임
  • 2가지의 문제점을 가지고 접근을 하였으며 object instance differentiation 과 pixel-wise feature alignment에 대해서 문제점을 지적하였음. 
  • Local shape와 global saliency map을 사용해서 instance간의 구별을 하였으며 기본적으로 scratch로 학습을 하였을경우 mask AP 34.5가 나온다고 하고 있음.
  • 밑의 그림처럼 2개의 feature map을 잘  ensemble하여 mask를 획득하였음.

 

Method 

  • abstract에서 말했듯이 저자는 2가지의 문제점을 지적을 하였다.
    • 첫번째로는 instance끼리 어떻게 분리를 할것인지 (기존의 여러 방식이 있지만 좋지는 않음) 
    • feature map에서 어떻게 pixel-wise location을 aligment를 할것인지에 대해서 해결책을 놓을려고 하였다. (이방법도 마찬가지로 TensorMask처럼 4D로 풀기도하였고 contour를 맞췄지만 정확하지 않음) 
  • 따라서 제안한 방법은 local shape에 대한 방법뿐만 아니라 global saliency map을 사용하여 aligment부분과 instane끼리 분리할수 있도록 제안하였다. 

Local shape prediction

  • 첫번째로 재안한 방법은 다른 위치에 있는 instance를 구별하기 위한 방법을 제안하였다. 
  • 저자는 다른 Instance까리는 shape와 size가 다르기 때문에 2개의 branch(shape,size)를 사용하여 multi task 문제로 접근하였다.
  • shape의 branch의 경우 그림4와 같이 $H X W X S^2$로 만들었으며 ($S^2$는 shape 는size에 대한 vector를 의미함 ) size의 branchr경우에서는 $H X W X 2$로 만들었다.(2가 의미하는 바는 bbox의 Width,Height 를 의미한다.)
  • 이 두 branch의 합하여 local shape를 뽑아낼수 있는데 이는 그림 4에 첨부된것처럼 shape branch에 해당하는 한개의 center point의 Pixel에는 local에 대한 shape를 가지고 있으므로 S X S로 reshape를 하며 같은 위치의 pixel은 height 와 width를 가지고 있으므로 reshape된 SxS를 HxW로 resize하여 combination을 하게 되면 local shape에 대한 정보를 가진 featuer가 나오게 되어진다. ( 의문점은 shape의 vector를 어떻게 만들었는지?? )

Global Saliency Generation 

  • 이렇게 만든 instance mask는 coarse한 문제점이 있는데 이를 어떻게 좀더 정확한 mask로 만들기 위해서  globa saliency map을 이용하여 풀었다. 
  • 저자는 이를 sigmoid로 class-agnistic하게 하여 feature map을 뽑아내어 전체를 obejctness에 해당하는 map을 얻어내었다. 

Mask Assembly

  • 최종적으로 위의 2개의 feature map을 조합하는것이 필요하며 shape branch에서 나온 결과에 해당하는 pixel에 대한 위치를 global saliency map에 해당하는 위치로 crop을 하여 combination을 하게되는데 이를 multiple하여 정확한 instance를 뽑게 된다. 
  • 이때 사용되어지는 mask loss function의 경우 objectness만 사용하여 loss를 구하게 되어진다.

  • 전체적인 학습의 pipeline은 centernet과 똑같이 진행이 되어진다. heatmap에 대한 $L_p$의 부분은 regression으로 focal loss처럼 주었으며 $L_{size}$의 경우는 L1 norm으로 주었으며 $L_{offset}$의 경우는 stride의 주어서 featuer map에 맞춰서 L1 norm을 마찬가로 주어서 학습을 진행하였다. 
  • 최종적으로는 다른 constant를 주어서 sum을 하여 loss를 적용하였다.

 

 

Result

  • 역시 ablation study를 많이 진행하였으며 shape를 변형, backbone, local shape branch의 사용 global branch의 사용등 다양한 방법을 사용하기 전후에 대한 비교를 진행을 하였으며 
  • 그림 5에 보이는것처럼 shape의 branch만 사용했을때에는 global에 대한 featuer가 없으니 instance끼리는 분리를 하더라도 coarse mask가 나오는것을 볼수 있으며 반대인 경우에서는 shape는 정확할지라도 instance에 대한 구분이 없는것을 볼수 있다. 

 

반응형

Instance segmenation에서는 two stage, One stage, multi stage로 구별이 가능하다. 

 

Two stage instance segmentation

  1. Top down instance segmentation
    • Backone에서 featuer를 가지고 instance segmenation을 하는 방법을 말한다. 
    • R-CNN
      • 아주 일반적으로 알고 있는 network로 Two stage의 전형적인 방법 중에 하나이다. Region Proposal Network (RPN)을 통해서 featuer에서 region을 뽑아내어 해당 영역에 bbox를 뽑아내기도 하며 이를 개선된 버전의 경우 Mask branch를 추가한 Mask-RCNN이 있으며 에측된 Mask를 IOU기준으로 score를 넣어서 만든 Maks-RCNN-score도 있다.
    • Contour information Although Mask R-CNN
      • Mask RCNN에서는 방향성이 없어서 point of view가 약간만 달라져도 contour information이 달라져서 mask가 정확하지 않는 점이 있다 이를 개선하기 위해서 direction도 학습을 하여 만든 MaskLab이라는 방법도 있다. 
      • 또한 polar coordinates를 사용해서 내부 centroid를 기준으로 contour를 얻어 instance mask를 구하는 경우와 chebysheve polynoimal를 사용하거나 snake algorithm를 사용해서정확한 contour를 얻는 방법 또한 제안이 된다. 
    •  Dense sliding window
      • 대표적으로 Deep Mask, SharpMask가 있으며 FCN에서 featuer mask를 만드는 방법을 말하며 이를 skip connection처럼 주어서 개선한 형태를 sharpMask이다. 
    • Multi level feature 
      • 위와 같은 network에서 좀더 다양한 layer에 있는 feauter를 뽑아서 만든 네트워크는 PANet이라고 부르며 밑의 첨부한 그림과 같이 되어진다.
    • 이점 및 단점 
      • network가 상당히 simple하면서도 robust한 성능이 나오는 점이 있으며 mask의 branch만 추가해주면 되니 쉽게 적용도 가능하다. 
      • 하지만 결국 obejct detection에 좀더 의존하는 경향이 있다보니 이전의 network의 성능이 떨어지면 instance segmenation의 성능도 많이 떨어질수 밖에없다. seg에서는 찾아지는점이 obejct detection에 대해서는 못찾을수도 있기 때문에 아쉬운점이 있따. 

SharpMask / PANet


  • Bottom up instance segmentation 
    • The main difference among different bottom-up instance segmentation methods is on how to perform pixel-level semantic projection and aggregate semantic projection into different object instance
    • 위와 같은 방법은 바로 pixel level에서 다른 instance를 구별하는 방법을 말한다. 
    • 물론 two stage방법이긴 다른 방식으로 접근을 한다. 
    • Obejct Box cropping 
      • 위와같은 방법은 pixel level과 obejct detection을 통해서 semantic segmenation과 CRF를 적용한 pixel wise classification을 통해서 instance segmenation을 한 후 다시 CRF 해서 최종적인 결과를 내는 DeepCRFs가 있으며
      • 좀 더 end-to-end로 개선시킨 방법인 shape term과 globl term branch를 추가시켜 만든 Dynamically Instantiated Network가 있다. 
    • Contour inforation 
      • 다른 접근 방법은 semantic segmentation mask를 기반으로 Watershed를 적용시킨 방법도 있다. (Deep Watershed Transform)
    • Pixel center catergorization & Depth information 
    • Clustering Based on off-the-shelf semantic segmentation architectures
      • use the pixel affinity information as the clustering clue to distinguish object instances.
    • 단점
      • First, a robust semantic segmentation network backbone is needed to project each pixel into high-level dimensional space. Second, the postprocessing method has poor generalization ability and cannot handle complex cases,

 

 

Multi-stage method 

  • cascade network
    • Instance 유무 -> mask 생성 -> classificaion (Multi task-network cascade) 
    • RPN에서 bbox생성 -> original feature map과 이전 bbox의 IOU로 좀더 좋은 bbox생성으로 instance seg 향상 (cascade RCNN)

MTNC / HTC network

 

반응형

Instance segmenation을 위한 review paper정리

  • instance segmenation issue
    • semantic segmentation + object detection으로 된 문제로써 좀 더 풀기 어렵다
    • 일반적으로 semantic segmentation에 대해서는 정확한 localization과 recognition이 필요함과 더불어서 segmentation에 대한 computational cost가 좀 더 효율적이 여야 된다. 
    • 또한 object detection의 경우에서는 feature representation이 잘되어저야 하는데 기존에는 SIFT, HOG 등 local descriptor를 사용한 방법을 많이 사용하거나 Fisher Vector처럼 exploring 한 접근 법도 많이 사용하고 있었다 
    • detection의 경우는 inference time과 accurate detection과의 trade off이기도 하며 image scale에 대해서도 많은 challenge가 필요하다.
    • 이를 합친 instance segmentation에서는 small object에 대해서는 issue를 유발하고 있으며 CNN layers로 찾는 게 challenge가 되고 있음. (receptive field, dilated convolution )
    • 추가적으로 geometric transformation과 occlusions에 취약하다는 좀더 해당이 된다.
더보기

occlusion : Put simply, occlusion in an image occurs when an object hides a part of another object

Instance segmentation method

Classification of Mask proposals

  • 가장 초창기에 사용되었던 방법으로 two stage로 문제를 푸는 방법을 말한다. 
  • Faster RCNN 같은 RPN을 사용하여 문제를 푸는 방법을 의미한다.
  • Selective Search를 통해서 ROI polling을 하여 mask를 뽑아낸다. (자세한 내용은 Faster RCNN을 보면 된다)  
    • 속도는 two stage임으로 optimize 하기가 어려운 단점이 있으며 detection scale에 issue가 있는 문제점이 있다. 

Detection followed by segmentation 

  • 지금도 많이 사용하고 있는 방안으로 Mask RCNN의 방법이면서 개선된 버전으로 연구가 계속되고 있다. 
  • Faster RCNN에서 몇 개의 CNN layer로 되어있는 branch를 넣어서 mask도 prediction 하는 instance segmentation이 효과적으로 나오는 방식이다. 

Labelling pixels followed by clustering

  • 다른 접근법은 2개의 network로 각각 학습을 시켜 하나는 semantic segmentation을 하게 하며 나머지는 class를 학습시킨 뒤에 후처리로 funsion을 하는 방법이 있다. 
  • 이 방법의 경우 high resolution을 잘 찾아지는 장점이 있으나 정확도는 mask rcnn에 비해서 낮게 나옴을 볼 수 있다.

Dense sliding window methods

  • 이 방법의 경우에서는 기존의 방법과는 다르게 localization을 더 잘 뽑아내기 위해서 feature을 아주 세밀하게 뽑아내었으며 여러 

  • 위와 같은 classification으로 풀거나 Detection후에 푸는 방법의 경우 two stage 기법으로 묶을 수 있으며 
  • Labeling 후에 clustering을 하는 방법은 multi stage
  • Dense sliding을 하는 방법은 one stage방법으로 구별을 할 수 있다. 
  • Single stage의 경우에서는 box와 mask와 동시에 구하는 반면에 two stage나 multi stage의 경우 순차적으로 계산하는 방식이라고 볼 수 있다. 

따라서 해당하는 method는 아래의 그림과 같이 표현도 가능하다. 

다음번에는 two stage instance segmentation에 관한 논문을 정리해보고자 한다. 

 

반응형

Introduction 

  • Mask annotation만 가지고 instance segmentation을 할수 있는 방법을 제한안 논문이다. 
  • 2개의 loss만을 가지고 single shot 학습을 했다는 점이였고 기존에서는 몇개의 step을 사용하여 pseudo label을 만들었지만 이 논문에서는 box와 label간의 color의 similarity를 가지고 loss를 주었다.

 

Method 

  • 기존의 network 의 방식은 이전에 연구가 되어졌던 condinst의 방식을 사용하였으며 이 network의 경우 one stage instance segmentation의 관한 논문으로 RPN이 없다는점이 큰 특징이다. 
  • 또한 instance만큼의 head가 나와 instance수만큼의 mask가 개별적으로 나온다는게 특징이다.

그렇다면 2가지의 Loss는 어떤것일까? 

  •  projection loss term
    • 저자는 box와 instance mask의 annotation을 proejction을 시키면 같을 것이라는 가정으로 los를 제안하였다. 
    • 따라서 밑에 있는 수식과 같이 mask 와 bbox의 x축과 y축을 projection한값의 Dice loss를 적용하여 loss를 만들었다 .

  • Pairwise affinity loss term
    • 두번째는 undirected graph를 사용하여 만든 loss이다. 
    • 밑의 수식을 보았을떄 network가 예측되어진 2개의 (i,j) 와 (k,l)의 좌표과 관련이 있다면 1이 나오고 아니면 0이 나오게 되어지는 수식을 의미한다. 
    • 이를 통해서 2개의 loss를 줌으로써 개선을 시킨다고 하는데 어떻게 box annotation이 없는데 pairwise affinity loss를 줄수가 있을까? 

  • Learning without Mask Annotations
    • 위의 언급했던것처럼 mask annotation이 없음으로 mask를 만들기 위해서 color similarity를 사용을 한다. 
    • 수식처럼 각 edge에 대해서 LAB space에서 color vector의 similarity를 계산을 한다.
    • 그리고 난후 cocoval 2017의 mask에서 가장 적절한 threhold를 찾아내었다고 한다. 
    • 따라서 최종적인 loss의 경우 왼쪽 수식처럼 pair wise loss로 적용이 되었다. 

 

 

실험결과 

  • ablation study의 경우는 
  • threshold의 조정과 color similarity의 diliationd의 범위와 loss의 변화점에 대해서 변화를 보여주었음. 

  • 좋은 성능은 획득했으나 몇가지의 아쉬운 case들이 있다. 이는 2가지의 Loss를 주었음에도 constraints가 있음을 보여준다. 

반응형

진퇴양난에 빠진 다윗

사무엘상 29:1 ~ 11

오늘 묵상에서는 다윗이 결국 이스라엘과의 전투를 하러 가는 장면이 나오지만 블레셋의 장군들의 반대로 인해서 결국 이스라엘과 반대되어서 싸우지 않는다. 이때 아기스 왕은 다윗을 변호하고 다윗이 위험에 처하지 않도록 블레셋에서 떠나가라고 말하는 장면들이 나오는 것으로 오늘 말씀은 마무리된다.

오늘 말씀에서는 결국 인도하시는 하나님이라는 단어가 떠오른다. 다윗은 자기의 위험 때문에 하나님께 말씀을 묻지 않고 아기스 왕에게로 몰래 갔었다. 그곳 가운데에서 자기의 신념은 잃지 않고 블레셋 사람들을 죽였지만 늘 언제 죽을지 모르는 불안함에 갇혀 살았을 것이다. 또한 자기의 민족인 이스라엘과 싸우게 되는 상황까지 놓이게 되니 많은 걱정이 앞섰을 것이다. 하지만 하나님께서는 다윗에게 예상치 못하게 인도해주셨다. 블레셋 사람들이 오히려 다윗가 함께 하기 싫어하며 다윗이 이스라엘 민족들과 싸우게 못하게 하였다. 또한 적군의 왕인 아기스왕같은 경우는 다윗을 굉장히 아끼고 좋아했다는 것이 말씀에 나오며 자연스럽게 다윗은 블레셋에서 나오게 되었다. 결과로 보면 하나님께서는 블레셋에 있는 것조차 좋아하지 않으셨다는 점이다.

이 말씀을 보면서 하나님께서는 내가 원하지 않는 곳에 내가 두려움에 숨고자 하는 곳을 가더라도 결국 하나님께서 원하시는 방향으로 우리를 인도해나가신다고 느꼈다. 나의 삶 속에서도 앞으로 어떠한 일과 직업과 이직을 하게 될지 모르는 상황에 있다. 또한 누구를 만나며 어떤 환경 속에서도 있을지 예측하지 못한다. 하지만 하나님은 우리의 앞을 아시고 그 길을 자연스럽게 이끌어가신다. 단 우리가 하나님과 깊은 교제에 있어야 만한다. 다윗의 상황을 현제 시점으로 보면 직장에서 잘린 거나 다름이 없다. 당장에 나가게 되면 다윗을 따르는 백성들을 어떻게 해야 되며 자기의 앞길을 어떻게 해야 될지 막막할 것이다. 그렇기 때문에 8절에서도 아기스 왕에 따졌을 것이다. 하지만 다윗의 결말을 아는 3자 입장에서는 이것 또한 하나님의 계획이시고 결국 주님이 원하시는 방향을 가고 있다는 것이 보인다. 나 또한 하나님께서 이끄시는 데로 가고 자연스럽게 흘러가는 삶을 원한다. 그 가운데에서 내가 고난이 있다면 그 또한 성장의 발판이라고 생각하고 감사하면서 받아들이고 싶다. 이번 말씀을 통해서 다윗의 평소 행실을 볼 수 있는데 왕에게 칭송을 받고 있는 점도 나에게 큰 도전으로 다가온다. 아기스 왕은 하나님을 알지만 구원받은 백성이 아니다. 즉 요즘 말로 말하면 세상 사람들 중 높은 직위에 있는 사람이라고 보면 되겠다. 다윗은 그 환경 가운데에서도 정말로 정직하고 성실하게 일에 임헀다는 점이 있다. 나 또한 세상 속에 있을 때 크리스천은 무엇인지 하나님의 백성은 어떻게 사는지 동기부여가 될 수 있는 선한 사람이 되고 싶다. 그로 인해서 하나님의 향기가 퍼질 수 있는 이 시대의 청년이 되자.

반응형

Problem 

  • Inefficient mask representation and learning
  • Not high enough resolution for final mask predictions
  • Slow mask NMS

contribution 

  • First, our new framework is empowered by an efficient and holistic instance mask representation scheme (Head)
    • Convolution kernel learning & feature learning 
  • SOLOv2 significantly reduces inference overhead with our novel matrix non-maximum suppression (NMS) technique.
    • NMS with parallel matric operation in one shot. 

Method

  •  S^2 때문에 memory가 너무 많이 먹음. 
  • mask prediction이 정확하지 않음 특히나 큰 resolution에 대해서는 computation cost가 많이 나옴.
  • Dynamic Instance segmenation 
    • 기존의 모델의 경우 FPN(feature pyramid feature)에서 HxWxE만큼의 output이 나옴.
    • FCN을 적용하게 되면  S^2의 output으로 나옴. 이 과정을 수식으로 표현하면 M = G * F으로 표현할 수 있음. 
    • 1x1 convolution을 적용해서 featuere를 줄였을때 전체 M에서 중복되는 부분이 발생함. 
    • 그렇다면 F & G를 따로 학습을 하게 되면 dynamic하게 사용함으로 segmentation의 location을 효과적으로 찾을 수 있음.
    • Mask Kernal Branch (G)
      • 각 featuere ouput마다 D-dimentsion마다 아웃풋이 생성이됨
      • 이를 해당되는 gride cell (S)로 resize를 시켜준뒤 최종 3x3 convolution을 적용함. 이를 통해 D에 대해서 9E의 feature를 가짐 
      • 1x1 convolution을 적용하면 D=E는 같아짐.
    • Mask feature branch (F)
      • 각 feature들은 unified mask를 만듬.
      • 1/4 size로 bilinear upsampling를 시켜서 만든 후 sum을 진행함.

 

  • Learning and inference
    • Focal loss + Dice loss를 적용
  • Matric NMS
    • Soft-NMS에서 가져옴 
      • IOU의 score에 따라서 score를 다르게 주는 방식(IOU 높으면 score를 iou만큼 곱해서 점점 낮게 준다) 
      • Mask 기준으로 사용하여 decay를 주는 방식
      •  

def matrix_nms(scores, masks, method=’gauss’, sigma=0.5): 
    # scores: mask scores in descending order (N)
    # masks: binary masks (NxHxW)
    # method: ’linear’ or ’gauss’
    # sigma: std in gaussian method

    # reshape for computation: Nx(HW)
    masks = masks.reshape(N, HxW)

    # pre−compute the IoU matrix: NxN 
    intersection = mm(masks, masks.T)
    areas = masks.sum(dim=1).expand(N, N)
    union = areas + areas.T − intersection
    ious = (intersection / union).triu(diagonal=1)

    # max IoU for each: NxN
    ious_cmax = ious.max(0)
    ious_cmax = ious_cmax.expand(N, N).T 
    # Matrix NMS, Eqn.(4): NxN
    if method == ’gauss’: # gaussian
        decay = exp(−(iousˆ2 − ious_cmaxˆ2) / sigma) else: # linear
        decay = (1 − ious) / (1 − ious_cmax) 
    # decay factor: N
    decay = decay.min(dim=0)
    return scores ∗ decay

Evaluation 

반응형

+ Recent posts