참고 : https://darkpgmr.tistory.com/82

 


 

오늘은 PnP 에 대해 알아보겠습니다.

PnP : Perspective-n-Point 란

2차원에서의 점들과 이에 대응되는 3차원의 점 n개가 주어진 경우에

카메라의 pose R,t를 구하는 문제를 말합니다.

 

opencv

 

실제 우리가 카메라의 외부 파라미터 ( pose ) 추정을 한다고 생각하며 예시를 들어보겠습니다.

 

우리는 이미 알고 있는 object에 대한 사진을 찍었고, 해당 사진을 찍었을 때 카메라의 pose [R |t] 를 구하려고 합니다.

object의 국소적 특징 모서리, edge등을 통해 이미지(사진)에 찍힌 2D상의 점과

대응되는 3D point cloud상의 모델의 점(실제 3차원 현실에서의 점)에서 2D-3D 대응점들을 찾을 수 있었습니다.

 

해당 대응점이 3개 이상 존재하면 PnP알고리즘으로 카메라의 pose를 구할 수 있고, 

 

이 pose는 object 좌표계 -> camera 좌표계 사이의 변환행렬을 의미하며,

반대로 생각하면 카메라 좌표계에서 object 좌표계의 변환행렬을 알 수 있음을 말합니다.

 

다시 생각해보면 물체의 pose 추정을 풀 수 있는 방법과  같음을 알 수 있습니다.

 

 

Xi는 object 좌표계에서의 3D 점, RXi+t는 카메라 좌표계에서의 3D점 입니다. pi를 통해 xi 즉 2D image 상의 한 점으로 mapping됨을 알 수 있습니다. 이 3개 변환 간의 관계를 잘 이해해야 해당 문제에 대해서 이해할 수 있습니다.

robotics

 

결국 우리가 풀고자하는 문제는 xi 와 Xi를 알고 있을 때, 이 사이에 있는 변환행렬 , 카메라 외부 파라미터 R,t를 추정하는 것입니다.

그러나 perspetive projection으로 인해, 해당 문제는 비선형 방정식을 푸는 문제로 변하고 풀기가 매우 복잡해집니다.

 

3차원에서 한 점은 Xi = (X, Y, Z) 의 성분을 가집니다. 그러나 2D 이미지 좌표는 xi = (u,v) 2개의 성분을 가집니다.

이러한 u,v와 X,Y,Z간 관계는 아래와 같습니다.

 

정규화 이미지 평면이 무엇인지, 왜 Z는 나눗셈으로 들어가는지 헷갈릴 수 있는데 

보통 카메라 모델에서 좌표계는 총 3개로 표현되며

  1. 카메라 좌표계 (Camera frame)
  2. 정규 이미지 좌표계 (Normalized image plane)
  3. 픽셀 좌표계 (Image / pixel frame) 로 구분할 수 있습니다.  1. 은 카메라를 원점으로한 3D 좌표계이고, 2,3은 이미지상의 2D 좌표계입니다.

 

 

여기서 정규 이미지 좌표계란, 카메라 좌표계에서 위치한 3D 공간상의 점에서 카메라 좌표계의 원점으로 직선을 긋습니다.

여기서 z = 1의 거리에 2D 이미지 평면이 존재한다고 생각하고 

해당 평면과 직선이 만나는 점을 정규 좌표계에 3차원 상의 P를 투영한 점 P'으로 정의합니다.

 

prove

 

따라서 이러한 원리로 직선과 평면의 교점을 정규 이미지 좌표계 projection이라고 하는 것입니다.

이는 카메라가 보는 2D 좌표를 깊이(Z)의 영향을 제거한 순수한 방향 정보로 표현한 것입니다.

또한, 이는 우리가 최종적으로 만나게 되는 픽셀 좌표계에서 카메라 내부 파라미터 영향을 제거하고, 순수하게 기하적인 의미만을 가지는 좌표이기도 합니다.

 

 


 

 

- EPnP

 

EPnP는 존재하는 모든 대응점들을 사용해 R,t를 구하는 것이 아니라, 대표되는 4개의 대응점을 사용해 R,t를 구하는 방식입니다.

이는 3차원 공간에서 1개의 점은 4개의 대응점으로 항상 표현이 가능하다는 사실에 기반합니다.

 

추가적으로 3차원 공간에서 점2개면 직선, 점 3개면 평면을 표현할수 있듯이, 4개의 점이면 3D 공간 전체를 표현할 수 있다는 것입니다.

 

공간으로 설명하면 어려우니, 예시를 들어봅니다. 임의의 삼각형이 있고, 삼각형 안의 임의의 점 A가 있습니다.

A는 삼각형의 세변 기준점 a,b,c로 항상 표현될 수 있습니다 . ex ) 0.2a + 0.2b + 0.1c ... a,b,c는 벡터라고 생각하면 편합니다..

이러한 A의 a,b,c로의 비율은 삼각형이 회전/이동하여도 불변합니다.

 

이와 동일한 맥락으로 3D공간에서의 한개 object의 모든 점도 4개의 점의 결합으로 표현할 수 있습니다. 

고정된 카메라에 대해 물체가 이동한다고 가정합시다.

이 경우에도 삼각형의 경우와 동일하게 한 개 object의 4개 기준점의 결합 비율은 불변합니다.

 

