🤔 논문 읽는법 by. Andrew Ng.

 

1. 논문 읽는법.

새로운 분야를 익히기 위한 논문을 읽을 때, 한 분야에서 15~20개 정도의 논문을 읽으면 작업이 가능하다.

다만, 이 15~20개를 처음에는 10%만 읽고 good/bad를 판단하면서 점점 찾아서 읽는다.

이때 만약 50~100여개 정도라면 해당 분야에서 깊은 지식을 알고있다 해도 될 것이다.

 


2. 최신 논문 읽기.

① Title / Abstract / Figure 및 Experiment 1~2개

Abstract, Figure(구조) 등으로 어느정도 파악가능.

 

② Intro / Conclusion / Figure / Related Works Skim(속독)

Accept을 위한 설득력을 갖추기 위해 Intro와 Conclusion을 아주 신중하고 깔끔히 요약한다.

Related Works는 해당분야의 중요논문을 알기위해 중요. 따라서 Skim(속독) or Skip이 추천됨.

 

③ Math , etc 이해안되는 것  → Skim or Skip

해당 논문이 내 연구에 필요하면 반드시 꼼꼼히 읽을 것 (구현될 정도까지 포함)

다만, 많은 research논문을 읽어야 한다면, skim or skip

 


3.  그럼 어느정도 수준이 이해됐다 보는거지?

아래 질문에 대답가능하다? 그럼 마음놓고 다른논문 읽으러 가보자.

❗️저자의 성취요소 (Main Contribution)

❗️Main Method와 접근방식

❗️이 논문에서 내가 활용할 수 있는 바는 무엇인가?

❗️다른 Reference를 볼만한 가치가 있는가?

 


4. 기타

① 논문 정보 얻는법

본인: 웹검색, 블로그 등등

Ng: Twitter / ML Subreddit / NIPS,ICML,ICLR등 Top Confer / ArXiv Sanity

 

arxiv-sanity

 

arxiv-sanity-lite.com

 

 

② 수식..🫠

간단한 수식은 모르겠으나 Batch Norm, DDPM 등 수식이 많거나 어려운 경우, 어떻게 잘 이해할 수 있을까?

 

❗️처음부터 다시 유도해보기

  • 정말 잘 이해하고 싶다면, theoretical science나 mathematics 인데 결과를 따로 적어놓고 빈 종이에다가 유도하는 과정을 다시 해본다. 그걸 하면 정말 잘 이해한 것.
  • 그리고 이걸 할 수 있게 되면 새롭게 일반화를 할 수 있게 되고 새로운 아이디어를 얻는 데 도움이 된다. 시간은 많이 걸리지만 그만큼 도움이 될 것이다.

 

③ Code

  • 오픈소스 코드를 받아 실행해보기
  • 처음부터 코드를 재현해보기

 


📌 선형대수(Linear Algebra)

1. Baseline

i)

 

 


📌 확률통계(Probability & Statistics)

참고): https://chan4im.tistory.com/229 , https://chan4im.tistory.com/233 ,

Uncertainty: 양적표현으로 다루기 위해 "확률론"등장

 ∙ Epistemic(인식론적)

= systematic
→ 유한한 dataset에 적절

 ∙ Aleotoric(우연성)

= intrinsic = stochastic = noise
→ 세상 일부만 관찰하기에 noise가 발생
→ 다른종류의 data수집으로 noise 완화가능


 ∙ 합과 곱의 법칙

합∙곱법칙 + 결정이론(decision theory)를 이용하면,
모호한 정보( = uncertainty)더라도 optimal prediction에 도달가능

p(X,Y) : X와 Y의 결합확률(joint probability)

p(Y|X) : X에 대한 Y의 조건부확률 (X만 고려시, Y일 확률)
p(X) : 주변확률(marginal probability), 단순 X확률
p(X,Y) = p(X)p(Y) : 독립




Expectation & Covariance

 ∙ Expectation: 확률분포 하 함수의 가중평균

E[f] : 다른 x값들이 상대적 확률에 따라 "가중"되는데, 이는 곧 "확률분포 p(x)하에서 함수 f(x)의 가중평균"을 의미.

이산변수의 기댓값의 경우, sample이 많아질수록 실제함수의 가중평균에 더욱 수렴하게 된다.
cf) 분산: Var[f] = E[f(x)2] - E[f(x)]2. (feat. 제평평제)


 ∙ Covariance: 두 변수가 함께 얼마나 변하는지를 측정.


만약 x와 y가 독립이라면: Cov[x,y]=0


두 벡터 x와 y에 대해, 그들의 공분산은 다음과 같은 행렬이다:

만약 벡터 x의 구성 요소들 간의 공분산을 고려한다면,
더 간단한 표기법으로 cov[x] ≡ cov[x, x]를 사용한다.




Gaussian Distribution

 ∙ Gaussian 분포 (최대entropy와 CLT)

Maximum Entropy 중심 극한 정리(CLT)의 관점에서 자연스레 나타난다.
cf) 최댓값=최빈값이며, precision = 1/σ2

 ∙ Likelihood 함수


우측 그래프는 Gaussian의 Likelihood함수:
회색점: Gaussian분포에서 i.i.d인 Dataset
파란점: 각 dataset에 대한 관측값, p(x)
Likelihood함수: p(x)와 PDF의 곱으로 "특정 data관찰 확률을 의미"

 

 ∙ Maximum Likelihood 

이때 관찰된 Dataset으로 Likelihood Function을 최대화하는 확률분포의 매개변수를 결정하는 방법.

좌측 값은 평균과 분산에 대해 위 likelihood함수를 최대화 시,
각각에 대한 Maximum Likelihood 해를 얻을 수 있다.

Maximum Likelihood의 제한사항이 존재한다:
(MLE는 모집단 추정에 완벽하지 않은데, 이는 bias로 인해 발생한다)
μML   =  μ의 불편 추정량  ,  σML2 ≠  σ2의 불편 추정량. (N-1 / N)

[Bias발생원인]:
분산 데이터에 맞게 조정된 MLE기준으로 측정되기 때문.
아래 그림은 MLE로 Gaussian의 평균과 분산을 결정할 때,
bias가 어떻게 발생하는지에 대한 직관적인 이해가 가능하다.

빨간곡선: Gaussian분포
파란곡선: 2개의 녹색 data point로 이뤄진 3개의 dataset에 ML로 얻은 Gaussian분포.


위 그림을 통해 다음 사실을 알 수 있다.
3개의 dataset을 평균화하면 평균을 동일하다.
하지만, 분산은 실제 평균과 비교❌  , 표본평균과 비교 → 다소 과소평가(N-1/N)된다.

다만, 신경망처럼 복잡한 모델에서는 ML의 bias보정이 쉽지 않다.
또한, MLE의 bias는 Data point N이 많아지면, 덜 중요해지진다.(lim N → ∞)

Gaussian의 경우, 너무 N이 적지 않은 이상 이 bias가 큰 문제가 되진 않지만
본 저서는 Deep Learning 즉, 많은 parameter를 갖는 모델에 초점을 두었기에
ML과 관련된 bias문제는 보다 심각하다.(Overfitting문제와 밀접한 관련성을 가짐.)

변수간 비선형변환: 

 ∙ Density 변환방법:

모든 밀도 p(y)는 모든곳에서 0이아닌 고정된 밀도 q(x)를 얻을 수 있기 때문.
이때, q(x)는 x=f(y)인 비선형변수변환으로 얻어진 값.

빨간곡선
: x에 대한 정규분포 p(x)
이 분포에서 N=5만개 점 추출, histogram을 그림.
→ p(x)와 거의 일치할 것.


x→y로의 비선형변수변환을 고려해보면:
x = g(y) = ln(y)-ln(1-y)+5
이 함수의 역함수는 Sigmoid함수로 파란곡선이다.

px(g(y)): 만약 단순히 px(x)를 x의 함수로 변환한다면 얻는 분포, 곡선의 mode가 변환된 것을 확인가능.
y에 대한 밀도는 좌측 식에 의해 변형되기에

좌측의 핑크 곡선(right-skewed)으로 나타난다.

이 식을 다변량에 대해 적용하려면 Jacobian Matrix를 이용하면 된다.

x, y가 다변량분포일 때, 비선형변환을 적용하려면Jacobian Matrix를 사용 (py(y) = px(x) |det J|).


해당 그래프를 보면 y의 주변분포로 떨어지는데 이를 공간상으로 확장한 것.
즉, "주변 영역"으로 변환 된다는 것을 의미.


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



정보이론: Entropy

 ∙ Entropy: 특정값 관찰 시 얻는 정보량

물리학에서의 entropy보단, 정보이론 중심의 "정보량"기준으로 살펴보자.

정보내용의 측정은 확률 분포 p(x)에 의존, 따라서 h(x)를 찾는것이 목표.
h(x)
: 
p(x)의 단조 함수인 정보 내용을 나타내는 양

[정리]: 두 독립사건 x,y에 대해 아래가 성립.
  ∙ h(x,y) = h(x) + h(y)
  ∙ p(x,y) = p(x)p(y)
h p의 정보량이기에 위 식이 만족하려면 h log로 주어진다.
 h(x) = -log₂p(x)로 주어진다.

정보론: log가 관례적, 이는 곧 h(x)의 단위가 bit('binary digits')임을 의미.

