문제 정의:
목표는 calibrated 된 카메라를 이용해 촬영된 인물의 head pose와 추정된 head pose의 uncertainty를 world coordinate frame에서 모델링 하는 것을 목표로 한다.
+ 추가로 head pose(=face pose)를 이용해 인물의 시선을 예측하고 예측된 gaze point의 불확실성을 구하는 것까지 해본다.
노테이션 정의:
Pose $X^{frame}_{object}=(\psi, \phi, \theta, x, y, z) \in R^6$는 기준 coordinate frame 상에서 object의 pose 를 나타낸다.
$$\psi : z axis 를 회전 축으로 하는 회전 각도, 단위:degree. $$
$$\phi : y axis 를 회전 축으로 하는 회전 각도, 단위: degree. $$
$$\theta : x axis 를 회전 축으로 하는 회전 각도, 단위: degree. $$
$$ x : object 의 x 좌표 $$
$$ y: object 의 y 좌표 $$
$$ z: object 의 z 좌표 $$
단, face coordinate frame 에서 face의 pose는 $X^{face}_{face}=(0,0,0,0,0,0)$ 으로 정의한다.
이 문제에서는 $X^{face}_{face}, X^{face}_{camera}, X^{camera}_{world} $ 3개의 pose 가 등장한다.
Pose 와 transformation matrix 관계
$$^{object}_{frame}H = f(X^{frame}_{object}) = \begin{bmatrix}^{object}_{frame}R&-^{object}_{frame}RT_{object}\\0&1\\ \end{bmatrix}$$
$$^{object}_{frame}R=Rz(\psi)Ry(\phi)Rx(\theta), T_{object}=\begin{bmatrix} x\\y\\z \end{bmatrix}$$
$$p^{object} = ^{object}_{frame}H \times p^{frame}, p^{frame}=\begin{bmatrix} x\\y\\z\\1 \end{bmatrix}$$
$$^{world}_{face}H = ^{world}_{camera}H \times ^{camera}_{face}H$$
$$X^{frame}_{object}=f^{-1}(^{object}_{frame}H)$$
좌표계 정의
Pose 추정
$X^{face}_{camera} = SolvePnP(q^{face}_{i}, p^{image}_{landmark-i},K, dist)$
$X^{camera}_{world} = SolvePnP(q^{world}_{i}, p^{image}_{target-i}, K, dist)$
K: projection matrix, dist = distortion parameter
$p^{image}_{landmark-i}$ : image 좌표계 상의 i번째 face landmark 점 좌표 (x,y).
$q^{face}_{i}$ : face coordinate frame 상의 $ p^{image}_{landmark-i}$ 대응점 (x,y,z).
$p^{image}_{target-i}$ : image 좌표계 상의 i번째 calibration target landmark 점 좌표 (x,y).
$q^{world}_{i}$ : world coordinate 상의 $p^{image}_{target-i}$ 대응점 (x,y,z).
추정 오차 공분산 계산:
$p^{image}_{i} = f(X^{face}_{camera}) \times q^{face}_{i}$ 이 수식을 테일러 시리즈를 이용해 선형 근사 하면
$ \overline{p}^{image}_{i}+\Delta p = f( \overline{X}^{face}_{camera}+\Delta X) \times q^{face}_{i} $
$\Delta p \approx \frac{\partial f}{\partial X} \Delta X^{face}_{camera} = M_{i} \Delta X^{face}_{camera}$
이 식을 least square 로 풀면 Pose $X^{face}_{camera}$ 의 추정 오차 공분산은
$C_{x} = E[\Delta X \Delta X^{T}] = (M^{T}M)^{-1}M^{T}E(\Delta p \Delta p^{T})((M^{T}M)^{-1}M^{T})^{-1}$
$E(\Delta p \Delta p^{T}) : ^{camera}_{face}H 를 이용해 projection 한 point의 공분산 행렬$ 로 나타낼 수 있다.
$C_{x}$는 6x6 사이즈의 행렬이다.
World-camera 의 추정 오차 공분산 행렬도 $C_{w} = 6 \times 6$ 이고 위와 동일 한 방식으로 calibration target을 이용해 구할수 있다.
최종 $^{world}_{face}H$의 추정 오차 공분산을 $C_{y}$ 라 하면
$X^{face}_{world}=f^{-1}(^{world}_{face}H)$
$^{world}_{face}H= ^{world}_{camera}H \times ^{camera}_{face}H = f(X^{camera}_{world}) \times f(X^{face}_{camera})$ 관계에 의해 공분산 전파(propagation) 식에 의해 아래와 같이 구할 수 있다.
$C_{y} = J_{X} C_{x} J^{T}_{X} + J_{W} C_{W} J^{T}_{w}, C_{y} = 6 \times 6 행렬$
$J_{x} = \frac{\partial f^{-1}(^{world}_{face}H)}{\partial X^{face}_{camera}} $
$J_{w} = \frac{\partial f^{-1}(^{world}_{face}H)}{\partial X^{camera}_{world}} $
이를 이용해 face pose 는 world에서 $X^{face}_{world}=f^{-1}(^{world}_{face}H)$ 를 평균으로 하고 $C_{y}$ 분산으로 하는 gaussian pdf 를 따른다고 볼 수 있다.
다음으로 head pose로 부터 gaze point를 예측 해보자.
여기서는 시선의 방향이 얼굴의 전면부 즉 코끝이 가리키는 방향과 같다고 가정한다.
gaze point $g$를 아래와 같이 정의하자.
$$g=\begin{bmatrix} x_{g}\\y_{g}\\z_{g} \end{bmatrix} = p_{face} + tV_{gaze} = g(^{world}_{face}H) --------(func gaze)$$
$V_{gaze} =\begin{bmatrix} g_{x}\\g_{y}\\g_{z} \end{bmatrix}: gaze direction vector, ^{world}_{face}R의 마지막 컬럼, 즉 ^{world}_{face}H[:,2] = f(X^{face}_{world})[:,2]$
$p_{face} = \begin{bmatrix} x_{face}\\y_{face}\\z_{face} \end{bmatrix}$, 얼굴 위의 한점 여기선 face coordinate frame origin의 world coordinate frame 상의 좌표로 설정, 즉 $^{world}_{face}H[:,3]=f(X^{face}_{world})[:,3]$
이때 $V_{gaze}$는 시선의 방향을 나타네는 벡터 즉 시선의 방향 벡터라고 볼 수 있다. 가정에 의해 시선의 방향은 얼굴 평면과 수직(perpendicular) 이므로 world 좌표계에서 head pose를 나타내는 rotation matrix의 3번째 컬럼 즉 face coordinate frame의 z axis에 해당한다. 3차원 공간상에서 방향벡터 $V$와 평행하고 사람의 얼굴 위의 한점(눈 사이의 한점을 잡는게 가장 좋으나 여기서는 코끝으로 가정했다.)을 지나는 직선을 구하는게 목적이므로 $p_{face}$는 코끝의 world coordinate frame 상의 좌표로 가정하자.
이렇게 하면 world coordinate frame 상의 z-x평면위에서 이미지 상의 특정 인물이 바라보고 있는 좌표(gaze point)와 불확실성은 아래와 같이 구할 수 있다.
$t= -\frac{p_{face}}{g_{y}} $ 로 설정 하면 y=0이 되므로 world 좌표계 상에서 x,z평면과 만나는 gaze point를 구할 수 있고
gaze point 와 pose $X^{face}_{world}$의 관계에 따라 gaze point 의 공분산은
$C_{g} = J_{g} C_{y} J^{T}_{g} , 3 \times 3 행렬$
$J_{g} = \frac {\partial g(^{world}_{face}H)}{\partial g}, 3 \times 6 행렬$
로 구할 수 있다.
다음은 face pose(=head pose) estimation에 사용된 landmark를 표시한 그림이다.
'Deeplearning > toyproject' 카테고리의 다른 글
[Deskew for ocr] Rotation correction v2 (0) | 2022.03.06 |
---|---|
[Deskew for ocr] Rotation correction (0) | 2022.02.15 |