이제 카메라의 입장으로 가봅시다.

카메라는 무슨생각을 할까?

 

위와 같이 , 물체 좌표계에서와 같이 카메라 좌표계에서도 동일하게 한 점은 , 기준점 4개의 가중합임을 확인할 수 있습니다.

해당 식을 사용해서 기존에 풀고자 했던 R,t 추정을 단순화합니다. 

 

원래 우리는 실제 3D 점 X가 2D기존에는 R,t 각각 6,3개의 자유도를 가진 방정식을 풀어야 했는데 반편에 

 

'robotics' 카테고리의 다른 글

EKF  (0) 2026.01.28
EKF - Kalman filter  (0) 2026.01.27
EKF_ 사전지식 ( covariance matrix , Jacobian , Gaussian )  (1) 2026.01.27

오늘은 img2img 모델인 pix2pix gan 모델 논문에 대해 리뷰해보겠습니다.

 

https://arxiv.org/abs/1611.07004

 

Image-to-Image Translation with Conditional Adversarial Networks

We investigate conditional adversarial networks as a general-purpose solution to image-to-image translation problems. These networks not only learn the mapping from input image to output image, but also learn a loss function to train this mapping. This mak

arxiv.org

 

귀여워


 

1. introduction

- 해당 논문은 외국어를 translating ( 번역 ) 하는 것처럼 RGB 이미지를 image-to-image translation하는 task를 범용적으로 다룰 수 있는 framework를 제안한다.

- CNN과 같은 모델은 이미지 prediction에서 높은 성능을 보이지만, 이를 위해서 학습의 objective 즉 loss를 일일이 task에 맞춰 디자인하는 노력이 필요하다.

- 따라서 GANs을 사용하여, data에 adaptive한 gan loss로,  원래라면 여러 다른 종류의 loss가 필요했을 task들을 loss 디자인의 노력 필요없이 GAN하나로 가능하게 하면서,

이미지가 fake 처럼 보이지 않도록 함(D)과 동시에 loss를 최소화하는 방향(G)으로 이미지를 생성해낸다.

 

--

 

이미지를 내가 원하는 형태의 또 다른 이미지로 변환하는 img2img translation task를 범용적으로 다룰 수 있는 모델이 필요한데, 

 

CNN과 같은 모델은 loss를 최소화하며 학습하는 과정은 자동이지만, 이 목적성인 loss를 디자인하는 것 자체가 어렵다는 문제가 있다.

 

특정 스타일이나 , 원하는 결과물에 맞추어 특수한 loss를 만들어 줘야 하고,

모델의 성능을 좋게 하기 위해 이러한 loss를 하나하나 디자인한다는 것은

결국 img2img translation이라는 task를 범용적으로 CNN이 할 수 없다는 말이다.

 

만약 단순하게 Euclidean distance로 loss를 설계하면, 이미지의 생성 결과가 모델이 그럴듯한 출력의 모든 것을 평균화하여 loss를 최소화해버리는 선택을 해버려 흐려 보이는 이미지가 결론적으로 나타난다는 점에서 저자는 각각 task에 맞춘 loss 디자인이 필요성을 말한다.

 

이를 해결하기 위해 저자는 GAN을 사용해 img2img를 하면

GAN은 loss가 data에 맞게 변화하는 특징을 가지고 있어 task에 loss가 맞춰서 학습을 진행하여

 img2img라는 task를 범용적이게 할 수 있다고 하는 것이다.

 

 

2. Related works

 

1 . Structured losses

img2img 문제는 픽셀 단위의 회귀로 생각할 수 있지만, 픽셀 단위로만 생각하면 전체 구조적인 특성을 읽어버려 실제로는 이상하게 보이는 이미지를 생성해낼 수 있다.

 

2. Conditional GANs

해당 논문에서는 condition 즉 , input img x이 들어가는 gan을 사용한다. 

이게 무슨 말이냐 하면, 원래 본디 GAN의 초기 개념은 G 가 랜덤한 노이즈 z로 부터 점차 진짜같은 이미지를 생성해나가고, D가

이의 진위 판별을 하므로써 점차 두 모델의 성능이 좋아지는 것인데,

우리가 하고자 하는 img2img를 하기 위해서는 input x를 무언가로 변형해 output을 만들어내야 하기에 

 

conditional Gan 즉 input ( condition )이 있는 gan을 쓴다. 아래의 그림을 보면 손쉽게 이해가 가능하다.

 

cGAN

 

3. Method

method는 크게 1. loss 2. U-net generator 3. Patch GAN discriminator로 나눌 수 있다.

 

1. loss 

 

첫번째로 loss를 이해하기 위해 G와 D의 input output을 정확히 이해해야한다.

 

먼저 D는 discriminator로써, 두 개의 input (입력 이미지 x, 추론이미지) 가 들어왓을 때

추론해야하는 이미지가 실제 이미지(B)인지, G가 생성해낸 fake인지 구분해야 한다. (fake B)

 

이에 대한 추론 결과가 0~1 사이의 확률로 나오며, 추론이미지가 진짜라고 판단하면 1에 가까운 확률을 return한다.

 

두번째로, G는 입력 x(condition)과 ramdom한 noise z를 바탕으로 가짜 이미지를 생성해낸다. (fake B) 이게 return값 그 자체다.

 