이때, entropy를 좀 더 정보론적으로 접근해보자.
먼저 log 사용이유이다. 
정보 전달 시, encoding을 하여 압축을 시켜야 하는데, log는 자릿수를 쉽게 표현가능하다.
ex) log100 = 2, log1000 = 3

즉, Entropy는 random변수의 상태를 전송 시,
전송 가능한 가장 짧은, encoding길이 최솟값을 의미한다.

추가적으로 전송내용은 필히 손실이 발생하는데, 우리가 갖는 data는 이산형이기 때문이다.
즉, 매우 정밀하게 지정하려면 많은 bit가 필요함을 의미한다.


 ∙ H[x] : x의 entropy (= p(x)의 기댓값 = 평균정보량)

H[x]는 x의 entropy로 평균정보량 즉, p(x)의 기댓값을 의미

cf) H[x, y] = H[y|x] + H[x]를 만족.
즉, x와 y를 설명하는데 필요한 정보 = 주어진 조건에서 y를 지정하는데 필요한 추가정보 + x만을 설명하는데 필요한 정보.


∙ KL Divergence : 두 분포간의 비유사도 측정.

모르는 분포 p(x)와 근사분포 q(x)에 대해 q(x)를 이용해 x값을 수신자에게 전송한다.
이때, q(x)는 실제분포 p(x)대신 x값 지정 시 필요한 "평균추가정보량"을 의미한다.
(즉, 추가로 전송해야할 정보 = 두 분포간의 KL-Divergence)
쉽게 설명하자면, Cross Entropy - Entropy가 바로 KL Divergence식이다.

cf) Deep Learning에서 Loss function으로 KL Divergence를 사용해야하는 것 아닌가요?
왜 KL Divergence가 아닌 Cross Entropy를 사용하는지 의문이 들 수 있다.
KL-Divergence는 cross entropy에서 최소량인 entropy를 빼니까 이 오차값,
즉, cross entropy가 optimal(= entropy)해지도록 평균추가정보량을 줄이는 방향으로 학습하는 것이 맞다는 생각이 들 것이다.

하지만 오차함수 미분 시, Entropy가 상수가 되어버리기 때문에 
결국 KL-Divergence = Cross Entropy가 되어버린다.
결국 Cross Entropy를 편의상 사용하지만, 실상은 KL-Divergence를 사용하는 것과 마찬가지라 생각하면 된다.

Bayes' Theorem: 불확실성의 양적표현

 ∙ Frequentist 확률:

휜 동전의 경우 동전이 오목한 면으로 떨어질 확률처럼 무작위, 반복 가능한 사건의 빈도에 대한 확률.
[p(D|w)에 대한 접근방식]: 
w'estimator'의 일종에 의해 결정되는고정된 매개변수로 간주
[기계학습에 대한 적용방식]: 정규화된 MSE같은 Loss function을 최적화해 얻은 parameter지점의 추정치를 사용


 ∙ Bayesian 확률

[p(D|w)에 대한 접근방식]: 하나의 dataset D만 존재하며 (즉, 실제로 관측된 데이터), 매개변수에 대한 불확실성은 w에 대한 확률 분포를 통해 표현
[기계학습에 대한 적용방식]: 데이터의 확률이 가장 높은 모델을 선택 → 더 복잡한 모델을 선호 → Overfitting
그렇기에 Bayesian기반 기계학습 모델은 적은 dataset일수록 더 좋은 성능을 낸다.


불확실성의 양적표현, prior가 자연스레 발생하여 포함된다.
"불확실성 표현을 위해 확률을 사용하지 않으면, 이성적이고 일관된 추론을 할 수 없다."

ex) 불확실성 = 동전의 오목한 면이 어느면인지 파악하는 것
예를 들어, 동전이 뒷면으로 더 많이 떨어지는 횟수가 많다면?
동전이 오목한 면이 뒷면일 가능성이 더 높다는 증거를 제시하고,
실제로 이런 직관은 맞기에 이를 확률규칙으로 사용해 양적으로 표현가능하다
 Bayes정리에 의해 동전 던지기로 제공된 데이터를 통합하여 오목한 면이 앞면일 사전 확률을 사후 확률로 변환할 수 있다.
과정이 반복가능하기에, 새로운 동전 던지기에서의 데이터를 통합하는 데에는 이전의 사후 확률이 사전으로 사용된다.


D
 : train dataset

p(D|w) : Likelihood ; 주어진 parameter에서 관측된 data가 발생할 확률
p(w) : prior ; 선험적 지식이나 믿음.
p(w|D) : posterior ; 제공되는 update된 parameter확률분포
p(D) : Marginal Likelihood ; p(D|w)∙p(w)의 적분값 ; 모델전체의 적합도.



이를 통해 train data에 대한 우리의 불확실성을 반영이를 기반으로 new data에 대한 예측 수행이 가능하다.
이렇게 Bayesian접근은 model parameter에 대한 불확실성을 고려한 확률적 추론을 제거, 불확실성 update를 통한 model개선이 가능하다.

 

 

 


📌 기계학습(Machine Learning)

1. Baseline

i)

 

 

 

 


📌 심층학습(Deep Learning)

1. Baseline

i)

 

 

 

 

 


📌 컴퓨터비전(Computer Vision)

1. Baseline

i) Logit과 Softmax, Cross Entropy

class에 대해 예측한 값(-∞,)으로 sigmoid-1 값을 갖는다.
즉, 사건이 일어날 odds = P(사건발생⭕️) / P(사건발생)의 자연로그값이다.


보통 이 logit값에 softmax를 취한다.

🤔 Softmax란?
먼저 KL발산에 대해 간단히 되짚어보자.
KL발산은 2개의 분포를 비교하는 방법으로 실제분포 P와 임의분포 Q를 비교하는 것이다.

KL발산과 Softmax함수 사이의 관계는 Cross Entropy와 연관되어 있다.
Cross Entropy란 실제분포와 예측분포간의 차이를 측정하는데 사용된다.
즉, Softmax함수는 Cross Entropy손실함수를 최소화하는데 사용되며, KL발산과 관련된 Cross Entropy손실을 최소화 하는 방향으로 학습이 진행된다.

🤔 One-Hot Encoding과 Softmax
최적화 진행 시, 둘 사이 유클리드거리(=MSE) 계산보다는 Cross Entropy가 더 적합한데, 
Cross Entropy의 경우, 수치적 안정화를 위해 log를 사용한다. (소수점에 가까운 확률들을 처리하기가 용이하기 때문.)

 

 

 

ii) Batch∙image크기, 정확도와 비생산성

 batch_size = 128
∙ 128개 img에 대해 ∇를 계산 후 update한다는 의미

🚩 병렬화를 통해 solution에 더 빠르게 수렴할 가능성이 존재.

GPU는 RAM제한이 있기에, img가 클수록 batch로 묶을 수 있는 img가 적어진다.
또한, 더 큰 img로 훈련하려면 모델도 그만큼 커야하기에 그에 비례하게 가중치 수도 조절해야한다.

batch_size가 클수록 train곡선이 더 부드러워지기에 큰 img는 정확도측면에서 비생산적일 수 있다.
HR-img는 Noise가 두드러지는데, 특히 야외나 저조도 환경의 영상은 더욱 그렇다.
(즉, 해상도를 낮추면 img가 부드러워져 train속도 및 정확도가 높아진다.)

∴ 결론: img의 noise특성이 보장되고 예산감당가능 선에서 최고해상도 사용이 권장.
restoring시, computing보다 저렴해 JPEG같은 해상도를 낮춰 저장할 것이 권장됨.
🧐 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감소속도가 느려져 학습이 잘 안될 수도 있다.

 

 

 

 

iii) Regularization

즉, Softmax함수는 Cross Entropy손실함수를 최소화하는데 사용되며, KL발산과 관련된 Cross Entropy손실을 최소화 하는 방향으로 학습이 진행된다.

🤔 One-Hot Encoding과 Softmax
최적화 진행 시, 둘 사이 유클리드거리(=MSE) 계산보다는 Cross Entropy가 더 적합한데, 
Cross Entropy의 경우, 수치적 안정화를 위해 log를 사용한다. (소수점에 가까운 확률들을 처리하기가 용이하기 때문.)

 

 

 

 

iv) Optimizer & Scheduler

🤔 Optimizer
∙ SGD: Default Optimizer로 사용되었었음.
 Adam: 더 빠르고 안정된 수렴을 위해 사용됨.
F-trl: 극도로 희소한 dataset에 잘 작동하는 경향이 존재.

AdamW: Differential LR을 이용해 학습
(pretrain에는 낮은 lr)
(classifier에는 보통의 lr)

LR: 극소값들을 그냥 지나침
lr: 극소값을 벗어나지 못함

🤔 Scheduler
학습률을 동적으로 조정하는 기법.
학습률은 모델이 각 반복(iteration)에서 가중치를 업데이트할 때 사용되는 스케일링된 값
네트워크가 최적의 솔루션으로 수렴하는 속도와 안정성에 영향을 미친다.


Step Decay: 일정한 간격(epoch 또는 iteration 수)마다 학습률을 감소.

Exponential Decay: 매 step마다 LR을 지수적으로 감소 (by. decay factor을 곱함).

Cosine Annealing: cos을 이용해 max-min 사이를 주기적으로 진동시켜 학습률을 조절.

