728x90

Paper

https://arxiv.org/abs/2103.00953

 

Adversarial Reciprocal Points Learning for Open Set Recognition

Open set recognition (OSR), aiming to simultaneously classify the seen classes and identify the unseen classes as 'unknown', is essential for reliable machine learning.The key challenge of OSR is how to reduce the empirical classification risk on the label

arxiv.org

Code

https://github.com/iCGY96/ARPL

 

GitHub - iCGY96/ARPL: Official PyTorch implementation of "Adversarial Reciprocal Points Learning for Open Set Recognition"

Official PyTorch implementation of "Adversarial Reciprocal Points Learning for Open Set Recognition" - GitHub - iCGY96/ARPL: Official PyTorch implementation of "Adversarial Reciproc...

github.com

 

 

 

Introduction

 

기존의 softmax방법이나 Prototype learning 모두 known data에 대해서만 objective function을 적용해주기 때문에 known class와 unknown class sample이 유사한 곳에 embedding되는 현상을 막을 수 없었다.

기존의 방법들이 known class의 구분을 신경썼다. 따라서 각 known class에 대한 prototype을 지정하거나 신경을 썼다.

그러나 ARPL의 경우 '반대로 각 Class에 해당하지 않는 것에 대한 center, prototype 지점을 정의'한다. 그리고 그 점을 Reciprocal point라고 명명한다.

 

 

 

위의 그림 (a)와 같이 특정 클래스가 아닌 sample들의 prototype point를 각 Class에 대해서 지정해준다. (Not C1 , Not C2 , Not C3) 이렇게 하기 위해서는 기존 Class와 reciprocal point의 거리를 멀게 objective를 설정하면 되긴 하지만, unknown sample들이 embedding 되는 위치가 적절히 bounded되지 않는다는 단점이 있다. 때문에 논문에서는 open space를 최대한 줄이기 위한 bound를 설정해주게 된다. 

 

또한 추가적으로 gan model을 이용해 sample을 생성하고 이를 활용한다. 기존 gan과 다른점은 생성한 sample이 classifier를 통과했을때, recipocal point와 가깝게 mapping이 되도록 유도한다는 점이다. (실제 sample이 아니므로)

이와 같은 유도를 표현한 것이 바로 Fig3.(c)이다.

 

 

Method

 

method를 설명하기 위해 여러가지 용어정의가 필요하다.

Sk 는 k번째 class가 embedding 되는 space를 의미한다. 그러므로 k번째 class에 대한 open space는 다음과 같이 정의된다.

그리고 k class에 대한 open space Ok는 다음과 같이 나눌 수 있다. 

k class가 아닌 다른 known class들이 mapping되는 O pos k , 그리고 나머지 unknown class가 mapping 되는 O neg k,

그러므로 다음과 같이 표현이 가능하다.

 

이렇게 정의하였을 때, 다음과 같은 에러를 줄이는 것이 objective이다.

 

 

첫번째 term은 classification loss term이고, 두번째 term은 open space를 줄이는 term이다.

open space, R_0는 다음과 같이 정의된다.

식을 해석하면, 아래는 전체 embedding space를 의미하고, 위는 unknown class sample이 embedding되는 space를 의미한다. 즉, 전체 embedding space중에서 unknown class sample이 embedding되는 space의 비율을 open space라고 정의한다. 그리고 본 논문에서는 이러한 space를 줄이는 것을 목표로 한다.

 

이러한 loss term을 각 Class 모두에서 행하기 때문에 아래와 같이 표현이 가능하다.

이를 다시 표현하면 아래와 같다. ( one vs rest를  multiclass classification 형태로 변형)

 

이때, D_L은 labelled data이고, D_U는 unlabelled data이다.

 

 

 

class k의 reciprocal point를 P k라고 나타내면, reciprocal point는 k class에 속하지 않는 sample들의 Prototype을 의미하기 때문에  O_k에 속하는 sample들은 S_k에 속하는 sample보다 P_k에 가까워야 한다. 

 

 

위의 식을 살펴보면, K class에 속하지 않는 labeled data및 unlabeld data들과 reciprocal point Pk과의 거리를 쟀을 때, 가장 큰 값을 추출하더라도, k-class에 해당하는 labeled data sample과 P_k와의 거리보다는 작길 바라는 식이다.

 

이때,  distance는 다음과 같이 정의된다.

de는 둘간의 euclidean distance를 줄이겠다는 의미이고, dd는 둘간의 각도를 줄이겠다는 의미이다.

각도의 경우 (-)를 붙여서 값이 작을때 , 즉 각이 클때, 거리가 먼것으로 정의하였다.

 

 

 

Classification probability는 아래와 같이 정의한다.

 

 

식의 의미는 다음과 같다. 분모는 normalization term이고, 모든 reciprocal point와 sample이 embedding된 위치와의 거리를 구한다. 그리고 분자의 경우 해당 class k에 대한 reciprocal point에 대한 distance이다.  reciprocal point와의 거리는 멀수록 해당 class일 확률이 높기 때문에 위와 같이 식을 정의한다.

 

이에대해서 NLL loss를 적용함으로 classsicfication에 대한  optimization을 수행한다.

 

이러한 objective function을 unknown sample과 known sample에 대한 거리를 maximization하기는 하지만, open space O_k에 대해서 제약이 없기 때문에 S_k와 O_k간의 overlap이 발생한다는 단점이 있다.

 

 

그 다음 open space risk term을 다루기 위해서 본 논문에서는 Adversarial Margin Constraint (AMC)를 제안한다.

open space는 위에서 말한 것처럼 O pos k , O neg k로 나뉜다. 모든 k class에 대해서 open space를 모두 더하면 다음과 같이 표현이 가능하다.

 

S_k와 O_k를 잘 분리하기 위해서는 O_k의 space를 잘 bounding하는 것이 중요하다. 

그래서 다음과 같이 recipocal point와 해당 하는 k 클래스의 'not k class' sample들의 거리를 특정 R값이 이하로 bounding하여 준다.

 

물론 이러한 bounding만으로는 Openspace를 모두 바운딩하는 것은 불가능하다.

 

아무튼 아래와 같이 tranining sample과 해당 class reciprocal point의 거리를 최소한 R이상을 만들도록 함으로,

간접적으로 open space에 있는 sample들은 reciprocal point와 R이하의 거리를 가지도록 만든다.

 

위의 식과 classfication loss를 합치면 아래의 효과를 지닌다고 말하고 있고, 그에 대한 증명을 하고 있다.

 

 

이러한 것을 multi class에 대한 식으로 표현하면 다음과 같다.

 

 

그래서 앞의 내용을 종합하면 아래와 같이 Loss 식을 구성할 수 있다.

 

 

자세한 알고리즘은 다음과 같다.

 

 

 

 

 

 

이렇게까지 하면 unknown sample을 어느정도 걸러낼 수 있으나, generator로 부터 생성된 sample까지 cover하지는 못한다. 그러므로 Confusing samples (CS)를 생성해서 이용함으로서 unknown class sample을 더 잘 걸러내도록 한다.

 

 

일단 생성하는 sample은 gan을 이용한다.

gan에 대한 수식은 일단 일반적인 gan과 동일하다.

 

 

여기다가 optimization 식을 하나 더 추가해준다.

 

위 식은 기존의 Classsifition의 NLL Loss식과 동일하나 Minimization이 아니라 Maximization하는 것이 다르다.

 

위 optimization 식이 만족하는 경우는 confusing sample이 reciprocal point에 가깝게 embedding되는 경우이다.

논문에는 아래와 같이 표현되어 있다.

따라서 GAN 네트워크에 대한 Optimization식을 표현하면 다음과 같다.

이렇게 생성하는 경우, 결과론적으로 Confidence Calibrated 논문에서 uniform에 fitting해서 sample을 generating하는 것과 같은 효과를 가지게 된다. (realistic하지만, unknownc class의 경계에 위치하는 sample) 

 

 

 

또한 생성한 sample을 이용해서 추가적으로 Enhancement하는 term을 추가해준다.

생성한 sample의 경우, uniform distribution에 다시 fitting 해준다. ( Classificaition 부분에서 enhancement해줌.)

 

 

