No Free Lunch from Deep Learning이라는 말이 있을만큼 No Free Lunch라는 말은 유명한데...

이를 정면으로 반박하고 Free Lunch라고 표현한걸 봐서는 매우 자신이 있다는 말로 해석해서

이 논문을 첫번째 논문 review발표 논문으로 선택하였다


[사전조사 배경지식 정리]

1. 용어정리

DAOD: Domain Adaptation Object Detection

leverage: 영향, 활용

Cross Domain:
2개간의 Domain간의 연결 or 관련성, 결합 등을 의미

Domain Discrepancy: domain간의 distribution이 불일치하는 것, 이로인해 일반화가 쉽지 않음.

Domain Shift: Cross Domain에서 발생하는 문제점.
Imbalance와 Consistency없는 Domain shift의 경우, Tgt이 적으면 DA가 어려움.
이를 해결하기 위해 여러가지 방법들을 다양한 level에서 활용.
ex) img-level, instance-level, pixel-level, category-level, ...

Domain Invariance: Domain불변성을 결과적으로 학습하는것이 목표인 논문들이 많음.

Domain Alignment: 두 Domain에 대해 일치(정렬)시키는 것.
이때, 보통 두 Domain간의 feature distribution alignment를 통해 이루어진다.

Unsupervised Learning Object Detection: Label 혹은 Annotation이 없는 Target Domain문제에 대한 학습
Semi-supervised Learning Object Detection: Label을 teacher모델이 생성(이를 pseudo labeling이라 함), 이를 이용.

 

 

2. 발전현황:

[2018]:

∙ Supervised Learning기반. Domain Shift에 초점, Domain discrepancy(불일치)감소에 초점.

특히 DANN 이후로 Adversarial Training방식이 주를 이룸.

 

[2020]:

중간에 도메인을 하나 더 넣거나 등의 Tgt Imbalance 문제해결방법.

Domain의 Class Imbalance문제 완화를 위한 방법

특히 이때부터 Unsupervised DAOD가 각광받음❗️

Domain-Invariance 학습을 위해 다양한 시도들이 이루어짐.

SSD를 이용, 단지 하나의 Tgt Sample만 필요한 one-shot기법도 나옴.

 

[2021]:

Domin불변성 + 식별력 유지 둘을 동시에 잡기위해 Faster R-CNN에 다른 기능들을 추가시킴.

또한, 저차원의 Src, Tgt feature Domain을 맞추는 것에 대한 중대성강조로 저/고차원 특징을 결합하는 등의 시도도 발생.

semi-supervised learning에서 pseudo-label noise극복을 하려함.

Src, Tgt모두 없이도 DAOD를 가능하게하려고 여러방법들을 도입한 논문발표(이번 review논문)

또한, Data Augmentation방법들도 여럿 도입됨.

 

[2022]:

 Domain Adversarial Training, Data Augmentation은 약간 국룰화?처럼 되는 뉘앙스

∙ pseudo label을 다루기 위해 여러 시도들 발생

 

 


 

 

 

Abstract

🧐 저자의 제안:

UnLabeled Src Data →Tgt에 최적화가 주목
이를 위해 저자는 SFOD프레임워크를 제안

[SFOD] (Source Data-Free Domain Adaptive Object Detection):
Src Data없이도 DA탐지를 가능하게 하며,
이는 Noise있는 Label로 학습하는 것으로 모델링한다.

일반적으로 Src에서 pretrained모델을 활용, Tgt의 가짜라벨생성을 한다.
하지만 Tgt Domain라벨이 없으면, 이런 가짜라벨생성에 대한 평가가 어렵다.

→ SED(Self-Entropy Descent)라는 평가지표 도입!
SED: 가짜라벨에 대해 적절한 신뢰임계값결정을 위해 도입한 metric



다만, 완전히 깨끗한 라벨을 얻는 것은 여전히 어려움을 겪고 있는데, 실험결과 생성된 노이즈가 있는 라벨에서 FN이 지배적임을 발견.
개선을 위해 FN mining이 도움이 되며, Mosaic와 같은 데이터 증강을 통해 FN시뮬레이션을 용이하게 한다.


🧐 개인 생각 정리:

핵심:

Src Domain에서 pretrained만 사용, supervision signal을 제공
→ 즉, Tgt으로 pseudo labeling되어 noise가 발생할 수 밖에 없는 구조.


문제점 1:
Src, Tgt에 대한 label이 모두 없기에 pseudo label에 대한 평가가 어려움
SED라는 평가지표 도입❗️

문제점 2:
다만, clean label얻기는 어려움---noise에서 FN, FP가 지배적
 FN Mining, Data Augmentation(e.g. Mosaic)으로 이를 개선❗️

 


Introduction & Main contribution

제안된 SFOD pipeline, 주어지는 supervision신호는 Src Domain의 adapt를 위해 pre-trained model에만 제공됨.


Object Detection의 발전은 단지 수동라벨링된 Train data에 의존해서 향상되어 왔다.
이는 새로운 환경이나 Data 분포가 다른 경우(e.g. 물체외관, 배경타입, 날씨 등 다양한 요인) 일반화가 쉽지 않다는 한계점이 존재.


그렇다면, 어떻게 pre-trained model을 supervision 없이 label-rich Src Domain → unlabeled Tgt Domain...?
이 UDA를 위해 많은 방법들이 고안됨
 ∙ Domain-invariant features를 alignment 하는 방식
 ∙ Domain distribution 근접화 방식
 ∙ 두 domain간 similarity를 측정해 pseudo labeling 하는 방식
이는 두 Domain이 관련되었지만 다름을 의미
→ 따라서 두 Domain간 접근이 자유로울 필요성이 존재하지만 challegeable함.


이미 Classification에서는 Src-data free한 방식이 좋았으나 Detection에서는 여전히 시도되지 않았었음.
본 논문에서는 전술한 문제 해결을 위해 SFOD(Source data-Free domain adaptive Object Detection)라는 간단하지만 효과적인 접근방법을 소개함.

SFOD : pre-trained Src모델을 활용, DA과정을 분리.

🔑  Idea :

신뢰가능한 pseudo label을 활용해 Tgt모델을 self-learning방법으로 training.

❓ 자연스러운 의문점:

이제 남은 자연스러운 질문은 2가지이다.
 ∙ 어떻게 pseudo label의 품질을 평가할 것인가
 ∙ 어떻게 Noisy Label로 학습할 것인가?

 


Classification의 경우, 고정된 sample수였지만
Detection의 경우, Negative sample이 무수하기에 매우 도전적인 과업이다.
(많은 positive가 box로 둘러쌓여있어서 negative와 섞여있기 때문.)


그렇기에 신뢰가능한 소수의 sample로는 좋은성능을 달성할 수 없음
(
One-Shot Unsupervised Domain Adaptation for Object Detection (IEEE 2020))에 정면으로 반박하는 느낌.

Sol) 적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering하는 것이다.
물론, Detection에서는 FP,FN같은 noisy labels는 무조건 존재하고, Tgt모델은 여전히 "집단지성의 원칙"을 따라 최적화 가능하다.
("집단지성의 원칙": 여러 모델이나 다수의 예측을 종합하거나, 다수의 샘플의 정보를 활용하여 모델을 최적화할 수 있다는 것을 의미)

하지만 supervision metric이 없어 적절한 신뢰도임계값 찾기란 어렵다.
noisy label로 신뢰도임계값이 너무 높거나 낮을 수 있기때문에 적절한 신뢰도임계값 탐색이 필요하다.

 

SED :Search Confidence threshold

이를 위해 등장한 Self-Entropy Descent는 전술한 신뢰도임계값을 찾기위해 제안된다.

Self-Entropy

예측 불확실성은 Self-Entropy로 계산된다.
이 문장은 다음과 같이 해석될 수 있다: "자가 엔트로피가 낮을수록 더 예측이 확실하다."
신뢰도 임계값을 탐색함과 동시에, 생성된 가상 라벨을 사용해
pre-trained model을 fine-tuning하고
그 후 훈련 이후 데이터셋의 Self-Entropy를 평가한다.

"라벨이 더 지저분할수록 더욱 라벨을 맞추기가 어려워진다." (사실 당연한 소리다.)
∴ 신뢰도임계값↓  평균 Self-Entropy↓ → 첫 local-minimum에 도달 시, 
이를 신뢰가능한 pseudo label생성을 위한 적절한 신뢰도임계값으로 선택.

이 솔루션의 타당성을 입증하기 위해 장난감 실험을 설계.
구체적으로, 생성된 pseudo label은 FP와 FN.
실험 분석을 통해 FN이 작고 가려진 객체와 같은 noisy label에서 주를 이루는 것을 발견.

 

FN Mining & Mosaic :FN의 영향 완화

또한 Mosaic(Bochkovskiy, Wang, and Liao 2020)와 같은 데이터 증강을 통해
거짓 음성을 시뮬레이션할 수 있도록 이 솔루션을 FN시뮬레이션으로 완화.


🧐 Main Contribution

i) Src data-free인 UDA-OD의 첫번째 시도.
ii) Src data-free인 UDA를 noisy label학습을 통해 혁신적으로 모델링, 해결.
iii) Src data사용을 안하고도 매우 좋은 성능, 다른 Src data based를 능가.


🧐 개인 생각 정리:

핵심: SFOD,  SED,  FN Mining

SFOD 배경: pre-trained model을 supervision 없이 label-rich Src Domain → unlabeled Tgt Domain
SFOD 역할:
pre-trained Src모델을 활용, DA과정을 분리.

 


SED배경:
적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering해야하고,
이를 위해 신뢰도 임계값 평가를 위한 supervision metric이 필요.
SED역할:
예측 불확실성을 Self-Entropy로 계산, 신뢰도임계값 탐색 및 생성된 가상 라벨을 사용해
pre-trained model을 fine-tuning하고 훈련 이후 데이터셋의 Self-Entropy를 평가



FN Mining배경:
생성된 pseudo label은 FP와 FN이 noisy label이 주를 이룸.
FN Mining역할:
Mosaic와 같은 데이터 증강으로 FN완화.


[요약]:
Step 1. pseudo Label 생성
신뢰도가 높은 소수의 sample(= Tgt)으로는 좋은 성능을 달성할 수 없다. 
Sol) 적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering하는 것

이를 위해 적절한 supervision metric이 필요 → SED: Self-Entropy Descent❗️
이렇게 평가된 예측불확실성으로 신뢰도임계값 탐색 → pseudo label 생성에 도입.

Labeled Src Data로 Faster R-CNN을 pre-train시킨 이후
이를 Unlabeled Tgt Data에 fine-tuning시켜 pseudo label생성에 동시에 도입.

Step 2. 생성된 pseudo Label의 FN완화
생성된 pseudo label은 FP, FN등이 noisy label이 주를 이룬다.
이를 해결하기위해 FN Mining, Mosaic Augmentation을 이용.

 

 


 

Related Works

∙ DAOD

DA-Faster(Chen et al. 2018)이라는 논문이 UDA Object Detection 진보를 이끌어낸 효시가 되는 논문.

생성된 노이즈가 있는 라벨에서 FN이 지배적임을 발견.

그 이후 초록색표시한 방법들이 많이 나왔음:
 - Labeled Src Data
 - Unlabeled Tgt Data 
2개가 필히 필요함.

우리는 Src data 없어도 되서 실제적용에 실용적.


∙ DA without Src Data


Classification을 위한 Src data-free DA방법은 이미 제안되었음(Li et al. 2020; Kim, hong, and Cho 2020)
Detection분야에 대한 적용은 여전히 공백인 상황.




∙ Learning with Noisy Labels


noisy label학습을 위해 많은 방법들이 classification에서 이루어져 왔었다.
∙ 초기: instance-독립의 Noise model 사용: 각 클래스가 다른 클래스와 혼동되는 문제 발생
∙ 최근: Label noise 예측에 초점

하지만 위 연구들의 noisy label 설정방식은 이상적:
noisy label과 true label을 수동 설정.

추가적으로 noisy label학습을 위해 여러 방식들이 제시됨:
object경계지정이 명확하지 않은경우, 문제해결이 불가능

 

 

 

 

 


Source free Domain Adaptive Object Detection


[UDA-OD가정]
Src와 Tgt이 training과정에서 자유롭게 사용되어 Src-Tgt, 두 Domain간의 차이(discrepancy)를 최소화 하는것.