이를 바탕으로 위의 (1)식을 봐보자.  

D를 우선적으로 보면 앞의 항은 진짜를 D가 판별하는 상황이므로 더 커져야 D의 성능에 좋다, 뒤의 항은 가짜를 D가 판별하는 상황이라서 D의 return값이 작이지면 좋은데 1- []이므로 뒤 항도 커져야 D 성능이 좋은 것이다. 

즉 , D입장에서는 전체 식이 커져야 성능에 좋은 것이고,

 

반대로 G입장에서는 D를 속여야 즉 뒤의 항의 값이 작아져야 G가 잘 하는 것이기에 전체 항이 작아져야 한다.

이러한 내용이 아래 (4)식에 minmax로 나와있다.

 

눈치챘을 수 있지만, 해당 loss는 G , D에 대해 동시에 계산, 업데이트가 쉽지 않다. 어느 한쪽은 고정되어 있어야 계산이 편리하기에 실제 학습에서도 순차적으로 backward를 진행한다.

 

여기서 기댓값으로 감싸져 있는 것은 실제로는 mini-batch의 평균으로 구현한다.

 


 

(4) 뒤 식을 보면 L1 loss가 G에 대해서 추가적으로 달려있는 것을 볼 수 잇다.

해당 항은 G가 실제 gt값에 가까운 이미지를 형성하는데 도움을 주기 위해서 필요한 항이다.

 


recall

 

논문에서는 random한 noise z에 대해서 언급하는데 

z가 없다면 gan이 결정론적인 동일한 output만을 계속하여 만들어서 모델의 품질이 떨어지기에 필요하지만, 

학습 과정에서 저절로 gan이 z를 무시하는 현상이 벌어져,

dropout을 통해 생성하는 결과물이 highly stochastic output을 낼 수 있도록 하려고 하였지만

그마저도 부족하여, 이에 대한 부분은 완전히 해결하지 못하였다고 한다.

 

추론 과정에서도 dropout을 사용하여, img2img 특성에 걸맞게 할 때마다 조금씩 다른 output이 생길 수 있음을 말한다.

 

 

2. u-net (G)

 

 

 

generator의 구조로써 U-net을 사용하였다고 한다.

일반 Encoder - decoder와 달리 U-net은 각 스케일마다 skip-connection을 사용하여 해상도별 정보를 보존한다.

(기존 encoder-decoder는 한번 bottleneck으로 압축되어 복원되기에 정보가 많이 손실된다. U-net은 skip connection으로 이러한 정보를 보내주는 것이다)

 

논문에서는 이를 bottleneck이 same underlying structure를 보존하고, skip connection이 surface appearance를 보존한다고 말한다.

 

3. PatchGAN (D)

기존의 L1/L2 Loss함수가 흐린 이미지를 생성해낸다는 것을 앞서 언급한바 있다.

이러한 L1/L2 Loss 를 통한 이미지 생성은 흐린 이미지를 생성해내지만, low frequency 를 충분히 잘 복원해낸다고 한다.

따라서 low frequency 영역은 L1/L2 loss로 충분하고 문제는 high frequency (선명함)을 보존하는 것인데, 

 

이게 대해서 D가 high-frequency structure만 모델이 만들도록 제한하고, low frequency는 L1/L2가 보장하는 방식으로 선명함을 만들어낸다. 

 

이때, 판별기는 N*N patch에 대해서 각 패치가 진짜인지 확인하는 방식으로 작동해 이를 PatchGan이라고 한다.

 

4.  Optimization and inference

 

- 모델의 backward는 D에 대해서 한번 수행한뒤 , G에 대해서 수행하는 방식을 사용한다.

 

- G loss는 앞서 나온 loss의 뒤 항을 쓰는 게 아니라

를 사용한다. * fake를 진짜라고 믿게 만들어라

( 로그함수는 0에 가까우면 , -oo, 커지면 완만한 커브

초기 G가 생성해내는 값은 누가 봐도 가짜기에 log(1-D(fake))이면 D가 낮은 값을 밷어 log함수의 완만한 배에 올라타 gradient를 얻기 쉽지 않다.

반대로 log(D(fake)) 이면 초기에 비교적 완만하지 않아 gradient로 학습이 되는 것이다.  )

 

- D의 objective를 1/2로 나누어서 G의 속도에 비해 D의 속도를 조절한다. 

* 우리가 학습하는건 결국 G가 잘 만들도록 하는 것이고, 처음부터 가짜를 G는 만들어야 하기에 D를 느리게 하여 페이스를 조절한다! 

 

4. Experiment 

앞서 언급한 loss의 이유를 직관적으로 확인할 수 있다 + D의 high freq 보존

 

추가적으로 아래 fig를 보면 PatchGAN의 Patch size별 양상을 비교하는 것을 볼 수 있는데 너무 작으면 blur하너나 artifact가 생기고 너무 크면 부분적으로 이상한 것들을 생성해내는것을 확인할 수 있다.

 

 

 

마무리

이렇게 gan은 범용적인 img2img를 낮은 리소스로 수행할 수 있다.

입력 - gt 간의 관계를 학습하여 새로운 이미지에 대해서도 해당 관계를 가지는 이미지를 형성해 낼 수 있는 것이다.