또한 real sample과 생성된 sample들이 같은 domain에 위치하는 것을 막기 위해 Auxiliary Batch Normalization(ABN)을 추가한다. 방법은 real sample과 generated된 sample들에 대해서  batch normalization을 따로 해주는 것으로, 실제로 성능향상에 효과를 보았다고 한다.

 

 

 

Experiments

 

먼저 network는 OSRCI  network와 동일하다. gan model은 confidence calibrated classifier와 동일한 model을 사용하였다.

 

본 논문에서는 OSCR이라는 척도로도 성능을 비교했는데, Classification을 잘 맞춘 비율과 Openset을 잘맞추는 비율을 threshold값을 변화해가며 그린 curve라고 보면 된다. (기존 AUROC는 classification 성능이 높을 필요는 없었음)

 

 

 

-OOD evaluation

 

 

 

 

 

 

Summary

 

본 논문은 기존의 method들이 각 class에 대해서 prototype을 설정하고 이에 맞춰서 학습을 진행한것과 달리, 

각 Class가 아닌 sample에 대해서 prototype을 설정하고 reciprocal point를 설정한 것이 특징이다.

이를 위해서 각 trainining class k에 대해 reciprocal point와의 거리가 멀어지도록, 학습을 진행한다. 또한 reciprocal point와 training sample간의 거리가 최소한 R보다는 크도록 만든다.

 

이렇게 학습하는 것이 원래 목적인 unknown class sample이 reciprocal point에 R이하로 bounding되어 embedding되는 효과를 지닌다고 논증하고 있다.

 

또한 이것에 추가하여 Confusion sample(CS)을 생성하고, 이를 추가로 학습에 이용한다.

이때, confusion sample은 Confident-Calibrated 논문에서 sample을 생성하는 것처럼, trainining sample과 유사하지만 unknown class sample을 생성한다. (자세한건 위 수식 참고) 또한 생성한 sample을 다시 uniform distribution에 mapping한다. 

 

그리고 ABN이라는 생성한 sample에 대해서만 따로 Batch normalization을 적용하여 생성한 sample과 기존의 real sample 과의 distribution이 겹치지 않도록 한다.

 

 

 

Pros

 

내가 생각하는 좋은 점은 open space를 bounding 시킨 점인듯하다. reciprocal point라는 개념도 좀 재밌긴 하다.

ABN 모듈도 작긴 하지만 신선한 생각이라고 느껴졌다.

 

Cons

 

split을 기존 논문들과 다른 split을 사용했다. 결국 좀 정당한 evalution이 이루어지지는 않은 논문이라고 생각한다.

그리고 샘플이 generation하여 추가로 학습하는 부분은 confident-calibration 논문과 너무 유사하다. 

단지 자신의 method에 적용할 수 있도록 수정한 것 밖에 없다고 생각한다.

728x90
728x90

Paper

https://arxiv.org/abs/2103.00887

 

Counterfactual Zero-Shot and Open-Set Visual Recognition

We present a novel counterfactual framework for both Zero-Shot Learning (ZSL) and Open-Set Recognition (OSR), whose common challenge is generalizing to the unseen-classes by only training on the seen-classes. Our idea stems from the observation that the ge

arxiv.org

 

Code

https://github.com/yue-zhongqi/gcm-cf

 

yue-zhongqi/gcm-cf

[CVPR 2021] Released code for Counterfactual Zero-Shot and Open-Set Visual Recognition - yue-zhongqi/gcm-cf

github.com

 

Abstract

본 논문에서는 Zero-Shot Learning과 Open-Set Recongniton에 대해 새로운 framework를 제안하였다. (counterfactual framework)  이 2가지 문제는 모두 training때 보지 못한 unseen data에 대해서 모델이 generalized (seen data, unseen data 모두 잘하는) 능력을 갖추는 것이 핵심인 문제이다.

 

2가지 문제 모두다 unseen data를 다루는 문제이기 때문에 unseen data를 생성하는 방법을 많이 사용한다.

그러나 기존의 방법들은 unseen data가 실제 unseen data의 distribution과 다른 distribution이 생성된다는 문제점이 있었다. 

 

이러한 이유를 본 논문에서는 생성된 샘플이 'Not Counterfactual Faithful'하기 때문이라고 설명하고 있다.

때문에 본 논문에서는 Counterfactual Faithful한 sample을 생성하여 원래 unseen data의 distributuion과 동일함 distribution을 샘플을 생성하는 것을 시도한다.

 

 Counterfactual faithful한 것의 의미는 다음과 같다.

"만약 특정 sample의 attribute는 유지한채 class에 대한 attribute만 변화하면 어떠한 sample이 만들어지는가?"

(완전히 무의미한 sample이 아닌 실제 존재하는 attribute 및 feature를 유지한채 sample을 생성한다는 의미인듯)

 

 이러한 방법으로 faithfulness를 확보하면 'Consistency Rule'를 unseen/seen binary classification에 적용할 수 있다.

예를 들면 다음과 같이 수행가능하다. 생성된 counterfactual sample이 특정 class에서 나온것이냐? 라는 물음에 binary classsification 형태로 yes or no를 도출가능하다.

 

 

Introduction

 

기존의 ZSL (Zero-Shot Learning) 이나 OSR (Open-Set Recongniton) 방법들은 기존 training dataset의 sample들을 이용해서 unseen dataset에 대한 sample을 생성하고 이를 이용해서 test time때 unseen class를 구분하는 알고리즘을 주로 사용했다. 그러나 이와 같은 방법은 생성된 unseen class에 대한 sample들이 실제 unseen class의 sample들과 다른 distribution을 가진다는 문제점이 존재한다. 아래 그림 (a)를 보자.

 

그림을 보면 생성된 unseen class와 True unseen class sample에 대한 차이가 존재하기 때문에 decision boundary가 불균형하게 형성되고 따라서 test때 true unseen class sample을 잘구분하지 못하는 것을 확인할 수 있다. 저자는 이러한 현상이 모든 ZSL 알고리즘에서 나타났다고 말한다. (Seen class에 대한 recall 값이 높음) 

 

(이와 같은 일이  openset 에서도 맞는 말인지는 생각해 봐야 한다. OOD 논문에서 GAN으로 생성한 sample을 openset으로 활용하는 경우 생성된 sample이 True seen class sample에 True unseen class sample보다 더 가까워야 되는 것이 아닌가 생각해본다.)

 

이러한 문제는 사실 feature의 disentanglement문제와 관련이 있다고 저자는 말한다. 만약 feature을 disentangle할 수 있다면, 생성하는 unseen class data를 more sensible하게 생성할 수 있을거라고 이야기한다. 그러나, feature를 disentanglement하는 일을 어려운 일이며, 적절한 supervision이 필요한 일이다. 

 