[Src data-free UDA의 목표]
신경망 최적화를 위해 Dt만 사용하는 것
이때, 유일한 supervision 신호Ds data를 직접사용하는 대신,
Ds에서 pre-trained model θs에서 제공된다.


∙ Pseudo Lables Optimization via SED

🤔 A toy example: How to evaluate the quality of pseudo labels?

Toy example이란?
MNIST를 2개의 범주(positive, negative)로 구분; 이를 MNIST-2라 지칭함.
이를 기반으로 다양한 Dataset을 구축.
ex) positive sample을 negative에 서로다른비율로 섞거나
negative sample을 positive에 서로다른비율로 섞어 이를 LeNet에 훈련.
즉, 혼합 비율 = 노이즈 정도.

훈련 후 전체 데이터셋의 예측 불확실성을 잡기 위해 'mean self-entropy'개념을 도입:

nc : class 수
pc(xti): class c의 예측확률



위 그림에서 보이듯, noise정도는 mean self-entropy와 양의 상관관계를 가짐은 자명하다.

∙ 위 그림) 더 noisy label → label 맞추기가 어려움 = mean self-entropy⇧
 이상적 상황) 가장 깨끗한 라벨 할당 → 가장 낮은 mean self-entropy

즉, 두 상황을 고려해보면?
❗️mean self-entropy가 감소→ local-minima에 도달 = reliable한 label할당.


🤔 SED: how to generate reliable pseudo labels in Object Detection

Detection에서 Negative samples는 진~~짜 많다.(진짜 강조 많이한 말.)
앞단의 설명처럼, training을 위해 P/N sample분리가 필요
이는 저점~고점까지 적절한 confidence threshold를 찾아야함을 의미.

[SED: Self Entropy Descent]

❗️mean self-entropy가 감소해 첫 local-minimum에 도달할 때, 훈련을 멈춘다.
( 가장 낮은 entropy값=가장 깨끗한 = 신뢰할만한 라벨할당 가능.)

Dt Ds에서 pre-train된 model θs는 자유롭게 활용가능하므로 
pseudo label y(xt)와 그에 해당하는 신뢰도 p(xt)는 아래와 같이 유도된다.

즉, pretrained model parameter와 confidence threshold를 기반으로 하는 Faster R-CNN을 이용해 input x에 대해 pseudo label y와 신뢰도값 p를 출력으로 함을 의미.

h: pseudo label생성을 위한 confidence threshold
F: Faster R-CNN Detector: 
Faster R-CNN:
  - Anchor기반의 효시
  - Detector가 feature extractor로써의 encoder를 갖고있음.
  - encoder에는 RPN, RoI classifier를 갖고있음.


confidence p(xt): classification분기에서 softmax output.
pseudo label y(xt): foreground클래스 확률의 argmax값.

if p(x_t) > h:    
    box = y(x_t)  # 일치하는 박스에 클래스라벨 max_score 할당
else:
    box = background

 



📌 Loss function: pseudo label을 사용해 tgt data train

각각 region proposal loss, region classification loss, Bbox regression loss를 의미.


Region Proposal Bbox Regression: 
Src domain에서 pretrained model training으로 예측된 Bbox를 ground_truth로 바로 사용가능.
Detection오류는 Classification오류보다 훨씬 약하다 (Borji and Iranmanesh 2019).


이 Fine-Tuning작업 이후, pre-trained과 confidence threshold로 생성된 pseudo label들은
update된 모델 θt
를 사용해 Tgt Dataset의 평균 self-entropy, H(Dt)로 평가한다.

SED전략: 저점~고점까지 탐색, Self-Entropy가 첫 극솟값만나면 멈춤

 


∙ False Negative Simulation

적절한 confidence threshold값을 SED를 통해서 찾았지만, 여전히 문제점 존재: pseudo labels는 여전히 noisy
Detection에서의 noisy label: FP, FN

여러 공개된 데이터셋에서 각 confidence구간에서 TP와 FP를 계산.
아래 그림처럼 FP는 비교적 작은 비율만을 차지합니다.

놀랍게도, 저자가 신뢰 임계값을 거의 0에 가깝게 설정해도 반이상의 positive sample은 box하기를 어려워한다.
결과적으로 training 중 positive sample이 FN으로 작용하게 된다!



그렇기에 본 논문에서는 Label Denoising을 위한 FN mining에 초점을 맞춘다.
아래 시각화된 자료에서 알 수 있듯, 대부분의 FN은 작고 가려진 객체로
TN과 섞여서 positive로 다시 mining하기가 어렵다.
Domain discrepancy가 심화되는 이유.


Solution) TP를 이용한 FN Simulation: Data Augmentation
detect된 positive를 어렵게 만듬 → detect하기 힘든 작고 가려지는 객체를 모방, 이를 simulate함.
추가적으로 FN의 악영향을 억제

이를 위해 저자는 Mosaic Augmentation(YOLOv4)을 FN Simulation에 선택.
TP를 활용해 작거나 가려진 객체생성 시, TN에 영향을 주지 않기 때문.

CutMix(2019)를 개선한 방식, 4개의 train_img를 혼합, 일반상식내의 객체도 감지가능.


[Mosaic의 Main 2-step]
Step 1: Random Scaling
  - Tgt Domain에서 detect된 단순객체를 사용→다양한 크기의 어려운 객체 모방

Step 2: Random Cutting
  - 일부 구조만 보이는 객체를 어느수준까지 모방가능


Mosaic data: {(x ̃, y ̃)}는 아래 식에 따라
Tgt domain data {(xA,yA),(xB,yB),(xC,yC),(xD,yD)}로 구성될 수 있다:

train_img: H×W.
(u, v): 2차원 이동.
{MA,MB,MC,MD} ∈ {0,1}s(Ws(H): binary mask그룹
s(·)와 λ: Random Scaling & Cutting 인자.

일부 Mosaic img. 더 효과적인 거짓 음성 마이닝 또는 거짓 음성 시뮬레이션 방법이 더 많은 성능 향상을 가져올 수 있다고 저자는 생각.



FN Simulation이 SED와 함께 pseudo labeling생성을 위한 적절한 신뢰 임계값을 찾는과정을 위의 SFOD의 전체 파이프라인에서 볼 수 있다.


🧐 개인 생각 정리:

핵심:
∙ How to evaluate the quality of pseudo labels?

noisy label = label맞추기 어려움 = mean self-entropy⇧
→ 깨끗한(= 신뢰할만한) 라벨을 얻으려면 entropy값이 낮아야함.
즉, mean self entropy-noise degree그래프상에서 극솟값에 도달하면 라벨할당!


∙ How to generatethe quality of pseudo labels?
training을 위해 P/N sample분리가 필요한데, 이를 위해 적절한 threshold값이 필요.

pretrained model parameter와 confidence threshold를 기반으로 하는 Faster R-CNN을 이용해 input x에 대해 pseudo label y와 신뢰도값 p를 출력으로 함을 의미.
if p(x_t) > h:    
    box = y(x_t)  # 일치하는 박스에 클래스라벨 max_score 할당
else:
    box = background

 

pre-trained과 confidence threshold로 생성된 pseudo label들은
update된 모델 θt
를 사용해 Tgt Dataset의 평균 self-entropy, H(Dt)로 평가


∙ False Negatives Simulation
신뢰 임계값을 거의 0에 가깝게 설정해도 반이상의 positive sample은 box하기를 어려워한다. (작거나 가려지는 물체때문!)
결과적으로 training 중 positive sample이 FN으로 작용하게 된다!
 Label Denoising을 위한 FN mining에 초점

FN Mining은 FN Simulation으로 이루어지며, FN Simulation에 Mosaic방식을 선택
FN Simulation이 SED와 함께 pseudo labeling생성을 위한 적절한 신뢰 임계값을 찾는다.


요약: 아무래도 과정이 제법 복잡하여 한번 요약을 해야할 것 같았다.

1. 기존과 달리 Src data-free를 위해서는 Labeled Src Data로 Faster R-CNN을 pre-trained시킴.

2. Src의 data를 직접 사용하는 대신, Src로 pre-train된 model에서 유일한 supervision signal을 학습 시 제공
(for. 신경망 최적화를 위해 Tgt Domain만 사용.)

3. FN Simulation과 SED를 같이 사용해 pseudo labeling 생성을 위한 적절한 confidence threshold, h를 찾는다.
(SED: training을 위해 P/N분리가 필요하고, 이를 위해서는 신뢰할만한 pseudo label이 생성되어야하고,
이를 위해 신뢰할만한confidence threshold가 필요 = 낮은 entropy,
따라서 mean self-entropy를 이용, 저점~고점을 탐색하다
Self-Entropy가 첫 극솟값을 만나면 멈춘다. 이 전략을 SED라 부른다.
즉, confidence threshold로 생성된 pseudo label들을 update된 pretrained모델로
Tgt Dataset의 mean self-entropy를 평가한다: hopt = argmin H(Dt)이다.)


(FN Simulation: SED로 찾은 pseudo label은 여전히 noisy(FP, FN)label인데, 특히나 positive가 작거나 가려지는 물체로 인해 FN으로 작용하는 현상이 발생하여 이를 방지하기 위함이다.)


4. h와 pre-trained model parameter를 이용해 Faster R-CNN은 아래 두 값을 출력한다.
cf) pseudo label y(x)= foreground클래스확률의 argmax값
cf) confidence p(x)= classification분기에서의 softmax값

 

 

 


Experiments

∙ Experimental Setup

   ‣ Datasets

5개의 open dataset이 사용됨:


   ‣ Implementation Details

공정한 비교를 위해 [Xu 2020]과 동일한 실험적 setting.
[img pixel]: train-test모두 600 pixel로 resize
 [batch_size]: 1
 [Model]:
       - (pre-trained): VGG16 with ImageNet & Src. Domain data 여기서만 사용.
       - (backbone): Faster R-CNN

         - (Detector): SGD(lr=0.001)


∙ Comaparison Results

그림 7.mean self-entropy와 해당하는 AP, mAP의 곡선은 4가지 Adaptation task에서 confidence threshold에 따라 변하는데, SED를 통해 최적의 mAP값에 근접할 수 있다.

[그림 7]:
저자의 실험은 4가지 Adaptation task에 대해 진행된다.
위 그림은 다양한 confidence threshold값 하에
Detection precision과 mean self-entropy의 곡선을 보여준다.

 "Source only"와 "Oracle"은 각각 Labeled Src, Tgt Domain trainset으로 훈련되었지만,
Target Domain validation set에서 test되었다.


    ‣ Adaptation to A New Sense

Real World는 다양한 현상이 존재: 각도, 해상도, 품질 및 유형 등
→ Domain Shift 유발가능; 본실험에서는 두 real dataset 간의 새로운 Detection task Adaptation을 고려.
  ∙ [Src Domain]: KITTI
  ∙ [Tgt Domain]: Cityscapes 

[Model 비교군]:
SFOD(본논문), DA-Faster, SW-Faster, Noise Labeling ,
DA-Detection, AT-Faster

[표 1]: 유일한 공통 객체: 자동차 카테고리, 이에 대한 AP를 비교진행.
only SED:  labeled Tgt validation set에서 찾은 이상적인 confidence threshold값이 없음에도 AP가 매우 이상적인 값에 근접.
자동차 Detection Acc측면에서도 많은 기존방법보다 좋음.
SED+Mosaic: AP: 43.6% →44.6% (DA-Detection을 0.7%만큼 넘어섬)
FN Simulation이 FN noise label에 의한 악영향 완화.


   ‣ Adaptation from Synthetic to Real Images

자율 주행을 위한 annotating train data부족으로 synthetic dataset을 사용.
  ∙[Src Domain]: Sim10k
  ∙[Tgt Domain]: Cityscapes 

여기선 Sim10k와 Cityscapes 양쪽에서 유일한 객체 카테고리인 주석이 달린 자동차의 성능만을 평가.

[표 2]:  DA-Faster, Noise Labeling, AT-Faster과 비교,
SFOD방법이 우수, 기존을 능가.
(다만, 저자방식은 기존의 Src based보다 어려운 도전이 될 것.)


   ‣ Adaptation to Large-Scale Dataset

∙[smaller Src Domain]: Cityscapes 
∙[large unlabeled Tgt Domain]:  BDD100k

Cityscapes: only daytime
BDD100k: 3개의 시간대의 labeled daytime data를 tgt domain으로 함.