최근에는 diffusion 계열이 이러한 img2img를 잘 하는 것으로  알고 있는데 후에 diffusion에 대한 review도 해보려고 합니다.

찾으며 diffusion poilcy라는 방법이 robotics에서도 핫하다는데 해당 방향성으로 공부를 조금 해 보려고 합니다.

 

직접 gan을 써보고 모델도 pix2pix는 아니지만 조금 더 복잡한걸로 구현해서 사용까지 해 봤는데 이러한 논문 정독 후 코드리뷰가 큰 도움이 됨을 느겼습니다.

그림 20000

 

행복하세요

 

 

EKF에 대해 리뷰해보겠습니다. 아래 유튜브가 EKF에 대해 굉장히 쉽게 설명하여 많은 도움을 얻었습니다.

 

 참고자료

-  제어공학 수업자료

 Probabilistic Robotics

https://youtu.be/9X3jGGnbcvU?si=qCTI6pfvvzVehR-t&t=204 

EKF

 

앞선 포스트에서 말했다시피 , EKF는 KF에서 있는 시스템의 선형화 가정을 완화한 필터입니다.

따라서 실제 존재하는 비선형 시스템에 적용했을 때, 이점을 얻게 됩니다.

 

기본적인 뼈대는 Kalman filter와 같지만, 시스템을 A,B와 같은 행렬이 아니라 비선형 term으로 표현합니다.

 

EKF에서의 시스템식

*noise, 초기값에 대한 가정은 kalman filter와 동일합니다.

 

기존에 있던 prediction과 correction은 선형 시스템을 대상으로 만들어진 수식이기에 , 당연히 비선형 시스템에는 적용이 안됩니다.

하지만 비선형 시스템을 그대로 다루는 것은 어려운 일이기에 EKF에서는 시스템에 대한 선형화 linearization 를 진행합니다.

 

여기서 first order Taylor series expansion을 사용하여 비선형 시스템을 선형으로 근사합니다.

이게 뭐지 .. 싶을 수도 있지만 사실은 단순합니다. 

 

first order Taylor series expansion

 

first order Taylor series expansion은 Taylor series의 1차항까지를 썻다고 해서 하는 말이고 ,

사실은 해당 지점에서의 접선의 방정식을 의미합니다 ㅎㅎ

Tayler serise의 일반항

 

우리가 쓰는 시스템은 n 차원의 상태에서 m을 매핑하기에 ,

단순 미분이 아닌 사전지식에서 언급한 jacobian을 통해 선형 근사를 하게 되는 것입니다 ㅎㅎ

 

이렇게 비선형 시스템 g와 h를 선형화하는 방법을 통해 아래의 EKF 를 수행합니다. 

EKF

 

KF

KF 와 비교하며 어떤게 달라졌는지 확인해봅시다. 

2: 에서 선형인 A,B를 EKF에서는 g로 표현함을 알 수 있습니다.

5: 에서의 식도 동일합니다.

 

여기서 3:과 4에서 G,H를 확인할 수 있는데

 

G는 비선형 함수 g에 대한 이전 시점 상태 평균 (t-1)에서의 jacobian 이고,

H는 비선형 함수 h에 대한 이번 시점(t) 상태의 prediction 평균에서의 jacobian입니다.

또한 해당 수식에서의 g,h 선형화는 아래와 같습니다.

 

 

현재 가지고 있는 값에 대한 함수값과 기울기를 가지고 인접한 부분에 대한 함수값을 

해당 점 근처에서 유효한 직선의 방정식을 통해 구하는 것이 선형화입니다.

 

*여기서 헷갈릴 수 있는데 비선형이라고 해서 unknown인 시스템인게 아니라 단지 다루기 힘든 시스템이라 선형화를 진행하는 것입니다. 알고있는 함수에 대입하여 Taylor의 0차를 구합니다 ㅎ ( 전 헷갈렸었음 ) 

 

EKF


요렇게 해서 EKF 를 전부 확인해보았습니다. 추가로 시간이 된다면 code에서의 사용 , sensor fusion에서 EKF를 사용하는 이유 등을 알아보려고 합니다 . 감사합니다. 

 

행복하세요

오류와 수정사항 환영합니다.

 

'robotics' 카테고리의 다른 글

PnP : Perspective-n-Point  (1) 2026.02.27
EKF - Kalman filter  (0) 2026.01.27
EKF_ 사전지식 ( covariance matrix , Jacobian , Gaussian )  (1) 2026.01.27

EKF 를 공부하기 위해서는 기본적인 KF에 대한 지식이 당연히 필요하겠죠 ? 

오늘은 kalman filter에 대해서 간단하게 review하는 글을 써보겠습니다.

 

참고자료 

-  제어공학 수업자료

Probabilistic Robotics

 

칼만아 조금만 기다려 ~

 

 

Kalman filter는 선형 가우시안 시스템의 연속 상태 공간에서 사후 확률 분포 (Posteriors)를 정확하게 계산하기 위한 필터입니다.

말이 어려울 수 있는데, 아래의 3가지 조건을 만족하면 우리가 알고자하는 시스템의 state의 확률 분포를 알 수 있다는 말입니다.

 

1)  상태 전이 시스템이 선형

2)  관측 시스템이 선형 