때문에 저자는 feature를 disentanglement하는 방법 대신 다른 방법을 제안하는데, 바로 Counterfactual Inference를 제안한다. (https://badlec.tistory.com/262?category=1035281)

 

X를 sample을 나타내는 Random variable, 이 sample을  encoding한 결과를  Z = z(X=x), (feature, attribute) , 그리고 class정보를 vector로 나타낸 것을 Y = y(X=x)라고 하면 sample x에 대한 counterfactual sample x_var는 다음과 같다.

 

만약 feature가  Z = z ( X = x ) 일때, Y가 특정 y Class라고 가정을 하면, X는 x_var가 될것이다. 

 

즉, 어떤 feature가 있을 때,  class에 대한 정보, vector만 바꾸어 주면 어떤 sample이 생성되는지 보고,

그 생성된 sample을 counterfactual이라고 본다.

 

이렇게 생성하는 경우 기존의 방법과 다른 점이 있다.

바로 기존 방법의 경우, sample-agnostic ( 부자연스러운 sample을 생성) 한다는 것이고, (gaussian noise z 기반으로 생성하기 때문.. 이라고 논문에서는 설명) 저자의 방법은 sample-specific한 방법이라고 설명하고 있다. ( sample을 feature, z(x)를 기반으로 생성하기 때문임.)

 

저자는 이러한 방식의 정당성을 부여하기 위해서 아무것도 없는 상태에서 unseen class sample을 생성하는 것보다, 특정 attribute, observed fact Z=z(x)를 기반으로 생성하는 것이 생성할 때, 잃어버리는(lost) feature, attribute없이 생성이 가능하다고 설명하고 있다. (마치 인간이 화석으로 부터 공룡의 모습을 상상하는 것 처럼..)

 

그리고 class attrribute Y와 class sample Z를 disentangle함으로 Counterfactual Faithfulness를 만족할 수 있다고 한다. 그리고 이를 만족하면 위 그림에서 (c) 부분과 같이 True sample unseen class와 유사한 distribution을 가지는 unseen class sample을 생성할 수 있다고 한다.

 

 

위와 같은 논리로 본 논문에서 제안한 counterfactual framework는 위와 같다. X sample이 input으로 들어오면 feature Z(Sample attribute)를 추출하고,  Class Attribute Y와 concat을 한다. (정보를 더해줌) 이렇게 만들어진 최종 feature, attribute를 이용해서 sample을 생성한다. 이때 생성된 sample과 원래 sample X와 비교하는 과정을 거치게 된다. (Consistency Rule 적용)  이때 원래 Sample과 유사하면, 기존에 봤던 Class라고 판단하고, 다르면 처음보는 Class라고 판단한다. (Yes, No 부분)

 

 

 

Method

 

논문에서 어찌되었던 Counterfactual 논리를 사용하고 있기 때문에, 자신들의 Causal Model을 소개하고 있다. 논문에서는 Generative Causal model이라고 소개하고 있으며, 다음과 같이 도식화해서 표현한다.

 

도식에 대한 자세한 설명은 논문을 참고하면 된다. 그러나 크게 중요하다고는 생각안한다.

openset recognition에 대한 알고리즘만 좀 더 살펴보겠다.

 

 

기존의 method는 다음과 같은 알고리즘에 따라 openset을 구분하였다.

1. 먼저 test sample x가 input으로 들어오면 모델의 파라메터를 기반으로 test sample에 대한 class를 예측하게 한다.

2. 이 class정보를 이용해서 Pθ(X|Z = z, Y = y)로 부터 sample x'을 생성한다.

3. 이렇게 생성한 x'이 원래 sample x와 유사하면 known, 안유사하면 unknown처리한다.

 

그러나 이러한 method의 경우  z가 보통 gaussian noise가 사용되고, 즉 , sample-specific한  sample이 생성되지 않는다.

이러한 경우 condition으로 주어지는 y가 entangle되어 있기 때문에 (여러 sample들의 정보를 함께 담고 있음)

실제로 생성되는 이미지도 sample들의 feature가 entangle(여러 sample, instance 정보들이 섞어있음)되어 생성되게 되고, 이는 실제의 class sample distribution과 다른 분포를 낳는 결과를 도출한다.

 

이와 다르게 본 논문에서는 Counterfactual sample을 생성하며 다음과 같은 과정을 거친다

 

1. feature extraction

먼저 “given the fact that Z = z(x)” 를 구하기 위해서 x sample에 대한 attribute z를 추출한다.

이는 다음과 같이 표현할 수 있다. z(x) ∼ Qφ(Z|X = x)

 

2. apply intervention target y

그 다음 “had Y been y”를 구한다. 기존 방법의 경우 classification model에 x sample을 넣고 예측하는 class y를 

사용했지만, 본 논문에서는 intervention target Y=y를 사용한다. (특정 class를 임의로 지정해줌)

 

3. Prediction

마지막으로 -“X would be x˜” 를 구한다. 방법은 x를 encoding한 Z , (Z = z(x) (fact))와 intervention target Y ( Y = y (counterfact) ) 로부터 sample x˜를 생성한다.   ( Pθ(X|Z = z(x), Y = y) )

이렇게 만드는 경우, 기존 방법은 클래스 정보만 있는 상황에서 noize기반으로 생성하였기 때문에 sample간의 feature가 entangle되어있는 sample이 생성되었다면, 이 경우, 특정 sample을 encoding한 정보를 함께 주는 상황에서 생성하기 때문에, 해당 class정보에서 해당 sample에 해당되는 feature만 disentangle하여 sample을 생성한다는 장점이 있다.

 

 

이렇게 생성한 sample이 우리는 true unseen class distribution에 속하길 바라는 것이다. 

그래서 기존 방법과 비교한 그림이 다음과 같다.

 

 

 

 

Inference in OSR

 

OSR에서는 다음과 같이 위의 방법을 활용한다. Counterfactual sample을 기존 y에 대해서 (intervention y) 생성하고,

이때, unknown sample과 distance를 계산해 일정 threshold보다 넘으면 openset으로 분류한다.

 

이때 자세한 과정은 다음과 같다.

test sample x 와 counterfactual samples x~간의 Euclidean distance를 모두 계산한 다음, 그 중에서 가장 작은 distance를 기준값으로 활용한다. 이때 d_min이 특정 threshold를 넘으면 unseen으로 분류한다.

 

 

 

 

Counterfactual-Faithful Training

 

위의 method는 모두 counterfactual-faithful 조건이 만족되야 한다는 것이 중요하다.

그리고 counterfactual-faithful은 다음 조건이 만족되면, 성립하게 된다.

 

Theorem. The counterfactual generation Xy[z(x)] is faithful if and only if the sample attribute Z and class attribute Y are group disentangled.

(sample attribute Z와 class attribute Y가 disentangle이 되는 경우, couterfactual generation은 faithful하다고 말할 수 있다.)

(증명은 아래 논문 Appendix에 있다,  )

https://arxiv.org/abs/1812.03253

 

Counterfactuals uncover the modular structure of deep generative models

Deep generative models can emulate the perceptual properties of complex image datasets, providing a latent representation of the data. However, manipulating such representation to perform meaningful and controllable transformations in the data space remain

arxiv.org

 

 

다음 그림은 이러한 disentanglement가 잘 되었을 때와 안되었을 때를 구분하여 나타낸 그림이다.

 

 

이러한 disentanglement는 fully하게 하는 것은 불가능에 가깝다.

https://arxiv.org/abs/1811.12359

 

Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations

The key idea behind the unsupervised learning of disentangled representations is that real-world data is generated by a few explanatory factors of variation which can be recovered by unsupervised learning algorithms. In this paper, we provide a sober look

arxiv.org

 

그래서 appoximation하여 disentanglement를 시도하게 되는데, 다음과 같은 objective를 활용하게 된다.

 

 

모든 Loss는 disentanglement를 위함이다.

 

 

 

1) L_z : Disentangling Z from Y

- B-VAE Loss (L_z)를 일단 minimize한다.

 

- disentanglement 분야를 잘몰라서 정확히는 모르겠지만 B값을 조정하여 Z를 Y distribution에 영향을 받지 않도록 objectieve를 줄 수 있다고 한다. (논문 참고)

 

 

 

2) L_y : Disentangling Y from Z

 

위의 Loss만으로는 disentangle이 충분하지 않다고 하고, L_y Loss를 추가한다. 이유는 논문에서는 최근 over-parameterized model의 경우 Y없이 noise Z 만으로 sample을 생성하는 경우가 있고, 이는 생성된 sample이 non-faithful한 것으로 leadinig이 가능하다고 한다. 어찌되었든 disentangle term을 더 넣어야 된다.

 

사용하는 term은 다음과 같이 contrastive loss term을 적용한다. 

원래 sample x와 그 sample을 encoding한 후 원래 class를 기반으로 그대로 생성한 sample x_y간의 거리는 가깝게 한다.

그러나 원래 sample x와 다른 class를 intervention하여 생성한 x'과의 거리를 멀게 만든다.

 

 

이때 사용하는 dist는 Euclidean distance이다.

 

이는 똑같은 encoding Z로 부터 class Y에 대해서 intervene되기 전과 후의 차이를 크게 만드는 것이기 때문에 disentanglement에 더욱 도움을 주게 된다.

 

 

 

3) L_F : Further Disentangling by Faithfulness

잘모르겠지만.. VAE의 lower bound를 더 loose하게 하면 더욱 faithfulness를 증가할 수 있다고 한다.

그리고 이를 위해 WGAN을 사용한다. discriminator를 사용해서 원본 x에 대해서는 1에 가까운 값,

생성된 x'에는 0에 가까운 값을 출력하도록 한다.

 

 

 