두 데이터셋에서 7개 카테고리에 대한 detection결과의 mAP를 평가

[표 3]: 
Baseline과 Oracle에서 보이듯, Src과 Tgt간의 Domain divergence해결은 매우 복잡.

특히 더 많은 Src Data가 필요하지 않은 경우, DA-Faste, SW-Faster, CR-DA-DET 같은
소수의 접근 방식만이 이 적응 작업에 도전한다는 점에서 더욱 어렵다.

Domain Gap이 넓음에도 도메인 갭의 이렇게 넓은 범위에도 불구하고, 그림 7(그래프 그림)에서 볼 수 있듯,
SOTA들이 다양한 confidence threshold에서 개선되는데, 특히
 SED 또는 SED+Mosaic을 사용할 때 CR-DA-DET의 26.9%에서 mAP를 27.6% 및 29.0%로 개선할 수 있다.


   ‣ Adaptation from Normal to Foggy Weather

Real-World적용에서 Detector는 다양한 날씨조건에서 사용될 수 있지만, 일일히 날씨조건에 맞는 많은 양의 data를 수집하고 label로 지정하는 것은 매우 어려운 일이다.
  ∙[Src Domain]: Cityscapes
  ∙[Tgt Domain]: Foggy Cityscapes

[표 4]:
SFOD와 다른 UDA-OD방법들(DA-Faster, SW-Faster, DA-Detection, CR-DA-DET, AT-Faster) 간의 비교
기준인(Src only) 22.3%의 mAP에 비해, label noise로 훈련된 SED+Mosaic는 pseudo label이더라도 33.5%로 향상될 수 있다.

더 나아가 DA-Detection과 같은 Defogging방법을 사용으로 Tgt Domain img품질개선 후,
여기서 SFOD성능열 연구했는데, 아래 표에서 볼 수 있듯, 안개 제거 후에 SFOD 약 3%정도 성능향상이 이뤄졌다..
즉, 안개가 가짜 라벨의 라벨 노이즈를 악화시켜 감지 성능에 영향을 미침을 알 수 있다.

Cityscapes dataset에서 Foggy Cityscapes로의 Adaptation결과

   ‣ Discussion and Annalysis

SFOD에서는 Src Domain의 pre-trained model로 얻은 Tgt Domain pseudo label로
training과정 중 noisy label로 인해 방해받을 수 있는데, 아래 그림을 보자.

SED를 직접 사용해 pseudo label 생성을 위한 confidence threshold를 찾거나
추가적으로 FN-Simulation에 결합 시, noisy label로 인한 악효과억제로 더 많은 객체탐지가 가능하다.


🧐 개인 생각 정리:

핵심:
5개의 Dataset이 활용됨:
KITTI, Sim10k, Cityscapes, BDD100k, Foggy Cityscapes

        [Src → Tgt]
 ①       KITTI     → Cityscapes : for 새로운 Domain 
 ②     Sim10k   → Cityscapes: for train data부족상황 가정.
 ③ Cityscapes→ BDD10k: for data양의 차이(매우적음 to 매우많음)
 ④ Cityscapes→ FoggyCityscapes: for noisy Tgt Domain


Conclusion

UDA-OD를 위한 새로운 학습 패러다임인 SFOD를 제안.
이는 Src Data를 직접사용하는 대신,
Src Domain에서 사전훈련된 모델만을 활용,
Supervision signal을 제공
하는 것이 핵심이다.

이는 noise가 있는 Label로 학습하는 관점에서 해결가능하다 보는데, 많은 Src data기반방법을 넘기도 하지만
Noise Label(FP,FN)을 완전히 제거하는 것에 대해 Unsupervised 방식이 매우 어렵다는점을 인정해야한다.

 



[논문 정리]

Abstract:

핵심:

Src Domain에서 pretrained만 사용, supervision signal을 제공
→ 즉, Tgt으로 pseudo labeling되어 noise가 발생할 수 밖에 없는 구조.


문제점 1:
Src, Tgt에 대한 label이 모두 없기에 pseudo label에 대한 평가가 어려움
 SED라는 평가지표 도입❗️

문제점 2:
다만, clean label얻기는 어려움---noise에서 FN, FP가 지배적
 FN Mining, Data Augmentation(e.g. Mosaic)으로 이를 개선❗️


Introduction

핵심: SFOD,  SED,  FN Mining

SFOD 배경: pre-trained model을 supervision 없이 label-rich Src Domain → unlabeled Tgt Domain
SFOD 역할: 
pre-trained Src모델을 활용, DA과정을 분리.

 


SED배경: 
적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering해야하고,
이를 위해 신뢰도 임계값 평가를 위한 supervision metric이 필요.
SED역할: 
예측 불확실성을 Self-Entropy로 계산, 신뢰도임계값 탐색 및 생성된 가상 라벨을 사용해
pre-trained model을 fine-tuning하고 훈련 이후 데이터셋의 Self-Entropy를 평가



FN Mining배경: 
생성된 pseudo label은 FP와 FN이 noisy label이 주를 이룸.
FN Mining역할: 
Mosaic와 같은 데이터 증강으로 FN완화.


[요약]:
Step 1. pseudo Label 생성
신뢰도가 높은 소수의 sample(= Tgt)으로는 좋은 성능을 달성할 수 없다. 
Sol) 적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering하는 것

이를 위해 적절한 supervision metric이 필요 → SED: Self-Entropy Descent❗️
이렇게 평가된 예측불확실성으로 신뢰도임계값 탐색 → pseudo label 생성에 도입.

Labeled Src Data로 Faster R-CNN을 pre-train시킨 이후
이를 Unlabeled Tgt Data에 fine-tuning시켜 pseudo label생성에 동시에 도입.

Step 2. 생성된 pseudo Label의 FN완화
생성된 pseudo label은 FP, FN등이 noisy label이 주를 이룬다.
이를 해결하기위해 FN Mining, Mosaic Augmentation을 이용.

 


Source Free Domain Adaptive Object Detection

핵심:
∙ How to evaluate the quality of pseudo labels?

noisy label = label맞추기 어려움 = mean self-entropy⇧
→ 깨끗한(= 신뢰할만한) 라벨을 얻으려면 entropy값이 낮아야함.
 즉, mean self entropy-noise degree그래프상에서 극솟값에 도달하면 라벨할당!


∙ How to generatethe quality of pseudo labels?
training을 위해 P/N sample분리가 필요한데, 이를 위해 적절한 threshold값이 필요.

pretrained model parameter와 confidence threshold를 기반으로 하는 Faster R-CNN을 이용해 input x에 대해 pseudo label y와 신뢰도값 p를 출력으로 함을 의미.
if p(x_t) > h:    
    box = y(x_t)  # 일치하는 박스에 클래스라벨 max_score 할당
else:
    box = background

 

pre-trained과 confidence threshold로 생성된 pseudo label들은
update된 모델 θt
를 사용해 Tgt Dataset의 평균 self-entropy, H(Dt)로 평가


∙ False Negatives Simulation
신뢰 임계값을 거의 0에 가깝게 설정해도 반이상의 positive sample은 box하기를 어려워한다. (작거나 가려지는 물체때문!)
결과적으로 training 중 positive sample이 FN으로 작용하게 된다!
  Label Denoising을 위한 FN mining에 초점

FN Mining은 FN Simulation으로 이루어지며, FN Simulation에 Mosaic방식을 선택
FN Simulation이 SED와 함께 pseudo labeling생성을 위한 적절한 신뢰 임계값을 찾는다.


요약: 아무래도 과정이 제법 복잡하여 한번 요약을 해야할 것 같았다.

1. 기존과 달리 Src data-free를 위해서는 Labeled Src Data로 Faster R-CNN을 pre-trained시킴.

2. Src의 data를 직접 사용하는 대신, Src로 pre-train된 model에서 유일한 supervision signal을 학습 시 제공
(for. 신경망 최적화를 위해 Tgt Domain만 사용.)

3. FN Simulation과 SED를 같이 사용해 pseudo labeling 생성을 위한 적절한 confidence threshold, h를 찾는다.
(SED: training을 위해 P/N분리가 필요하고, 이를 위해서는 신뢰할만한 pseudo label이 생성되어야하고,
이를 위해 신뢰할만한confidence threshold가 필요 = 낮은 entropy,
따라서 mean self-entropy를 이용, 저점~고점을 탐색하다
Self-Entropy가 첫 극솟값을 만나면 멈춘다. 이 전략을 SED라 부른다.
즉, confidence threshold로 생성된 pseudo label들을 update된 pretrained모델로
Tgt Dataset의 mean self-entropy를 평가한다: hopt = argmin H(Dt)이다.)


(FN Simulation: SED로 찾은 pseudo label은 여전히 noisy(FP, FN)label인데, 특히나 positive가 작거나 가려지는 물체로 인해 FN으로 작용하는 현상이 발생하여 이를 방지하기 위함이다.)


4. h와 pre-trained model parameter를 이용해 Faster R-CNN은 아래 두 값을 출력한다.
cf) pseudo label y(x)= foreground클래스확률의 argmax값
cf) confidence p(x)= classification분기에서의 softmax값


Experiments

핵심:
5개의 Dataset이 활용됨:
KITTI, Sim10k, Cityscapes, BDD100k, Foggy Cityscapes

        [Src → Tgt]
 ①       KITTI     → Cityscapes : for 새로운 Domain 
 ②     Sim10k   → Cityscapes: for train data부족상황 가정.
 ③ Cityscapes→ BDD10k: for data양의 차이(매우적음 to 매우많음)
 ④ Cityscapes→ FoggyCityscapes: for noisy Tgt Domain

 

 

논문 review

🤔 내 생각

👍 장점:

Unlabeled Domain Adaptation을 classification에만 적용하던 것을 Detection에도 적용했다는 점.

 발생하는 2가지 문제점을 잘 파악하고 이에 적절한 해결책인 SED와 FN mining을 도입.

Src data free하다는 점에서 data에 의한 영향도 줄어들고, real world에 대한 generalization이 좀 더 좋아보임.



👎 단점 + 🔍 개선할 점:

 아무래도 Unsupervised방식이기에 근본적인 한계(pseudo label의 noise완전제거)는 매우 어렵다는 단점.

confidence threshold search 시, mean self-entropy 기준 탐색을 하는 것 같고, 이에 대한 설명으로 낮은 값부터 높은 값까지 탐색한다 하였으니 greedy나 순차탐색이라는 느낌이 들었음. 순차탐색은 O(n)으로 다소 빠른편에 속함.
다만 BST같은 O(log n)을 활용한다면 Real World에서 더 탐지를 빨리 할 수 있지 않을까?



💻 코드구현가능성:

pre-trained model은 VGG16이기에 쉽게 구현가능 + Loss function도 마찬가지.(⭐️)

∙SED의 경우, mean self-entropy정도는 괜찮을 것 같고 Search도 Greedy-Search알고리즘을 사용하면 될 것 같으나 이를 Confidence score를 받아온다는 개념이 될 지는 모르겠음.(Faster R-CNN 코드를 뜯어봐야 좀 더 알 것 같다.)(⭐️⭐️⭐️)

FN Simulation의 경우, Mosic Augmentation은 이미 많은 github소스가 존재.(⭐️⭐️⭐️)

Faster R-CNN의 경우, 구현도 처음이고 아무래도 Detection model자체가 구현난이도가 존재하기에 다소 어려울 것 같음.(⭐️⭐️⭐️~⭐️⭐️⭐️⭐️)

이런 부분부분의 구현은 사실 이미 선행된 오픈소스 코드들이 많이 존재, 딱히 문제는 없어보이나 전반적인 main idea기반의 전체 모델 파이프라인 구현의 경우, 좀 어려워보인다. (⭐️⭐️⭐️⭐️⭐️⭐️)

 

 

 

'2024 winter > ETRI(공부)' 카테고리의 다른 글

[DA]: Relative Research paper Brief.  (2) 2024.01.09
[DA]: Visual Domain Adaptation  (6) 2024.01.04

🏢 ETRI (2024.01.11)

📌 01.10-TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Source free Domain Adaptive Object Detection (정리는 완료, 톺아보기 필요❗️)
아 그리고 pseudo labeling in FN Simulation에서 Detection에서 TN얘기가 나왔다.
Detection에서는 TN이 안쓰인다고 알고있어서 이에 대해서도 좀 알아봐야한다.

∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory 
∙ 2.6. Bayesian Probabilites

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

ojs.aaai.org

 

 
 

 
 

🚍 출근! (8:10 - 8:25)

그냥 7시에 알람 맞춰버렸다 ㅋㅋㅋ
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)
 
 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 타고 오는게 일찍공부할 수 있어서 이득인거 같다.
이제 남은 할일:
∙ 논문 review: Experiments
Deep Learning(Bishop 2024): Chapter 2 이다.
    2.5  Information Theory 
 
 
 
 
 
 
 
 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식): 데리야끼 닭 --> 덩어리 커서 좋았다.

 
 
 
 
 
 

 
 

📖 공부! (13:30-18:00)

논문 review 계속 진행. 오늘은 Experiments파트를 읽었다.
Experiments라 그런지 그냥 실험 방법내용들만 나와서 쉽게쉽게 읽은 것 같다.
역시 Main Idea부분 빼고는 나머지는 그렇게 머리쓸 일 없는 느낌이다.
 
Abstract -> 여기 내용은 무조건 숙지해야됨
Introduction -> Abstract 조금 구체화 + Main Idea preview
Main Idea: 힘 빡주고 읽어야함 ㄹㅇ...
etc.ㅋㅋㅋ

 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동!안할래 (19:00 -)

오늘은 Benchpress랑 DeadLift만 깔쌈하게 안했다ㄲㅋㅋㅋㅋ
오늘 넘힘들어서 걍 포기!

 
 
 
 

 
 

📌 TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ 논문 정리
∙ 논문 review
∙ PPT만들기


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

ojs.aaai.org

 

 
 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.15  (0) 2024.01.15
[ETRI]2024.01.12  (2) 2024.01.12
[ETRI]2024.01.10  (4) 2024.01.10
[ETRI]2024.01.09  (2) 2024.01.09
[ETRI]2024.01.08  (4) 2024.01.08

🏢 ETRI (2024.01.10)

📌 01.09-TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Related Works (내용 적음 - 수)
∙ Source free Domain Adaptive Object Detection (내용 짱많음 - 수)

∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 


 
 

🚍 출근! (8:10 - 8:25)

6시 알람이 지독하게도 날 깨웠던 과거였기에...

그냥 7시에 알람 맞춰버렸다 ㅋㅋㅋ
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)

어제 폭설❄️이 와서 그런지 버스가 생각보다 일찍? 왔고 생각보다 늦게 도착했다. 
 
 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 타고 오는게 일찍공부할 수 있어서 이득인거 같다.
이제 남은 할일은 논문 review와 Deep Learning: Chapter 2 이다.

먼저 Chapter 2.4먼저 다 읽었는데 생각보다 흥미로웠던 내용이었다.

변수에는 그에 맞는 Distribution이 있고,
한 변수에서 다른 변수로 비선형변환함수를 이용해 어떻게 변환을 어떻게 하는지, (합성함수방식)
이때, 변환은 각 변수의 mode가 서로 정확하게 맞지는 않는다는점.


단변량 분포를 다변량분포에 어떻게 적용할 것인가?
→ 분포에 절댓값을 씌운 det J를 곱해주는 방법.

J; Jacobian Matrix 역할: 공간의 일부를 확장하고 다른 부분을 압축하는 것
(= 해당 변수의 변화량이 다른 변수에 얼마나 영향을 주는지를 의미;
이를 모든 영역에 대해 고려하면 전체 공간이 어떻게 변화하는지 알 수 있음)

 

대충 요약하면 이런 뉘앙스다.

 

이번 DA의 핵심이 서로 다른 Distribution간의 적용에 대한 내용이고

책 내용에서도 나왔지만 Chapter 18. 즉, Image Generation Model에서

Normalizing flow라는 생성모델클래스를 다룰때 중요한 역할을 한다 적혀있었다는 점에서 

대단히 도움이 많이 되었던 내용이라 생각한다.

 

 

밥먹을 때 까지 1시간이나 남았기에 짧은 Related Works를 모두 다 읽었다.

Abstraction과 Introduction에서 조금씩 소개된 간단한 내용이었다.

 

 

 

 

 

 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식)

불향🔥제육?이 나왔는데 사진 지금보니 진짜 많이도 담았다ㅋㅋㅋ


(살뺀다고 식이조절하고 있는데 이거땜시 바로 돼지🐷될듯ㅋㅋㅋ

아니 그리고 불향이라면서... 불향 왜 냄새만 남...??)


 
 
 
 
 
 

 
 

📖 공부! (13:30-18:00)

논문 review 계속 진행. 오늘은 Relative Works파트와 SFOD파트를 읽었다.

3장정도의 분량이라 보면 된다.

 

[논문 review]: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data

No Free Lunch from Deep Learning이라는 말이 있을만큼 No Free Lunch라는 말은 유명한데... 이를 정면으로 반박하고 Free Lunch라고 표현한걸 봐서는 매우 자신이 있다는 말로 해석해서 이 논문을 첫번째 논문

chan4im.tistory.com

일단 요약하자면...

이게 진짜 필요한 설명 넣으면서 최대한으로 꾹꾹 풀압축펀치로 요약한거다ㅋㅋㅋ

아직 이해가 완벽하게 되지는 않았기 때문에 내일 Experiments를 다 읽은 후든, 읽기 전이든 한번은 다시 흐름을 되짚어 봐야겠다.
 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동! (19:00 -)

오늘은 5X5 Strength B루틴 하는날.
카페인 시원하게 마시고 바로 Squat→Military Press→Dead Lift 하러 갔다.
 역시 Deadlift가 제일 맛깔난👅 운동이다. (근데 하고나면 진짜 세상세상 이렇게 피곤할 수가 없다ㅋㅋㅋ)
 

 

 

 


 

 

📌 TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Source free Domain Adaptive Object Detection (정리는 완료, 톺아보기 필요❗️)
아 그리고 pseudo labeling in FN Simulation에서 Detection에서 TN얘기가 나왔다.
Detection에서는 TN이 안쓰인다고 알고있어서 이에 대해서도 좀 알아봐야한다.

∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 


 
 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.12  (2) 2024.01.12
[ETRI]2024.01.11  (0) 2024.01.11
[ETRI]2024.01.09  (2) 2024.01.09
[ETRI]2024.01.08  (4) 2024.01.08
[ETRI]2024.01.05  (4) 2024.01.05

📊 다양한 시각화 방법

대표적으로 WandB는 학습log 시각화를 주로 사용한다.

대표적으로 다음과 같다.

  • Loss, Accuracy 그래프
  • Model parameter(gradient) 그래프
  • pred_img 시각화
  • sweep 그래프
  • Confusion Matrix
  • ROC, PR Curve

 

 

 

 

1.  Loss, Accuracy 그래프

💻 코드

wandb.log({'loss':loss}, step=epoch)
wandb.log({'val_loss': val_loss,
           'val_acc': val_accuracy })

 

📊 시각화


 

 

2.  Model parameter(gradient) 그래프

💻 코드

wandb.watch(model, criterion, log="all", log_freq=10)

log="all"을 주면 gradient와 parameter, bias를 모두 기록할 수 있다.

 

📊 시각화

 

 


3.  Pred_Img 시각화

💻 코드

ex_images.append(wandb.Image(data[0], 
                                  caption="Pred:{} Truth:{}".format(pred[0].item(), target[0])
                                  ))
  
 wandb.log({"Image": ex_images})

 

📊 시각화

cf) index바를 조절해 학습진행경과확인이 가능하다.

 


4.  sweep 그래프

💻 코드

sweep_id = wandb.sweep(sweep_config, project="mnist", entity='v2llain')
wandb.agent(sweep_id, run_sweeep, count=6)

 

📊 시각화

X축: configuration된 parameter이름

y축: 변경된 값

맨 우측: 성능측정값

 


5.  Confusion Matrix

💻 코드

sweep실행❌)

wandb.sklearn.plot_confusion_matrix(y_test, y_pred, 
                                    labels=classes_name)

 

sweep실행⭕️)

wandb.log({
      "Confusion Matrix":
      wandb.plot.confusion_matrix(preds=best_all_preds,
                                  y_true=best_all_labels,
                                  class_names=classes_name
                                  )})

 

📊 시각화

좌) sweep X.   우) sweep진행 시, 색별로 sweep구분가능.

 


6. ROC, PR Curve

💻 코드

wandb.log({'roc': wandb.plots.ROC(y_test, y_prob_pred, cnb.classes_)})
wandb.log({'pr': wandb.plots.precision_recall(y_test, y_prob_pred, cnb.classes_)})

 

📊 시각화

두 그래프 모두 상단에 위치할수록 좋은 그래프 (∵AUC가 클수록 좋기 때문.)

 

 

🧹 Sweep이란?

0. Overview

단 1%라도 성능을 올리기위해 많은 사람들이 부단한 노력을 한다. (ex. paperswithcode)

결국, 모델의 성능을 최대로 끌어올리기 위해서는 Hyper-parameter를 변경하며 최적의 값을 찾기위해 이에 대해서도 부단히 노력을 기울여야 하지만, 이는 매우 피곤하고 Cost를 많이 들게 만든다.

이를 위해 등장한 것이 바로 W&B의 Sweep이다!

 

 

 

1. Sweep이란?

기본적으로 Hyper-parameter를 자동으로 최적화주는 Tool

Hyper-parameter Seach방식으로 다음 3가지가 존재한다.

  • Grid 방식
  • Random 방식
  • Bayes 방식

선택한 search 방식으로 하이퍼 파라미터 튜닝이 완료 되면 WandB의 웹에서 제공되는 dashboard로 시각화된 모습을 볼 수 있다.

이렇게 시각화된 모습은 위의 그림과 같다. Sweep은 자동으로 tuning해주는 기능 뿐만 아니라,

각각의 hyper parameter들이 metric(accuracy, loss 등)에 얼마나 중요한 지 알려주고 상관관계를 보여주기에 필수적이라 할 수 있다.

(대시보드)

 

 

 

 

 

🧹 Sweep 사용법❗️

 

Tune Hyperparameters | Weights & Biases Documentation

Hyperparameter search and model optimization with W&B Sweeps

docs.wandb.ai

Sweep은 필히 2개의 단계(Initialize the Sweep, Run the Sweep Agent)가 필요하다.

 

 

1. Initialize the Sweep 

 ∙ Sweep Configuration를 정의

Sweep Initialize를 위해 먼저 구성요소(configuration)를 정의해야한다.

이를 위해 required와 option으로 나뉜다.

 program(어디에서) method(무엇을) parameters(어떻게)
최적화를 할 것인지 정의해야한다.

이때, 최적화 방법으로 3가지가 존재한다.
  • Grid 방식 : 가능한 모든 조합 탐색 (= Cost↑)
  • Random 방식 : random하게 선택 (= Cost↓, opt찾을확률↓)
  • Bayes 방식 : 이전에 시도한 hyper-parameter조합의 결과를 사용, 다음시도조합 추론시 사용 
    → 모델성능을 최대로 향상시킬 수 있는 hyper-parameter조합을 찾는다. (= 초기탐색이 느림)

 


이때, 특히나 parameters 파트가 중요하기에 좀 더 살펴보자.


values  value
Hyper-parameter에 대해 특정 값을 설정해서 우리가 원하는 값만 선택하게 해줌.
(value는 1가지 값을 설정해줄 때 사용)


distribution
values와 대조되는 방식.
특정 값을 설정하는 대신 원하는 분포 안에서 값을 선택.
Sweep에서는 uniform, normal, q_log_uniform과 같이 다양한 분포를 제공.
또한 선택된 분포를 min, max와 mu, sigma, q를 통해 자유롭게 변형가능.

min, max
분포의 최소∙최대값을 설정.

mu
  sigma

평균과 표준편차를 나타내는 값, 정규분포(normal)의 모양을 결정.

q

Quantization의 약자로 distribution에서 나온 값 X를 양자화.
ex) q를 2로 설정한다면 X는 2의 배수로 바뀜.
(ex. 식 round(X / q) *q를 적용하면, -2.96은 -2로 13.27은 14로 8.43은 8로 바뀜.)=

 ∙ project에 사용하기위해 Sweep API로 초기화

Sweep의 config가 제대로 정의가 됐다면 이제 프로젝트에 적용을 해줘야한다.

 

sweep 초기화 코드:

