들어가며

세상에는 많은 데이터가 있다보니 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가 있음을 보여준다. 

반응형

블레셋을 물리치다 사무엘하 5:11 ~ 25 오늘 말씀은 다윗이 블레셋 사람들을 물리치는 장면이 나온다. Ekdnltdms 13절에서 헤브론을 떠나온 뒤에 더 많은 아내를 맞아들여서 자녀를 낳았으며 이때 솔로몬과 나단과 삼무아와 소밥을 가졌다. 하지만 17절에서는 블래셋 군대가 쳐들어왔으며 다윗은 이 말을 듣고 급히 요새로 내려갔다. 그때 19절에서 다윗은 하나님꼐 아뢰인다. "제가 블레셋 사람들을 치러 올라가도 되겠습니까?라고 물어본다. 그리고 그들을 저의 손에 넘겨주시겠습까"라고 물어본다. 그리고 주님께서 대답한다. 올라가라고 너의 손에 넘겨주겠다. 이 말을 듣고 다윗은 바로 행동을 한다. 그 이후 블레셋 사람들과의 전쟁에서 승리하며 모든 우상들을 부숴버린다. 하지만 22절에서 또 올라왔으며 23절에서는 다윗이 한 번 더 하나님께 물어보고 주님께서 지휘화셔서 기습공격으로 전쟁에서 승리하게 된다. 오늘 말씀은 다윗의 행동에 대한 배울 점이 2가지가 있다. 첫째로는 다윗과 하나님의 관계이다. 다윗은 전쟁 전에서도 하나님꼐 물어봤다. 블레셋 사람들과 싸우기 위해서 물어보며 움직였고 승리를 할 수 있게냐고 물어보고 행동을 하였다. 참 어려운 결정일 것이다. 전쟁은 목숨이 걸려있고 잘못하면 죽을 수도 있다. 하지만 하나님의 말씀을 듣자마자 다윗은 움직였다. 그리고 큰 승리를 하였다. 그 이후 다윗의 행동은 두 번째로 배울 점인데 승리한 곳에 있는 모든 우상들을 부숴버렸다는 점이다. 이 또한 다윗의 마음속에서는 절대로 우상이 나의 마음속에 있지 않고 오로지 하나님 한분만이 유일한 신이라고 인지하고 있는 것을 보여준다. 그리고 또 블레셋 사람들이 왔을 때는 이번에는 절때 물러서지 않고 하나님의 지혜로써 움직여서 승리하는 한다. 우리는 이 시대가 되고 더욱 시간이 지날수록 다윗의 행동에 더욱 본받아야 한다. 늘 전쟁 속에 있는 다윗은 하나님을 무조건적으로 의지하고 하나님이 명령하시면 움직인다. 결코 실패할 수 없는 싸움이고 한 번도 패배한 적이 없다. 우리의 삶에서도 정답을 알고 있다. 하나님이 가라고 하신 그곳을 가면 승리이다. 하지만 우리의 가치관과 생각으로 인해서 그 말을 듣지 못하고 내 뜻 때로 행할 때가 너무 많다. 이 문제를 해결하기 위해 서면 다윗처럼 내 마음속에 우상을 다 부숴버리고 오로지 하나님만 내 삶의 주인으로 넣는 연습이 계속 필요한 것 같다. 어떤 것보다 내가 주님만 우선이고 주님만 바라보고 있는 내가 될 수 있도록 온전히 기도하고 우상이 있다면 부숴버리고 주님만 보는 내가 되어야겠다 혹시 내가 우상인 것이 있는가 지금 이 순간 깨버리고 하나님만 보고 움직이는 내가 되자.

반응형

다윗, 헤브론에서 왕이 되다. 사무엘하 2:1 ~ 11 

오늘 말씀의 주제는 왕이 된 다윗이다. 사울이 죽고  난 후 함께 슬퍼하던 다윗은 주님의 인도하에 헤브론이라는 곳으로 가게 되었다. 그리고 유다 사람들은 기름을 부어 다윗을 왕으로 삼았다. 그 이후 다윗은 사울 왕의 대신하여 사울의 아들 이스보셋을 왕으로 삼았고 그 왕은 2년간 이스라엘을 다스리게 되었다. 오늘 말씀은 보면 다윗의 겸손함과 하나님과의 친 말함이 보인다. 사울이 죽고 다윗은 아마 이스라엘 백성 내에서 가장 유력한 왕의 후보였지 않았을까 싶다. 사무엘의 기름부음을 받고 전쟁에 승리를 이끈 사람이며 하나님을 붙잡고 있는 사람이었으니 말이다. 하지만 다윗은 그런 행동을 하지 않고 오히려 사울의 아들을 왕으로 만들었다. 그만큼 권련에 대한 욕심보다는 하나님이 세우신 규율에 맞춰서 움직인다는 것이다. 그리고 야망이 있었으면 기회다 싶어서 왕이 될 수 있었음에도 불구하고 겸손하게 피하는 모습을 보면서 지금 우리가 배워야 될 부분이 아닌가 싶었다. 많은 자기 개발서에서 기회가 있을 때 잡아라 개인적으로 행동해라는 말도 있고 취할 수 있음에 취함을 바라지만 하나님이 원하시는 건 세상의 방법과는 다르게 한 발짝 물러서서 봐라고 하는 것으로 이해가 된다. 당장에 눈앞에 있는 이익보다는 우리가 한 걸음 뒤로 가서 하나님꼐 질 물을 되뇌고 행동을 하는 내가 되고 싶다. 그리고 다윗이 헤브론에서 갈 때도 어김없이 하나님께 물어보고 난 후 움직이는 점을 보인다. 이 또한 지금 이 시대에 살아가고 있는 나로서는 정말로 마음속에 세기며 나아가는 청년이 되고 싶다. 오늘 하루 나는 얼마나 주님과 교제를 하고 있는가 좋은 기회가 있을 수 있고 없을 수도 있지만 어떠한 기회가 오더라도 무작정 이익이 되면 움직이는 것이 아닌 뒤로 물러서서 하나님께 물어보면서 행동하는 내가 되자.

