Super Kawaii Cute Cat Kaoani 6D Rotational representation 설명 및 구현

연구/컴퓨터 그래픽스

6D Rotational representation 설명 및 구현

치킨고양이짱아 2023. 8. 3. 15:14
728x90
728x90

Rotation Matrix

기존에 딥러닝에서 많이 사용하던 rotational representation은 Rotation matrix이다. continuous하게 1-to-1 mapping을 할 수 있다는 장점이 있지만 9 numbers를 딥러닝에 다 사용하기엔...부담스러운 면이 많다.

그래서 최근에 많이 사용하는 rotation representation은 6D Rotational Representation이다.

6D Rotational Representation

어렵게 생각할 필요가 없는게 기존의 rotation matrix에서 column 2개만 가져오면 된다.

두 colmns만 가져오면 나머지 하나의 column은 cross product를 사용해 구할 수 있다. (rotation matrix에서 모든 column은 서로 수직이니까)

rotation matrix의 장점을 다 살리면서 숫자 6개로 rotation을 표현할 수 있다보니 deep motion synthesis resarch에서 굉장히 많이 사용하고 있다.

주의해야할건 6D representation을 network output으로 사용할 때 "orthogonalization" step을 거쳐야한다는 점이다.

output으로 나온 vector 2개를 v1, v2라 하자. 이를 사용해 rotation matrix를 만드는 코드는 다음과 같다.

v1 = network_output[:3]
v2 = network_output[3:]

e1 = normalized(v1)   				#v1을 크기 1이 되도록 normalize
u2 = v2 - np.dot(e1, v2) * e1			#v2에서 v1의 성분을 제거
e2 = normalized(u2)				#v1 성분을 제거한 v2를 normalize

rotation_matrix = np.array([e1, e2, np.cross(e1, e2)]).T

 

728x90
728x90