sweep_id = wandb.sweep(config.sweep_config)


위에서 정의된 config 변수를 입력으로 받고 sweep id를 출력해준다.

이 id는 다음 step에서 sweep을 실행시킬 때 고유한 identifier로 사용된다.

 

 

 

 

 

 

2. Run the Sweep Agent

  • 함수나 프로그램을 W&B서버에서 실행.

이제 본격적인 실행만이 남았다.

위에서 정의해준 configuration을 사용해 sweep을 진행하자.

 

sweep 진행코드:

wandb.agent(sweep_id, function=train, count=count)

이때, 위에서 출력된 sweep_id를 입력으로 넣어준다.

또한, function에 우리가 정의한 train함수를 넣어주고

sweep을 몇번 진행할 지 숫자를 count에 입력해준다.

성공적으로 Sweep 실행시 출력되는 화면.

 

 

 

 

 

cf). yaml 파일로 실행하는 방법.

project와 entity를 기입 가능한 곳

  • config 설정 하는 파일 (config.py 혹은 config.yaml)
  • wandb.sweep()
  • wandb.init()
  • wandb.agent()

config를 .py파일로 정의하는 방식과 .yaml파일로 정의하는 방식이 존재.yaml파일로 실행하는 방법에 대해 알아보자.


1. config.yaml 파일 생성

 

 

 

 

2. . yaml 파일, Sweep에 입력

wandb sweep config.yaml

 

 

3. Sweep id를 Agent에 입력

wandb agent SWEEP_ID

 

 

 

cf) wandb terminal에서 명령어로 지정하기.

∙ sweep 횟수 제한

wandb agent --count [LIMIT_NUM] [SWEEPID]

 

 

∙ Multi-GPU sweep 사용

CUDA_VISIBLE_DEVICES=0 wandb agent sweep_id
CUDA_VISIBLE_DEVICES=1 wandb agent sweep_id

 

 

 

 


 

 

 

🧹 W&B Sweep 실행을 위한 예시코드

from dataset import SweepDataset
from model import ConvNet
from optimize import build_optimizer
from utils import train_epoch

import wandb
import config

parser = argparse.ArgumentParser()
parser.add_argument('--batch-size', type=int, default=8, metavar='N')
parser.add_arguemnt('--epochs', type=int, default=10)                     
args = parser.parse_args()                   

wandb.config.update(args)

def train():
    wandb.init(config=config.hyperparameter_defaults)
    w_config = wandb.config

    loader = SweepDataset(w_config.batch_size, config.train_transform)
    model = ConvNet(w_config.fc_layer_size, w_config.dropout).to(config.DEVICE)
    optimizer = build_optimizer(model, w_config.optimizer, w_config.learning_rate)

    wandb.watch(model, log='all')

    for epoch in range(w_config.epochs):
        avg_loss = train_epoch(model, loader, optimizer, wandb)
        print(f"TRAIN: EPOCH {epoch + 1:04d} / {w_config.epochs:04d} | Epoch LOSS {avg_loss:.4f}")
        wandb.log({'Epoch': epoch, "loss": avg_loss, "epoch": epoch})     
        
sweep_id = wandb.sweep(config.sweep_config)
wandb.agent(sweep_id, train, count=2)

sweep을 위한 config 파일은 config.py에 구현되어 있습니다. 코드를 순서대로 설명하면 다음과 같습니다.

1. hyper parameter의 초기값을 wandb.init에 입력으로 넣어줍니다.
2. w_config는 sweep을 할 대상 hyper parameter입니다.
3. loader, model, optimizer 함수에 w_config를 매개변수로 전달해줍니다.
4. model을 정의하면 wandb.watch 함수로 gradient를 추적합니다.
5. epoch 별로 나오는 log를 wandb.log에 저장합니다.
6. config 파일에 정의해둔 구성 요소를 wandb.sweep에 입력합니다.
7. wandb.sweep에서 나온 id와 위에 구현된 train 함수, 그리고 횟수를 wandb.agent에 입력하고 sweep을 실행시킵니다.

 

참고) https://pebpung.github.io/wandb/2021/10/10/WandB-2.html

 

 

 


🧹 Sweep 시각화

WandB실행 이후, 시각화된 결과를 분석해보자. (대시보드)

이를 위해서는 Sweep workspace의 구성방식에 대해 알아봐야한다.

 

좌측 그래프: y축은 metric, X축은 생성된 날짜를 의미.

우측 표: hyper parameter가 metric(accuracy, loss 등)에 얼마나 중요한 지와 상관관계가 어느정도 인지도 알려줌.

 


 

위 그림은 hyper-parameter선택과정을 시각적으로 보여준 그림이다.

 ∙ X축: config에서 설정한 hyper-parameter의 종류

 ∙ y축: config에서 설정한 hyper-parameter의 범위

 

추가적으로 마우스를 가져다 놓으면 해당 그래프에서의 값을 알 수 있다.

📌 WandB가 왜 필요할까?

1. Model Experiment Pipeline

https://ml-ops.org/content/mlops-principles

위 그림을 보면 알 수 있듯, MLOps과정은 크게 3단계로 나뉜다.

 ∙ Project Design

 ∙ Experiment & Development

 ∙ 배포 및 운영

 

이중, 2단계인 "실험에 도움을 주는 Tool"중 하나가 바로 WandB이다.

(cf. TensorBoard도 존재.)

 

 

 

2. Configuration

ML구축을 위한 필수구성요소로 대표적인 예시는 다음과 같다.
∙ Dataset
∙ Metric
∙ Model
∙ Hyper-parameter

 

Training과정에서, 이 Configuration값을 적절하게 선택해줘야한다.

🧐 Batch size에 대하여
Data나 Model의 종류에 따라 적절한 Batch_size가 존재하기에
batch_size를 너무 작은값이나 큰값을 쓰면 오히려 학습이 잘 안되는 경향이 존재한다.

cf) 특정한 가설하에 연역적으로 증명가능할 때,
batch size를 2배 증가시키면 step size는 √2배 증가시켜야한다. 

cf) batch size를 증가시켰는데도 총 epoch수를 그대로 두면
한 epoch당 iteration수가 줄어들기에
그만큼 gradient로 parameter update를 덜 시키는 것이므로
Loss감소속도가 느려져 학습이 잘 안될 수도 있다.

그렇기에 적절한 Configuration설정은 준필수적이다.

 

특히, Dataset은 Data Augmentation

Metric은 추가하거나 교체하고, Model도 구조를 변경시키는 시간은 상대적으로 적은 시간이 들지만

 

Hyper-parameter Tuning의 경우 적절한 값을 찾기 위해서는 상당히 많은 시간을 할애해야한다.

Model의 parameter 최적화를 위해 Hyper-parameter를 적절히 조절해야하고, 이는 Hyper-parameter를 변경시키며 다양한 실험을 해야하기 때문이다.

 

이를 사람이 일일히 한다면?

즉, Hyper-parameter를 사람이 직접 일일히 tuning하는 작업은

매우 비효율적이고, 기록이 누락될수도 있고 이를 수기로 정리까지 해야하는, 

종합고민3종세트라 할 수 있겠다.

 

 

 

 

 

 

📌 WandB?

WandB(Weights & Biases)는 더 최적화된 모델을 빠른시간내에 만들 수 있게 도와주는, ML Experiment Tracking Tool이다.

주요기능

W&B Platform

  • Experiments: 머신러닝 모델 실험을 추적하기 위한 Dashboard 제공.
  • Artifacts: Dataset version 관리와 Model version 관리.
  • Tables: Data를 loging하여 W&B로 시각화하고 query하는 데 사용.
  • Sweeps: Hyper-parameter를 자동으로 tuning하여 최적화 함.
  • Reports: 실험을 document로 정리하여 collaborators와 공유.

 

 

 

📌 W&B Experiments. 함수 및 예제

모델학습 시, 모델 학습 log를 추적하여 Dashboard를 통해 시각화
이를 통해 학습이 잘 되고 있는지 빠르게 파악할 수 있다.

 

1. config setting

W&B실행을 위해 config파일이 필요하기에 

Hyper-parameter, Data명 등 학습에 필요한 구성들을 그룹화한다.

또한, 이 config파일은 sweep에 중요하게 사용된다.

config  = {
    'dataset': 'MNIST',
    'batch_size': 128,
    'epochs': 5,
    
    'architecture': 'CNN',
    'classes':10,
    'kernels': [16, 32],
    
    'weight_decay': 0.0005,
    'learning_rate': 1e-3,
    
    'seed': 42
}

 

 

 

 

 

 

2. Dataset with DataLoader

def make_loader(batch_size, train=True):
    full_dataset = datasets.MNIST(root='./data/MNIST', train=train, download=True,  transform=transforms.ToTensor())

    loader = DataLoader(dataset=full_dataset,
                        batch_size=batch_size,
                        shuffle=True, pin_memory=True, num_workers=2)
    return loader

 

 

 

 

 

3. CNN Model

class ConvNet(nn.Module):
    def __init__(self, kernels, classes=10):
        super(ConvNet, self).__init__()

        self.layer1 = nn.Sequential(
            nn.Conv2d(1, kernels[0], kernel_size=5, stride=1, padding=2),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2))
        self.layer2 = nn.Sequential(
            nn.Conv2d(16, kernels[1], kernel_size=5, stride=1, padding=2),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2))
        self.fc = nn.Linear(7 * 7 * kernels[-1], classes)

    def forward(self, x):
        out = self.layer1(x)
        out = self.layer2(out)
        out = out.reshape(out.size(0), -1)
        out = self.fc(out)
        return out

추가적으로 W&B는 모델의 weights와 bias같은 parameter를 추적할 수 있다.

이를 통해 학습 도중 weights의 histogram이나 distribution을 통해 원활한 학습방향수정이 가능하다.

 

 

 

 

 

4. Train 함수

def train(model, loader, criterion, optimizer, config):
    wandb.watch(model, criterion, log="all", log_freq=10)

    example_ct = 0
    for epoch in tqdm(range(config.epochs)):
        cumu_loss = 0
        for images, labels in loader:

            images, labels = images.to(device), labels.to(device)

            outputs = model(images)
            loss = criterion(outputs, labels)
            cumu_loss += loss.item()

            optimizer.zero_grad()
            loss.backward()

            optimizer.step()

            example_ct +=  len(images)

        avg_loss = cumu_loss / len(loader)
        wandb.log({"loss": avg_loss}, step=epoch)
        print(f"TRAIN: EPOCH {epoch + 1:04d} / {config.epochs:04d} | Epoch LOSS {avg_loss:.4f}")

wandb.log()함수를 통해 loss함수를 시각화 할 수 있음.

이때, step을 epoch으로 받아 avg_loss값을 기록하는 것을 알 수 있다.

 

wandb.watch()는 Dashboard에서 실험 log를 시각화하는 역할을 수행.

 

 

5. Run 함수

def run(config=None):
    wandb.init(project='MNIST', entity='계정명', config=config)

    config = wandb.config

    train_loader = make_loader(batch_size=config.batch_size, train=True)
    test_loader = make_loader(batch_size=config.batch_size, train=False)

    model = ConvNet(config.kernels, config.classes).to(device)
    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.Adam(model.parameters(), lr=config.learning_rate)

    train(model, train_loader, criterion, optimizer, config)
    test(model, test_loader)
    return model

wandb.int()으로 wandb web서버와 연결.

 

cf) project와 entity를 기입 가능한 곳

  • config 설정 하는 파일 (config.py 혹은 config.yaml)
  • wandb.sweep()
  • wandb.init()
  • wandb.agent()

 

 

 

 

6. 결과

실험결과, 각 에폭마다 해당 Layer에 전파되는 Gradient값들을 확인할 수 있다.

추가적으로 해당 epoch에 대한 gradient distribution의 경우 마우스를 가져다 놓으면 위의 그림처럼 확인가능하다.

🏢 ETRI (2024.01.09)

📌 01.08-TODO List:

1. 논문 List마저 읽기
∙ Multi-Granularity Alignment Domain Adaptation for Object Detection (CVPR 2022)
∙ Cross-domain adaptive teacher for object detection (CVPR 2022)
∙ ConfMix: Unsupervised Domain Adaptation for Object Detection via Confidence-based Mixing (WACV 2023)
∙ Object detection based on semi-supervised domain adaptation for imbalanced domain resources (Machine Vision and Applications 31 2020)

