GPU 프로그래밍을 이용한 실시간 Pre-viz 시스템 개발 (의뢰처: ETRI, 한국전자통신연구원)

의뢰처

ETRI, 한국전자통신연구원

목표

PC 1대의 CPU에서 비실시간으로 동작하던 Augmented Reality 프로그램을 GPU로 포팅하여 실시간으로 동작하도록 구현한다.

수행기간

2009.2~2009.4

ETRI 디지털콘텐츠단 디지털액터연구팀으로부터 의뢰를 받은 이 과제는 영화제작 과정 중에서 가상의 CG 물체를 촬영한 영상에 합성하는 작업을 실시간으로 촬영과 동시에 합성하도록 하는 것이 목표입니다. 현재는 촬영과정과 합성과정이 분리되어 촬영을 마친 후에 오프라인에서 합성하는 과정을 하고 있습니다. 가상의 CG물체를 합성하기 위해서는 카메라 트랙킹이라는 과정이 필수적인데 연산량이 많아서 CPU만으로 실시간으로 처리하는 것이 어려웠습니다. 그래서 본 과제에서는 GPU를 이용해서 연산량이 많은 부분을 GPU로 포팅하여 고속으로 처리함으로써 실시간 동작이 가능하도록 하였습니다.
사용자 삽입 이미지
전체 시스템 구조는 아래와 같습니다.

사용자 삽입 이미지카메라로부터 입력된 영상은 카메라 트랙킹 장치에서 카메라의 자세를 추정하고 합성결과 디스플레이 장치는 추정된 카메라 자세로부터 CG물체의 자세를 정하여 합성하게 됩니다. 여기서 GPU로 포팅한 카메라 트랙킹 장치의 블록다이어그램은 아래와 같습니다.
사용자 삽입 이미지 3개의 중요한 블럭으로 구성되어 있고 feature를 찾고 추적에 사용될 feature를 등록하는 블럭과 EKF(Extended Kalman Filter)를 이용해서 카메라의 자세를 추정하는 블럭으로 되어 있습니다.

수행 결과
1024×768 영상 1 frame에 소요되는 시간
- CPU : Intel Core2Quad G66-00 2.4GHz
- 2GB DDR2 RAM
- GPU : Nvidia Geforce GTX295
사용자 삽입 이미지CPU에서 동작하던 코드를 GPU로 옮겨서 60배정도의 속도 향상이 있었습니다. 일반적인 코드의 최적화로는 도저히 상상할 수 없는 속도 향상을 경험할 수 있었습니다. 물론 알고리즘의 구조에 따라 향상 정도는 차이가 있겠습니다만, 영상 처리와 같이 일정 크기의 영상에 특정 mask pattern을 convolution하는 구조라면 GPU에서 대폭적인 성능 향상이 있습니다.

아래 동영상은 실제 CPU와 GPU를 이용해서 각각 트랙킹을 수행하는 것을 동영상으로 촬영한 것입니다. 위쪽 CPU로 tracking 하는 경우는 연산 속도가 따라오질 못해 30frame으로 계산하지 못해 frame drop이 심합니다. 반면 아래쪽 동영상은 GPU를 이용한 경우로 실시간으로 feature tracking이 이뤄지는 모습을 확인할 수 있습니다.

- CPU를 이용하여 트랙킹을 수행하는 영상

- GPU를 이용하여 트랙킹을 수행하는 영상
2009년 에 올린 글 태그됨: , , , , , , ,