반응형

예측을 벗어난 다윗 사무엘하 1:1 ~ 16 오늘 말씀에서는 사울과 요나단이 죽은 사실을 소식을 듣고 다윗은 슬퍼하는 장면이 나온다. 4절에서 급한 말을 전하론 사람이 사울과 그의 아들 요나단도 죽었다고 한다. 그리고 사울은 9절에서 "내 목습이 아직 내게 완전히 있으므로 내가 고통 중에 있나니 청하건대 너는 내 곁에 서서 나를 죽이라 해라고 사울이 말을 한다." 이 말씀을 들은 다윗은 11절에 "다윗이 자기 옷을 잡아 찍으매 함께 있는 모든 사람도 그리하고, 사우과 그의 아들 요나단과 여호와의 백성과 족속이 칼에 죽음으로 말미암아 저녁때까지 슬퍼하여 울며 금식하니라"라고 말씀을 하였다. 

오늘 말씀은 다윗은 사울과 요나단의 죽음에 대해서 몹시도 슬퍼하는 장면이 나온다. 다윗이 사울의 죽음에 대해서 대응하는 방식이 내가 예측하는 방법과 달라서 놀라운 점이 있다. 사울은 평생 동안 다윗을 죽이기 위해서 살아갔다. 물론 이스라엘 나라도 통치를 하였지만 그만큼 자기보다 앞서 가는 사람을 누구보다 시기하고 질투하는 사람이었다. 그런 사울이 죽었을 때 만약에 나였다면 드디어 골칫거리가 되는 방해 요소가 없고 내가 왕이 된다는 목적에 심취하여 오히려 축하를 열었을 것이다. 하지만 다윗의 행동은 예상하지 못한 반응이 나온다. 오히려 슬퍼하고 옷을 찢으며 모든 백성이 슬퍼하는 장면이다. 오히려 요나단을 위해서 금식을 한다면 이해가 되지만 왜 사울을 위해서도 그랬을까. 다윗은 사울 때문에 거지 생활과 죽음의 묵 턱까지 갔던 사람이다. 하지만 말씀에 대해서 곰곰이 생각을 해보면 다윗은 하나님이 세우신 사울에 대한 규칙이 있었던 것이다. 절대로 자기 손으로 사울은 죽일 수 없다는 확신한 신념이 있었던 것과 그 사람은 하나님이 다스리신다는 믿음이 있었기 때문에 아닐까 생각이 든다. 또한 다윗은 추후에 신약에 나오는 예수님의 말씀 중에 원수마저 사랑하라는 말을 잘 지킨다는 생각도 있다. 다윗은 오히려 하나님의 보시기에 합당한 행동을 하였다. 자기에는 원수이고 힘든 사람이었지만 하나님이 보시기에는 같은 사람이며 탕자와 같은 사람이었을 것이다. 이를 다윗은 함께 아파하고 오히려 금식할 정도인 것은 그만큼 다윗은 하나님의 마음을 누구보다 잘 알고 있었기 때문이다. 

반면에 사울의 행동에 대해서는 경각심을 가지게 된다. 사울은 결국 자기 백성에게 죽여달라고 하여 죽었다. 이를 보면서 사울의 자존심은 어떻게 해서든 높다는 생각도 들었다. 물론 이방인들 손에 죽고 싶지는 않았지만 그 위급한 순간에도 하나님을 찾지 않고 체면이 먼저여서 죽음을 선택했다는 점이 몹시도 안타까웠다. 또한 정말로 어려움이 오거나 힘듬이 급작스럽게 찾아왔을 때 하나님을 찾는 것보다 나의 채면이 더 중요했던 적은 없는가 생각을 하게 된다. 하나님은 절때 우리를 죽음으로 몰아가시지 않는다. 오히려 선한길을 항상 부어주신다. 우리는 이 사실을 알고 살아가야 하며 다윗처럼 하나님의 마음을 알며 어려운 순간에도 늘 하나님으 붙잡는 내가 되어야겠다. 오늘 하루도 기도를 하며 주님과 가까이하는 귀한 시간이 되자.

반응형

+ Recent posts