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
'연구 > 컴퓨터 그래픽스' 카테고리의 다른 글
SMPL-X skeleton 뜯어보기 & SMPL-X to SMPL+H (0) | 2024.01.29 |
---|---|
Motion-X dataset 관련 내용 정리 (1) | 2023.12.27 |
blender에서 한 model의 facial motion을 다른 model에 적용하기 (0) | 2023.06.26 |
angular velocity 구하는 방법 (0) | 2023.02.24 |
MJCF(mujoco xml file) 분석 (0) | 2023.01.26 |