ReduceOnPlateau: val_loss가 더 이상 개선되지 않을 때마다 학습률을 감소.
모델이 최적값에 가까이 수렴할수록 학습률을 줄여 빠르게 수렴하도록 돕는다.

 

 

 

 

v) Layer (Conv, Maxpool)

Covolution Layer: 중요한 검출값의 feature map 반환
  additive bias를 사용하며, ReLU는 이 bias를 작은 양수값으로 초기화한다.
  활성화 이후 0이 아닌 값 출력 및 0이 아닌 gradient를 갖게 한다.

Maxpooling Layer: 최대강도의 feature만 남김,
 feature map의 해상도↓ = Receptive Field크기

 

 

 

 

 

vi) Video

Frame별 처리: 동영상은 frame으로 구성됨.
따라서 동영상 처리를 위해 개별 frame에 대해
image처리를 수행한 결과를 종합→전체영상을 분석
(다만, 이 접근방식은 인접한 frame간의 상관성이 높다.)

3D CNN: 동영상 처리시, 한번에 한 frame씩 처리하는 위의 방식과 달리 프레임간의 상관관계를 이용하는
"frame의 이동평균(rolling average)를 계산"하는 방식이다.
이 방식은 화면에 noise가 많을 때 특히나 유용하다.
동영상 클립을 [B,C,T,H,W]의 5차원 Tensor로 읽고, 필요에 따라 동영상을 짧은 클립으로 나눈다.

RNN 계열: RNN 등의 sequence방법을 사용하는 방법
(이는 훈련이 매우 어려워 3D-CNN접근방법이 더 실용적이다)

 

 

 

vii) Data Preprocessing

Train-Serving Skew:
inference time에서 client가 제공한 img에 대해 train시 적용한 모든 연산(디코딩, 크기조정, 등등)을 수행해야한다.
연산을 빠뜨리거나 train과 inference간에 약간이라도 다르게 수행한다면, 잠재적으로 잘못된 결과를 초래할 수 있다.
즉, "훈련 중에는 나타나지 않던 예상치 못한 결과가 추론 시 일어나는 것"이다.

Sol) 훈련과 추론에서 동일한 코드를 재사용.

Data Augmentation: 가중치가 많을수록 모델훈련에 데이터가 많이 필요하다.
이를 해결하기 위해 사용되는 데이터 증강은 "Data space Solution"으로 Dataset의 크기와 품질향상에 도움을 준다.
대표적으로 아래 3가지 범주로 나눌 수 있다.

 ❗️ 공간적 변환: Flip, Rotate, Crop, Zoom, ...

 ❗️ 색상 왜곡: 밝기, 색조변환

 ❗️ 공간적 변환: Cutout, Mixup, ...

 


viii) TFRecords (Tensorflow Record)

이름에서 tensorflow라 적혀있는 것과는 달리? pytorch에서도 활용가능하다. (아래 링크 참조.)

사용 이유:
img를 JPEG파일로 "저장"하는 것은 ML관점에서 효율적❌
→ 효율적인 저장 메커니즘인 TFRecord를 사용

보통 파일크기는 10~100MB가 이상적이다.
(다수의 worker(in GPU)에서 image를 읽는 기능과
많은 batch에서 latency를 상쇄할만큼 각 파일을 충분히 길게 열어야하기 때문.)

TFRecord를 작성하기 전, 미리 처리하는 것이 많아지면 훈련파이프라인에서의 처리량↓
따라서 훈련속도와 효율성, 데이터처리량 모두를 늘릴 수 있다.

병렬화: cs상 가상 CPU(= vCPU)가 2개 이상일 때
 ❗️ tensorflow에 dataset생성 시, 읽기를 자동으로 interleave하게 요청가능
tf.data.TFRecordDataset(pattern, num_parallel_reads=AUTO)

 ❗️ 두 map()연산을 병렬화 가능.
.map(preproc.read_from_tfr, num_parallel_calls=AUTOTUNE)


조금 더 상세한 Train pipeline에 대한 내용은 아래 링크를 참조.
(https://www.oreilly.com/library/view/practical-machine-learning/9781098102357/)
 

Practical Machine Learning for Computer Vision

This practical book shows you how to employ machine learning models to extract information from images. ML engineers and data scientists will learn how to solve a variety of image … - Selection from Practical Machine Learning for Computer Vision [Book]

www.oreilly.com

 

TFRecordLoader — TorchData main documentation

Shortcuts

pytorch.org

 

 

 

 

 

 

 

cf) Metric

① Confusion Matrix

Confusion Matrix:

 ❗️Accuracy = (TP+TN) / n
    → 데이터불균형, 편향된 모델 등에서는 좋지않은 평가지표.

 ❗️ Precision = TP / (TP+FP) = PR의 정확성

 ❗️ Recall(= Sensitivity) = TP / (TP+FN) = positive 구분가능성

 ❗️Specificity= TN / (TN+FP)


 ❗️ F1-score = 2*(p×r)/(p+r)
    → 정밀도와 재현율간의 "조화평균"

 ❗️ Fβ-score = (1+β2) * (p×r)/(β2×p+r)
    → F1 score에 β를 추가, P와 R에 대한 중요성을 확장시킬 수 있음.

🚩 Sensitivity and Specificity (민감도 / 특이도) --> 의학분야에서 사용

Sensitivity : True Positive Rate (TPR) = TP / (TP + FN) --> positive 구분 성능

Specificity : True Negative Rate(TNR) = TN / (TN + FP)

🚩 Precision and Recall (정밀도 / 재현율) --> information retrieval 에서 사용

Recall = Sensitivity

Precision = TP / (TP + FP) --> positive rate 의 정확성 (ex. 보안분야)

 

 

② ROC-AUC & PR Curve


ROC-Curve: Recall을 y축, FPR을 x축으로 갖는다. (FPR = FP / (FP+TN))

cf) AUC: ROC곡선의 아래면적(Area Under Curve): 이 값을 계산해 단일 숫자로 정보를 요약할 수 있다.

PR-Curve
: Precision을 y축, Recall을 x축으로 갖는다.

 ❗️AUC는 기본적으로 0.5이상이어야 하는데, AUC=0.5라는 뜻은 모델이 Random Classifier와 같다는 것이기 때문이다.

 ❗️Data가 균형잡혀 있을때는 AUC-ROC를 계산하는 것이 추천된다.
 ❗️Class Imbalanced, Biased된 경우 AUC-PR이 권장된다.

 

 

cf) Macro와 Micro Average

F1- Score의 3가지 종류
∙ Macro Avg: Label별 F1-score 산술평균(= 모든 data가 동일한 가중치=중요도)

∙ Micro Avg:
전체 TP,FN,FP를 평균한 것 = Accuracy

∙ Weighted Avg:
Label별 F1-score를 샘플수의 비중에 따라 가중평균

 

cf) EMR과 Hamming Score, Hamming Loss

EMR: Exact Match Ratio
최대화하기 가장 까다로운 지표는 부분집합정확도(subset Acc)라도도 부르는
정확한 일치비율(EMR: Exact Match Ratio)이다.
EMR은 "모든"라벨이 정확히 맞는 예의 백분율을 측정한다.
즉, img에 100개의 class가 있고, 99개만 예측했다면 정확히 일치하는 것으로 치지 않는다.

 Hamming Score
EMR보다 덜 엄격한 지표의 다중라벨정확도를 나타내는 점수지표이다.
각 예에 대해 총 라벨수와 올바로 예측된 라벨의 비율을 측정해 평균한 것이다.
(사실 IoU나 Jaccard Index와 상당히 유사하다.)

 Hamming Loss
0과 1 범위의 손실함수로 Hamming Score와 달리
잘못예측된 클래스 라벨에 대한 example의 관련성을 측정, 다음 해당 측정의 평균을 구한다.
이는 XOR연산과 유사한데, example n의 수와 클래스 L에 대해 이 두 수로 이중합을 정규화한다.

 

 

 

③ Regression Metric (MSE,MAE,Huber)

∙ MSE : mean-unbiased 추정량
제곱오차평균으로 2차항으로 인해 감도가 큰 평균편향추정치이다.
즉, 큰 감도는 몇가지 이상치에 과도하게 영향을 미칠 수 있음을 의미한다.

cf) RMSE라는 MSE에 루트를 씌워 사용되는 지표도 존재.
cf) 추정량(estimator)의 표본평균이 분포평균과 같음 (= mean-unbiased추정량)

∙ MAE : median-unbiased 추정량
좀 더 단순하고 해석하기 쉬운 지표로 절대차값을 이용.
제곱지수가 있는 MSE, RMSE에 비해 이상치 몇개로 왜곡되는 현상은 덜하다.

cf) 추정량이 과대평가하는 빈도가 과소평가하는 빈도와 같음 (= median-unbiased추정량)

∙ Huber Loss
MSE, MAE장점을 한번에 취할 수 있다.
절대오차값이 threshold(δ)보다 작으면 제곱항을 사용하고 그렇지 않으면 선형항을 사용한다.
0에 가까운 값에 대해 2차 항의 제곱평균불편추정량의 민감도
0에 더 먼 값에 대해 선형 항의 중위불편추정량의 견고성
모두 누릴 수 있게 해준다.

 

 

④ IoU (Intersection Over Union)