Experiments

 

[Implementation detail]

OSR에서 사용된 네트워크는 CGDL에서 사용된 네트워크를 본 논문에서도 사용하였다. (Ladder-VAE)

X는 실제 이미지가 사용된다. openset을 구분하는 방법은 reconstuction error가 사용된다.

 

result는 F1-score로 측정이 되었다.

CGDL밖에 비교를 안했는데, 자신의 disentanglement 기법이 효과가 있음을 알려주는데, 힘을 쏟았다고 생각한다.

 

또한 Openness가 커져도 본 논문의 method인 GCM-CF는 강건함을 볼 수 있다.

 

 

Summary

- 본 논문은 기존의 ZSL과 OSR 방법에서 주로 사용하는 unseen class에 대한 생성 방법론에 대해 문제점을 제기하고, developed된 unseen class sample을 생성하는 방법을 제시한 논문이다. 기존의 gan 기반 unseen class 생성 방법은 sample간의 feature (attribute) entanglement 현상이 있어 실제로 생성했을 때, true unseen class distribution과 다른 것을 확인할 수 있었다. (seen class에 대한 recall 값이 높은 것으로 간접적으로 증명) 이때, true unseen class distribution에 맞는 sample을 생성하기 위해서 counterfatual faithfulness라는 개념을 가지고 온다. 이는 ICLR 2020 논문에서 수학적으로 증명한 내용인데, 만약 sample을 생성할 때, 생성할 때, 기반이 되는 정보인 Z( feature, attribute), 와 Y (class)가 disentanglement된 다음 제공되면 생성되는 sample이 counterfactual faithfulness, 즉 true unseen class distribution과 유사하다는 것이 보장된다는 것이다. 

 

그래서 이를 기반으로 unseen class sample을 생성하게 되고, 이러한 방법은 기존의 unseen class sample을 생성하는 것 보다 더 정확하게 생성이 가능하기 때문에, 더 좋은 성능을 보였다는 내용의 논문이다.

 

 

Pros

 

문제제기가 잘된 논문이라고 생각한다. 기존 생성모델 기반으로 OSR 문제를 푸는 방식에서 부족한 부분을 잘지적했다고 생각한다. 생성모델의 disentanglement 문제에 대해 잘이해했기 때문에 쓸 수 있는 논문이라고 생각한다. 

 

 

Cons

 

다른 OSR 논문들과의 비교가 부족하다고 생각한다. split도 다른 듯 하다. 하지만 논문자체가 OSR이 중심이 아니라 기존의 생성 방법에서 문제점이 있다는 것을 잘지적하고 그에 대해 해결법을 잘제시한 논문이라 다른 method와의 비교가 부족하지만 논문이 되었다고 생각한다.

 

 

 

 

728x90
728x90

Paper

https://openaccess.thecvf.com/content_ECCV_2018/papers/Lawrence_Neal_Open_Set_Learning_ECCV_2018_paper.pdf

 

Code

https://github.com/lwneal/counterfactual-open-set

 

lwneal/counterfactual-open-set

Counterfactual Image Generation. Contribute to lwneal/counterfactual-open-set development by creating an account on GitHub.

github.com

 

 

Open Set Learning with Counterfactual Images는 openset example을 생성해 학습에 이용하여 Openset을 걸러내는 아이디어를 사용한 논문 중 하나이다.

 

high-level로 아이디어를 설명하면 기존 Know class sample을 이용해서 known samplerhk 유사하지만 known sample은 아닌 openset example을 생성하여 이를 openset recognition에 활용한다.

 

 

G-openmax와 다른 점은 Vanila GAN을 이용해서 openset example을 생성한 것이 아니라 encoder-decoder 형태의 GAN을 사용했다는 것이다.

 

 

본 논문에서 사용하는 Generative model은 다음과 같이 Loss function이 구성된다.

 

 

L_D 에서 D(G(E(x))) 는 생성된 image가 discriminator에 들어갔을 때 loss값을 의미한다. 그리고 D(x)는 real image가 discriminator안에 들어갔을때 loss값을 의미한다. 

 

수식은 잘 이해가 안되서 code를 살펴보았고, 다음과 같이 optimization이 진행된다.

 

 

 

1. discriminator update

-먼저 discriminator를 update한다. 

 

1) Classifiy sampled images as fake

noise = make_noise(batch_size, latent_size, sample_scale)
fake_images = netG(noise, sample_scale)

logits = netD(fake_images)[:,0]
loss_fake_sampled = F.softplus(logits).mean()

 

2) Classify real exampleds as real

logits = netD(images)[:,0]
loss_real = F.softplus(-logits).mean() * options['discriminator_weight']

 

3) calculate P(D)

gp = calc_gradient_penalty(netD, images.data, fake_images.data)

(29. Gulrajani, I., Ahmed, F., Arjovsky, M., Dumoulin, V., Courville, A.: Improved training of wasserstein gans. arXiv preprint arXiv:1704.00028 (2017))

 

 

 

2. Generator Update

- 그 다음 generator를 update한다.

 

# Minimize fakeness of autoencoded images
fake_images = netG(netE(images, ac_scale), ac_scale)
logits = netD(fake_images)[:,0]

errG = -logits.mean() * options['generator_weight']

 

 

 

3. Autoencoder update

- reconstruction loss를 통해 auto encoder 및  generator를 update

netG.zero_grad()
netE.zero_grad()

 

reconstructed = netG(netE(images, ac_scale), ac_scale)
err_reconstruction = torch.mean(torch.abs(images - reconstructed)) * options['reconstruction_weight']
err_reconstruction.backward()

 

 

 

4. Classifier update

 

netC.zero_grad()

# Classify real examples into the correct K classes with hinge loss
classifier_logits = netC(images)
errC = F.softplus(classifier_logits * -labels).mean()
errC.backward()
log.collect('Classifier Loss', errC)

optimizerC.step()

 

 

논문에서는 실제 이미지와 유사한 openset example을 생성하는 것이 목적이기 때문에 다음과 같이 latent vector를

optimization한다.

이때, z* 를 만들때, openset example은 confidence가 낮다고 가정한다. 그래서 다음과 같이 objective를 설정한다.

이때 second term은 기존의 classifier logit에 unknown class logit을 추가하고, unknown class에 대한 score (logit)값을 0으로 잡은 term이다. 

 

unknown class logit은 0으로 정의했기 때문에 사실상 아래의 첫 항처럼 표현 되서 1이 되는 것이고, 뒷 부분은 known class의 logit값들이다. 이때, 이 term을 minimize하면 known class에 대한 logit이 작아지고, 본 논문에서 정의한 것과 같이 confidence가 낮은 sample, 즉 open example이 생성된다.

 

이때 생성하는 과정은 다음과 같다.

1. 먼저 trainigset에서 random하게 하나의 image를 sample하여 encoder에 넣는다. ( z = E(x) )

2. 위의 optimization식을 이용해 z*를 만들어낸다.

3. 만들어낸 z*를 이용해 counter factual image를 생성한다. ( G(z*) )

4. 생성된 G(z*) image들을 이용해 K+1 class로 label하여 학습시킨다.  

 

 

코드는 아래와 같다.

 

for i in range(max_iters):
z = to_torch(z_value, requires_grad=True)
z_0 = to_torch(z0_value)
logits = netC(netG(z, gan_scale))
augmented_logits = F.pad(logits, pad=(0,1))

cf_loss = F.nll_loss(F.log_softmax(augmented_logits, dim=1), target_label)

distance_loss = torch.sum(
(
z.mean(dim=-1).mean(dim=-1)
-
z_0.mean(dim=-1).mean(dim=-1)
) ** 2
) * distance_weight

total_loss = cf_loss + distance_loss

scores = F.softmax(augmented_logits, dim=1)

log.collect('Counterfactual loss', cf_loss)
log.collect('Distance Loss', distance_loss)
log.collect('Classification as {}'.format(target_class), scores[0][target_class])
log.print_every(n_sec=1)

dc_dz = autograd.grad(total_loss, z, total_loss)[0]
z = z - dc_dz * speed
z = clamp_to_unit_sphere(z, gan_scale)

