Single Object Tracking

고영민·2023년 3월 4일
0

다중 객체 추적

목록 보기
2/3

해당 포스트는 https://www.youtube.com/@multipleobjecttracking1226중 "Part 2: Single Object Tracking in clutter"의 내용을 기반으로 작성됨.

1. 개요

여기서는 clutter가 발생하는 상황에서의 single object tracking(SOT)에 대한 내용을 소개한다. SOT는 MOT와는 달리 오직 하나의 객체만 등장하는 상황에서의 tracking 방법이며, 이로 인해 MOT 보다는 문제 설정을 간단하게 할 수 있다. 예를 들어, 객체의 숫자를 추정하거나 객체가 FOV를 들락날락하는 문제를 신경쓰지 않아도 되며, data association 또한 비교적 간단해진다. SOT에서 주로 신경써야하는 부분은 다음과 같다.

  • 시간에 따른 state의 변화
  • Noisy한 측정치
  • Detection의 실패
  • clutter의 검출
  • Data association

여기서 clutter란 불필요한 에코 같은 것으로 예를 들어 레이더에서 관심 객체가 아닌 지면, 바다, 임의의 물체 등에 의해 마치 객체처럼 검출되는 부분을 의미한다. 따라서 실제 관심 객체에 의한 detection 결과와 clutter들이 섞여있을 경우(둘은 겉보기로 구분이 되지 않음) 어떻게 object의 위치를 추정하고 추적할 수 있을 지에 대한 내용이 소개된다.

2. 확률분포(Bernoulli, Binomial, Poisson)

뒤에서 이어질 내용에서 Bernoulli Binomial, Poisson 분포를 사용하여 센서의 측정 모델 등을 표현한다. 먼저 베르누이(Bernoulli) 분포의 경우 동전 던지기와 같이 binary로 확률변수 XXX=0X=0 또는 X=1X=1의 결과만 특정 확률(μ\mu)에 따라 나오는 분포이다. 따라서 다음과 같이 μ\mu라는 모수(parameter)로 정의된다.