3)  초기 상태 분포가 가우시안 + 관측, 상태 noise가 가우시안이라는 전제 

 

앞의 3가지 전제를 만족하면,

모든 시간 t에서 belief( = Posteriors , t시간에서의 state의 확률 분포)는 가우시안으로 생각할 수 있고

따라서 재귀적인 방법으로 시간 t에서의 평균과 공분산을 계속하여 구함으로써 

칼만 필터는 우리가 알고자하는 state의 확률 분포를 추정합니다.

 

다시 한번 위의 각 요소에 대하여 다시 확인하며 넘어가겠습니당

 


 

쉽게 설명해보자.

우선 기본적으로 시스템에 대해서 , 선형인 전제를 하는 것이 1) 2) 이다. 당연하게도 시스템이 선형이면 해당 시스템을 해석하기가 매우 간단하다.

 

상태공간 방정식에서 X가 포함된 상을 이산적으로 표현한 식이 여기서 말하는 1) 상태 전이 방정식이고, Y가 포함된 식이 2) 관측 시스템이다. 생각해보면 Y는 output이라고 배웠고, x는 state라고 배웠다. 당연한 사실이다. 

 

선형 상태공간 방정식

 

* 위에서는 x에 대한 미분으로 표현되어있지만, 실제 시스템에서 sampling된 time으로 생각하면 xn - xn-1/ td = x dot임을 알 수 있고 넘기면 아래와 같은 수식으로 표현 가능하다.

 


 

현실 시스템의 sensor와 측정에서는 당연하게도 noise가 있고, 위 식은 해당 사항을 반영하지 않고 있다 . 이를 반영한 것이 아래의 1),2) 수식이다. 

 

1
2

 

1에서 noise를 제외한 부분은 기존 상공방과 동일하게 state와 제어기 입력이다. 

여기서 나오는 noise는 제어기 입력으로 인해 생기는 noise ( input noise ) 이다.

당연하게도, 우리가 실제로 입력한 제어기 입력과 다르게 조금은 다른 값이 input으로 들어갈 것이기에 해당 noise를 가정한다.

 

kalman filter에서는 해당 noise가 평균이 0이고, 공분산이 Q인 가우시안을 따른다고 가정하고, input noise라고 한다.

 

동일하게 아래 식 2에서 있는 delta는 measurement noise라고 부르며 센서 측정에 있어서 나오는 실제 y와 측정 y간의 간격을 noise로 표현한다. 동일하게 평균이 0이고 공분산이 R인 가우시안을 따른다고 가정한다.

 

* 또한 추가적으로 t = 0일때의 초기 변수에 대한 확률분포도 가우시안 분포를 따른다고 가정한다.

 

 


 

 

앞서 말했다시피 해당 조건을 만족하면 모든 시점 t에 대해서 Posteriors 사후 확률분포는 가우시안 분포를 만족합니다 여기서, 

 

가우시안 분포는 평균mean과 공분산covariance로  완전히 표현되므로
이 최소 파라미터들을 구하는 방식으로 확률 분포 전체를 계산하는 것을 대체한다.

 

이렇게 재귀적인 방법으로 매 시간 t에 대한 상태변수의 mean과 covariance를 구하는 것이 kalman filter인 것이다.

물론 실제 시스템에서 noise나 초기 상태가 가우시안이라는 전제 등 다양한 전제를 사용하여 실제 값과 오차가 있을 수 있지만 , 이러한 방식으로 다양한 시스템에서 효과적인 상태 추정을 하게 도와줍니다 ㅎㅎ

 


이제 칼만 필터가 어떻게 재귀적으로 상태변수의 mean 과 covariance를 업데이트하는지 알아보겠습니다.

 

Probabilistic Robotics

 

칼만 필터는 크게 2번의 step으로 최종적인 공분산과 평균을 구합니다. 

 

첫번째는 prediction입니다.

 

prediction은 말 그대로 한 스탭 전의 상태변수의 평균과 공분산을 사용해, 이미 알고있는 시스템 식에 적용해 어떤 값이 나올지 예상하는 것입니다. 

이미 알고 있는 모델로 미래를 예측 !

 

이는 table 3.1의 2 : 식으로 표현되며 식을 자세히 살펴보면 단순히 시스템 식에서 상태변수 대신 , 이전 스탭의 평균이 들어간 것을 확인할 수 있습니다. 여기서 제어기 입력은 우리가 의도한 값이 들어간다고 가정하기에 t시간에서의 ut를 그대로 사용합니다.

 

이어서 식 3: 을 통해서 prediction error에 대한 공분산을 계산합니다. (수학적인 유도는 생략)

 

이로써 prediction이 종료되고 , 결과론적으로 t-1의 평균과

error에 대한 공분산을 사용해서 시스템 모델과 제어기 입력값을 통해 t시점에서의 

평균과 공분산을 구했음을 알 수 있습니다.

 


 

그 다음은 Correction ( Measurement Update ) 입니다.

 

prediction이 모델의 정보를 통해 미래를 예측했다면, Correction은 해당 값을 참조하여 최종적으로 real value를 추정하는 과정입니다. 

 

5: 의 식을 주목하여 보면 식의 형태가 Observer의 수식과 굉장히 유사함을 확인할  수 있습니다.