∙Detection:
Detection에서 사용되는 지표 중 하나로 이름에서 알 수 있듯, 교집합 / 합집합 이다.
이 IoU를 이용해 Detection에서는 해당 객체가 Detect된 것인지 아닌지에 대한 판별지표로 사용하기 때문에 
특정 IoU값을 threshold로 정해 객체검출여부를 판별한다.
일반적으로 사용되는 임계값: 50, 75, 95%
TP = 올바르게 검출된 것.
FP = 잘못 검출 될 것.
FN = 실제 Bbox를 전혀 검출하지 못한 것 (= 검출 누락)
(cf. TN은 Detection에서 사용되지 않는다.)

❗️ precision = TP / All_Detections

❗️ Recall = TP / All_Actual_Bbox

❗️  Pinterpolated = maxR'≥R[P(R')] = Avg Recall

 

 

AP와 mAP

∙ AP (Average Precision)
보간을 위해 모든 고유한 재현율을 선택하는 "평균정밀도"는 보간된 PR-Curve의 아래면적이다.

AP는 위와 같은 상황(Bbox가 여럿 나타나는 상황)에서 계산한다.
AP계산을 위해 TP, FP, FN을 세야한다. cf) True = 맞춘것을 의미

AP 계산알고리즘:
① 신뢰도 임계값을 넘는 Bbox만 선택, 예측목록을 생성
② 예측목록에 있는 Bbox를 신뢰도로 정렬
③ Confidence값이 큰 순서대로 처리.
현재 Bbox가 IoU 임계값을 넘으면 TP로 판정, 아니면 FP로 판정


❗️이때, 2개 이상의 물체에 하나의 Bbox가 겹치게 된다면?
IoU가 최대인 쌍을 사용한다.
TP발생 시, 참값목록에서 TP_Bbox를 제거, 이중의 쌍을 맺는 것을 방지한다.
이때, 예측목록에 있는 Bbox를 모두처리후, 쌍을 맺지못한 채 남아있는 TP_Bbox는 FN으로 판정한다.


∙ mAP (mean Average Precision)
AP를 각 물체 class에 대해 계산 → 이 AP를 모든 class에 대해 평균한 값이다.

하나의 클래스는 AP를 구하면 된다.
하지만, Detection에서는 종종 검출성능이 다른 여러 클래스가 있기에
각 클래스의 평균 정밀도평균(mAP)를 계산하는 것이 유용하다.


아래 예시를 살펴보자.
먼저, Precision과 Recall은 아래수식처럼 구할 수 있다.

 

즉, True = 맞춘것을 의미하므로 Precision과 Recall은 아래처럼 설명할 수 있다.
∙ Precision = (맞춘것=TP) / (예측한 것 중 = ?P)
∙ Recall = (맞춘것=TP) / (실제 중)

먼저 mAP를 구하는 순서에 대해 설명해보겠다.

 

⓪ Confidence=0.6  &  IoU=0.5 로 설정

① Confidence임계값을 넘긴 Bbox로 예측목록 {a,b,d}를 생성

② 예측목록을 Confidence순으로 정렬 → {b,d,a}

③ 신뢰도가 가장 높은 b먼저 처리.
 ∙ b는 2,3과 겹침 → IoU가 더 큰 2와 쌍을 맺음
 ∙ b-2쌍을 TP로 판정 후, 2는 참값(Ground_Truth)목록에서 제외.

④ 2번째 신뢰도를 갖는 d를 처리
 ∙ d는 4와 IoU가 0.12(<임계IoU)이므로 FP로 판정

⑤ 마지막 Bbox예측목록원소 a를 처리
 ∙ a는 1과 IoU가 0.6(=임계IoU)이므로 TP로 판정 

⑥ Bbox로 생성한 예측목록을 모두 처리하였다.

⑦ 예측 Bbox 처리 후, 쌍을 못맺은 3과 4는 FN으로 판정.

⑧ 최종적인 Precision과 Recall은 다음과 같다.
 ∙ TP=2 , FP=1 , FN=2
 	∴ Precision = 2/3
 	∴ Recall = 2/4

⑨ Confidence임계값을 0.5로 낮추면, Precision과 Recall은 다음과 같다.
 ∙ TP=3 , FP=2 , FN=1
 	∴ Precision = 3/5
 	∴ Recall = 3/4

∙ AR과 mAR
AR(Average Recall)은 AP에 사용되는 PR-Curve대신 Recall-IoU곡선을 사용한다.
이는 모든 IoU(특히 50%이상)에 대해 평균한 Recall값으로 AUC값이 2배가 된다.

mAR은 mAP처럼 다중클래스 Object Detection을 위한 것으로 전체 클래스의 AR을 구하기 위한 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

cf) weights 분포와 NaN, Normalization

🤔 가중치 분포는 어떤 모습이어야 할까?

신경망의 각 층에는 수천~수백만개의 가중치를 가지며, 이런 가중치값들의 큰 집합은 분포(Distribution)를 생성한다.
훈련 시작과 끝의 가중치 분포는 매우 다를 수 있기에, 일반적으로 초기 분포는 가중치 초기화전략에 따라 결정된다.
이는 정규분포나 균등분포에서 무작위로 추출되고, 정규화 요인이 있거나 없는 등 다양한 방식이 사용된다.

중심극한정리(CLT: Central Limit Theorem)에 따르면, 가중치분포는 모델이 훈련되고 수렴됨에 따라 더 Gauss적으로 보이기 시작한다.
즉, 평균 μ와 표준편차 σ를 갖는 모집단에 대해,
 ∙충분히 많은 수의 무작위 표본이 주어지면 → 표본평균분포는 Gaussian Distribution에 가까워진다.

But❗️모델에 system적인 문제가 있다면?
가중치가 해당 문제를 반영해
∙ 0값 (입력값의 scale이 제대로 조정되지 않은경우 발생하는 'Dying Layer Problem')
∙ 매우 큰값 (Overfitting)으로 치우칠 수 있다.
weight분포를 보고 문제가 있는지 진단이 가능하다!

즉, Gaussian분포를 따르지 않는 가중치분포에 대해 몇가지 방법을 시도할 수 있다.

🚩 분포가 0에 치우쳐 있는 경우:
∙ 입력값의 범위를 [0, 1] → [-1. 1]로 scaling

∙ 중간 Layer에 문제가 있다면, Batch Normalization을 추가.

🚩 분포가 큰 쪽에 치우쳐 있는 경우:
∙ Regularization or Dataset↑

🚩 가중치가 가우스분포에서 벗어난 경우:
이는 우리의 초기화전략이 부적절했기에 가중치가 작고 정규분포를 이루는 표준system을 따르기 어려웠음을 의미한다.
→ Gradient문제이므로 Clipping, Regularization, Penalty 등을 추가.

신경망의 가중치는 일정범위안에서 유지되어야 한다.
이때, 값이 갑자기 커진다면 Gradient Exploding문제이다.
특히 Loss값이 NaN을 반환하면 weight가 overflow오류를 발생시킬 만큼 커졌다는 것을 의미한다.

보통, scale이 조정되지 않은 입력은 큰 activation을 만들어 기울기폭발가능성이 있다.
그렇기에 입력층을 0~255픽셀이 아닌, -1~1이나 0~1사이의 scale로 변경하는 것이다.

이런 scale조정은 초기에만 안정되는데, weight값이 random한 초기값과 멀어지기 때문이다.
이를 Covariate Shift(공변량 변화)라 부르는데, 이를 위해 Batch Normalization을 사용한다.

Batch Normalization은 이를 위해 scale parameter(γ)와 shift parameter(β)를 사용한다.
(입력을 γ로 조정, β로 이동시켜 출력.)
훈련과정에서 BN층은 채널별 평균∙표준편차의 이동평균(moving average)를 계산해 저장한다.

cf) Batch Norm v.s Layer Norm

Transformer는 학습과정안정성을 위해 Layer Normalization을 사용한다.


Batch Norm: 각 채널의 출력의 평균이 0, 표준편차가 1이 되도록 정규화하는 방법.
(이때, batch차원과 공간차원에 걸쳐 정규화 통계치가 계산된다.)

Layer Norm: 채널차원에 대해 정규화 통계치가 계산된다.
따라서 batch에 있는 각 sequence위치마다 정규화한다.
(이때, 정규화 통계치 계산방식이 BN과 완전히 반대이다.)

 

 

 

 

 

 

 

cf) Bias

특정 예가 dataset이 너무 적거나 많아 해당 시나리오에 대한 정확도가 떨어진다면,

이는 문제가 되는데 이에 대해 dataset이 biased(편향)된 것이라 한다.

 

 

원인

🤔 Bias vs Imbalanced
예를 들어 사파리 촬영 시, 재규어가 있을 가능성은 1% 미만일 것이다. (밀림에 있거든...)
이 Dataset에 매우 적은 비율로 재규어가 있을텐데, 균형이 맞지는 않지만 편향의 증거라 할 수는 없다.
(즉, Imbalanced는 맞으나 Bias라고는 하기는 애매하다는 것.)


🤔 Bias의 원인
- Selection Bias
- Measurement Bias
- Confirmation Bias

 

 

 

 

선택 편향(selection bias)

모델이 production에서 접할 시나리오의 편향된 하위집합에 대해 학습 시 발생.

발생이유: 

  1. 특정 범주가 제외되거나 제대로 샘플링 되지 않도록 실수로 데이터 소스를 제한한 결과로 발생하는 불완전한 데이터수집
  2. 특정유형의 데이터가 다른 유형보다 수집하기 쉬울 때.
  3. 이상치 가지치기 및 데이터셋 정리시 발생가능