# TODO: Workaround for Pytorch memory leak
# Convert back to numpy and destroy the computational graph
# See https://github.com/pytorch/pytorch/issues/4661
z_value = to_np(z)
del z
print(log)
z = to_torch(z_value)

 

 

-Technical Details of Compared Approaches

 

위의 과정을 자세히 설명하면 다음과 같다.

먼저 training set을 이용해 encoder, generator, discriminator를 학슶기킨다.

 

그 이후 학습된 모델들을 이용해서 openset example을 생성한다.

본 논문에서는 6400장의 exemple image를 생성한다.

 

이 image들을 통해서 K+1 classifier를 학습시키고,

이때 기존에 학습시켰던 K-classifier의 weight를 initial값으로 활용한다.

 

그리고 Openset metric은 다음과 같이 사용한다.

 

 

위 식의 의미는 다음과 같다.

open class로 정해진 확률 - closed class에 정해진 확률에서 가장 큰 값

 

이렇게 하면 closed class에 큰 값으로 확률이 mapping된 sample의 경우,

그 class에 속할 확률이 높기 때문에 Openset이라는 확률을 줄여주는 방식이다.

 

 

Results

 

- Opinion

 

Pros

기존의 G-openmax의 경우 DC-GAN을 이용해서 open example을 생성하지만,

본 논문 같은 경우에는 closed set과 유사한 sample을 생성하기 위해 추가적인 optimizaiton식을 사용하는 것이 특징이다.

또한 classifier에 open class를 추가하여 활용하기 때문에 좀 더 좋은 부분이 있다고 생각하긴 한다.

 

그러나 가장 최신 논문인 placeholder처럼 classifier를 embedding space의 중앙에 위치한다거나 하는 skill이 없기 때문에

성능은 높지 않다고 생각되어진다.

 

Cons

Open example을 생성할 때 결국 classifier의 confidence 값을 활용하는데, classifier의 현재 featrure extracting하는 능력을 기반으로 이를 판단하고 생성하게 된다. 결국 기존 classfiier가 openset으로 판단하는 능력을 좀더 interpolation하는 기능은 있지만 실제로 openset을 잘 걸러내는 방법이라고 보기는 어렵다고 생각한다. ( 좋은 openset example이라고 할 수 없다고 생각)

 

 

728x90
728x90

Paper

https://arxiv.org/abs/1707.07418

 

 

G-openmax는 openmax에다가 gan을 이용하여 생성한 sample들을 이용해서 추가적으로 openset에 대한 mean vector를 만들어 distance를 구하고 openset여부를 판별하는 방법이다.

과정은 아래와 같다.

 

- 먼저 Known Class에 대해서 Net을 학습시킨다.

- Unknown sample을 생성하기 위한 generative model을 학습시킨다.  (DCGAN)

- 이때, 생성한 sample들 중에서 openset sample을 선정해야 한다.

 

- openset sample을 DCGAN으로 생성한 sample을 Net에 통과시켜서 틀린 sample들로 선정한다.

: Net이 커버하지 못하는 sample이므로.. open sample이라고 생각.

 

-본 논문에서 open space는 original space의 sub-space라고 가정한다.

- 즉,openset 또한 training dataset이 내부에 존재하는 set이라고 생각, 그러므로  openset은 다른 분포의 데이터셋을 포함하지 않는다고 가정한다.

(Thus, in this paper we assume that open space classes belong to a subspace of the original space, which includes known classes. In order to preserve it, we also do not consider an unlikely scenario when the test set contains objects from other datasets. )

 

- 이러한 가정을 하는 경우, openset problem은 closed set에서 sampling을 하는 문제로 바꿀 수 있다는 점이 장점이다.

(The advantage of building algorithm based on this assumption is that we would turn an open space classification problem into a standard closed set problem by sampling objects from known subspace.)

 

이때 생성을 하는 방법은 DC-GAN을 이용한다. (논문에서는 VAE에도 적용할 수 있다고 하긴 한다. -맞는 말임)

생성하는 방법은 원래는 특정 Class에 대해서 one-hot vector로 생성하지만, 여기서는 open-example을 만드는 것이 목표이기 때문에 normal distribution을 이용하여 class vector를 생성한다. - we can generate a class mixture vector m ∈ R N using any distribution Pnorm (e.g. Normal distribution) by sampling m1,...,mN−1 from Pnorm, and assigning mN = 1 − ∑ N−1 i=1 mi , such that ∑ N i=1 mi = 1 as for the basis vectors bi ∈ R N. The dimensionality of class subspace space (number of classes) is typically much smaller than the dimensionality of the original space (number of pixels), so the generated open set images will be located is a small nonlinear subspace of it as desired.)

 

 

어찌 되었던 이렇게 생성된 unknown sample을 이용해서 Net_G를 학습시킨다.

 

Openmax는 known class에 대해서 mean vector와  traininig sample에 대해서 disrance들을 구하고 weibull fitting을 진행했고, 이를 통해 logit값을 recalibaration해서 각 class에 이상치인 정도를 openset score로 고려하였다.

 

이렇게 known class에 대해 이상치에 대한 probability를 계산하고 이를 기반으로 openset score를 구하는 방식을 논문에서는 pseudo probability estimation으로 openset을 추론한다고 표현한다.

 

그러나 G-openmax는 이러한 pseudo probability estimation을 사용하지 않는다. 

 

GAN을 이용해 생성한 sample을 사용해 직접적으로 openset에 대한 mean vector를 만들고, weibull distribution도 직접적으로 fitting한다. (non-pseudo probability estimation)

 

그래서 G-openmax의 경우, test time때 input으로 sample이 들어오는 경우  Known class와 Unknown class에 대해 모두 weibull distribution에 대해 이상치 확률값을 도출하고 이를 통해 calibration을 하고 softmax를 통과시킨다.

 

이때, unknown class를 판별하는 방법은 Weibull model로 calibration을 하고 softmax를 통과해 나온 최종 확률이 특정 threshold값을 넘지 않을때 이다.

 

 

- GAN으로 생성된 openset example results

 

GAN으로 생성된 sample들의 결과이다.  MNIST와 같은 경우는 다른 2class의 정보가 섞임으로서, 새로운 8이라던가, 9 class와 같은 모형이 생성되기도 하고, 이는 openset recognition에 도움이 된다고 생각을 한다. 그러나 더욱 복잡한 dataset의 경우 gan으로 sample들을 생성하더라도, openset을 나타내는 sample이라고 보기 어려운 sample들이 생성되었고, 이는 크게 도움이 안되는듯 하다.

 

(However, we perfomed the same experiment as in [3] and figured out there are no obvious performance improvement by using G-OpenMax over the natural image setting. A more general reason might be that the generated images are not plausible with respect to the training classes in order to be good candidates to represent unknown classes from open space. More specifically, unlike the MNIST and HASYv2 dataset, ImageNet classes enjoy large variety, therefore not many common features are encoded in the learned latent space. Since our method is based on disentangling class information from other object features, the results it produces in this case do not differ much from interpolation in the pixel space.)

 

 

Pros

 

GAN을 이용해 Openset example을 생성한다는 idea가 재밌긴 하다.

idea 자체는 closed set의 sample들을 조합해서 training data가 나타내지 못하는 open-sub space공간을 GAN으로 생성하겠다는 것이다. 그러나, open space를 기존 training sample로 채운다는 것이 쉽지 않은 방법이라고 생각한다.

 

그래서 MNIST와 같은 간단한 데이터셋에 대해서는 이게 가능하지만, IMAGENET과 같은 real-image에서는 잘안되는 것을 확인할 수 있다.

 

 

Cons

 

간단한 데이터셋에서 밖에 안되는 것이 사실 큰 단점이다.

그래도 interpolation 개념을 가져와 open example을 생성하는 개념은 재밌는 생각이다.

728x90
728x90

Paper

https://arxiv.org/abs/1511.06233

 

Towards Open Set Deep Networks

Deep networks have produced significant gains for various visual recognition problems, leading to high impact academic and commercial applications. Recent work in deep networks highlighted that it is easy to generate images that humans would never classify

arxiv.org

 

Code

https://github.com/abhijitbendale/OSDN

 

abhijitbendale/OSDN

Code and data for the research paper "Towards Open Set Deep Networks" A Bendale, T Boult, CVPR 2016 - abhijitbendale/OSDN