측정 output인 zt를 prediction 된 값을 사용해 최적화된 Observer gain, 즉 Kalman gain이라고 불리는 4번 식을 통하여

이 전에 prediction했던 t시간에서의 평균을 correction합니다. 

 

이는 이번에 측정한 z값을 얼마나 믿을건지 ? 를 Kalman gain을 참조하여 본다고 보면 됩니다.

결과적으로 모델을 통해 예측한 값과 실제로 측정된 값을 합쳐 noise를 제거한 실제 값을 추정하는 과정 이라고 보면 됩니다.

 

즉, Kalman filter의 correction step은
확률적으로 최적화된 observer를 사용하는 상태 추정 과정이라고 볼 수 있습니다.

 

6: 식도 Kalman gain을 사용하여 error에 대한 공분산을 계산합니다.

이렇게 최종적으로 시간 t에서의 평균과 공분산을 구하고 해당 파라미터들은 다음 time step에서의 값들로 재귀적으로 사용됩니다.

 

 

행복하세요

 

 

해당 과정에서의 증명은 생략하였지만 찾아보면 재미있습니다 ㅎㅎ

또한 correction에서 하는 과정이 이해가 가지 않으면 observer에 대한 기초 개념을 한번 더 리뷰하면 좋을 것 같습니다.

 

다음 글에서는 이러한 선형 가정을 완화하여,
비선형 시스템에서도 Kalman filter를 적용할 수 있도록 확장한 EKF에 대해 정리해보겠습니다.

 

오류나 지적 환영합니다 감사합니다

 

 

 

 

'robotics' 카테고리의 다른 글

PnP : Perspective-n-Point  (1) 2026.02.27
EKF  (0) 2026.01.28
EKF_ 사전지식 ( covariance matrix , Jacobian , Gaussian )  (1) 2026.01.27

EKF를 공부하기 전 필요한 배경지식들을 정리하고 넘어가고자 합니다.

 

1. covariance matrix (공분산 행렬)

먼저 공분산의 정의를 짚고 넘어가고자 합니다.

공분산(共分散, 영어: covariance)은 2개의 확률변수의 선형 관계를 나타내는 값이다

수학적인 정의는 아래와 같습니다.

 

스칼라 값을 가지는 두 확률변수 X,Y에 대해 상관관계를 파악하기 위해 공분산을 사용하고,

공분산이 양수인 경우 확률변수 X가 커지면  Y도 커지는 양의 상관관계

공분산이 음수인 경우 확률변수 X가 커짐에도 Y는 작아지는 음의 상관관계

공분산이 0이면 확률변수 X의 변화와 Y의 변화는 양도, 음도 아닌 관계를 가짐을 의미합니다.

(공분산은 선형 관계를 말하는 것임으로 공분산이 0임이 관계가 없음을 의미하는 것이 아님 !, 대표적인 반례로 원의 방정식을 예로 들 수 있다) 

 

추가로 기댓값의 성질을 사용하면 수식을 아래와 같이 변형할 수 있습니다.

 

 

여기서 잠깐  !

주의를 환기시키기 위한 짱구짤

 

보통 분산이라고 하면 , 확률분포가 얼마나 퍼져있나 ? 를 상상하게 되는데요

공분산은 두 변수간의 상관관계다 라는 정의가 분산을 먼저 배우고 , 공분산을 배운 사람은 이해가 잘 되지 않을 수 있습니다.

 

여기서 분산은 공분산의 special한 case라는 점을 확인할 수 있습니다. 

 

오늘도 친절한 g선생의 설명

 

공분산 -> 함께 얼마나 변하는가 ?

분산 -> 혼자 얼마나 변하는가 ?  - 한 확률변수가 평균을 중심으로 얼마나 퍼져있는가 ? 

라고 생각하면서 이해를 할 수 있었습니다.

 

다시 돌아와서 ... covariance matrix (공분산 행렬) 이란

 

우리는 행렬과 벡터를 학습함으로써 단순 스칼라에서 행렬을 통해 더 고차원의 것을 표현하는 방법을 배우는데요, 이 또한 해당 맥락으로 이해할 수 있습니다.

 

단순히 스칼라로 표현되던 확률 변수를 , 1차원이 아닌 n차원으로 표현되는 vector로 표현할 수 있고이는 기존 공분산 또한 행렬로 계산될 수 있음을 말해줍니다. (스칼라 확률변수를 벡터 확률변수로 확장)

 

 

벡터 확률변수

 

 

여기서 보다시피 벡터 확률변수 안에는 여러 확률 변수가 들어있고 , 이 안의 각각의 변수에 대한 상관관계가 궁금할 수 있습니다. 이를 표현한 것이 공분산 행렬입니다.

 

확률 이론 및 통계학에서 공분산 행렬 ( 자기공분산 행렬 , 분산 행렬, 분산 -공분산 행렬이라고도 함 ) 은 주어진 확률 벡터 의 각 요소 쌍 사이의 공분산을 나타내는 정사각 행렬입니다 .

 

 

정의에 따라 정리하면, 대각성분은 각 확률변수의 자기자신에 대한 공분산 ( 분산 ) 이고, 그 외 성분은 다른 성분들과의 공분산입니다. 

이에 대한 성질로 

 

- 대칭행렬 ( 당연하죵 )