Sol)  production 시스템에서부터 작업, 이미지를 사전에 수집

 

 

 

측정 편향(measurement bias)

훈련과 production간에 image수집방식이 다를 때 발생

발생이유:

  1. 훈련을 위한 이미지수집방식과 production에서의 수집방식의 차이로 발생.
  2. data를 제공하는 사람이 달라지거나 labeling을 여러사람이 수행할 때

, 측정편향은 매우 미묘 수도 있다.

 

 

 

확증 편향(confirmation bias)

실생활에서 값의 분포가 원치않는 행동을 강화하는 모델로 이어질 때 발생

발생이유:

앞서 편향과 불균형의 구분이 중요하다 했는데, 확증편향과 관련해 둘 사이의 차이점과 상호관계는 특히나 중요하다.

(Dataset이 imbalance한 실제 분포를 정확하게 나타내더라도 편향될 수 있기 때문!)


데이터 수집당시에는 드러나지 않으나, dataset에서 훈련된 모델에 혼란을 일으킬 수 있다.

Ex) 특정학벌에 유리 학습된 모델 →  모델이 이를 학습해 따라하게 됨.

즉 편향되지 않은 모델은 이제 극도로 편향되어 handler의 편견을 확증하고 지속시키게 된다.

 

Sol) ‘모르는 모름’에 속한것들을 ‘아는 앎’이나 ‘아는 모름’의 범주로 의식적으로 끌어내야한다.

🤔 지식이란?
‘아는 앎’: 우리가 어떤 지식을 안다는 사실을 스스로 자각하는 것.
‘아는 모름’: 우리가 모른다는 사실을 아는 것
‘모르는 모름’: 해당 지식을 알지못한다는 사실조차 모르는 것.

-Donald Rumsfeld, 전 美 국방부 장관-

 

 

 

 

 

편향감지

편향감지를 위해 슬라이스 평가(Sliced Evaluation)을 할 수 있는데, 슬라이스 평가에서는 모델의 목적함수를 그룹 구성원에 대해 계산해서 그것을 비구성원에 대한 지표와 비교한다.
그 후, 다음 슬라이스 지표가 전체 dataset의 지표와 매우 다른 그룹을 조사한다.

또한, Bayes 접근방식을 적용해 해당 확률에 대한측정값을 계산할 수 있다.

 

 

 

귀납편향(Inductive Bias) feat. Transformer

머신 러닝이나 통계학에서 모델이 선택하는 가설 공간을 제한하거나 선호하는 성격
즉, 모델이 학습하고 일반화하는 데 사용하는 가정이나 선입견을 의미합니다.

이러한 귀납 편향은 모델이 특정 유형의 함수 또는 구조를 더 선호하도록 유도하여, 
학습 알고리즘이 특정 유형의 가설에 더 가깝게 수렴하도록 돕는다.

이는 모델이 학습 데이터를 기반으로 일반화를 수행할 때, 특정 가정이나 가설 공간을 우선적으로 고려하도록 유도함으로써
모델의 복잡성을 제어하거나 학습을 도와주는 역할을 한다.


발생이유:
1. 알고리즘 선택에 따른 편향

: 특정 알고리즘은 특정 유형의 모델을 더 선호하는 경향.
ex) 결정 트리 알고리즘은 데이터의 특징을 기반으로 트리 구조로 분할하는 경향이 있습니다.


2. 가정에 따른 편향:
모델이 특정 가정을 가지고 학습하는 경향이 있습니다.
ex) 선형 회귀는 데이터가 선형 관계에 있다는 가정하에 학습됩니다.


3. 하이퍼파라미터 설정에 따른 편향


다만, 잘못된 귀납 편향은 모델의 성능을 제한할 수 있기 때문에 주의해야 합니다.

 

cf) 모든 기계학습모델은 귀납편향(inductive bias)이 존재한다.
ex) CNN의 경우 이웃한 pixel과 비슷한 특성을 갖는다는 "locality"와
물체가 이동하면 이동한 위치에 동일한 특징이 추출된다는 "translation-equivalent" 등이 대표적.

 CNN의 경우 이런 귀납편향이 강한 편으로 이를 만족하지 못하는 자연어와 같은 다른 modality-data에 적용은 부자연스러운 결과가 나온다. (물론, RNN도 시간축과 관련된 강한 귀납편향을 갖는다.)

cf) 귀납편향: 기계학습모델이 학습단계에 보지않았던 새로운 sample로 옳게 추론하기 위해 사용하는 가정

- 하지만 transformer의 경우, 귀납편향이 약한 편으로
가장 중요하게 활용되는 "Self-Attention"은 image, text를 포함해 대부분의 signal에서 나타나서
여러 input형태 (multi-modal data)에 적용할 여지가 존재한다.
ex) 자연어->그림의 DALL-E 등등 vision과 NLP를 동시에 처리하는 여러 응용에서 backbone으로 활용할 수 있다.

 

 

 

 

 

 


2. Classification

i) Deeper = Why High Accuracy?

1. Expressivity 가설
비선형 활성화함수로 이루어진 층을 많이 쌓아 비선형성이 발생
→ 고도로 복잡한 작용에 근접가능❗️

2. Generalization 가설
MLP는 입력을 의미론적으로 분해, feature의 hierarchical구조를 생성한다.
shallow ----> deeper
detail    ----> global feature
저수준   ----> 고수준
으로 갈 수록 classifier가 더 일반화된다는 것이다.

3. Perceptive Field 가설
image전체를 포착하려면 N×N filter가 필요하다.
But❗️ 충분히 깊게 쌓으면 1×1, 3×3으로도 N×N영역을 "볼 수 있게"된다는 것이다.

 

 

 

 

ii) Deeper Network

🤔 Filter 분해
3×3 filter 2번 5×5 filter
𝛉 = 18(2×3×3) 𝛉 = 25
즉, 더 적은 파라미터의 수를 갖지만 2번의 비선형성을 통해 모델을 깊게 만들 수 있다.

🤔 GAP (Global Average Pooling)
GAP은 학습가능한 가중치가 없다는 Pooling의 특징을 이용.
각 channel값을 평균화해 출력한다.
다만, 이미지상 위치가 중요한 Detection에서는 부적절한 방법이다.

🤔 1×1 filter
그냥 이미지를 이동하며 상수를 곱하는 쓸데없어 보이지 않나?
"다중 channel에서 channel별 가중치를 달리"하여 의미가 발생!
+ data의 channel조정은 덤! (학습가능𝛉 수를 줄일 수 있다.)

cf) DenseNet의 경우, 이를 활용해 학습가능𝛉 를 경제적으로 조절한다.
(DenseNet은 Conv의 단계수에 따라 channel수가 선형적으로 증가하기 때문)

 

 

 

 

 

iii) Module식 구조 (Skip-Connection이 왜 좋은가?)

Module식 구조는 여러 선택사항을 만든 후 어느것이 가장 좋은지 신경망이 학습하게 하는 것에서 출발한다.
Inception module, Residual blocks, inverted residual bottlenecks 등이 있으나 ResNet위주로 다룰 것이다.

🤔 ResNet

신경망 깊이가 깊어지면 전체 layer gradient가 흩어져 느리게 수렴하거나 수렴X
→ layer사이 skip-connection을 추가, 신호를 그대로 전달한다.
즉, element-wise addition을 비선형성이 추가된 signal과 진행하는 것이다.

 

 

🤔 Skip Connection이 BP최적화 단계에서 Gradient Flow에 왜 도움을 주는가?

1. Addition 연산
∙ 보통의 DNN목표: 원하는 출력을 위해 내부 w를 update
∙ Skip Connection: input과 output사이  Δ or residue를 출력하는것이 목표

2. Residual연결이 실제로 신경망을 더 shallow하게 만든다는 것.
(= 최상의 경로를 스스로 선택, 실제로는 그닥 깊지 않아 효율적인 수렴가능.)


3. Training 중 최적화된 J(w)의 topology환경

 

 

 

 

 

 

 

iv) MobileNet: 저차원의 ReLU는 너무많은 정보를 파괴한다.

📌 Depth-wise Seperable Convolution
기존 filter는 똑같은 공간을 재창조하기에 𝛉를 비효율적으로 사용한다.


Filter는 H×W×C로 spatial filtering(H×W)과 Channel과의 선형재조합 과정으로 이루어진다.
이 두연산이 성능에 영향을 주지않으며 "독립"(= 분리가능)하면, 적은 𝛉 로 학습할 수 있다.


🤔 Depth-wise Seperable Convolution은 다음 특징을 갖는다.
∙ 독립적인 filter set으로 channel별 입력을 filtering
∙ 이후 1x1 convolution으로 개별적인 출력을 결합 (= channel별 가중합)
(∵ channel은 추출할 "모양정보"가 아니기 때문)
(다만, img는 "모양정보"이기에 3x3 filter를 사용한다.)
🤔 Inverted Residual Bottlenecks
cf) latency란, inference time에서 지연시간을 의미

 

 

 

 

v) EfficientNet