github.com

https://github.com/takumayagi/openmax-cifar10

 

takumayagi/openmax-cifar10

A simple training/evaluation code of open set recognition using OpenMax (https://arxiv.org/abs/1511.06233) - takumayagi/openmax-cifar10

github.com

 

출처 : 2020.02.21. HCAI Open Seminar
Open Set Recognition In Deep Networks 김상훈

 

http://dmqm.korea.ac.kr/uploads/seminar/Open%20Set%20Recognition%20in%20Deep%20Networks_%EA%B9%80%EC%83%81%ED%9B%88.pdf

 

Openmax의 기본 알고리즘은 다음과 같다.

 

- 기존 openset recognition은 softmax로 thresholding한다.

- 그러나 이러한 방식은 open class가 input으로 들어온다는 가정이 없는 상황에서의 사용하는 방법이기 때문에 성능이 낮다.

- openmax에서는 이러한 단점을 해결하기 위해서 input과 다른 class weight간의 거리를 측정하여 openset을 걸러낸다.

- 또한 openset에 대한 logit을 따로 두기 때문에 openset이 Input으로 들어온다는 가정 또한 들어가게 된다.

 

그림으로 표현하면 위와 같이 되며, 이를 거리 기반으로 openset을 걸러내는 방법이기 때문에 distance-based라고 볼 수 있다.

 

- 또한 openmax에서는 input으로 들어온 값이 이상치 (abnormal value)인지 확인하기 위해 Extreme Value Theorem을 적용하고 극단의 값, 이상치에 대한 분포인 Weibull 분포를 활용하여 이상치 여부를 판단한다.

 

 

-이와 같이 거리 기반, Webull분포를 활용하기 위해 사용하는 실제 알고리즘은 아래와 같다.

 

- 각 클래스의 weight (mean vector)와 거리를 구하기 위해 먼저 각 클래스 별로 mean vector 값을 구한다. (classifier weight값과 동일)

 

 

- 이 mean vector의 값과 각 트레이닝 셋의 class당  logit값간의 거리(distance) 값을 모두 구한다.

- 이는 distance값을 구하고 거리가 큰 값들을 추출하여 Weibull distribution에 fitting 시키기 위함이다.

 

- 이렇게 각 클래스 별로 이상치 값에 대한 분포, webull distribution이 준비가 되면 다음과 같이 하여 이상치를 탐지한다.

 

이렇게 하면 클래스에 대한 Weibull 분포에 맞춰서 확률이 도출된다. (각 클래스의 기준에 이상치일 확률들)

 

-이 확률을 기반으로 원래의 logit값을 조정하고, open class의 logit을 도출한다.

 

Open class가 아닌 경우는 다음과 같이 된다.

 

 

 

Pros

 

일단 거리기반으로 openset이  input으로 들어올 수 있다는 가정이 들어 갔다는 것이 큰 장점이다.

또한 Class 별로 logit에 대한 weibull distribution을 따로 두었기 때문에 class별로 threshold값이 지정되는 효과도 어느정도 있다고 본다. 그러나 결국에는 모든 Class에 대한 결과를 합쳐서 고려하기 때문에 이러한 효과는 희석되는 듯하다. (정확히는 모르겠음)

 

Cons

 

거리기반으로 openset input에 대한 대비를 하기는 했지만, 기타 다른 논문들 처럼 open example을 활용한다던가,  기존 training class를 좀 더 뭉치게 만든다던가 하는 방법이 없기 때문에, 다른 논문들에 비해 성능이 낮다는 단점이 있다. 옛날 논문이기 때문에 어느정도 고려를 해주어야 하는 듯 하다.

 

728x90
728x90

Paper

https://arxiv.org/abs/2103.15086

 

Learning Placeholders for Open-Set Recognition

Traditional classifiers are deployed under closed-set setting, with both training and test classes belong to the same set. However, real-world applications probably face the input of unknown categories, and the model will recognize them as known ones. Unde

arxiv.org

 

 

Code

 

없음

 

 

Introduction

 

기존 openset recognition 방법의 경우, logit 또는 softmax output 확률 값을 이용한 openset 방식을 사용하였다. 

그러나 이러한 방법의 경우 위 그림 왼쪽과 같이 기존 클래스와 확연히 다른 경우 logit or softmax 값이 낮게 나와 openset 분류가 가능하지만, 위 그림 오른쪽과 같이 기존 클래스와 비슷한 클래스의 경우 기존 thresholding 방법으로는 구분이 어렵다.

(기존 closed set output과 비슷한 logit이 나옴)

 

이러한 문제를 해결하기 위해서 본 논문에서는 Novel Class 를 위한 Placeholder를 만든다.

먼저 기존의 closed-set 만을 표현하는 Classifier를 확장시킨다. (Augmented)

이때 추가된 Classifier를 classifier placeholder라고 표현한다.

이를 통해 각 클래스 마다 known과 unknown을 구분하는 class-specific threshold를 만든다.

 (원래는 class마다 동일한 threshold로 known과 unknown를 구분하였음)

 

 또한 novel class의 distribution을 학습하기 위해서 'data placeholder'를 이용한다. data placeholder는 manifold mixup을 활용하여 open class의 instance를 생성하며 이를 openset training data로 활용하여 training에 활용한다.

 

Method

 

- Learning Classifier Placeholders

 

Classifier Placeholder는 dummy classififer를 만들어주는 방법이다.

수식으로 표현하면 다음과 같다.

 

왼쪽의 경우 기존의 classifier이고 오른쪽의 경우 추가로 Augmented(추가된, 확장된) classifier weight이다.

이때, embedding network, phi는 둘다 같다.

 

그리고 dummy classifer는 일단 dummy class 하나만을 표현한다. 

 

이러한 dummy classifier는 class마다 threshold를 지정하기 위해 사용되며, 따라서 특정 target class에 가깝게 embedding 되도록 유도한다. 따라서 아래와 같은 식으로 optimization 한다.

 

왼쪽의 loss식은 augmented된 classfier의 logit을 target class y에 optimization하는 것이고, (일반적인 classification loss와 같다고 보면 된다.) 오른쪽의 식은 augmented된 classifier에서 target class y를 제거하고, 이를 open-class, K+1 에 optimization하는 것이다. 이를 통해서 dummy classifier의 weight는 target classifier의 weight와 가까운 위치에 optimization이 된다. (target-class와 non-target class의 사이) 이때 하나의 class만이 아닌 모든 class y에 대해서 이를 행하게 되면 결국 dummy classifier를 중앙을 나타내는 weight가 된다.

 

이렇게 하는 이유는 따로 openset sample이 일단 없는 상황에서도 중앙 부분의 decision boundary를 형성하는 classifier를 만들기 위해서 이다.

 

이때 첫번째 loss term을 통해서 classification 성능을 유지하며, 두번째 loss term을 통해서 dummy classifier가 다른 class center (classifier weight) 보다 더 가깝게 위치하도록 유도된다. 

 

이는 특정 instance가 기존에는 closed set으로만 prediction되도록 한정되어 있었다면, class 마다 closed-set 혹은 dummy classifier (open-class)로도 prediction 될 수 있도록 optimization하는 것이다.

 

 

-Learning multiple dummy classifiers

 

이러한 dummy classifier는 여러개를 사용할 수 있다. C개 만큼 사용하면 다음과 같이 표현이 가능하다.

이렇게 여러개의 dummy classifier를 사용하는 경우 dummy logit은 max값 하나만 이용한다.

(가장 가까운 dummy classifier만 업데이트, 나머지 다 하면 나머지도 그쪽 Class로 당겨짐.. 그럴 필요 없음)

이를 통해 openset class의 경계를 좀 더 디테일하게 설정이 가능하다. (경계가 여러개 벡터로 형성..)

 

 

 

-Learning Data Placeholders

 

논문에서는 openset boundary를 설정하기 위한  classifier placeholder 뿐만아니라 openset instance를 생성하여 learning에 활용한다. 이때 openset instance를 data placeholder라고 지칭한다.

 

openset instance를 생성하기 위해 manifold mixip을 사용한다. 먼저 layer를 다음과 같이 표현한다.

이때 manifold mixup를 pre-layer를 통과한 middle-level feature를 통해서 수행하며 수식으로 표현하면 다음과 같다.

이때 람다는 Beta distribution에서 sampling하며 결정한다. (Mixup, Manifold Mixup에서 사용한것과 동일함)

 

manifold mixup을 사용하는 이유는 이를 통해서 low-confidence를 만들 수 있기 때문이다. 

(이 부분은 manifold mixup 논문을 읽어봐야 할듯 함)

 

이러한 mix-up 과정은  mini-batch 내에서만 이루어진다.

 

이를 통해 생성된 x_pre를 openset instance로 분류하며 아래와 같이 openset으로 분류하도록 트레이닝한다.

 

이를 그림으로 나타내면 아래와 같다.

 

 

 

Discussion about vanilla mixup

 

왜 vailla mixup이 아니라 manifold mixup을 활용했는가?

 

본 논문의 저자는 다음과 같이 주장한다. (솔직히 뭔소린지 모르겠음)

 

- vanilla mixup을 활용할 경우 다음과 같이 mix한 결과가 openset instance가 아닌 another class k instance와 유사할 수 있음

 

-> 근거없는 주장인듯

 

그러나 manifold mixup의 경우 can move the decision boundary away from the data in all directions

-> manifold mixup 논문을 봐야될듯..

 

 

Calibration and Guideline for Implementation

 

Closeset의 경우에 high-confidence가 나오지만, openset의 경우 open-class instance및 dummy classifier 또한 embedding space의 중앙에 위치하기 때문에 confidence 값 자체가 기본적으로 낮게 나온다. 

 

때문에 dummy classifier를 이용해 openset을 분류할 경우, logit값의 크기를 맞춰주는 Calibration  작업이 필요하다.

 

Calibration 작업을 수행하기 위해 val dataset을 사용한다.

 

val dataset 을 이용해 다음을 계산한다.

 

 

결과적으로 다음과 같이 bias를 추가하여 calibtration을 한다.

이때 bias의 값은 val dataset의 95% 이상이 known으로 예측되는 값을 이용한다.

(val dataset이 known data로만 이루어져 있기 때문)

 

 

 

Training process of PROSER

 

 

Experiment

 

openess 정의

 

이때 N_train은 train class의 개수를 의미하며, N_test는 test때 class의 개수를 의미한다.

 

예를 들어 cifar10의 경우 train class는 6개이며, test  class 개수는 10개가 된다.

 

계산을 하면, 1- root ( 6/10)  = 22.54%가 된다.

 

이런식으로 계산을 하면 각 데이터셋 마다 다음과 같은 Openness score가 나온다.

 

mnist, svhn, cifar10 : 22.54%

cifar+10 , cifar+50 : 46.55% , 72.78%

Tiny-imageNet : 68.37%

 

 

backbone : GdFR과 같은 backbone

 

결과는 다음과 같음 (AUROC)

 

 

- Plain CNN과 Closed-set acc 비교

 

 

Openset Recognition Test

- GdFR metric 그대로 사용하였음

- MNIST와 Cifar10 데이터셋으로 학습시킨 후 ImageNet-crop, resize & LSUN-crop , resize Test dataset을 openset으로 test

- macro-averaged F1-scores로 측정한다.

 

- Mnist 같은 경우 known과 unknown dataset을 1:1로 구성한다.

 

-Cifar-10 같은 경우, Imagenet과 LSUN dataset으로 test를 하는데, Cifar-10과의 이미지 resolution을 맞추기위해서 32x32로 resize하거나 crop하여 test한다.  

 

 

 

 

Ablation study

 

본 논문에서는 Cifar100 dataset에서 ablation study를 수행했으며, 100개의 Class 중에서 15개의 class는 known, unknown class는 다음과 같이 조절하면서 실험하였다.  (randomly selected) 이에 따른 openness는 29.29% ~ 61.28%로 변한다.

 

위와 같은 setting으로 macro F1-score를 측정했으며, 결과는 아래와 같다.

 

 

이때 Mixup은 data placeholder 만을 사용한 것이며,

Dummy는  classifier placeholder만을 사용한 것이다.

 

 

Visualization of Decision Boundaries

 

위는 decision boundary를 visualization한 것이다. 첫번째와 두번째 그림은 일반적인 thresholding method를 사용했을 때, decision boundary를 나타낸 것으로, 4번 Class가 openset으로 들어왔을 때는 어느정도 openset으로 잘구분을 하지만, 5번 Class가 openset으로 들어왔을 때는, closed set과 상당히 많이 겹치는 것을 확인할 수 있다. (하늘색 부분 확인)

 

그러나 PROSER의 경우, Class마다 적절한 decision boundary를 결정할 수 있고 따라서 class 5도 잘 구분할 수 있게 된다.

(이 부분에 대해 좀 더 생각해 봐야 될 듯)

 

 

 

 

Pros

 

- open class 에 대한 logit을 따로 설정하였기 때문에, 고정된 threshold (특정 Logit 값)으로 openset을 분류하는 것이 아니라

  adaptive하게 (open class의 Logit이 특정값이 아니라 다른 클래스에 대한 logit보다 높은 값이면 openset) openset으로 분류가 가능하다.

 

- Manifold mixup을 활용하여 decision boundary를 smoothing하고, 또한 low confidence sample을 openset instance로 활용한 것이 도움이 되었음

 

Cons

 

- 여전히 feature가 유사한 클래스를 처리하는 방법은 없지않나.. 생각해봄.

 

 

 

Comparison with another papars

 

- RPL과 비교하면 유사한점은 openset을 featrue space의 중앙으로 mapping 시키도록 유도한다는 점이다.

- 차이점은 openset만을 위한 logit을 따로 두어 adaptive한 openset threshold를 설정한다는 장점이 있다.

- 또한 Manifold Mixup을 활용하여 openset training을 한다는 장점이 있다.

(RPL도 openset training 형태가 들어가 있기는 하지만 본 논문이 좀 더 적합해 보임)

(RPL은 Meta learning 형태로 기존의 closed-set을 openset으로 가정하여 trainig하기 때문에 실질적으로 openset이라고 보기 힘듬)

(그러나 manifold mixup은 실질적으로 low-confidence sample을 생성한 것이기 때문에  좀 더 적합한 openset sample이라고 생각함.)

-RPL의 경우는 open space의 크기를 줄인다는 장점이 더 있음.

 

728x90
728x90

Paper

arxiv.org/abs/2011.00178

 

Learning Open Set Network with Discriminative Reciprocal Points

Open set recognition is an emerging research area that aims to simultaneously classify samples from predefined classes and identify the rest as 'unknown'. In this process, one of the key challenges is to reduce the risk of generalizing the inherent charact

arxiv.org

 

Introduction

 

대부분의 현재 classfication method들은 "What is a cat"에 집중한다. 그래서 cat의 가장 representative한 feature을 찾도록 학습한다.   본 논문에서는 "What is not a cat" 에 집중하는 학습방법을 사용한다. 그래서 non-cat data에 대한 새로운 representation Point를 찾도록 학습한다. 그리고 그것을 Reciprocal Point라고 명명한다.

 

그래서 본 논문에서 제안하는 method를 Reciprocal Point Learning (RPL) 이라고 한다. 

 

RPL은 open space risk를 줄이는 방법이다. 이때, open space란 다음과 같다.

 

(분모는 위의 그림 참고)

 

즉, embedding space에서  known data가 embedding되는 공간을 제외한 space를 open space라고 한다.

그리고 open space risk는 embedding space의 모든 공간 중에서 open space가 차지하는 비중이다.

 

RPL은 이 open space risk를 줄이기 위한 방법이다. 이때, known class에 대한 reciprocal point를 학습시킴으로서 open space risk를 줄일 수 있다.

 

상세한 과정은 다음과 같다. 

 

reciprocal point를  현재 학습하는  known class와 다른 extra-class를 이용해서 학습을 하고, input의 구분은 embedding feature와 reciprocal point의 차이를 이용해 구분한다.

 

학습과정에서는 reciprocal point를 이용해 all known class들이 reciprocal point에 push되고 pull되는 과정이 반복되게 된다. 

결과적으로 embedding space는 bounded range에 갇히게 된다.

 

이러한 방법을 통해 기존의 딥러닝 모델의 문제였던 unknown input에 대한 high confidcence가 나오는 문제를 boundary를 제한함으로써 해결할 수 있다.

 

이러한 방법으로 known sample만 traing stage때 사용할 수 있지만, reciprocal point를 이용해 known과 unknown을 분리할 수 있다.

 

 

 

Reciprocal Point Learning

 

1) Preliminaries

 