- 양의 준정부호행렬 ( 설명하려면 조금 길거같아 나중으로 미룬다 , 양의 준정부호행렬은 행렬의 고유값이 모두 >=0 인 행렬을 말하고, 대칭행렬임을 이용하면 유도할 수 있다! )


2. Jacobian 

로봇공학 전공에게 익숙한 jacobian이다.

jacobian의 정의는 특정 변수 x가 변할 때, y값은 얼마나 변함 ? 을 편미분으로 표현한 행렬이고 아래와 같다. 

https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant

함수 f가 n->m을 매핑하는 함수로써 변수로 n개의 state를 가지고 , m개의 결과값을 가진다고 생각하면 된다.

n개의 state 각각이 m개의 결과 각각에 어떤 영향을 미치는지를 표현한 행렬이다. 

 

(로봇으로 예를 들면 , 6개 joint 각각의 theta가 Cartesian space에서 end effector의 position ( x, y, z, roll , pitch, raw ) 6개 변수를 어떻게 변화시키는지를 생각해보면 직관적으로 이해가 된다. )

나는 로봇이 무섭다


3. Gaussian

고등학교 때 많이들 배우는 종모양의 그놈이다.  다른 말로는 정규분포이다. 

KF에서 다루는 확률은 가우시안의 평균과 공분산을 활용하여 다룬다 . 차이가 있다면

우리가 고등학교 시절에 배운 아래와 같은 그래프를 가지는 표준정규분포, 가우시안은 앞서 언급한 것처럼 1D 즉 , 스칼라 확률변수를 가지는 가우시안이고 앞으로 다룰 가우시안은 벡터 확률변수의 가우시안이다. 

1D 가우시안
2D 가우시안

상태를 결정론적인 관점에서 어떠한 값이 존재한다고 보는 것이 아닌 확률을 가진 확률변수로써 바라보고 ,

이러한 확률변수가 확률을 가지는 분포를 표현한 확률밀도함수(PDF)를

가우시안 분포 - 정규분포로 가정하여

해당 분포의 대표값인 평균( mean ) , 공분산 (covariance) 으로 해석한다.

* 가우시안의 확률밀도함수는 평균(mean)을 중심으로 퍼져있으며, covariance로 퍼진 크기와 방향을 표현한다.

 

고 생각하면 될 듯하다.

 


이렇게 g선생이 말하주는 EKF를 공부하기 위한 사전지식들을 정리해보았습니다. 알고 있었지만 가물가물한 내용도 있었는데 다시 보니 기분이 좋네요. 그럼 다음 포스팅에 본격적인 EKF 리뷰를 해보도록 하겠습니다.

행복하세요

오류 , 수정사항 지적 환영합니다 ~

'robotics' 카테고리의 다른 글

PnP : Perspective-n-Point  (1) 2026.02.27
EKF  (0) 2026.01.28
EKF - Kalman filter  (0) 2026.01.27

지난번 Attention is all you need 를 리뷰한 것에 이어 , vision에서 transformer가 성공적으로 적용된 모델인

ViT 논문에 대해서 리뷰해보겠습니다.

 

논문 arxiv link

https://arxiv.org/abs/2010.11929


ABSTRACT

- Transformer가 자연어 처리 분야에서 성공을 겪은 것과 달리 computer vision 분야에서 이의 활용은 제한되어 왔다.

- 기존 vision 연구에서 attention은 CNN과 결합되어 사용되거나, CNN 전체 구조는 유지한체로 특정 요소를 대체하는 방식으로 활용되어 왔다.

- 위 논문에서는 CNN의 전체 구조 유지가 필요 없이, 이미지 patches들의 sequence에 대해 순수 transformer를 적용한 것이 이미지 분류에 있어서 잘 작동함을 보여주려 한다.

- 큰 사이즈의 dataset에 대해 pretrain하고, 기존 recognition benchmark들에 적용했을 때 이는 기존 CNN의 SOTA 성능에 맞먹는 성능을 보이면서, 학습에 있어서 더 적은 컴퓨팅 리소스를 필요로 했다.

 

INTRODUCTION

- Transforemer(Self-attention based architecture)는 NLP분야에서 거대 데이터에 대해 pre-train되고 , 작은 데이터셋에 대해 fine-tune하여 사용하는 방식으로 사용된다.

- Transforemer의 계산 효율성은 모델의 사이즈와 데이터셋이 커져도, 성능을 지속적으로 향상시키는데 도움을 준다.

- 이러한 자연어 분야에서 성공을 거둔 Transformer를 최대한 작은 수정을 통해 vision에 적용시키고자 한다.

 

이미지를 patch들로 쪼게고 해당 patch들의 선형 임베딩 seq이 transformer의 input으로 들어간다.

이미지 패치들은 NLP에서의 token(word)와 같이 다루어진다.

 

해당 방법을 ImageNet같은 midsize 데이터셋으로 학습시키면 , 모델의 성능은 Resnet에 못미치는 정도이다..

: Transformer가 CNN에 내제된 inductive bias ( translation equivariance , locality ) 를 가지지 못한다 

-> 불충분한 데이터에서 Transformer는 잘 작동하지 않는다.

 

그러나, 충분히 큰 데이터셋으로 학습키면 학습이 inductive bias를 능가한다.