최적화 목표: 예측정확도 > 추론 latency
3가지 방법으로 convolution구조를 확장.
∙ layer 추가
∙ layer별 channel 추가
∙ input img 해상도↑
이때, 위 3가지 방법은 서로에게 영향을 준다.
(∵ Receptive Field를 키우려면 layer가 더 필요.)
( 더 큰 img의 미세패턴포착을 위해 channel도 많이 필요.)
EfficientNet군은 Overfitting방지를 위해 B0~B7까지 Dropout을 0.2~0.5로 늘린다.
또한, AutoAugment와 SiLU(= Swish-1)를 사용한다.

 

 

 

 

 

vi) Vision Transformer with Self-Attention Mechanism

Transformer의 경우, Self Attention Mechanism을 사용한다.

[Self Attention Mechanism]: 입력사이 의미론적 관계(Semantic Relation)을 인식, 특정 patch가 다른 patch에 비해 더 중요한 정보를 담고 있는 경우, 이를 . 더강조해 새로운 표현을 생성한다.

 

Convolution은 Dataset이 증가할 때, 가중치 수를 줄여야 한다.

ViT는 image를 patch단위로 쪼개 patch의 픽셀값과 position을 이어붙여 표현한다.

다만, ViT의 경우, Convolution보다 더 많은 Dataset을 요구하기에

대량의 Data로 pretrain한 후 더 작은 Dataset으로 Fine-tuning하는 것이 권장된다.

 

 

 

 

vii) Ensembles & 권장 학습전략.

핵심은 약점보완을 위해 "최대한 다른 모델을 선택"하는 것ex) DenseNet + Xception + EfficientNet

∙ Dataset이 매우 작을때: Transfer Learning
∙ Dataset이 보통일 때: Fine-Tuning
∙ Dataset이 매우 클 때: 처음부터 학습

 

 

 

 

 

 

 


3. Detection

좀 더 상세한 설명은 가장 하단목록을 참조.

RetinaNet(FPN, AnchorBox, NMS)

🤔 FPN (Feature Pyramid Network)
비선형성❌ 신경망
Conv층: Feature map의 의미정보를 점차 다듬는다.
Pool층: 공간(x,y)차원에서 feature map을 축소한다.

🤔 Anchor Box
Bbox는 기본적으로 차이값(Δ)으로 계산되는데, 이는 단순히 사물과 겹쳐진 것을 의미한다.
∙ pred = Δ of Anchor 크기&위치
목표: 신경망이 0주변의 작은 값으로 예측하게 돕는 것.
(∵ 0 부근에서만 비선형성을 갖는 활성화 함수를 사용하는 이유.)
Loss 계산시, 실측박스(N) Anchor Box(M) 쌍 별 IoU행렬(N×M)을 계산,
이때, 유의미하지 않은 값 = Background로 간주해 아무것도 검출하지 않게 훈련된다.


🚩 (클래스 분류): Focal Loss
Background Box에 해당하는 손실이 전체 손실 압도 가능
→ 이를 방지하고자 RetinaNet논문에서 손실함수를 조정(BCE with γ)
→ 빈 배경에 훨씬 더 작은 Loss값을 생성하게 한다!


🚩 (박스 회귀): Smooth L1 Loss
L1: 경사가 모든곳에서 동일하다는 문제
L2: pred와 target값이 멀수록 오차값이 커져 outlier에서 문제가 발생
이에 대한 절충안으로 등장한 Smooth L1 Loss (수정된 Huber Loss)는 아래와 같은 느낌으로 사용된다.
∙ 오차가 작은 값 → L2
∙ 오차가 큰 값 → L1

🤔 NMS (Non-Maximum Suppression)
다수의 Anchor Box 후보에서 IoU와 Confidence를 이용해 객체별 1개씩만 선택하기 위한 "Greedy-Algorithm"
Step 1: Greedy로 IoU > Threshold인 Box를 찾음
Step 2: 더 높은 class confidence를 갖는 Box를 살림.

이를 알고리즘으로 나타내면 아래와 같다.
def NMS(Boxes, Confidence):
	res_box = []
    for b1 in Boxes:
    	버림 = False
        for b2 in Boxes:
        	if IoU(b1, b2) > threshold:
            	if Confidence[b2] > Confidence[b1]:
                	버림 = True
		if not 버림:
        	res_box.append(b1)
            
return res_box

 

 

 

 

 

 

 

 

 

 

 

 

 


4. Segmentation

i) Semantic Segmentation 

instance segmentation의 경우, 개별 instance가 분리되지 않는다.

semantic segmentation의 경우, 같은 segment의 "pixel"로 구분하는 것이다.

U-Net의 경우, Encoder to Decoder구조로 "직접적인" Skip connection을 진행한다.

이를 통해 Semantic granularity정보를 Encoder에서 Decoder로 직접 가져온다.

 

 

 

 

ii) Instance Segmentation (Atrous Convolution, Mask R-CNN)

🤔 Transposed Convolution
= Atrous Convolution
= Deconvolution
이라고도 불리며, 이는 기존 Upsampling방법과 달리 "학습가능한 가중치를 포함하는 Upsampling"연산이라는 점에서 유용하다.
자세한 설명은 이 링크 참조.

🤔 Instance Segmentation with Mask R-CNN
Detection: Object 주변 Bbox를 찾아 분류하는 것.
Instance Segmentation: Detection된 모든 객체에 대해 각 객체모양에 맞는 pixel mask를 추가.


🚩 Mask R-CNN
Mask R-CNN과 기타 RPN은 한번에 한 곳의 RoI에서 작동하기에 이는 실제로 Interest일 확률이 높고, 즉 RoI마다 더 많은 작업을 더 높은 정밀도로 수행할 수 있다.

Instance Segmentation Head: detection된 객체의 Feature map을 Transposed Convolution으로 Upsampling한다.
이때, Mask-Head는 클래스당 1개의 mask만 생성한다.


Segmentation Loss는 단순 pixel by pixel에 대한 BCE Loss를 사용한다.
(예측된 클래스에 대해 예측된 mask만 Loss값을 계산한다.)

 

 

 

 

 

 

 

 

 

 

 

5. 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

 

 

 

 

 

 

 

 

 

 


📌 생성 AI (Generation AI)

1. Baseline

현재까지 총 6가지의 흐름으로 Vision Generation은 분류가능하다:
∙ VAE
∙ GAN
∙ Auto-Regressive
∙ Normalizing Flow
∙ Energy-Based Model
∙ Diffusion

이에 대해 간단히 특징을 정리하면 아래와 같다.

∙ VAE

d
s

∙ GAN

s
s

∙ Auto-Regressive

s
s

∙ Normalizing Flow

s
s

∙ Energy-Based Model

s
s

∙ Diffusion Model

s
s

2. Advanced GAN

ls
s

3. RL & World Model

ls
s

4. Multi-Modal

ls
s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


📌 Detection 상세설명


1.  R-CNN 계열 (RCNN, Fast R-CNN, Faster R-CNN)

1.1  R-CNN

R-CNN은 후보영역을 영역제안[Region Proposal]이라한다.
2-stage를 순차적으로 처리하기에 RCNN계열방법들을 2-stage방법이라 부른다.

 영역제안과정

물체가 있을 가능성이 높은 영역을 찾는단계.
RCNN은 Selective Search Algorithm으로  후보영역을 생성한다.
Selective Search는 image를 super pixel로 분할 후, clustering과정으로 영역을 생성.

생성된 영역을 227×227크기로 정규화,CNN에 입력, 특징벡터를 추출한다.


 영역분류과정

Binary-classifier인 SVM이 각 클래스확률을 계산, 클래스확률벡터를 출력.
후보영역에 대해 위치와 클래스정보를 확보 후, 위치와 클래스를 최종적으로 출력한다.

즉, "Selective Search알고리즘 → RoI 생성 → CNN으로 특징벡터 추출 → SVM" 순.

 

 

 

 

 

1.2  Fast-RCNN

 영역제안단계: Selective Search Algorithm 사용.
 영역분류단계: SVM을 Neural Net으로 대체.


 RoI  투영

Conv특징맵에서 후보영역에 해당하는곳을 RoI(Region Of Interest)로 지정하는, RoI투영을 진행.
그림에서 좌측선수에 해당하는 RoI가 노란색인데, RoI에 RoI풀링층을 적용해 고정크기맵(녹색 7×7맵)을 출력한다.


 RoI  특징벡터추출

이 특징맵을 2개의 FC층을 통과시켜 4096차원의 RoI특징벡터로 변환한다.
RoI특징벡터는 2갈래로 나뉜다.


 분류 및 회귀과정을 모든 RoI에 적용

한곳은 분류를 담당하는 FC층을 통과, 클래스확률벡터를 출력하고
한곳은 회귀를 담당하는 FC층을 통과, 클래스별 박스정보(x,y,h,w)가 된다.

즉, "RoI투영 → RoI 특징벡터추출 → 분류 및 회귀과정을 모든 RoI에 적용" 한다.
물체없음으로 판정된 RoI는 버리고, 나머지는 후처리 후 박스정보와 클래스정보를 최종 Detection결과로 출력한다.

 


Fast-RCNN은 박스정보를 알아내는 회귀와 클래스를 알아내는 classification을 동시에 수행하기 때문에 하나의 Loss function으로 두 task를 달성해야한다.
∙ 손실함수: J = Jclassification + λJregression 형식
이런 손실함수를 다중과업손실함수(Multi-task Loss function)라 한다.

 

 

 

1.3   Faster-RCNN

∙ 영역제안단계: 영역제안모듈, RPN(Region Proposal Network)신경망 사용.
∙ 영역분류단계: Fast R-CNN 사용.

 RPN