2. Deep Learning 2024(Bishop): Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites

3. 주말에 공부할 것: WanDB사용법 제대로 알기!
i) WanDB란?
ii) Sweep알기❗️
iii) WanDB Visualization Method (feat. Confusion Matrix)

4. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Abstract
∙ Introduction (- 화)
∙ Related Works (내용 적음 - 수)
∙ Source free Domain Adaptive Object Detection (내용 짱많음 - 수)
∙ Experiments (2번째로 많음 - 목)
∙ Conclusion
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 
 
 

🚍 출근! (8:10 - 8:20)

6시 알람이 지독하게도 날 깨워서 겨우겨우 셔틀버스 시간에 맞춰 일어났다...
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)
 
 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 운행하는 곳이 내 자취방 근처라는 것을 알고? 일찍와서 공부를 시작할 수 있었다.
지난주에 미리 정리한 논문 리스트에 대한 Abstract와 Conclusion에 대해 정리해 보았다.
(남은 논문 3편 정리완료. 8:30~10:10)
https://chan4im.tistory.com/220

 

[DA]: Relative Research paper Brief.

Survey Paper ∙ Deep Domain Adaptive Object Detection: a Survey (IEEE 2020) ∙ Unsupervised Domain Adaptation of Object Detectors: A Survey (IEEE 2023) Conference Paper ∙ Domain Adaptive Faster R-CNN for Object Detection in the Wild (CVPR 2018) ∙ Abs

chan4im.tistory.com

 
 
 
 
 
 
 
 
 
 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식)
닭갈비가 나왔는데 사진 지금보니 진짜 많이도 담았다ㅋㅋㅋ
(살뺀다고 식이조절하고 있는데 이거땜시 바로 돼지🐷될듯ㅋㅋㅋ)


 
 
 
 
 
 

 
 

📖 공부! (13:30-18:00)

WandB 정리를 모두 끝냈다.

 

'Deep Learning : Vision System/MLOps Tool: Weights & Biass' 카테고리의 글 목록

컴퓨터과학, 인공지능에 대한 공부를 열심히 하는 공대생

chan4im.tistory.com

 
주말에 딥러닝과 논문리뷰에 좀 더 집중해서 공부할 수 있을 것 같다 히히😜.

논문 초록,서론,결론파트는 다 읽었다
후후..
 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동! (19:00 -)

벤치하고 집가는데 폭설이...
어우...
 
 

 
 
 

📌 TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Related Works (내용 적음 - 수)
∙ Source free Domain Adaptive Object Detection (내용 짱많음 - 수)
∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1
∙ 2.2
∙ 2.3
∙ 2.4
∙ 2.5
∙ 2.6
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.11  (0) 2024.01.11
[ETRI]2024.01.10  (4) 2024.01.10
[ETRI]2024.01.08  (4) 2024.01.08
[ETRI]2024.01.05  (4) 2024.01.05
[ETRI]2024.01.04  (0) 2024.01.04

Survey Paper

∙ Deep Domain Adaptive Object Detection: a Survey (IEEE 2020)

∙ Unsupervised Domain Adaptation of Object Detectors: A Survey (IEEE 2023)

 

 

 

Conference Paper

Domain Adaptive Faster R-CNN for Object Detection in the Wild (CVPR 2018)

 Abstract

일반적으로 Detection시, trainingset과 testset이 동일한 분포일 것이라 가정. 즉, 분포가 달라지면 성능이 떨어질 수 밖에 없음

🧐 저자의 제안:

Detection에서 cross-domain 강화에 초점.
2개의 Domain Shift를 다룬다.
  i) Img수준의 변화 --ex) style, 조명 등
  ii) Instance수준의 변화 --ex) 객체외관, 크기 등

SOTA인 Faster R-CNN을 사용,

위에서 말한 2개의 DAC(Domain Adaptation Component)를 삽입해 Domain불일치를 감소시킴


2개의 DAC의 경우, H-Divergence이론에 기반, 적대적 훈련방식으로 Domain Classifier를 학습해 구현.
(
To address the domain shift, we incorporate two do- main adaptation components on image level and instance level into the Faster R-CNN model to minimize the H- divergence between two domains.)


서로다른 Domain Classifier는 일관성규제를 통해 강화되어 RPN학습에 사용

Dataset: Cityscapes, KITTI, SIM10K 등


 

 Image-level. vs. Instance-level Alignment

이미지 수준과 인스턴스 수준 Adaptation의 영향을 더 자세히 분석하기 위해 KITTI → Cityscapes에서 scale변화실험 수행.
Scale 변화 = 모든 인스턴스와 배경에 영향을 미치는 전역적인 변환


tgt img scale변화 → scale불일치 시 vanilla-Faster R-CNN(ex. non-adapt비적응)의 성능이 크게감소.

두 adaptation에 대해 scale변화에 대한 견고성: Imgae > Instance

저자의 설계: 전역 도메인 변화가 주로 Image-level의 조정으로 해결.
Instance-level은 불일치를 최소화하기 위해 사용되며, 심각한 전역 도메인 변화가 발생할 때 Instance 제안의 위치 결정 오류가 증가하기 때문.

그럼에도 불구하고 두 방법을 모두 사용하는 것이 모든 스케일에서 최상의 결과를 얻습니다. 
cf) Scale이 증가할수록 성능↑




 Conclusion





새로운 Domain에도 추가적인 Labeling한 Data없이 잘 탐지할 수 있음.

2가지 방식을 제안.
  i) Img수준의 Adaptation Component
  ii) Instance수준의 Adaptation Component

위의 Adaptation Component는 H-Divergence의 적대적훈련에 기반.

Consistency Regularizer는 추가적으로 Domain에 불변한 RPN을 학습하기 위해 적용됨.


 

 

 

 

 

 

 

 

 

Progressive Domain Adaptation for Object Detection (WACV 2020)

 Abstract


다른 Domain에 적용은 Image의 Distribution이 다르기에 일반화가 쉽지 않다. Domain Adaptation은 존재하는 label을 testing data에 target하는 것이지만, 매우 challengeable하다.


🧐 저자의 제안:

중간 도메인(Intermediate Domain)을 활용.
도메인 간 차이를 줄이고 점진적으로 더 쉬운 적응 하위 작업들을 해결하는 방법.

[중간도메인]
Src를 translate→Tgt을 모방해 구축
Domain Shift문제해결을 위해 feature수준의 분포를 맞추도록 "Adversarial Learning"을 수행.

추가적으로 중간 Domain의 불균형한 img품질을 다루기 위해 weighted task Loss가 적용됨.



 

Progressive Domain Adaptation Framework




 Conclusion


Src→Tgt 이미지로의 변환에 대해 Intermediate Domain을 추가해 Domain Gap간의 교량역할을 진행.

Intermediate Domain 과정:
i) Src에서 중간 Domain으로 Adapt
ii) Tgt Domain에 이를 적응시킴.
∴ Adapt Sub-task를 점진적으로 해결.

Weighted Loss:
Image화질이 불균형한 intermediate domain을 위해 도입

우리의 방법은 많은 시나리오에 적용가능함.

 

 

 

 

Unsupervised Domain Adaptive Object Detection using Forward-Backward Cyclic Adaptation (ACCV 2020)

 Abstract


FBC(Forward-Backward Cyclic) Training으로 Unsupervised Domain Adaptation을 소개한다.

But❗️주변특성분포 조정만은 class조건부분포를 조정하는것까지 보장❌
→ Domain Discrepancy를 더 크게만듬.

따라서 저자가 Instance-level Adapt를 위해 category-level semantic에 대한 Domain불변성을 학습하는 것을 목표로 한다.
 기울기가 유사한 두 Domain이라면, 한 Domain만을 학습시킴으로써 다른 Domain의 학습을 향상시킬 수 있음을 의미.


🧐 저자의 제안:

즉, Gradient조정을 위해 FBC Adaptation을 제안.
 ∙ Forward: Tgt→Src으로의 적응을 계산
 ∙ Backward: SrcTgt으로의 적응을 계산

이 과정을 반복적으로 수행.

Adversarial Training으로 Image-level 조정을 위해 Low-level feature를 강조.


다만, 두 도메인에서 잘 되더라도 Tgt에서 안될 수 있다.
이를 위해 2가지 Regularization방법을 도입, Domain다양성을 강조.
 i) Src에서 최대 Entropy규제로 확실한 Src-specific학습에 penalty
 ii) Tgt에서 최소 Entropy규제로 Tgt-specific학습을 유도.


 





 Conclusion


Label이 없는 Tgt Domain문제(= Unsupervised Learning)에 대해 FBC라는 방법을 제시:

FBC: Gradient방향이 비슷한 Src와 Tgt에 대해 category수준 semantic의 Domain불변성을 학습할 수 있을 것이라는 직관에 기반.
Adversarial Training을 통한 Local feature조정은 전체적인 Image-level의 Domain불변성학습을 위해 수행.

Entropy규제: 확실한 Source-specific학습에 penalty, Tgt-specific유도를 위해 Domain다양성을 제약.

 

 

 

 

 

 Domain Contrast for Domain Adaptive Object Detection (IEEE 2020)

 Abstract

🧐 저자의 제안:

 DA Detector훈련을 위해 대조적학습에서 영감을 받아 "간단하지만 효과적인 Domain Contrast; DC"를 제안.

[DC]:
transferred model의 오류한계최소화 관점에서 유도됨.

DC는 plug-and-play방식의 Cross-Domain Contrast손실로 구현되었으며 이 손실을 최소화함으로써 DC는 Domain의 Class Imbalance문제를 완화한다.


 


 Conclusion

[DC]:
transferred model의 오류한계최소화 관점에서 유도됨.

DC는 plug-and-play방식의 Cross-Domain Contrast손실로 구현되었으며 이 손실을 최소화함으로써 DC는 Domain의 Class Imbalance문제를 완화한다.

 

 

 

 

 


∙ One-Shot Unsupervised Domain Adaptation for Object Detection (IEEE 2020)

 Abstract

UDA(Unsupervised Domain Adaptation)의 문제점:
label이 있는 Src Data 필요.
Unlabeled인 Tgt Data가 "많이"필요
또한, Classification에서만 UDA방법론들이 발전해왔었음.

🧐 저자의 제안:

단지 1개의 Unlabeled Tgt sample만 있으면 됨.
OSFA(One-Shot Feature Alignment)알고리즘은 수준의 Src, Tgt feature을 맞추기 위해 제안됨:
낮은 층의 CNN의 feature map의 평균활성화를 맞춰 Domain Shift를 줄인다.




위쪽)SSD  //  아래쪽) Conv1_1, Conv1_2, Pool1 3개로 구성.

 


 Conclusion




단지 하나의 Unlabeled Tgt sample만 필요.
→ 이를 위해 OSFA가 제안됨.

OSFA는 저차원의 Src,Tgt feature Domain을 맞추기 위해 제안된 알고리즘.

이 방법론은 Tgt sample선택에 상관없이 좋은 DA결과를 보이며, Domain Shift를 성공적으로 줄일 수 있었음.

 

 

 

 


∙ Multi-Source Domain Adaptation for Object Detection (ICCV 2021)

 Abstract

transfer-learning에 초점을 맞춰 UDA를 학습하려는 시도에도 불구하고 간단한 Src Domain의 문제는 일반적인 시나리오를 무시해버려 안좋은 성능이 나온다.

🧐 저자의 제안:

Domain불변성향상 및 식별력유지를 동시에 이루기 위해 통합된 Faster R-CNN기반 framework인 "Divide-and-Merge Spindle Network"; DMSN을 제안한다.

[DMSN]:
- 계층적 Src Subnet: 저/고수준의 특성에 각각 강한 alignment, 약한 alignment를 수행하기위한 계층적 alignment전략을 수행.

- Pseudo Tgt Subnet: 여러 Src Subnet을 가중합, Pseudo Tgt Subnet의 최적매개변수를 근사화하기 위한 새로운 학습알고리즘.

- RPN을 위한 consistency규제: 각 서브넷이 보다 추상적인 불변성을 학습.



 


 Conclusion


DMSN이라는 프레임워크를 개발.

계층적구조로 저∙고차원의 특징을 결합, 독립적인 Subnet에서 지도학습을통해 각 Src특성을 보존.

Pseudo subnet: 서로다른 Src subnet의 지수이동평균 매개변수로 update


 

 

 

 