Open set recognition problem definition

 

 

labeled data D_L이 N known classes들과 있다고 생각해보자. 이때, 특정 category k에 해당하는 positive training data를 

특정 category k를 제외한 다른 class들에 대한 training data를 

potential unknown data를

1-class open set recognition probelm 은 다음과 같은 optimization식을 optimization 하는 것이다.

 

이때 R^k는 expected error이다. α는 regularization parameter이다.

 

R_ε 는 known data의 empirical classfication risk이다.  

R_o 는 open space risk이다.

 

multi class classification에서는 위와 같이 표현할 수 있다.

 

 

Reciprocal Points for Classification

 

category k의 reciprocal point는 다음과 같이 표현할 수 있다.

이때 M은 각 class의 reciprocal point의 수이다. 이때 P^k는 sub-dataset

k  class가 아닌 dataset 및 unknown dataset에 대한 latent representation의 set 이라고 생각될 수 있다.

 

이때, 특정 category k에 대해 기준으로 learninig하는 prototype or center loss와 달리,

위의 기준에 따라 reciprocal point를 설정하는 것은  S_k보다는 O_k에 있는 sample로 설정하는 것이 적절하다.

 

(S_k는 특정 class k의 sample이 차지하는 space, O_k는 특정 class k를 제외한 나머지 class에 대한 embedding space 및 unknown class들의 embedding space를 합친 공간이다.)

 