Pre-Trained VGG16을 앞에 배치해 특징맵을 추출(노란색 H×W맵)한다.
RPN은 이 특징맵의 각 pixel에서 3×3 filter로 512차원의 특징벡터를 추출한다.

 특징맵에 서로 다른 2개의 1×1 convolution을 적용해 6개의 값들을 추출한다.
 ∙ 물체여부를 나타내는 2개의 값
 ∙ 박스정보를 나타내는 4개의 값.

위의 연산을 9번 적용해 크기와 가로세로비율이 다른 9개의 박스 (= Anchor)를 생성.
Anchor: 여러크기의 물체를 표현하는 Anchor를 생성함으로써 다중크기의 물체탐지능력을 갖춘다.

결과적으로 H×W의 pixel마다 9개의 Anchor가 생성되므로 H×W×9개의 Anchor가 생성된다.
여기서 NMS를 적용해 2,000여개의 Anchor만 남긴다.


즉, CNN으로 특징맵 추출 → 1×1 conv로 6개값 추출 9회 진행 → Anchor Box생성 순이다.


 Fast R-CNN

 Anchor들을 RoI으로 간주해 위 그림의 신경망의 뒷부분에 있는 Fast-RCNN으로 입력한다.
Fast-RCNN은 후보영역 각각에 대해 RoI투영 → RoI 특징벡터추출 → 분류 및 회귀과정을 적용한다.

물체없음으로 판정된 후보영역은 버리고, 나머지 후처리 후, 박스정보와 클래스정보를 최종 Detection결과로 출력한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2. YOLO 계열

 

YOLO v1의 특징

image를 s×s격자로 나눈다.
(실제 구현은 아래그림의 노란격자처럼 s=7로 설정해  총 49개의 칸이 존재한다; 빨간박스는 dataset에 라벨링된 참값이다.)

아래그림에서 검은칸을 예로들어 90차원의 벡터로 표현해보자.
빨간색의 좌측선수를 표시한 빨간박스의 중심은 검은칸에 놓이기에 검은칸이 이 박스를 책임진다.
벡터는 90차원인데 앞의 5개요소(x1, y1, w1, h1, o1)는 이 박스의 위치와 크기, 신뢰도를 의미한다.

박스의 위치와 크기는 영상좌표계를 [0,1]사이로 정규화하고 정규화좌표를 중심으로 표현한다.
x2,y2,w2,h2,o2는 또다른 박스를 표현할 수 있기에 한칸은 박스를 2개까지 책임질 수 있다.

p0~p80은 해당박스가 어떤객체클래스에 속하는지 나타내는 one-hot코드이다.
YOLO가 물체의 위치와 클래스를 표현하는 방식

YOLO는 RCNN계열에 비해 상당히 단순한데, 아래 그림은 YOLO가 사용하는 CNN의 구조이다.
∙ Conv층: 24개 / MaxPool층: 4개 / FC층: 2개 로 구성되며
  - input은 448×448크기로 변환되어 입력되고
  - output은 7×7×90의 출력텐서를 갖는다.
위 그림에서 신경망은 image를 입력으로 받아 7×7×90의 출력텐서를 참값으로 주어 통째로 학습한다.

참값텐서에 [float으로 표시되는 Bbox정보], [OneHot코드로 표현되는 클래스정보]가 섞여있기에 classification과 regression이 동시에 일어난다. 

 

 

 

YOLO v3

YOLO v3은 (object, class)의 85차원 벡터를 추출하는 층을 신경망 3곳에 배치한다.

∙ yolo_82층에서는 14×14격자로 나눠 14×14×85×3텐서를 출력한다. 따라서 14×14의 각 요소는 박스를 3개까지 출력한다.
∙ yolo_94층에서는 28×28격자로 나눠 28×28×85×3텐서를 출력한다. 
∙ yolo_106층에서는 56×56격자로 나눠 56×56×85×3텐서를 출력한다.

이 층들이 출력한 텐서를 객체정보로 변환하면, 여러 scale의 객체를 탐지할 수 있다.

 

 

Loss Function

정답으로 Ground truth box와 클래스가 주어진다.

∙ 1, 2항은 각 박스의 위치오류와 크기오류를 측정하는 Regression Loss이다.
∙ 3항은 물체가 있지만 없다고한 FN오류를 측정하는 Confidence Loss이고,
∙ 4항은 물체가 없지만 있다고한 FP오류를 측정하는 Confidence Loss이다.
∙ 5항은 class를 나타내는 OneHot코드의 오류를 측정하는 Classification Loss이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


3. Transformer : DETR , SETR

고안 배경)

고안 배경)Transformer를 사용하면,
∙ 후보영역(RoI)을 생성하는 중간단계없이 Box집합을 직접예측할 수 있을까?
∙ 중복현상이 아예 일어나지 않게 할 수 있을까?
∙ Convolution기반의 Faster-RCNN이나 YOLO보다 좋은 성능을 얻을 수 없을까?

CNN은 유연하기에 Faster-RCNN과 YOLO v3의 구조를 자유자재로 설계가능하였다.

하지만 Transformer는 다소 고정적인데, 이유는 아래와 같다.
 T × dmodel 크기의 tensor가 여러 encoder블록과 decoder블록을 흐르며 연산이 진행


Encoder만 사용되는 ViT와 달리 DETR는 영상을 입력으로 박스집합을 출력해야하기에 Encoder와 Decoder 모두 사용한다.
Decoder에 붙은 출력층은 T × dmodel tensor를 Box집합으로 변환해야한다.

손실함수는 Transformer가 예측한 Box집합과 label박스집합이 일치하는 정도를 측정하는 능력을 가져야한다.
∙ Box는 직사각형을 표현하는 4개의 좌표(coordinate)와
∙ 물체 클래스를 나타내는 Class확률벡터(softmax)로 표현.

 

 

3.1 DETR (DEtection TRansformer)

Faster-RCNN같은 CNN기반 신경망 Box집합을 바로 예측하기 어렵기에
RoI를 생성 후, 영역을 분류
하는 일종의 우회하는 방식을 사용한다.
즉, 기존문제를 대리문제로 바꾸고 대리문제를 푸는 셈이라 볼 수 있다.

DETR은 RoI생성단계가 없고, NMS라는 후처리단계가 없는, End-to-End 학습이 가능하다.
위의 그림은 DETR모델구조로 DETR은 ~로 표시한 3가지 모듈로 구성된다.

 모듈 

CNN을 통해 Feature Extraction을 진행.
또한, 1×1 convolution을 적용 channel을 C에서 dmodel로 줄여 h×w×dmodel의 tensor로 변환한다.
이후 Flatten으로 pixel을 이어붙여 행에 배치한 hw×dmodel 행렬을 얻는다.
위 그림에서는 hw를 T로 표기하는데, 이는 최종적으로 transformer의 input으로 입력할 T×dmodel행렬을 얻음을 의미한다.

이 행렬의 각 행은 축소된 image의 pixel에 해당하며, Self-Attention계산 시 행이 Query로 참여하기에
축소된 pixel(= patch)간의 attention정보를 추출하는 셈이다.
즉, DETR은 Self-Attention을 반영한다 볼 수 있다.


 

 모듈 

Encoder-Decoder로 구성된 Transformer로
모듈 에서 입력된 T×dmodel 행렬에 Position Encoding을 적용해 Encoder블록1에 입력한다.

Encoder블록1, ... , Encoder블록M을 통해 변환된 행렬은


Decoder의 MHA에 입력되어 Key와 Value의 역할을 한다.


Decoder를 좀 더 살펴보자.

기존 Transformer에서는 Decoder가 Auto-Regressive방식으로 작동한다.
즉, NLP에서 <SOS>토큰을 주면 첫번째 단어가 생성되고 
<SOS>토큰과 첫번째 단어를 주면 두번째 단어가 생성된다.
이런 AR방식을 객체탐지에 적용할 수 있을까?? → ❌ 
(Bbox는 순서없이 집합으로만 표현하기 때문.)


Decoder 입력을 보면 object queries라 표시된 K개 벡터가 있다.
K×dmodel크기의 행렬이 입력된다는 의미로 K는 탐지가능한 물체의 최대개수이다.
출력층은 물체가 아닌경우, 를 출력할 수 있기에 가변개수의 객체탐지가 가능하다.

그림의 예시에서는 2개의 박스와 3개의 를 출력했다.
Decoder의 최초 입력인 object queries는 Box에 대한 아무런 정보❌ 
Position Encoding, P를 갖고 출발해야하는데, DETR은 학습을 통해 알아낸 P를 사용한다.


 모듈 

Decoder블록이 출력한 K×dmodel행렬의 각 행을 Feed-Foward에 통과시켜 박스정보로 변환한다.
이렇게 모델이 예측한 박스집합을 ŷ라 하고
정답에 해당하는 Ground_Truth Box집합을 y라 하자.

y에 박스를 추가해 ŷ처럼 K개 박스를 갖게 한다. 
ŷ과 y에 Hungarian Algorithm을 사용해 최적매칭쌍을 구한다.



📌 Loss Function
매칭된 참값박스 i와 예측박스 j쌍을 이용해 아래 처럼 손실함수를 정의한다.