∙ SimROD: A Simple Adaptation Method for Robust Object Detection (ICCV 2021) 

 Abstract

 

🧐 저자의 제안:

 Simple Robust Object Detection, 일명 SimROD는 난제라 꼽히는 domain shift, psuedo-label noise를 극복하였다.

이를 위해 아래 새로운 메커니즘을 통합한다:
∙ Domain중심 데이터증강
 점진적인 self-labeling adaptation과정
  teacher-guided fine-tuning


이 방법을 사용하면 모델구조변경, 합성데이터생성을 하지않아도 대상 domain sample을 활용해 객체탐지모델을 적응시킬 수 있다.





 Conclusion


우리의 간단한 방법은
i) 새로운 도메인 중심의 데이터 증강
ii) teacher-guided 의사 라벨 정제 절차를 통해
모델을 점진적으로 적응시킵니다.

이는 작은 모델부터 큰 모델까지 향상을 이뤘으며
저수준의 이미지 손상부터 고수준의 cross-domain이나 스타일적 차이까지 다양한 종류의 도메인 이동을 완화할 수 있다.

연구 중에 저자는 점진적 적응이 왜 작동되며 ii)가 모델 적응에 어떻게 도움이 되는지에 대한 통찰을 얻었습니다. 

 

 

 

 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data (AAAI 2021)

No Free Lunch from Deep Learning이라는 말이 있을만큼 No Free Lunch라는 말은 유명한데... 이를 정면으로 반박하고 Free Lunch라고 표현한걸 봐서는 매우 자신이 있다는 말로 해석된다?

 Abstract

UDA는 Src, Tgt에 자유롭게 접근, Domain간 격차를 줄이기위해 함께 훈련한다 "가정"한다.→실제시나리오에는 실전적X

🧐 저자의 제안:

이로인해 Unlabeled Src Data로부터 Tgt에 최적화하는 방향이 주목받게 되었고, 이를 위해 저자는 SFOD(Source Data-Free Domain Adaptive Object Detection)프레임워크를 제안

[SFOD]: Src Data없이도 DA탐지를 가능하게 하며, 이는 Noise있는 Label로 학습하는 것으로 모델링한다.

일반적으로 Src에서 pretrained모델을 활용, Tgt의 가짜라벨생성을 한다.

하지만 Tgt Domain라벨이 없으면, 이런 가짜라벨생성에 대한 평가가 어렵다.



→ SED(Self-Entropy Descent)라는 평가지표 도입!


SED: 가짜라벨에 대해 적절한 신뢰임계값결정을 위해 도입한 metric



다만, 완전히 깨끗한 라벨을 얻는 것은 여전히 어려움을 겪고 있는데,
실험결과 생성된 노이즈가 있는 라벨에서 거짓 음성이 지배적임을 발견.

개선을 위해 FN mining이 도움이 되며, Mosaic와 같은 데이터 증강을 통해 FN시뮬레이션을 용이하게 한다.





 Conclusion

UDA_OD를 위한 새로운 학습 패러다임인 SFOD를 제안한다.

이는 Src Data를 직접사용하는 대신,
Src Domain에서 사전훈련된 모델만을 활용,
Supervision signal을 제공
하는 것이 핵심이다.

이는 noise가 있는 Label로 학습하는 관점에서 해결가능하다 보는데, 많은 Src data기반방법을 넘기도 하지만

Noise Label(FP,FN)을 완전히 제거하는 것에 대해 Unsupervised 방식이 매우 어렵다는점을 인정해야한다.

 

 

 

 

 

 

 


∙ Multi-Granularity Alignment Domain Adaptation for Object Detection (CVPR 2022)

 Abstract

DAOD는 Src와 Tgt간의 독특한 data분포로 난제이다.

🧐 저자의 제안:

Domain불변성학습을 위해 통합된 다중 해상도 정렬 기반의 OD-framework를 제안.
이를 위해 pixel∙instancecategory수준의 서로 다른 해상도 관점 간의 종속성을 동시에 인코딩해 두 도메인을 정렬합니다.

백본 네트워크에서 pixel-level feature map기반, Omni-Scale Gated Fusion 모듈을 개발,
스케일에 민감한 Conv로 instance의 구분력 있는 표현을 집계→ 견고한 다중 스케일 객체 검출을 유도.

동시에, 다중 해상도 판별자가 서로 다른 해상도(픽셀, 인스턴스 및 카테고리)가 어느 도메인에서 왔는지 식별하도록 제안.

특히, 다른 카테고리에서의 인스턴스 구분력 뿐만 아니라 두 도메인 간의 카테고리 일관성도 활용합니다.

다양한 도메인 적응 시나리오에서 실험을 수행하여 FCOS 기반의 앵커 프리 방식과 Faster R-CNN 기반의 앵커 기반 방식을 다양한 백본으로 사용한 상태에서 저자의 프레임워크의 효과를 입증.

 

 


 Conclusion



이 연구에서는 픽셀, 인스턴스 및 카테고리 수준의 다중 해상도 정보 간의 종속성을 인코딩하여 Src 도메인과 Tgt 도메인의 feature 분포를 더 정확하게 정렬했다.

특히, 제안된 omni-scale gated fusion 모듈은 가장 타당한 Conv로 다중 스케일 피쳐 맵에서의 instance feature를 활용할 수 있다.

다중 해상도판별자는 두 도메인에서 다른 카테고리의 인스턴스를 구별할 수 있다. 

 

 

 

 


Cross-domain adaptive teacher for object detection (CVPR 2022)

 Abstract

annotation이 달린 Src와 annotation이 없는 Tgt간의 Domain Gap을 줄이기위해 DA를 다루며
유명한 Semi-Supervised학습법인
Teacher-Student프레임워크(teacher model이 만든 유사라벨로 지도학습)는 cross-domain에서 좋은 성능.
다만 아래 2가지 취약점이 존재.
i) Domain Shift
ii) 많은 저품질유사라벨 생성 (ex. FP)

🧐 저자의 제안:

이 취약점완화를 위해 Adaptive Teacher; AT를 사용:
∙ Domain Adversarial Learning
weak-strong Data Augmentation
를 사용하는 teacher-student framework

∙ Domain Adversarial Learning:
  student모델에서 feature-level 적대적훈련
→ Src와 Tgt간의 유사한 분포를 공유하게함
Student모델이 Domain불변성을 생성하게함

 weak-strong Data Augmentation
 Teacher model: Tgt에서 data생성
 Student model: 양쪽에서 data생성
두 모델간의 상호학습(mutual learning)진행.
Teacher모델이 Src에 편향되어 학습되는걸 방지.





 


 Conclusion


Cross-Domain을 위해 AT라는 새로운 프레임워크를 제안.

Tgt 도메인 Teacher 모델과
Cross-domain Student 모델을 통해
Framework는 mutual-learning으로
Tgt Domain에서 올바른 라벨생성이 가능.

적절한 증강 전략과 적대적 학습을 사용한 학습 파이프라인 설계는 Teacher 및 Student 모델 양쪽에서 Src Domain에 편향되는걸 해결.

 

 

 

 


ConfMix: Unsupervised Domain Adaptation for Object Detection via Confidence-based Mixing (WACV 2023)

 Abstract

UDA: Detect instance의 annotation이 없는 새로운 Tgt Domain에서 Src Domain으로 훈련된 모델을 적응시키는 것.

🧐 저자의 제안:

이전의 여타방법들과 달리 저자는 ConfMix를 제안:
처음으로 적응형 검출기 학습을 위해
region-level 탐지 confidence기반 샘플혼합 전략.

가장 확실한 pseudo detection과 대응되는
Tgt 샘플의 local region을 Src와 혼합,
추가적인 consistency loss요소를 적용,
점진적으로 Tgt분포에 적응시킴

영역에 대한 confidence 점수를 확실히 정하기 위해,
검출기 의존적인 신뢰도와 Bbox 불확실성을 모두 반영하는 (신뢰도 점수 / pseudo detection)을 활용.

더불어, training 기간에 따라 느슨함~엄격함 방식으로
변화하는 신뢰 지표를 사용; 유사 Tgt Detection을 점진적으로 필터링하는 새로운 가짜 라벨링 체계를 제안.






 Conclusion


ConfMix: 신뢰도 기반 혼합 방법
이 방법은 Src에서 훈련된 detector를 비지도 방식으로
Tgt에 적응시키기 위한 것

<혼합방식>:
Tgt img의 가장 확실한 가상검출영역 + Src img
이는 샘플 데이터 확장을 위한 region-level전략

<Adaptation방법>:
pseudo detection에 대한 consistency loss 사용.

<Tgt에서의 성능개선 및 자연스러운 전환을 위해>:
점진적으로 신뢰도 지표를 제한하는 점진적 가짜 라벨링 체계 (progressive pseudo labelling scheme)사용.

 

 

 

 

 

 

ShadowSense: Unsupervised Domain Adaptation and Feature Fusion for Shadow-Agnostic Tree Crown Detection From RGB-Thermal Drone Imagery (WACV 2024)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Journal Paper

Object detection based on semi-supervised domain adaptation for imbalanced domain resources (Machine Vision and Applications 31 2020)

 Abstract

Keywords의 Self-place가 아닌, Self-paced이다.


Src Detector는 "불균형/일관성없는 Domain Shift"로 Tgt이 적은곳에 완벽히 일치❌

🧐 저자의 제안:

appearance & semantic level의 Domain Shift Adaptation을 위한 "Semi-supervised Detector"를 제안한다.
이를 위해 2가지 구성요소가 제안:
∙ instance와 batch normalization이 있는 Appearance 적응신경망 
판별기 손실 re-weighting하는 semantic 적응 신경망
   (불균형한 scale의 두 Domain간의 feature alignment(정렬)향상)


Self-paced training: 쉬운 것부터 어려운 것까지 점진적으로 Tgt도메인에서 유사라벨을 생성





 Conclusion



완전히 라벨링된 Domain → Image수준 라벨링만 있는 Domain으로 강건한 Detector를 설계.

특히, Src와 Tgt이미지 간의 Domain Shift문제를
Appearance & Semantic수준의 alignment로 해결했다.

또한 semantic level adapt과정 중 아래 2가지 문제가 발생.
∙ Scale불균형
∙ Vanishing Problem.
이를 위해 standard adversarial 신경망이 개발, 어려운 클래스 샘플에 초점.
더불어, Self-paced학습법을 도입, 성능개선. 

 

 

 

🏢 ETRI (2024.01.08)

📖 공부! (8:30-12:00)

셔틀버스 운행하는 곳이 내 자취방 근처라는 것을 알고? 일찍와서 공부를 시작할 수 있었다.
(근데 지난주 토요일에 진짜 배탈났었다ㅋㅋ..💦)
지난주에 미리 정리한 논문 리스트에 대한 Abstract와 Conclusion에 대해 정리해 보았다.
https://chan4im.tistory.com/220

 

[DA]: Relative Research paper Brief.

Survey Paper ∙ Deep Domain Adaptive Object Detection: a Survey (IEEE 2020) ∙ Unsupervised Domain Adaptation of Object Detectors: A Survey (IEEE 2023) Conference Paper ∙ Domain Adaptive Faster R-CNN for Object Detection in the Wild (CVPR 2018) ∙ Abs

chan4im.tistory.com

 
 
 
 
 
 
 
 
 
 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식)
깐풍기 나왔는데 요건 그냥 그랬다.
 
 
 
 
 
 

🏛️ 도서관? (13:00-13:30) 

되게 멋지게 되어있었고
아래 사진처럼 도서분류도 되게 심플하게 되어있어서 책 찾고 고르기도 상당히 쉬웠다!

 
 
 

📖 공부! (13:30-18:00)

지난주에 미리 정리한 논문 리스트에 대한 Abstract와 Conclusion에 대해 정리해 보았다.
이거 계속하고있고 내일도 계속할거같다ㅋㅋㅋ
 
오늘 한 총량은 9개❗️+ 1(집에와서 고려거란전쟁 보고ㅋㅋ 한편 더 진행했다.)
혹시나 적게한게 아닐까 걱정했는데 교수님께서 잘했다고 북돋아주셨다.
추가적으로 논문리뷰할 논문 선택하라고 하셔서 제일 어렵고 복잡한 논문을 골랐다.
바로 이 논문이다:

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data (AAAI 2021)

 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