Bern(X;μ)={μ                          if  x=11μ              if  x=0Bern(X;\mu) = \begin{cases} \mu \;\;\;\;\;\;\;\;\;\;\;\;\; if \; x=1 \\ 1-\mu \;\;\;\;\;\;\; if \; x=0 \end{cases}

이항(Binomial) 분포의 경우 위와 같은 베르누이 시행을 N번 수행했을 때, 성공한 횟수를 확률 변수 XX로 두어 몇 번 성공할 지에 대한 확률 값을 얻을 수 있는 분포이다. 따라서 다음과 같이 N과 μ\mu를 모수로 두어 정의할 수 있다.

Bin(X;N,μ)=(NX)μX(1μ)NxBin(X;N,\mu)= \begin{pmatrix} N\\ X \end{pmatrix} \mu^X (1-\mu)^{N-x}

푸아송(Poisson)분포는 발생 확률이 매우 적은 이항 분포 시행을 매우 많이 수행했을 때의 분포이다. 정해진 시간(또는 공간)에서 어떤 사건이 일어날 횟수에 대한 기댓값을 λ\lambda로 두었을 때 해당 사건이 nn회 일어날 확률을 얻을 수 있으며, 다음과 같이 λ\lambda를 사용하여 정의할 수 있다.

Po(n;λ)=λneλn!Po(n;\lambda) = \frac{\lambda^n e^{-\lambda}}{n!}

3. SOT with known associations

우선 clutter가 없고 object만 존재하는 간단한 환경에서의 SOT를 수행한다. SOT의 목표는 시간에 따라 연속적으로 취득되는 센서 데이터를 통해 관심 객체의 위치를 예측 및 추정하는 것으로, 이를 위하여 앞선 글에서 설명했던 filter를 사용한다. 간단한 Bayes filter는 다음과 같다.

Prediction:p(xkz1:k1)=p(xkxk1)p(xk1Z1:k1)dxk1Prediction : p(x_k | z_{1:k-1})= \int{p(x_k|x_{k-1})p(x_{k-1}|Z_{1:k-1})}dx_{k-1}
Update:p(xkZ1:k)=p(Zkxk)p(xkZ1:k1)p(ZkZk1)p(Zkxk)p(xkZ1:k1)Update : p(x_k | Z_{1:k})= \frac{p(Z_k|x_{k})p(x_{k}|Z_{1:k-1})}{p(Z_k|Z_{k-1})} \propto p(Z_k|x_{k})p(x_{k}|Z_{1:k-1})

먼저 prediction 과정을 살펴보면, 오른쪽 항에서 p(xk1Z1:k1)p(x_{k-1}|Z_{1:k-1})는 이전 step의 결과이므로 이미 가지고 있고, p(xkxk1)p(x_k|x_{k-1})만 구하면 된다. p(xkxk1)p(x_k|x_{k-1})는 객체의 motion model이라고 하여 객체가 k1k-1의 시점에서 xk1x_{k-1}에 있었을 때, 다음 번 k번째 시점에서 어디에 있을 지에 대한 것을 모델링 한 것이다. 이러한 motion model은 보통 π(xkxk1)\pi(x_k|x_{k-1})로 표현하며, linear 모델에서는 다음과 같이 Gaussian 분포로 모델링하는 경우가 많다.

xk=fk1(xk1)+qk1,                  qk1N(0,Qk1)x_k = f_{k-1}(x_{k-1}) + q_{k-1}, \;\;\;\;\;\;\;\;\; q_{k-1} \sim N(0, Q_{k-1})
such  that            π(xkxk1)=N(xk;fk1(xk1),Qk1)such \; that \;\;\;\;\;\; \pi(x_k|x_{k-1}) = N(x_k; f_{k-1}(x_{k-1}), Q_{k-1})

따라서 prediction 과정을 motion 모델을 대입하는 것으로 수행되며, 자세한 계산은 motion model에서 사용되는 식과 확률 분포에 따라 달라지지만 위와 같이 Gaussian 분포를 사용한 linear 모델을 사용할 경우에는 Kalman 필터의 계산을 참고 할 수 있다(링크).

다음으로 update 과정을 살펴보면, 분모의 p(ZkZk1)p(Z_k|Z_{k-1})는 우리가 관심있어하는 변수인 xx와 관련이 없는 식이므로 normalize term으로 둘 수 있다. 또한 p(xkZ1:k1)p(x_{k}|Z_{1:k-1})는 prediction 단계의 결과이고, 따라서 p(Zkxk)p(Z_k|x_{k})만 구하면 된다. 이는 객체의 위치가 주어졌을 때 객체에 측정되는 measurement matrix를 모델링한 것이다. 예를 들어 객체가 FOV 안에 있어도 센서의 해상도 등의 문제로 검출이 안될 수도 있으며, 객체가 없더라도 잘못된 검출이 발생할 수도 있고, 노이즈로 인해 정확한 위치보다 약간 다른 곳을 출력할 수도 있다. 지금은 clutter가 없는 환경을 가정하므로 ZZ대신 OO를 써서 표현한다.

Ok={[  ]              if  object  is  undetected,ok              if  object  is  detected.O_k = \begin{cases} [\;] \;\;\;\;\;\;\; if \; object \; is \; undetected, \\ o_k \;\;\;\;\;\;\; if \; object \; is \; detected. \end{cases}

만약 객체가 검출되지 않았다면 measurement matrix OkO_k에는 아무 값도 없을 것이고, 검출되었다면 OkO_k는 센서가 측정한 객체의 위치 oko_k가 들어있을 것이다. 단일 객체 추적을 가정하고 있으므로 Ok\mid O_k \mid는 0 또는 1이며, 따라서 Ok\mid O_k \mid를 다음과 같이 검출될 확률 PD(xk)P^D(x_k)를 사용하여 베르누이 분포로 표현할 수 있다.

Ok={1              with  probability  PD(xk)0              with  probability  1PD(xk)|O_k| = \begin{cases} 1 \;\;\;\;\;\;\; with \; probability \; P^D(x_k) \\ 0 \;\;\;\;\;\;\; with \; probability \; 1-P^D(x_k) \end{cases}

이를 이용하면 다음과 같이 쓸 수 있다.

p(Okxk)={1PD(xk)                              with  probability  PD(xk)PD(xk)gk(okxk)              with  probability  1PD(xk)p(O_k|x_{k}) = \begin{cases} 1-P^D(x_k) \;\;\;\;\;\;\;\;\;\;\;\;\;\;\; with \; probability \; P^D(x_k) \\ P^D(x_k)g_k(o_k|x_{k}) \;\;\;\;\;\;\; with \; probability \; 1-P^D(x_k) \end{cases}

여기서 gk(okxk)g_k(o_k|x_{k})는 센서의 특성을 나타내는 식으로 센서의 measurement model이라고 하며, 객체가 xkx_{k}에 있을 때, 센서가 반환하는 객체의 위치(측정값) oko_k에 대한 확률이다. 위에서 대문자 OO를 사용하는 이유는 OkO_k가 측정값 oko_k들의 집합이기 때문이며, MOT를 하거나 clutter가 존재하는 경우에는 1개가 아닌 여러 개의 값이 들어가게 된다.

Prediction 단계와 마찬가지로 measurement model은 Gaussian을 이용한 linear 식으로 표현될 수 있으며, 이 경우 또한 Kalman fliter와 같이 계산된다.

4. Clutter Model

이제 clutter가 존재한다고 가정하여 SOT를 수행하기 위해 clutter에 대한 측정값 모델링을 수행한다. clutter를 포함한 measurement matrix는 다음과 같이 쓸 수 있다.

Zk=Π(Ok,Ck)Z_k = \Pi (O_k, C_k)

여기서 CkC_k는 clutter에 대한 측정값 ckc_k들이 들어있는 matrix이며, Π\Pi는 column vector를 무작위로 섞었다는 뜻이고, 즉, Ok,CkO_k, C_k가 섞여서 어떤 것이 관심 객체에 대한 측정값인지 알 수 없다는 의미이다.


Figure 1. 간단한 센서 grid

보통의 센서는 특정한 FOV와 해상도를 가지고 있으며, 해상도에 따라 최대로 검출할 수 있는 객체의 수나 정확도가 달라진다. 예를 들어 Fig 1에서는 2x2 (=V=V)의 FOV를 가지고 있고, 4개(=j=j)의 cell을 통해 측정하여 최대 4개의 값만이 출력된다.

따라서 clutter Ck=Π(Ck(1),,Ck(j))C_k = \Pi (C^{(1)}_k, \cdots, C^{(j)}_k)로 쓸 수 있고, Ck(i)C^{(i)}_kii번째 cell에서 관측된 clutter이다. 각 Ck(1),,Ck(j)C^{(1)}_k, \cdots, C^{(j)}_k는 독립적이라고 가정하고, 단위 면적 당 검출되는 clutter의 숫자에 대한 기대값을 λ\lambda라고 할 때, Ck(i)\mid C^{(i)}_k \mid는 확률 λV/j\lambda V/j를 가지는 베르누이 분포를 따른다. 그리고 하나의 셀에서 객체가 검출되었을 때, 그 위치에 대한 측정값은 uniform distribution을 따른다.

하지만 여기서는 센서 해상도에 제한을 두지 않으며, 이는 jj가 매우 크다는 의미이다. 따라서 Ck\mid C_k \midE[Ck]=VλE[\mid C_k \mid] = V\lambda로 정의되는 푸아송 분포를 따르며, CkC_k는 Poisson point process(PPP)를 통해 결정된다.


Figure 2. Poisson point process(PPP)를 통한 측정값 샘플링

이때 CkC_k 특성은 다음과 같다. Clutter의 갯수는 mkcPo(λV)m^c_k \sim Po(\lambda V)와 같이 푸아송 분포를 따르고, CkC_k에 들어있는 관측값들 ck1,,ckmkcc^1_k, \cdots, c^{m^c_k}_k들은 i.i.d.이고 ckiunif(V)c^i_k \sim unif(V)이다.

보통 PPP는 intensity function λc(c)0\lambda_c(c) \ge 0 또는 λˉc=λc(c)dc\bar{\lambda}_c = \int \lambda_c(c) dc로 표현되는 rate와 fc(c)=λc(c)λˉcf_c(c) = \frac{\lambda_c(c)}{\bar{\lambda}_c}로 표현되는 spatial pdf로 parameterize된다. 여기서 두 parameterize 방식 사이에 λc(c)=λˉcfc(c)\lambda_c(c) = \bar{\lambda}_c f_c(c)의 관계가 있음을 알 수 있다. 각 파라미터의 의미는 fig 2에서 알 수 있다.

이제 이러한 clutter 모델을 사용하여 p(Zkxk)p(Z_k|x_{k})를 찾고 clutter가 있는 환경에서의 update 과정을 수행할 수 있다. 이때 문제가 되는 점은 ZkZ_k의 길이가 무작위하고, 어느 값이 관심 객체에 의한 검출값인지 모른다는 것이다. 이를 해결하기 위하여 data association 과정이 추가되며, 이는 다음과 같이 표현되어 어떤 측정값이 관심 객체에 대한 것인지 표시한다.

θ={i>0              if  zi  is  an  object  detection,0                          if  object  is  undetected.\theta = \begin{cases} i \gt 0 \;\;\;\;\;\;\; if \; z^i \; is \; an \; object \; detection, \\ 0 \;\;\;\;\;\;\;\;\;\;\;\;\; if \; object \; is \; undetected. \end{cases}

그리고 p(Zx)p(Z|x)를 계산하기 위하여 다음과 같이 추가적인 변수 m,θm, \theta를 이용하여 식을 변형한다.

p(Zx)=p(Z,mx)=θ=0mp(Z,m,θx)=θ=0mp(Zm,θ,x)p(θ,mx)\begin{aligned} p(Z|x) & = p(Z,m|x) \\ & = \sum^m_{\theta = 0}{p(Z,m, \theta|x)} \\ & = \sum^m_{\theta = 0}{p(Z|m, \theta, x)p(\theta, m|x)} \end{aligned}

여기서 첫번째 줄에서는 관측치의 갯수 mm이 추가되었는데 이는 이미 ZZ에 포함된 정보이므로 확률값에 변화를 주지 않는다. 그리고 두번째 줄에서는 data association θ\theta가 추가되었고 전체 확률 정리가 사용되었으며, 세번째 줄에서는 결합확률과 조건부확률의 성질이 사용되었다. 위와 같이 주어진 식을 p(Zm,θ,x)p(Z|m, \theta, x)p(θ,mx)p(\theta, m|x)로 표현하는 이유는 두 식이 closed form으로 표현될 수 있기 때문이다.

해당 closed form을 구하기 위하여 먼저 두가지 경우를 각각 생각한다. 먼저 θ=0\theta=0인 경우이며, 이는 object가 검출되지 않고 m개의 clutter만 검출된 경우이다. Fig 2를 보면 각 clutter, ziz^i의 측정값은 fcf_c에 따라 sampling 됨을 알 수 있으며, 따라서 ZZ에 대한 확률을 다음과 같이 각 ziz^i에 대한 확률의 곱을 표현할 수 있다.

p(Zm,θ,x)=i=1mfc(zi)p(Z|m, \theta, x) = \prod^m_{i=1}f_c(z^i)

그리고 p(θ,mx)p(\theta, m|x)는 object가 검출되지 않고, mm은 푸아송 분포를 따른다는 점에서 다음과 같이 쓸 수 있다.

p(θ,mx)=(1PD(x))Po(m;λˉc)p(\theta, m|x) = (1-P^D(x))Po(m;\bar{\lambda}_c)

이 두 식을 합치면 다음과 같다.

p(Z,m,θx)=(1PD(x))Po(m;λˉc)i=1mfc(zi)=(1PD(x))exp(λˉc)λˉcmm!i=1mλc(zi)λˉc=(1PD(x))exp(λˉc)m!i=1mλc(zi)\begin{aligned} p(Z,m, \theta|x) & = (1-P^D(x))Po(m;\bar{\lambda}_c)\prod^m_{i=1}f_c(z^i) \\ & = (1-P^D(x)) \frac{exp(-\bar{\lambda}_c)\bar{\lambda}_c^m}{m!} \prod^m_{i=1}{\frac{\lambda_c(z^i)}{\bar{\lambda}_c}} \\ & = (1-P^D(x)) \frac{exp(-\bar{\lambda}_c)}{m!} \prod^m_{i=1}{\lambda_c(z^i)} \end{aligned}

다음으로 θ0\theta \ne 0인 경우이며, ziz^i중에서 i=θi=\theta만 관심객체에 의한 것이고 나머지는 clutter이므로 다음과 같이 쓸 수 있다.

p(Zm,θ,x)=gk(zθx)i=1,  iθmfc(zi)=gk(zθx)i=1mfc(zi)fc(zθ)p(Z|m, \theta, x) = g_k(z^\theta|x)\prod^m_{i=1,\;i\ne\theta}f_c(z^i) = g_k(z^\theta|x) \frac{\prod^m_{i=1}f_c(z^i)}{f_c(z^\theta)}
p(θ,mx)=PD(x)Po(m1;λˉc)1mp(\theta, m|x) = P^D(x)Po(m-1;\bar{\lambda}_c)\frac{1}{m}

이때, p(θ,mx)p(\theta, m|x)에서 mm으로 나누어주는 이유는 θ\theta가 가질수 있는 수가 mm가지이기 때문이다.

위의 두 식을 합치면 다음과 같다.

p(Z,m,θx)=PD(x)Po(m1;λˉc)1mgk(zθx)fc(zθ)i=1mfc(zi)=PD(x)exp(λˉc)λˉcm1(m1)!1mλˉcgk(zθx)λc(zθ)i=1mλc(zi)λˉc=PD(x)gk(zθx)λc(zθ)exp(λˉc)m!i=1mλc(zi)\begin{aligned} p(Z,m, \theta|x) & = P^D(x)Po(m-1;\bar{\lambda}_c)\frac{1}{m}\frac{g_k(z^\theta|x)}{f_c(z^\theta)}\prod^m_{i=1}f_c(z^i) \\ & = P^D(x) \frac{exp(-\bar{\lambda}_c)\bar{\lambda}_c^{m-1}}{(m-1)!} \frac{1}{m}\frac{\bar{\lambda}_cg_k(z^\theta|x)}{\lambda_c(z^\theta)} \prod^m_{i=1}{\frac{\lambda_c(z^i)}{\bar{\lambda}_c}} \\ & = P^D(x) \frac{g_k(z^\theta|x)}{\lambda_c(z^\theta)} \frac{exp(-\bar{\lambda}_c)}{m!} \prod^m_{i=1}{\lambda_c(z^i)} \end{aligned}

두 결과를 사용하여 다음과 같이 쓸 수 있다.

p(Zx)=θ=0mp(Z,m,θx)=(1PD(x))exp(λˉc)m!i=1mλc(zi)+θ=1mPD(x)gk(zθx)λc(zθ)exp(λˉc)m!i=1mλc(zi)=[(1PD(x))+θ=1mPD(x)gk(zθx)λc(zθ)]exp(λˉc)m!i=1mλc(zi)\begin{aligned} p(Z|x) & = \sum^m_{\theta = 0}{p(Z,m, \theta|x)} \\ & = (1-P^D(x)) \frac{exp(-\bar{\lambda}_c)}{m!} \prod^m_{i=1}{\lambda_c(z^i)} + \sum^m_{\theta = 1}{P^D(x) \frac{g_k(z^\theta|x)}{\lambda_c(z^\theta)} \frac{exp(-\bar{\lambda}_c)}{m!} \prod^m_{i=1}{\lambda_c(z^i)}} \\ & = \left[ (1-P^D(x)) + \sum^m_{\theta = 1}{P^D(x) \frac{g_k(z^\theta|x)}{\lambda_c(z^\theta)}} \right] \frac{exp(-\bar{\lambda}_c)}{m!} \prod^m_{i=1}{\lambda_c(z^i)} \end{aligned}

이제 이를 이용하여 update를 수행할 수 있고, 만약 ZZ가 비어있다면(측정치가 하나도 없을 때) update 과정은 생략한다.

5. Data Association Hypotheses


Figure 3. Data association에 따른 tracking hypotheses, 원이 관심 객체이며, 별은 clutter이지만, 컴퓨터는 어떤 것이 객체인지 모르기 때문에 모든 경우의 수를 계산해보아야 한다.

이제까지 내용을 바탕으로 SOT를 수행해보자. 위 그림처럼 컴퓨터는 어떤 것이 객체인지 모르기 때문에 모든 경우의 수를 계산해보아야 하고, 따라서 data association에 의한 hypotheses가 posterior p(xkZ1:k)p(x_k|Z_{1:k})를 계산하기 위해 고려되어야 한다. 전체 확률의 정리를 이용하면 다음과 같다.

p(xkZ1:k)=θ1:kp(xk,θ1:kZ1:k)=θ1:kp(xkZ1:k,θ1:k)Pr[θ1:kZ1:k]p(x_k|Z_{1:k}) = \sum_{\theta_{1:k}}{p(x_k, \theta_{1:k}|Z_{1:k}) } = \sum_{\theta_{1:k}}{p(x_k|Z_{1:k},\theta_{1:k})Pr[\theta_{1:k}|Z_{1:k}] }

즉, posterior p(xkZ1:k)p(x_k|Z_{1:k})는 여러 hypotheses에 의해 정의되는 분포가 중첩되어 있는 것으로, 우선 이를 일반화하여 계산해본다. 어떤 확률분포 p(x)p(x)는 여러 θ\theta에 의해 정의되는 mθ(x)m_\theta(x)의 중첩으로 다음과 같이 표현할 수 있다.

p(x)m(x)=θ=0mmθ(x)p(x) \propto m(x) = \sum^m_{\theta=0}{m_\theta(x)}

이때, 각 mi(x)m_i(x)0<mi(x)dx<0 \lt \int{m_i(x)dx} \lt \infin를 만족한다. 이때 어떤 상수 cc를 도입하면 p(x)m(x)p(x)=cm(x)p(x) \propto m(x) \rightarrow p(x) = cm(x)로 쓸 수 있고, p(x)p(x)는 확률분포이므로 다음과 같이 쓸 수 있다.

1=p(x)dx=cm(x)dx1 = \int p(x) dx = c \int m(x) dx
c=1m(x)dx\rightarrow c = \frac{1}{\int m(x) dx}
p(x)=m(x)m(x)dx\rightarrow p(x) = \frac{m(x)}{\int m(x') dx'}

여기서 주목해야하는 점은 어떤 함수 m(x)m(x)m(x)dx\int m(x') dx'로 나누었더니 확률 분포 p(x)p(x)가 되도록 normalize 되었다는 점이다. 이러한 성질을 사용하여, w~θ=mθ(x)dx\tilde{w}_\theta = \int m_\theta(x) dx를 사용하면 다음과 같이 각 mθm_\theta를 확률분포로 표현할 수 있다.

mθ(x)=w~θpθ(x)m_\theta(x) = \tilde{w}_\theta p_\theta(x)

이를 이용하여 다음과 같이 쓸 수 있다.

p(x)m(x)=θ=0mmθ(x)=θ=0mw~θpθ(x)p(x) \propto m(x) = \sum^m_{\theta=0}{m_\theta(x)} = \sum^m_{\theta=0}{\tilde{w}_\theta p_\theta(x)}

이때, m(x)dx=θ=0mmθ(x)dx=θ=0mw~θ\int m(x) dx = \sum^{m}_{\theta=0} \int m_\theta(x) dx = \sum^{m}_{\theta=0} \tilde{w}_\theta 임을 사용하면 다음과 같이 쓸 수 있고, 이는 어떤 확률 분포를 다른 여러 확률 분포의 weighted sum으로 표현할 수 있다는 것을 의미한다.

p(x)=m(x)m(x)dx=θ=0mw~θpθ(x)i=0mw~i=θ=0mwθpθ(x)m(x)p(x) = \frac{m(x)}{\int m(x') dx'} = \frac{\sum^m_{\theta=0}{\tilde{w}_\theta p_\theta(x)}}{\sum^{m}_{i=0} \tilde{w}_i} = \sum^m_{\theta=0}{w_\theta p_\theta(x)} \propto m(x)
wθ=w~θi=0mw~im(x)dxw_\theta = \frac{\tilde{w}_\theta}{\sum^{m}_{i=0} \tilde{w}_i} \propto \int m(x) dx

이제 posterior p(xZ)p(x|Z)를 위와 같이 여러 확률 분포의 합으로 표현해보자.

p(xZ)p(x)p(Zx)=θ=0mp(x)p(Z,m,θx)=θ=0mmθ(x)\begin{aligned} p(x|Z) & \propto p(x)p(Z|x) \\ & = \sum^m_{\theta=0}p(x)p(Z,m,\theta|x) \\ & = \sum^m_{\theta=0}m_\theta(x) \end{aligned}

w~θ=mθ(x)dx=p(Z,m,θ)=p(Z,θ)\tilde{w}_\theta = \int m_\theta(x) dx = p(Z,m,\theta) = p(Z,\theta)이고 wθ=w~θ/i=0mw~i=p(Z,θ)/p(Z)=p(θZ)w_\theta = \tilde{w}_\theta /\sum^{m}_{i=0} \tilde{w}_i = p(Z,\theta)/p(Z) = p(\theta|Z)이다. 비슷한 방법으로 pθ(x)p_\theta(x)를 구하면 pθ(x)=p(xθ,Z)p_\theta(x)=p(x|\theta, Z)가 된다.

이제 앞에서 구했던 p(Zx)p(Z|x) 모델을 적용해 update를 수행해보면 다음과 같다. 이때, 우리는 mθ(x)m_\theta(x)를 정의하는 것이 목표이므로 xx가 포함되지 않은 term은 상수로 생각할 수 있다. 그리고 앞에서

p(xZ)p(x)p(Zx)p(x)[(1PD(x))+θ=1mPD(x)gk(zθx)λc(zθ)]=m0(x)+m1(x)++mm(x)\begin{aligned} p(x|Z) & \propto p(x)p(Z|x) \\ & \propto p(x)\left[ (1-P^D(x)) + \sum^m_{\theta = 1}{P^D(x) \frac{g_k(z^\theta|x)}{\lambda_c(z^\theta)}} \right] \\ & = m_0(x) + m_1(x) + \cdots + m_m(x) \end{aligned}

θ=0\theta = 0일 경우, w~0\tilde{w}_0p0(x)p_0(x)는 다음과 같이 정의된다.

{w~0=p(x)(1PD(x))dxp0(x)=p(x)(1PD(x))p(x)(1PD(x))dx\begin{cases} \tilde{w}_0 = \int p(x)(1-P^D(x)) dx \\ p_0(x) = \frac{p(x)(1-P^D(x))}{\int p(x')(1-P^D(x')) dx'} \end{cases}

θ0\theta \ne 0일 경우, w~θ\tilde{w}_\thetapθ(x)p_\theta(x)는 다음과 같이 정의된다.

{w~θ=1λc(zθ)p(x)PD(x)g(zθx)dxpθ(x)=p(x)PD(x)g(zθx)p(x)PD(x)g(zθx)dx\begin{cases} \tilde{w}_\theta = \frac{1}{\lambda_c(z^\theta)}\int p(x)P^D(x)g(z^\theta|x) dx \\ p_\theta(x) = \frac{p(x)P^D(x)g(z^\theta|x)}{\int p(x')P^D(x')g(z^\theta|x') dx'} \end{cases}

그리고 wθw~θw_\theta \propto \tilde{w}_\theta에서 wθw_\theta를 구할 수 있다.

6. Conceptual Solution

앞에서는 여러 개의 hypotheses들을 계산하여 posterior를 update하는 방법을 살펴보았다. 여기서는 time step kk까지 추가하여 완전한 형태의 prediction, update step을 계산해본다. 이때, 계산을 간소화하기 위하여 몇가지 가정을 한다. Prior density p(x)p(x)와 motion, measurement model는 linear Gassian으로 주어지고, 검출 확률 PDP^D는 특정 상수로 주어진다. 우리는 이전 step의 update 결과를 다음과 같이 쓸 수 있다.

p(xk1Z1:k1)=θ1:k1wθ1:k1pk1k1θ1:k1(xk1)wθ1:k1=Pr[θ1:k1Z1:k1]pk1k1θ1:k1(xk1)=p(xk1θ1:k1,Z1:k1)\begin{aligned} p(x_{k-1}|Z_{1:k-1}) & = \sum_{\theta_{1:k-1}}{w^{\theta_{1:k-1}}p^{\theta_{1:k-1}}_{k-1|k-1}(x_{k-1})} \\ w^{\theta_{1:k-1}} & = Pr[\theta_{1:k-1}|Z_{1:k-1}] \\ p^{\theta_{1:k-1}}_{k-1|k-1}(x_{k-1}) & = p(x_{k-1}|\theta_{1:k-1}, Z_{1:k-1}) \end{aligned}

여기서 θ1:k=(θ1,,θk)\theta_{1:k} = (\theta_{1}, \cdots, \theta_{k})는 data association hypotheses의 나열이며, summation 기호는 다음을 의미한다.

θ1:k=θ1=0m1θk=0mk\sum_{\theta_{1:k}} = \sum^{m_1}_{\theta_{1}=0}\cdots\sum^{m_k}_{\theta_{k}=0}

이제 prediction step을 살펴보자.

p(xkZ1:k1)=p(xk1Z1:k1)p(xkxk1)dxk1=θ1:k1wθ1:k1pk1k1θ1:k1(xk1)p(xkxk1)dxk1=θ1:k1wθ1:k1pkk1θ1:k1(xk)\begin{aligned} p(x_{k}|Z_{1:k-1}) & = \int{p(x_{k-1}|Z_{1:k-1})p(x_{k}|x_{k-1}) d x_{k-1}} \\ & = \sum_{\theta_{1:k-1}}{w^{\theta_{1:k-1}} \int{p^{\theta_{1:k-1}}_{k-1|k-1}(x_{k-1})p(x_{k}|x_{k-1}) d x_{k-1}} } \\ & = \sum_{\theta_{1:k-1}}{w^{\theta_{1:k-1}} p^{\theta_{1:k-1}}_{k|k-1}(x_{k}) } \end{aligned}

위에서 3번째 줄에서는 pk1k1θ1:k1(xk1)p^{\theta_{1:k-1}}_{k-1|k-1}(x_{k-1})의 정의식을 대입해보면 알 수 있으며, prediction 단계가 지나더라도 weight가 변화하지 않았고, 각 hypothesis마다 prediction이 수행된 형태라는 것을 알 수 있다. 여기서 각 모델들이 linear Gassian이라면 Kalman filter를 사용하여 실제 계산을 수행할 수 있다.

xk=Fk1xk1+qk1,    qk1N(0,Qk1)x_k = F_{k-1}x_{k-1} + q_{k-1}, \;\; q_{k-1} \sim N(0,Q_{k-1})로 주어지면 motion model은 π(xkxk1)=N(xk;Fk1xk1,Qk1)\pi(x_k|x_{k-1})=N(x_k;F_{k-1}x_{k-1}, Q_{k-1})이고, 이전 stpe의 식 pk1k1θ1:k1(xk1)p^{\theta_{1:k-1}}_{k-1|k-1}(x_{k-1}) 또한 Gaussian으로 pk1k1θ1:k1(xk1)=N(xk1;x^k1k1θ1:k1,Pk1k1θ1:k1)p^{\theta_{1:k-1}}_{k-1|k-1}(x_{k-1}) = N(x_{k-1};\hat{x}^{\theta_{1:k-1}}_{k-1|k-1}, P^{\theta_{1:k-1}}_{k-1|k-1})와 같이 주어진다면, 위의 2번째 줄에서 행해지는 적분식은 Kalman filter의 과정과 같이 구할 수 있으며, 결과는 다음과 같다.

pkk1θ1:k1(xk)=N(xk;Fk1x^k1k1θ1:k1,Fk1Pk1k1θ1:k1Fk1T+Qk1)p^{\theta_{1:k-1}}_{k|k-1}(x_{k}) = N(x_k; F_{k-1}\hat{x}^{\theta_{1:k-1}}_{k-1|k-1}, F_{k-1}P^{\theta_{1:k-1}}_{k-1|k-1}F^T_{k-1}+Q_{k-1} )

이제 update step을 살펴보자.

p(xkZ1:k)θ1:k1wθ1:k1pkk1θ1:k1(xk)(1PD(xk))+θ1:k1θk=1m1λc(zkθk)wθ1:k1pkk1θ1:k1(xk)PD(xk)gk(zθkxk)\begin{aligned} p(x_{k}|Z_{1:k}) & \propto \sum_{\theta_{1:k-1}}{ w^{\theta_{1:k-1}} p^{\theta_{1:k-1}}_{k|k-1}(x_{k})(1-P^D(x_k))} \\ & + \sum_{\theta_{1:k-1}} \sum^m_{\theta_{k}=1}{\frac{1}{\lambda_c(z^{\theta_k}_k)}}w^{\theta_{1:k-1}}p^{\theta_{1:k-1}}_{k|k-1}(x_{k})P^D(x_k)g_k(z^{\theta_k}|x_k) \end{aligned}

위의 식은 앞에서("5. Data Association Hypotheses") 수행했던 posterior update와 비슷한 과정으로 구할 수 있다(measurement model 도입 및 θ=0\theta=0θ0\theta\ne0의 경우 구분). 여기서 p(xkZ1:k)=θ1:kwθ1:kpkkθ1:k(xk)p(x_{k}|Z_{1:k}) = \sum_{\theta_{1:k}} w^{\theta_{1:k}} p^{\theta_{1:k}}_{k|k}(x_{k})의 형식을 맞추기 위하여 각각을 구해보면 다음과 같다.

θk=0{w~θ1:k=wθ1:k1pkk1θ1:k1(xk)(1PD(xk))dxkpkkθ1:k(xk)pkk1θ1:k1(xk)(1PD(xk))\theta_k =0 \rightarrow \begin{cases} \tilde{w}^{\theta_{1:k}} = w^{\theta_{1:k-1}} \int p^{\theta_{1:k-1}}_{k|k-1}(x_{k}) (1-P^D(x_k)) dx_k\\ p^{\theta_{1:k}}_{k|k}(x_{k}) \propto p^{\theta_{1:k-1}}_{k|k-1}(x_{k}) (1-P^D(x_k)) \end{cases}
θk0{w~θ1:k=wθ1:k1λc(zkθk)pkk1θ1:k1(xk)PD(xk)gk(zθkxk)dxkpkkθ1:k(xk)pkk1θ1:k1(xk)PD(xk)gk(zθkxk)\theta_k \ne 0 \rightarrow \begin{cases} \tilde{w}^{\theta_{1:k}} = \frac{w^{\theta_{1:k-1}}}{\lambda_c(z^{\theta_k}_k)} \int p^{\theta_{1:k-1}}_{k|k-1}(x_{k}) P^D(x_k)g_k(z^{\theta_k}|x_k) dx_k \\ p^{\theta_{1:k}}_{k|k}(x_{k}) \propto p^{\theta_{1:k-1}}_{k|k-1}(x_{k}) P^D(x_k)g_k(z^{\theta_k}|x_k) \end{cases}

여기서 각 모델들이 linear Gassian이라면 Kalman filter를 사용하여 다음과 같이 실제 계산을 수행할 수 있다. pkk1θ1:k1(xk1)=N(xk;μkk1θ1:k1,Pkk1θ1:k1)p^{\theta_{1:k-1}}_{k|k-1}(x_{k-1}) = N(x_{k};\mu^{\theta_{1:k-1}}_{k|k-1}, P^{\theta_{1:k-1}}_{k|k-1}), gk(okxk)=N(ok;Hkxk,Rk)g_k(o_k|x_k) = N(o_k;H_kx_k,R_k)로 주어진다면 다음과 같다(이때, 일반적인 관측치 zz에 대한 measurement model이 아닌 관심 객체 검출에 대한 식 gk(okxk)g_k(o_k|x_k)가 주어지는 이유는 각 data association hypothesis가 주어지고 해당 hypothesis 객체라고 생각한 후 계산하여 모든 경우를 합하기 때문이다).

pkkθ1:k(xk)={pkk1θ1:k1(xk)                              if  θk=0N(xk;μkkθ1:k,Pkkθ1:k)        if  θk0p^{\theta_{1:k}}_{k|k}(x_{k}) = \begin{cases} p^{\theta_{1:k-1}}_{k|k-1}(x_{k}) \;\;\;\;\;\;\;\;\;\;\;\;\;\;\; if \; \theta_k = 0 \\ N(x_k;\mu^{\theta_{1:k}}_{k|k}, P^{\theta_{1:k}}_{k|k}) \;\;\;\; if \; \theta_k \ne 0 \end{cases}
w~θ1:k={wθ1:k1(1PD(xk))                              if  θk=0wθ1:k1PD(xk)N(xk;zˉkk1θ1:k1,Skk1θ1:k1)λc(zkθk)        if  θk0\tilde{w}^{\theta_{1:k}} = \begin{cases} w^{\theta_{1:k-1}} (1-P^D(x_k)) \;\;\;\;\;\;\;\;\;\;\;\;\;\;\; if \; \theta_k = 0 \\ w^{\theta_{1:k-1}}\frac{P^D(x_k)N(x_k; \bar{z}^{\theta_{1:k-1}}_{k|k-1}, S^{\theta_{1:k-1}}_{k|k-1})}{\lambda_c(z^{\theta_k}_k)} \;\;\;\; if \; \theta_k \ne 0 \end{cases}

위의 식을 구하는 Kalman filter update 과정은 다음 그림에서 찾을 수 있다.


Figure 4. Kalman filter update 과정

7. 다른 SOT 알고리즘

위에서 SOT를 위한 prediction과 update 과정을 계산해보았지만, 한가지 문제점이 존재한다. 이는 연산량에 관련된 것으로 kk가 커짐에 따라 hypotheses가 다음과 같이 급격히 증가하고, 모든 hypotheses에 대해 계산을 수행하는 위 알고리즘은 작동하기 어려워진다.

number  of  hypotheses=i=0k(mi+1)number \; of \; hypotheses = \prod^k_{i=0}(m_i +1)

문제를 해결하기 위하여 pruning 또는 merging을 수행하는 다양한 SOT 알고리즘이 개발되어 왔다. 여기서 pruning이란 작은 weight를 갖는 hypotheses를 제거하는 것이고, merging은 여러 개의 density를 하나의 density로 근사하여 결합하는 것을 의미한다.

이러한 방법을 사용하는 알고리즘에는 다음과 같은 예를 들 수 있다.

  • Nearest neighbour (NN) filter (pruning): 가장 높은 확률의 hypothesis를 제외하고 나머지는 제거함
  • Probabilistic data association (PDA) filter (merging): 여러 분포가 중첩된 posterior를 같은 mean과 covariance를 갖는 하나의 Gaussian 분포로 근사
  • Gaussian sum filter (GSF) (pruning/merging): 여러 분포가 중첩된 posterior를 높은 확률을 갖는 소수의 hypothesis에 해당하는 Gaussian 분포를 합하여 근사
  • Gating: 높은 PDP^D, 작은 λc\lambda_c, 매우 큰 FOV를 갖는 이상적인 센서를 사용할 경우 weight에 특정 threshold를 두어 이 보다 작은 weight를 갖는 detection 결과를 모두 무시

0개의 댓글