이는 다음과 같이 표현이 가능하다.

 

이때 ,

는 two sets의 모든 sample에 대한 distances들의 set이다.

 

즉 위의 식을 해석하면 다음과 같다. 

특정 class k data와 k에 대한 reciprocal point P에 대한 모든거리를 d라고 표현할때, 

class k의 reciprocal point와 class k의 제외한 데이터 및 unknown data간의 distance들의 max값을

 

d보다 작게 하는 것을 의미한다.

 

즉 한마디로 reciprocal point를 특정 class k에 대한 data들의 거리보다 k가 아닌 data들간의 거리가 가까운 점이어야 한다는 것이다.

 

 

어찌되었든 openset learning은 known space와 unknown space를 최대한 분리시키는 것이다. 

이를 위해서 class k와 reciprocal point에 대한 공간을 최대한 분리시킨다.

 

이를 위해서 sample x가 있고, reciprocal point P_k가 있을 때,  둘간의 거리는 sample x가 embedding 된 위치와 M개의 reciprocal point와의 distance의 평균으로 정의한다.

 

이때, sample x가 category k 속할 확률인 reciprocal 간의 거리에 비례하게 된다.

즉 거리가 클수록 class k에 속할 확률이 높으므로 다음과 같이 정의가 가능하다.

γ는 hyper parameter이다. γ 는 probability의 assign되는 정도를 뜻한다. (클수록 크고 급격한 확률로 속하게 됨)

Loss function은 다음과 같다.

이러한 방법을 통해 closed space와 open space의 interval을 크게 만들 수 있으며, 

또한 아래 empirical classfication risk 또한 줄일 수 있다. 

 

 

 

 

Reducing Open Space Risk

 

open set recognition 문제를 풀기 위해서, reciprocal loss를 open space risk를 줄이기 위해서도 같이 사용한다.

 

open space는 category k를 제외한 다른 class sample이 embedding되는 space

unknown sample들이 embedding되는 space

두개로 나누어 생각할 수 있다.

그러므로 모든 known class의 open space를 고려한 global open space 다음과 같다.

 

 

이때, maximum entropy 이론에 따르면, 따로 prior 조건을 주지 않은 unknown sample x_u는 

well-trained closedset disciriminant function에는 equal probability를 가지게 된다.

(최종 softmax 확률값 uniform하게 나온다.)

 

이것의 의미는 embedding space상에서 unknown sample은 중앙에 위치하는 경향을 가진다는 의미이다.

이는 다음과 같은 실험 결과에서 확인 가능하다.

 

이때, open space를 직접적으로 어떠한 공간으로 bounding 시키는 것은 어려운일이다. 왜냐하면 unknown sample의 범위가 너무나도 넓기 때문이다.

 

그러나 class k에 대한 space S_k와 나머지 space O_k를 상호보완적(complementary)라고 생각하면, 다음과 같이 간접적으로(indirectly) bounding이 가능하다.

 

 

이때, R_k는 learnable margin이다. 이때 위 식을 minimizing하는 것은 다음 두식을 최대한 같게 만드는 것과 같은 의미이다.

 

 

이유는 위 식에서 x의 embedding된 위치와 reciprocal point와의 거리가 바로 

 

이 식이기 때문이다. (집합 인 것만 다름)

 

그러므로 다음과 같이 된다.

위 식때문에,

와 같이 된다. (d와 R^k가 최대한 가까워지므로)

 

이렇게 하면 reciprocal point P_k를 중심으로 margin R^k를 가지는 boundary가 형성된다.

 

 

이 bounded space를 이용해 global unknown space를 최대한 bounded할 수 있다.

 

 

 

 

Learning Open Set Network

 

결론적으로 loss식은 다음과 같이 된다.

위 식의 의미는 classfication loss식에서는 k class의 reciprocal point랑 k class에 대한 sample의 거리를 크게 만드는 역할을 한다.  open space에 대한 regularization 식은 단순히 거리를 크게 만드는 것이 아니라 특정 boundary로 embedding space를 제한하는 역할을 한다.

 

loss 식을 통해 아래 그림과 같이 embedding space가 형성된다.

 

 

이때까지 설명한 내용을 알고리즘으로 나타내면 다음과 같다.

 

 

 

Experiments

 

RPL++은 RPL training을 위해 GCPL을 같이 사용한 경우를 말한다.

 

 

1) Experiments for Open Set Identification

 

 

2) Experiments for Open Long-Tailed Recognition

 

Evaluation metric

AUROC 및 AUPR을 사용, AUPR-Known과 AUPR-Unknown은 각각 known과 unknown을 positive로 놓았을때, precision-recall 값을 말한다. 

 

 

Further Analysis

 

1) RPL vs Softmax

 

Reciprocal의 classification loss term만 사용할 경우, 일반적인 cross entropy loss term과 큰 차이가 없다.

 

그러나 open space에 대한 loss term을 추가하는 경우, high confidence를 발생시키는 unknown sample에 대한

risk를 감소시키고 known sample이 embedding space의 중앙에 위치하여 발생하는 known sample과 unknown sample간의 overlap 또한 막을 수 있다.

 

 

 

2) RPL vs GCPL

 

GCPL경우 center loss처럼 prototype loss를 적용한 방법이다. 이러한 loss를 적용하는 경우 각 class의 sample들이 한 곳으로 뭉치는 효과가 있으나, embedding space의 주변부로 최대한 멀어지는 효과는 가지지 못한다. known class sample들을 최대한 주변부로 밀어내는 RPL에 비해 known class sample과 unknown class sample이 겹치는 것을 볼 수 있다.

 

 

3) Margin & λ.

 

open space loss를 λ를 통해 조절이 가능하다. 이를 통해서 margin 또한 조절이 가능하다. 

dataset 마다 적절한 margin은 다르며, 너무 작게 margin을 설정할 경우 classificaiton 성능이 떨어진다.

 

 

4) Experiments with Multiple Reciprocal Points.

 

Reciprocal point의 수에 대한 변화이다.

728x90
728x90

https://openaccess.thecvf.com/content_CVPR_2019/papers/Liu_Large-Scale_Long-Tailed_Recognition_in_an_Open_World_CVPR_2019_paper.pdf

 

Imblanced Sampling distribution: Pareto dustribution a=6

 

 

 

many class :  over 100 sample

medium class :20~100 sample

few class : under 100 sample

 

 

Class-aware sampling

 

 

 

728x90

+ Recent posts