솔직히 쉬운거 고르고 싶었지만 뭔가 이건좀;; 싶어서...ㅎㅎ
그리고 좀 어려운 논문같아 보여서 아직 시작도 안했지만 웬지모르게 걱정도 된다...
https://chan4im.tistory.com/220
 
 

 

🚍 퇴근! (18:30 - 19:00)

스쿼트 하는날은 자전거 절대 타면 안된다. 
힘 아껴서 가야지.
자전거 타고나서 하체에 힘빠지면 진짜 죽을수도 있겠다는 생각이 들기때문에💦
바로 셔틀버스타고 집으로 슝하고 날라갔다.
출퇴근은 셔틀버스가 제일 빠른거 같다. (Shortest Path Algorithm?)

 

🏋🏻 운동! (19:00 -)

오늘은 5X5 Strength A루틴 하는날.
카페인 시원하게 마시고 바로 Squat→Bench Press→barbell row 하러 갔다.
 
 

 
 
 

📌 TODO List:

1. 논문 List마저 읽기
∙ Multi-Granularity Alignment Domain Adaptation for Object Detection (CVPR 2022)
∙ Cross-domain adaptive teacher for object detection (CVPR 2022)
∙ ConfMix: Unsupervised Domain Adaptation for Object Detection via Confidence-based Mixing (WACV 2023)
∙ Object detection based on semi-supervised domain adaptation for imbalanced domain resources (Machine Vision and Applications 31 2020)


2. Deep Learning 2024(Bishop): Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites


3. 논문 review:
A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.10  (4) 2024.01.10
[ETRI]2024.01.09  (2) 2024.01.09
[ETRI]2024.01.05  (4) 2024.01.05
[ETRI]2024.01.04  (0) 2024.01.04
[ETRI]2024.01.03  (4) 2024.01.03

i) Object Measurement

이미지에 나타난 객체의 크기를 알고싶을 수 있다.
단지 pixel수를 세어서는 크기를 알아낼 수 없기에 객체의 크기를 정교하게 측정하는 방법이 필요하다.
 Imaginea Labs에서 제안한 방법에 따라 사진상의 객체를 측정하는 과정을 단계별로 알아보자.
🤔 Reference Object
client의 사진만으로 신발사이즈를 추천해보자.
발치수 예측모델의 추론 시, 다양한 발자국 이미지를 처리하기에 Augmentation이 필수적이다.
또한, 카메라와 종이의 거리같은 요인또한 존재하기에 효과적인 solution을 만들기란 쉽지않다.
이런 scale문제는 거의 모든 client가 갖는 참조객체(Reference Object)를 image에 포함시켜 간단히 해결할 수 있다.
고객 대부분은 표준크기의 카드를 갖고 있을 것이므로 이를 보정객체(calibration object)로 활용할 수 있다.
좌측보다 우측이 좀 더 확대된 이미지
즉, 참조대상을 추가시켜 이를 해당 객체와 발을 비교하는 것으로 단순화시키는 것이다.

 

🤔 Segmentation
모델은 먼저 image를 2가지로 세분화해 추출해야한다.
 ∙ 신용카드
 ∙ 발자국
이를 위해 Mask R-CNN을 사용한다.
Mask분기를 통해 발자국, 신용카드 각각에 대한 마스크를 예측해 위 그림 우측처럼 유사한 결과를 얻는다.

이제 우린 위의 예측된 마스크를 아래처럼 개별적인 각각의 마스크로 볼 수 있다.
이제, 올바른 측정값을 얻기 위해 Mask들을 정렬해야한다.

 

🤔 회전수정
Mask를 얻은 후 회전에 대한 정규화를 수행해야한다.
회전을 수정하기 위해 각 Mask에 대해 PCA로 Eigen Vector값을 얻는다.
가장 큰 고유벡터의 방향의 객체의 크기 = 객체의 길이.
PCA의 특성상2번째 주성분부터의 고유벡터는 분산에 대한 기여도가 점점 줄어든다.
PCA이전, Mask의 차원은 좌측그림처럼 원본 이미지에 대한 차원축을 갖는 vector space에 존재한다.
PCA이후, 고유벡터들이 다른 vector space basis에 위치, 축이 가장 큰 분산의 방향을 따른다(우측그림).
 원래 좌표축과 첫번째 고유벡터사이의 각도를 이용해 얼마나 회전보정해야하는지 결정할 수 있다.

 

🤔 비율 및 측정
회전수정된 Mask를 통해 이제 발자국 측정이 가능하다.
❗️ 발자국과 신용카드의 측정값은 cm가 아닌, pixel단위라는 점에 유의
신용카드의 정확한 치수만 알면 필셀치수와 카드의 실제치수 사이 비율을 통해 신발 치수를 예측, client에게 제공해줄 수 있다.

 

 

 

 

 

 

 

 

 

 

ii) Counting

🤔 Filter 분해
아래 사진에서 포도의 알은 몇개일까?
지금까지의 소개한 개념을 기초로, 아래 접근방식 중 하나를 취할 수 있다.
  • Detection Classifier를 훈련, 열매를 검출, Bbox개수세기
    (박스가 열매를 합쳐버릴 수 있다는 단점)

  • Segmentation방법으로 접근, 군집의 속성에 따라 열매개수결정.
    (열매가 너무 작거나 크면 잘못된 결과 초래.)
    즉, 참조객체를 활용하기 곤란.

  • Regression문제로 접근, image자체로써의 열매수 측정.
    Segmentation처럼 scale문제가 존재.
1,2의 경우, 올바르게 분류되어야 함을 유의해야하고
3의 경우 회귀는 위치를 무시하는데, 위치정보는 이미지에서 중요하기에 이를 유의.

Sol) 밀도추정기술

 

🤔 밀도 추정
객체가 작고 겹치는 상황을 위해 2010년 제안된 논문.
이 방법은 Detection, Segmentation을 수행하지 않고, 위치정보도 잃지 않는다.

[Main Idea]
이미지의 patch에 있는 객체의 밀도를 추정하도록 신경망을 학습!
밀도추정을 위해 밀도를 나타내는 라벨이 필요. → 여기서는 열매 중심을 라벨로 지정.
즉, 신경망이 이 라벨을 추정하는 법을 배우는 것이다.

다만, 일부 열매는 patch에 부분적으로 걸쳐있을 수 있다.
→ 모델에 대한 grid입력 > patch_size

 

 

 

 

 

 

iii) Pose Estimation

🤔 Pose Estimation이란?
사람의 자세를 식별하기 위해 팔꿈치, 무릎, 얼굴 등을 식별하는 것. 
사람이 앉아있는지, 서있는지 등의 자세판별이 가능해 다음과 같은 곳에서 활용가능하다.

Papandreous et al; 2018

🤔 PoseNet
[1단계]

∙ Detection모델을 사용해 Interest point의 Heatmap을 식별
(일반적인 Interest point: 관절(joint or landmark), 눈, 코 등)
(Heatmap: Detection모델 classifier head에서 출력되는 점수 = threshold지정 이전값)

[2단계]
∙ Detect된 각 joint를 기준, 근처 joint의 가장 가능성있는 위치 식별.

[3단계]
∙ Hough Transform이라는 Weighted Voting Mechanism으로 1,2단계에 따라 선택된 Joint기반, pose검출.
이때, 2,3단계는 다양한 joint탐지를 위해 단순 detection모델로는 충분치 않기에 필수적이다.
그렇기에 joint와 joints사이의 offset도 예측하는 것이다.

 

🤔 다중객체의 pose estimation
단일 이미지에서 여러사람의 pose estimation을 위해 위의 step에 몇가지 기술추가가 필요하다.

1. segmentation모델을 활용, 사람에 해당하는 모든 pixel 식별
2. joint조합을 참고해 가장 가능성 높은 신체부위 식별
3. 각 사람에게 사람 pixel을 할당.
(1에서 찾은 mask의 Pixel과 2에서 식별한 가능성높은 joint를 이용.)

 

🧐 Human Pose Estimation 방식

1) Top-Down 방식

: 사람을 먼저 Detect → Detect된 자세를 추정.

정확도가 Bottom-up방식보다 높음.
검출된 사람들을 순회하며 joint들을 찾기에 속도가 Bottom-up방식보다 느리다
보통 저해상도에서 고해상도로 과정이 수행

즉, object detector를 사용해, 개별 instance를 식별(identifying), localizing → 한 사람의 포즈를 추정. 

ex) AlphaPose, Mask-RCNN


2) Bottom-Up 방식

joint를 먼저 Detect → 서로 연결해 자세를 추정.
정확도는 Top-down 방식에 비해 떨어짐.

Object Detection 과정이 없어 속도가 빨라 실시간 처리에 사용 가능
보통 고해상도에서 저해상도로 과정이 수행

즉, 확인되지 않은(identity-free) 의미론적 실체(semantic entities)를 지역화→사람 인스턴스로 그룹화

ex) OpenPose

cf) Pose Estimation Guideline

 

Pose Estimation Guide - Fritz ai

Almost everything you need to know about how pose estimation works Pose estimation is a computer vision technique that predicts and tracks the location of a person or object. This is done by looking at a combination of the pose… Continue reading Pose Est

fritz.ai

 

 

 

 

 

 

 

 

 

 

 

iv) Image Search

[핵심아이디어]: 서로 유사한 이미지에 서로 가까운 embedding이 있다.

🤔 분산 검색
유사한 임베딩 검색을 위해선?
Dataset의 image embedding에 대한 Search Index를 생성해야한다.
이 embedding index를 대규모분산데이터웨어하우스에 저장한다 가정하자.
이때, embedding과 다른 모든 embedding간의 유클리드 거리를 계산하고 가장가까운 일치항목을 표시한다.

 

🤔 빠른 검색
위의 예제에서 대규모데이터웨어하우스는 효율적 검색이 가능하지만
latency가 긴 경향이 있기에 ms로 응답시간을 얻을 수 없다.

실시간 serving을 위해 더 나은 유사 embedding searching방법을 찾아야한다.
이를 위해 ScaNN(Scalable Nearest Neighbors)를 사용할 수 있다.

 

🤔 더 나은 임베딩
더 맞춤화된 embedding을 사용할 수 있다.
ex) 얼굴유사성을 검색할 때, 얼굴을 식별하고 확인하도록 훈련된 모델의 embedding이 일반 embedding보다 더 성능이 좋다.

FaceNet:
목적: facial search
embedding최적화를 위해 얼굴특징을 기반
정렬된 일치/불일치 얼굴패치의 삼중항(triplet)을 사용.
삼중항: 일치하는 얼굴섬네일 2개 + 일치안하는 얼굴섬네일 1개

Triplet Loss:
가능한 최대거리만큼 양성쌍과 음성쌍을 분리하는 것이 목표인 함수.
라벨로 함께 군집화한 embedding생성에 사용가능.

<아래 3개의 image>로 정의된다.
 anchor이미지, 같은 label의 다른 이미지(두번째 이미지와 anchor가 양성쌍을 형성)
 다른 label을 갖는 3번째 이미지(세번째 이미지와 anchor는 음성쌍을 형성)
세 이미지에 대해 삼중항 (a,p,n)손실은 거리 d(a,p)가 0을 향하고
거리 f(a,n)이 f(a,p)보다 일정한 여유만큼 더 크게 정의된다.
이때,&nbsp; &alpha; 는 margin(= positive와 negative의 거리)을 의미.
이 손실에 대해 음성은 3가지로 나뉜다.
 Hard Negative: 양성보다 앵커에 더 가까움
 Easy Negative: 앵커에서 아주 멀리 떨어져있음

 Semi-Hard Negative: 양성보다는 멀리있으나 여유거리내에 있음

Linear Layer추가 후, Semi-Hard Negative에 초점을 맞춰 해당이미지의 삼중항손실을 최소화하도록 모델을 훈련시켜 embedding을 개선시킬 수 있다.
결과적으로 결과 embedding이 유사한 label로 clustering된다.

 

 

 

 

 

 

 

v) ETC (InternImage)

 

[논문 review] - InternImage(2023): Exploring Large-Scale Vision Foundation Models withDeformable Convolutions

📌 InternImage [CVPR 2023] InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions Paperswithcode 홈페이지에서 Detection, Segmentation 등 많은 Benchmark Dataset에서 최고의 성능(SOTA)를 달성한 (무친

chan4im.tistory.com

 

 

 

+ Recent posts