우리의 모델 Vit는 충분히 큰 데이터로 pre-train시키고 fewer datapoint 의 task로 transferred (fine-tune)했을 때 이전 SOTA 모델들의 벤치마크 성능을 압도했다.

 

* CNN의 inductive bias

 

locality : output이 input의 국소적 이웃에 의존 - ( kernel로 인한 convolution 연산 의존 )

픽셀 간의 거리가 멀면 서로의 연관성이 낫다고 가정

 

Translation Invariace :

CNN은 동일한 kernel이 이미지 전체를 이동하며 계산

> 입력의 위치가 변하여도 불력 feature map의 활성화도 동일하게 변한다

입력의 위치가 변하여도, 출력 결과 (class)는 변하지 않음 

 

METHOD

Fig1

 

- patch embedding

1. H * W * C 차원의 입력을 가로세로 P인 패치 N개로 자른다 ... H*W*C > N*(P^2 * C)

2. transformer는 d사이즈의 벡터를 입력으로 사용 , D dimension로 trainable한 Linear projection E를 진행 (equ 1)

이러한 patch를 Linear projection 한 것을 patch embeddings 라고 한다.

 

- position embedding

patch의 position 정보를 넣기 위해 position embedding 을 추가함 (equ 1)

해당 논문에서는 2D position embedding에서 유의미산 성능 이점을 찾지 못했기에

최종적으로 stradard learnable 1D position embedding를 사용 , 이러한 position embedding은 encoder의 input으로 들어감

 

- CLS token

* BERT의 [class] token과 같은 맥락으로 학습 가능한 embedding 한개를 임베딩 시퀀스 앞에 추가 Xclass = z0

Transformer encoder를 통과한 뒤, 해당 토큰에 해당하는 z를 이미지 representation y로 사용한다.

 

pre-train과 fine-tunning에서 각각 classification head가 해당 토큰의 encoder 결과에 붙는다 (MLP가 붙는다는 말)

논문에서는 pre-train에서 1개의 hidden layer MLP를 , fine-tuning 에서는 1개의 linear layer를 사용한다.

 

 

- layer nomalization

transformer encoder는 MSA(multi head attention)과 MLP 블록으로 이루어져있다. 

layer nomalization과 residual connection이 매 블록 후에 적용이 된다.

또한, MLP는 GELU로 비선형성을 가지며 2개의 layer를 가진다..

 


 

method - inductive bias

CNN에서는 locality - two dimensional neighborhood structure와 translation equivariance라는 구조적 가정이 들어가 있으며, 이러한 inductive bias가 전체 모델의 layer에 걸쳐 반영되어 있다.

 

그러나 Vit는 오직 MLP layer만이 이러한 inductive bias를 가지며 (self-attention은 global하게 적용됨)

 

two dimensional neighborhood structure는 모델의 시작 단계에서 이미지를 patch로 분할할떄와 ,

fine-tune할때 서로 다른 이미지의 해상도에 맞춰 position embedding을 조정할 떄에만 제한적으로 사용된다.

 

그러나 초기 시점의 position embedding은 2차원 정보를 아예 담고 있지 않으며 모든 공간적 관계는 처음부터 학습되어야 한다.

 

method - Hybrid Architecture

raw한 image를 patch의 input으로 넣는 것이 아닌 입력 seq를 CNN의 feature map을 input으로 구성하기도 한다. 

CNN으로부터 얻어진 feature map에서 추출된 patch들을 대상으로 patch embedding projection을 진행한다 - 

 

또한, 특별한 case로 patch의 spatial size를 1x1로 설정하여 가지게 시작하는 경우도 있다. 

이 경우 입력 seq는 feature map의 단순히 펼친 뒤, 이를 Transforemr 차원으로 투영하는 방법으로 얻어진다.

 

method - FineTunning and higher resolution

보통 Vit는 큰 데이터셋에서 pre-train하고, 작은 데이터셋에서 fine-tunning하는 방법을 사용한다.

해당 과정에서 기존 prediction head는 제거하고 , 새로운 fine-tunning class 수에 맞는 초기화된 feedforward layer를 달아준다.

 

보통 fine - tunning에서는 pre-train보다 높은 해상도의 이미지를 쓰는 것이 좋은데, 

이미지의 해상도가 높아지고 기존의 patch size는 같게 쓰는 것은 결과적으로 patch의 갯수가 많아짐 즉, seq의 길이가 길어짐을 의미한다.

 

이렇게 되면 기존의 pre-train 된 position vector가 무의미해지는 결과가 나오기에 , 사전학습된 position embedding을 2D 보간하는 방식으로 이전 pre-train에서의 position embedding의 효과를 다시 적용시킨다.

 

* 해당 해상도 조절과 patch extraction (2d 보간)이 vit에 inductive bias를 임의로 주입한 얼마 안되는 부분임을 주목 !

 

EXPERFIMENT

 

 

 


Vit 논문을 읽고 리뷰해보았습니다.

논문에서 언급된 CNN의 inductive bias와 관련하여 , vit가 large dataset에서 충분히 학습되어야 하는 이유를 인상깊게 읽었습니다.

추가로 모델 구조에서 사용된 , LN GELU에 대한 이해를 추가로 하고 모델코드를 분석하는 시간을 가지려고 합니다. 

+ Recent posts