첫번째 항은 class를 맞췄는지 측정한다. (p̂j(ci)는 class확률벡터에서 참값class에 해당하는 확률.)
두번째, 세번째 항은 물체위치를 얼마나 정확히 맞혔는지 측정한다. (2번째항: IoU ; 3번째항: L1 Distance)




Self-Attention Matrix식 = softmax(QKT / √dkey).
이 행렬은 image를 구성하는 여러 Q벡터가 상호주목하는 정도를 표현.

전술했듯, DETR에서 모듈 이 m×n크기의 기존image를 h×w로 축소하고
축소된 특징맵에서 화소각각을 Q벡터로 취하기에 Self-Attention Matrix는 축소된 pixel (= patch)가 상호주목하는 정도를 측정.

위의 그림에서 주황색 표시된 코끼리의 경우, 코와 발, 등, 꼬리에 주목하고 있는데, 이는 Bbox의 경계에 주목하고 있다는 사실을 확인할 수 있다.

이 사실을 바탕으로 Decoder의 역할을 추론해보면, Decoder는 Bbox를 제대로 알아내기위해 Self-Attention Matrix를 통해 물체의 상하좌우 경계에 주목한다고 할 수 있다.

 

 

 

 

 

 

 

3.2 SETR (SEgmentation TRansformer)

DETR는 Object Detection의 목적으로 고안되었다.
이때, Transformer의 특성으로인해 분할을 할 수 있도록 쉽게 확장할 수 있다.
DETR Architecture
위의 DETR모델의 모듈 ③은 출력행렬을 해석해 Box정보로 변환하는, Detection용도의 Head이다.
따라서, Segmentation용도의 Head를 붙이면, SETR이 된다.
즉, 요약하면 SETR은 Encoder(Transformer) - Decoder(CNN)의 구조를 띈다.


Segmentation Head 축소된 해상도를 원래 해상도로 복구하기위해 UpSampling을 위한 Convolution층이 포함된다.
SETR Architecture
(a). 먼저 image(m×n×3)를 고정된 크기의 patch로 나누고
각 patch를 선형 임베딩한 다음 Position Embedding을 추가한 후,
결과 벡터 시퀀스를 표준 트랜스포머 인코더에 공급한다.
(이때, 픽셀 단위 분할을 수행하기 위해 다양한 디코더를 도입한다)


(b) Decoder는 점진적 UpSampling(resulting in a variant called SETRPUP)으로
여러 단계의 Convolution층을 쌓아 피라미드 형태로 쌓은 Decoder를 제안한다.

(c) multi-level feature aggregation (a variant called SETR-MLA).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


4. Swin Transformer

4.1 Backbone Transformer

CNN transfer learning은 DNN의 큰 이점이다.
보통 전이학습(transfer learning)에 널리 사용되는 Backbone model로는 VGG, GoogLeNet, ResNet, DenseNet121 등이 있었으며, 최근에는 EfficientNet 등이 있다.

Backbone model은 주로 input data에서 feature map을 추출하는 역할을 한다. 
주로 pretrained model을 사용하며, 다양한구조(CNNs, Transformers, ResNets)를 사용할 수 있다.

기존 NLP에서 Transformer가 사용이 되었기에(GPT, BERT), 초반에는 transformer도 transfer learning을 위한 Backbone model로 쓸 수 있을까? 라는 의문에서 출발했다.

지역정보를 추출하는 Convolution연산에 의존하는 CNN에 비해 Self-Attention에 의존하는 Transformer가 Transfer Learning에 훨씬 유리하다는 실험적 입증이 많이 발표되었는데,
Backbone으로 쓸 수 있는 Vision Transformer를 제작할 수 없을까? 라는 의문에서 Swin Transformer로 답을 해준다.

Backbone이 되려면 image의 feature를 충분히 반영한 구조를 설계해야한다.
기존 transformer는 문장처리목적으로 설계되었기에, 조금의 변형이 필요하다.
Backbone모델이 되려면 아래의 특성들을 잘 반영해 처리할 수 있어야 한다.
(문장을 구성하는 단어는 scale변화가 없으나 image를 구성하는 Object는 아주 다양한 크기로 나타나기에 scale변화가 심한편.)
(또한, 한 문장을 구성하는 단어는 수십∙수백개에 불과하지만, image를 구성하는 pixel은 수만~수백만 개이다.)
(문장의 단어는 띄어쓰기로 잘 분할되어있지만, image는 Object끼리 혹은 배경이 심하게 섞여있다.)

 

 

4.2 Hierarchical Feature map. &. Shifted Window

Swin Transformer는 image특성을 반영하기위한 핵심아이디어를 2가지로 설명한다.

 Hierarchical  ViT

아래 그림(a)은 Hierarchical ViT(= Hierarchical Featuremap)을 사용해 객체의 scale변환에 대응하는 방법을 설명한다.
모든 window는 M×M개의 patch로 구성된다. (여기서 M=4)
맨 아래층은 작은 patch_size로 window가 4×4개가 있다.
가운데 층은 patch_size가 2배로 커져 2×2개의 window가 있고, 맨 윗층은 1개의 window가 있다.
이렇게 작은 patch부터 큰 patch로 구분해 처리하면, 여러 크기의 객체를 분류하거나 탐지할 수 있다.

그림 (b)의 ViT의 경우, 영상을 분류하는데 사용할 수는 있지만 객체탐지 및 분할에는 한계가 있다.


계층적 특징맵은 계산효율상에도 큰 이점이 존재한다.

단일해상도를 사용하는 ViT의 경우)
224×224 image를 16×16 patch(= 14×14개)로 나눈다 가정하자.
이 경우, T = 196인 행렬이 입력되는데, MHA는 T개 patch끼리 Self-Attention을 계산하기에 T2번 연산을 수행한다.
이때, 연산은 QKT의 행렬곱으로 이뤄진다.
Q와 K가 T×dkey행렬이므로 T2×dkey만큼 곱셈이 수행된다. 

다중해상도를 사용하는 Swin의 경우)
window별로 self-attention을 적용한다.
window는 M×M개의 patch로 구성되기에 한 window는 M2×dkey만큼 곱셈을 수행한다.

즉, ViT에비해 (T×T) / (M×M×window개수)배 빠르게 계산된다.
예를 들면 그림(a)의 맨 아래층에서는 window가 16개이므로 49배 빠르다.


 Shifted Window

Swin Transformer의 이름이 Shifted WINdow에서 유래되었을 정도로 핵심아이디어이다.
ℓ번째 layer에서 이전처럼 window를 나누는데,
그 다음 ℓ+1층에서는 window를 절반크기만큼 수평과 수직방향으로 이동해 나눈다.


shifted window를 사용하면 window간의 연결성강화 및 다양한 크기의 객체를 처리할 수 있고,
객체의 상대적인 위치정보를 저장하는 등 이를 통한 성능향상이 가능하다.

 

 

 

 

4.3 Swin Transformer Architecture

아래그림은 Swin Transformer의 구조이다.
좌측에서 우측으로 흐르는 단계 1~4는
좌측그림의 (a)의 아래에서 위로 진행하며 patch는 커지고
window개수는 작아지는 방향에 해당한다.




예를들어, C=96으로 하고, m×n = 448×448 image가 입력될 때,
단계1) input tensor: 112×112×48 // output tensor: 112×112×96
단계2) input tensor: 112×112×96 // output tensor: 56×56×192
단계3) input tensor: 56×56×192 // output tensor: 28×28×384
단계4) input tensor: 28×28×384 // output tensor: 14×14×768

위 그림의 (a)는 이런 tensor변환을 어떻게 수행하는지 설명한다.
단계 2에서 patch합치기 적용시, 맨 아래층에서 맨 위층으로 진행하는 과정에 해당하는 것으로 단순히 이웃한 4개 patch를 하나의 patch로 합치는 과정을 의미한다.

모든 단계를 거쳐 얻은 특징맵에 classification을 위한 head를 붙이면 classifier가 되고,
Detection을 위한 head를 붙이면 detector가,
Segmentation을 위한 head를 붙이면 segmentor가 된다.
이런 방식으로 Swin Transformer는 Backbone 모델로 작용한다.

이제 단계 1~4에 노랜색 표시된 Swin Transformer Block의 동작을 그림 (b)를 통해 살펴보자.
(b)는 Encoder Block을 2개 쌓은 상황으로 현재 Block ℓ은 ℓ-1번째 Block에서 xℓ-1 tensor를 받아 Layer Normalization을 거쳐 W-MHSA층으로 Self-Attention을 적용한다.
이후, Add와 Norm, FF, Add를 적용해 x을 출력한다.

ℓ+1번째 Block은 x을 입력으로 받아 같은 과정을 거쳐 xℓ+1 tensor를 출력한다.
ℓ Block과 ℓ+1 Block의 Self-Attention을 W-MHA, SW-MHA로 표기했다.
W-MHA는 window를 분할하고 SW-MHA는 Shifted Window로 분할한다.

Backbone모델로써의 Swin Transformer

Swin Transformer는 Backbone으로 쓰이는 CNN인 ResNet등과 호환되도록 tensor모양을 설정했기에
기존 딥러닝모델에서 CNN-Backbone을 들어내고 Swin-Transformer로 쉽게 대치할 수 있다.

 

 

5. ETC

cf) 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

 

 

cf) W&B

 

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

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

chan4im.tistory.com

  1. 41OTI4NT
  2. 40OTk0Nj
  3. 43MTg2OD

 

 

+ Recent posts