96 정보과학회논문지 : 컴퓨팅의실제및레터제 20 권제 2 호 (2014.2) 모바일 GPU 를이용한실시간병렬영상처리라이브러리 (Real-Time Parallel Image Processing Library using Mobile GPU) 이종환 강승헌 (Jonghwan Lee) (Seung Heon Kang) 이만희 이성철 (Man Hee Lee) (Shengzhe Li) 김학일 박인규 (Hakil Kim) (In Kyu Park) Android 의함수들과의비교를통하여, 모바일 CPU 대비모바일 GPU 를이용한영상처리속도가평균 3 배이상가속되는것을확인하였고, 모바일 GPU 의이용에서는 OpenGL ES 2.0 과 OpenCL 1.1 를기반으로한두영상처리라이브러리를비교함으로써효과적인병렬영상처리방법을제시한다. 키워드 : 모바일 GPU, GPGPU, OpenGL ES, OpenCL, 스마트폰, 병렬영상처리 Abstract This paper presents the development and optimization of image processing library running on mobile GPU. The library is developed using GLSL (OpenGL shading language) in OpenGL ES 2.0 and OpenCL 1.1 which are the open standards from Khronos group. The performance of developed library is compared to that of CPU-based OpenCV (open computer vision library) for Android library. It is shown that the functions in the developed GPU-based library run more than three times faster than CPU-based OpenCV on a most recent commercial mobile platform. Additionally, this paper proposes effective methods of the parallel image processing application development on mobile GPU. Keywords: mobile GPU, GPGPU, OpenGL ES, OpenCL, smart phone, parallel image processing 요약본논문은상용스마트폰의모바일 GPU 를사용하여실시간으로영상처리를수행하는라이브러리개발및효과적인개발방법을제안한다. 제안하는라이브러리는 Khronos 그룹의단체표준인 OpenGL ES 2.0 기반의 Shading Language (GLSL) 와 OpenCL 1.1 을이용하여개발되었고 Android 운영체제를기반으로한상용모바일플랫폼에서구동하여성능평가를수행하였다. CPU 기반의영상처리라이브러리인 OpenCV (open computer vision library) for 본연구는산업통상자원부산업융합원천기술개발사업으로지원된연구결과입니다.[10041664, 멀티 Shader GPU 통합형멀티코어퓨전프로세서원천기술개발 ] 이논문은 2013 한국컴퓨터종합학술대회에서 모바일 GPU에서의병렬영상처리라이브러리개발 의제목으로발표된논문을확장한것임 정회원 : 인하대학교정보통신공학과 jhlee@vision.inha.ac.kr 비회원 : 인하대학교정보통신공학과 ha00ha2@gmail.com maninara@gmail.com szli@vision.inha.ac.kr 종신회원 : 인하대학교정보통신공학과교수 hikim@inha.ac.kr (Corresponding author임 ) pik@inha.ac.kr 논문접수 : 2013년 9월 4일심사완료 : 2013년 11월 5일 CopyrightC2014 한국정보과학회 ː개인목적이나교육목적인경우, 이저작물의전체또는일부에대한복사본혹은디지털사본의제작을허가합니다. 이때, 사본은상업적수단으로사용할수없으며첫페이지에본문구와출처를반드시명시해야합니다. 이외의목적으로복제, 배포, 출판, 전송등모든유형의사용행위를하는경우에대하여는사전에허가를얻고비용을지불해야합니다. 정보과학회논문지 : 컴퓨팅의실제및레터제20권제2호 (2014.2) 1. 서론최근모바일장치의사용이보편화됨에따라개인의일상및다양한정보를기록하고 SNS (social network service) 를이용하여정보를공유하는사용패턴이형성되었고이러한관심속에서모바일기술은비약적인발전을이루고있다. 그중에서도 AP (application processor) 의계산능력이급성장하며모바일의효용성이커졌고많은계산자원이필요한영상처리및컴퓨터비전기술까지사용할수있게되었다. 그러나모바일에장착되는디스플레이및카메라등이발전하며데이터량이기하급수적으로증가하기때문에고해상도영상에서컴퓨터비전알고리즘을 CPU만으로처리하는것은불가능하다. 따라서모바일 GPU를 GPGPU (general purpose graphics processing unit) 로이용함으로써영상처리를병렬화, 고속화하여실시간영상처리가가능하도록하는연구가이루어지고있다 [1,2]. 따라서본논문에서는모바일 GPU를이용하여실시간으로영상처리를할수있는라이브러리개발에대하여다룬다. 라이브러리개발에는카메라와동영상시퀀스를이용한실시간영상처리프레임워크구축과 OpenCV for Android의대표함수들을벤치마크하여 OpenGL ES 2.0[3,4] 과 OpenCL 1.1[5] 을기반으로병렬영상처리라이브러리를구현하고이에대한성능비교및분석결과가포함된다.
모바일 GPU 를이용한실시간병렬영상처리라이브러리 97 2. 실시간영상처리프레임워크 2.1 OpenGL ES 2.0 병렬영상처리프레임워크그림 1은 OpenGL ES 2.0 기반으로본라이브러리를동작하기위한영상처리프레임워크의기본구조를도시화하고있다. 프레임워크의수행과정은다음과같다. 1) 카메라입력영상및동영상입력 2) 입력영상을텍스처메모리에저장 3) 텍스처메모리를 FBO로지정 4) 정점 / 프레그먼트쉐이더를통한병렬처리 5) 처리결과가저장된텍스처를화면에출력 OpenGL ES 2.0의파이프라인을효과적으로이용하기위하여입력영상은 GPU 메모리에텍스처로저장하여 GPU에서의고속접근을가능하도록하였고결과로저장된 FBO의텍스처를그대로디스플레이장치에출력하는구조를통하여프로세서간의자료이동을최소화하였다. 그러나 GPU와 CPU간의자료이동이필요한경우 glreadpixels 및 gldrawpixels함수를통하여복사가이루어지므로상당한전송지연이발생하게된다. 2.2 OpenCL 1.1 병렬영상처리프레임워크그림 2는본라이브러리를동작하기위한 OpenCL 1.1 기반의프레임워크를표현하고있다. OpenCL 1.1라이브러리는계산관련 API이기때문에영상처리부분만을위하여동작하고입력과출력은 2.1절의 OpenGL ES 2.0 파이프라인과동일하게동작한다. OpenCL 1.1을이용한병렬영상처리를위하여 OpenGL타입의텍스처로메모리에저장된입력영상을 GL_Sharing관련함수로 Memory- Object로지정해준다. 이를 OpenCL 커널에구현된일련의처리과정을통하여병렬영상처리를수행하고결과출력을위하여다시 OpenGL타입의텍스처로변환한뒤에바로화면에출력한다. 일반적으로모바일환경에서는 CPU와 GPU가동일한하나의메모리를서로다른구역그림 1 OpenGL ES 2.0 기반영상처리프레임워크 Fig. 1 OpenGL ES-based image processing framework 그림 2 OpenCL 기반영상처리프레임워크 Fig. 2 OpenCL-based image processing framework 으로구분하여각각활용하는데, OpenCL 1.1에서는위에서언급된 Memory Object를이용하여 CPU와 GPU 에서모두접근이가능고그에따라 OpenGL ES 2.0의파이프라인에서존재하던 CPU와 GPU간자료이동에대한제약에서벗어날수있다. 3. 모바일 GPU 기반의실시간병렬영상처리라이브러리개발 3.1 병렬영상처리라이브러리구현및최적화영상처리및컴퓨터비전관련알고리즘은상당히방대하다. 따라서라이브러리를구현하기전에최종목적에따른분류를정하고상세알고리즘정의및적절한비교평가를위하여 OpenCV의기술문서를참고하였다. 해당함수들은문서의참고논문및방법을이용하여구현하는것을원칙으로삼았고병렬화에어려움이되는부분은최근가장일반적으로사용되는알고리즘으로구현하였다. 또한아래의일반적인네가지최적화기법과 kernel에서의분기문사용등최적의성능을고려하며 OpenGL ES 2.0과 OpenCL 1.1을이용하여구현하였다. Floating point precision control Loop unrolling Branching Load Sharing between vertex and fragment shader 3.2 OpenGL ES 2.0 기반병렬영상처리라이브러리 OpenGL ES는 3D 그래픽 API(Application Programming Interface) 를제공하는오픈라이브러리인 OpenGL 의모바일버전으로, OpenGL이워크스테이션이나고성능 PC와같은환경에서 3D 이미지를렌더링하는것을목표로하는것과는달리적은용량의메모리와낮은속도의 CPU를갖춘임베디드환경에최적화되어있다. 이전의그래픽파이프라인은프로그래머에의해임의로변경할수없었지만 GLSL이출시됨에따라프로그래밍이
98 정보과학회논문지 : 컴퓨팅의실제및레터제 20 권제 2 호 (2014.2) 가능한 GPU를사용할수있게되었다. GLSL을이용하면그래픽파이프라인중정점쉐이더 (vertex shader) 와프레그먼트쉐이더 (fragment shader) 를임의대로수정할수있는데, 이를이용하여 GPU에서OpenGL의그래픽파이프라인을통한병렬연산이가능하다. 보통의영상처리알고리즘은여러단계를거쳐알고리즘을완성하는데, 이를해결하기위하여그림 1의프레그먼트쉐이더부분과같이 FBO (frame buffer object) 를사용하게된다. FBO를이용하여프레임버퍼에저장되는출력결과를다음멀티패스에서입력텍스처로이용함으로써 GLSL을통하여계산된결과를프레임버퍼에저장하며, CPU와 GPU간의자료이동으로인한성능저하를방지할수있다. 또한텍스처로저장되어있는영상처리결과물을그대로화면에출력함으로써화면표시에대한간접비용을최소화할수있다. OpenGL ES 2.0의파이프라인의구조는아래의항목에서보여짐과같이병렬영상처리에상당히제약적이다. 픽셀당최대 4 float크기의텍스처저장공간 쉐이더당 4개 ( 최대 float 크기 ) 의출력값 각쉐이더의결과정보공유불가능이러한제약을해결하기위하여다중텍스처를이용하고다중패스로쉐이더를설계하였다. 때문에알고리즘에따라우회적으로구현해야하므로개발이어렵다. 3.3 OpenCL 1.1 기반병렬영상처리라이브러리 OpenCL은개방형범용병렬컴퓨팅프레임워크로써 CPU, GPU, DSP 등의다중프로세서를동시에사용하는 heterogeneous 시스템에서병렬프로그램개발을도와주는표준라이브러리이다. 상용모바일의경우, 최근 ARM의 Mali-T6xx 시리즈, Qualcomm의 Adreno 3xx시리즈등많은 AP 제공자들이 OpenCL 1.1을지원하는모바일 GPU를제공하기시작하면서모바일에서도 OpenCL을이용한영상처리가이슈화되고있다. OpenCL은 OpenGL ES와서로협력할수있는구조를가지며, OpenGL의텍스처와 FBO 그리고렌더버퍼등의데이터를공유할수있다. 이를이용하여OpenGL 의사용에서제약을받는로컬메모리사용과외부에사용된메모리를추가로사용하는것이가능하며, 메모리관리모델을제공하여병렬컴퓨팅과정에서의메모리사용의효율성을제공한다. CPU와 GPU의메모리공간을공유하는모바일환경에서의 OpenCL 1.1의이용은호스트와그래픽카드사이의데이터전송을 AP 가지원하기만하면단순한포인터접근이가능하기때문에모바일환경에서는큰장점이된다. OpenCL 1.1을이용한병렬영상처리구현의경우전역메모리캐쉬와워크그룹내부에서공용으로사용가능한로컬메모리를활용하여메모리효율및메모리 접근시간을최적화할수있었고 3.2절에서소개된 OpenGL ES 2.0을이용한구현시에발생하는제약으로부터자유로워개발이용이하였다. 4. 실험결과및분석본논문에서개발된라이브러리의성능을평가하기위하여 Android 4.2.2 기반의 Samsung GalaxyS4 LTE-A 스마트폰을이용하여실험을진행하였다. 해당실험기기는 2.3GHz의 Qualcomm Krait 400 CPU와 2GB의메인메모리그리고 Qualcomm Adreno330 GPU를탑재하고있으며 13MP의카메라및 1920 1080 해상도의디스플레이가내장되어있다. 실험을위한카메라동작및동영상재생은 Java기반의 Android SDK를이용하였고 OpenGL ES 2.0 및 OpenCL 1.1을이용한병렬영상처리를위하여 C언어기반의 Android NDK로구현하였다. 이실험의비교대상은 OpenCV4Android 2.4.6에서제공되는동일한기능의함수들로구성된다. 본라이브러리에서는기존의 PC 버전에서지원하는 VideoCapture와같은클래스가지원되지않고, Android SDK에서제공되는 MediaPlayer 클래스는동영상을재생하며바로텍스처로저장하는내부파이프라인을이용하기때문에 GPU 메모리의텍스처를 CPU 메모리로다시가져오면서자료이동시간이존재하게되어계산자원을낭비하게된다. 따라서 FFmpeg 오픈라이브러리를이용하여프레임을바로메인메모리에서이용할수있도록해주었고동영상및카메라로부터입력되는 1280 720 해상도의영상을이용하여수행하였다. 먼저 CPU를이용하는OpenCV4Android 2.4.6의영상처리함수들의수행결과와 GPU를이용하는 OpenGL ES 2.0로구현된라이브러리의병렬영상처리함수들의결과를비교해보았다. 각알고리즘들의복잡도및병렬화의적합성에따라 2~27배까지의처리속도개선을확인할수있었고이를표 1에정리된실험결과로살펴볼수있다. 그러나표 1의 calchist함수와 integral함수와같이전체픽셀에대하여각픽셀값의빈도수를누적하거나차례로누적하는경우에는오히려느려질수밖에없었다. 이는하나의픽셀을담당하는각각의쉐이더가독립적으로동작하며공유메모리에값을저장할수없어해당픽셀데이터크기에상응하는결과값만반환하기때문이다. 이와같은알고리즘들의결과를획득하기위하여쉐이더를반복하여우회적으로구현하였기때문에 CPU보다오히려느린수행시간을보였다. 다음으로 GPU를이용하는 OpenGL ES 2.0과 OpenCL 1.1로구현된병렬영상처리라이브러리중비교가용이한대표적인함수들의수행결과로성능을비교하였고표 2에서그비교결과를살펴볼수있다. 비교적간단하
모바일 GPU 를이용한실시간병렬영상처리라이브러리 99 표 1 OpenCV와 OpenGL ES 2.0으로구현된병렬영상처리라이브러리의비교 Table 1 Comparison of processing time between the proposed parallel image processing library (using OpenGL ES 2.0) and OpenCV Category Algorithm OpenCV OpenGL I/O Input and Output 9.6 6.0 Image Filtering Geometry Transform Speed Up bilateralfilter[6] 146.0 31.0 x4.7 boxfilter 331.5 17.7 x18.7 buildpyramid 65.6 7.9 x3.5 dilate 41.5 16.4 x2.53 filter2d 192.6 17.6 x10.9 GaussianBlur 219.7 20.8 x10.6 Laplacian 60.1 18.5 x3.2 medianblur 469.1 17.1 x27.5 pyrmeanshiftfilter 13147.0 39.7 x331.1 sobel 61.8 15.6 x4.0 remap 67.9 8.2 x8.2 resize 36.1 8.6 x4.2 rotate 69.7 13.9 x5.0 warpaffine 70.6 9.6 x7.4 warpperspective 107.1 10.6 x10.1 Pixel cvtcolor 49.8 8.9 x5.6 Transform threshold 14.2 8.1 x1.8 calchist 19.4 77.3 x0.3 Histogram calcbackproject 28.7 9.9 x2.9 equalizehist 41.5 10.9 x3.8 Feature Detection Robust Feature Detection Canny 326.4 20.2 x16.2 cornerharris 278.0 22.7 x12.3 FindContours 66.3 11.5 x5.8 goodfeaturestotrack 325.4 31.6 x10.3 HoughLines[7] 354.2 80.5 x4.4 SIFT[8] 1147.9 229.6 x5.0 SURF[9] 965.5 179.1 x5.4 고각픽셀들간의의존성이적은함수들에대해서는동작이다르지않아성능차이를보이지않았다. 그러나영상의기하학적처리와관련된함수에서 OpenGL ES 2.0을이용하는것이더욱효과적인것을확인할수있었다. 이는 OpenGL ES 2.0로구현된함수에정점쉐이더를이용한텍스처맵핑기법을이용하였기때문이다. OpenGL ES 2.0은 3D 렌더링을목적으로하기때문에이미지의기하학적처리부분에서효과적이며크기변환시에설정된방법으로파이프라인을통하여자동으로보간이일어나기때문에더욱효과적이다. 반면에 OpenCL 1.1을이용하면전역메모리와워크그룹내부에서공용으로사용가능한로컬메모리를활용할수있고각쓰레드에서동일주소의메모리값을참조시 표 2 OpenGL ES 2.0과 OpenCL 1.1로구현된병렬영상처리라이브러리의비교 Table 2 Comparison of processing time between the proposed parallel image processing libraries (using OpenGL ES 2.0 and OpenCL) Algorithm OpenGL OpenCL Speed Up boxfilter 17.7 16.3 x1.1 buildpyramid 7.9 9.3 x0.9 Dilate 16.4 17.6 x0.8 Erode 14.6 14.4 x1.0 GaussianBlur 20.8 16.5 x1.2 Laplacian 18.5 17.2 x1.2 medianblur 17.1 18.2 x0.9 Sobel 15.6 14.6 x1.1 warpaffine 9.6 21.8 x0.4 warpperspective 10.6 22.7 x0.5 cvtcolor 8.9 8.7 x1.0 threshold 8.1 8.3 x1.0 calchist 77.3 48.1 x1.6 calcbackproject 9.9 10.2 x1.0 Canny 20.2 20.6 x1.0 cornerharris 22.7 20.1 x1.1 SIFT 229.6 212.2 x1.1 SURF 179.1 214.1 x0.8 발생할수있는문제를해결하는 atomic관련함수들을이용할수있다. OpenGL ES 2.0 라이브러리에서구현이어려웠던 calchist를살펴보면 OpenCL 1.1에서는로컬메모리를사용하며쓰레드간에정보를공유할수있기때문에로컬워크그룹마다의히스토그램을각각구하고이를모두더하여히스토그램을완성시킬수있었고 OpenGL ES 2.0의결과보다약 1.5배정도빠른수행속도를보였다. 이와같이각픽셀간의종속성문제에대하여자유로울수있기때문에관련함수에대하여구현하기쉽고더욱빠르게처리할수있다. 라이브러리함수들의결과는 OpenCV4Android 2.4.6 의함수결과와의결과비교를통하여검증하였고그림 3과 4에서와같이결과를확인할수있다. 5. 결론 본논문에서는스마트폰에장착된카메라로부터입력되는프리뷰영상및동영상에대하여 GPU를이용하여실시간으로영상처리를수행할수있는프레임워크및라이브러리를개발하였고, 모바일의 CPU와 GPU 각각의영상처리속도를비교하였다. 대부분의함수에대하여 CPU보다 GPU를이용한영상처리의결과가빠를수있음을확인할수있었다. 그러나 OpenGL ES 2.0
100 정보과학회논문지 : 컴퓨팅의 실제 및 레터 제 20 권 제 2 호(2014.2) 에 조금 더 효과적인 OpenCL 1.1을 이용한 라이브러리 를 추가적으로 구현하였다. 결과적으로 OpenGL ES 2.0 을 이용하여 구현된 함수의 수행 시간과 비슷하지만, 멀 티 패스간의 종속성이 존재하는 복잡한 알고리즘에 대 해서는 OpenCL 1.1을 이용한 개발이 더 용이했고 보다 빠른 연산속도를 보였다. 또한 CPU와 GPU간에 정보교환이 필요한 경우에는 OpenGL ES 2.0을 이용한 라이브러리보다 OpenCL 1.1 을 이용한 라이브러리에서 수행속도가 더욱 빨랐다. 다 만 기하학적인 변환과 관련된 알고리즘에서는 OpenGL ES 2.0의 라이브러리에서의 정점 쉐이더를 이용한 텍스 처 맵핑 기법을 이용하는 것이 효과적이었다. 따라서 CPU만을 이용한 영상처리 보다 GPU를 이용한 병렬영 상처리가 알고리즘 구현은 어렵지만 더 효율적이고, 알 고리즘에 따라 OpenGL ES 2.0과 OpenCL 1.1을 적절 히 혼합하여 사용하는 것이 실시간 영상처리에 더 효과 그림 3 OpenGL ES 2.0을 이용한 병렬영상처리 라이브 러리의 함수 수행 결과영상 (a) SIFT (b) SURF 적이라는 결론을 내릴 수 있었다. References Fig. 3 Result Images of OpenGL ES-based proposed library (a) SIFT (b) SURF 그림 4 OpenCL 1.1을 이용한 병렬영상처리 라이브러리의 함수 수행 결과영상 (a) Sobel filter (b) Canny Edge Fig. 4 Result images of OpenCL-based proposed library (a) Sobel filter (b) Canny edge 을 이용한 라이브러리의 경우, 구현에 비적합한 알고리 즘에 대해서는 파이프라인 상의 제약으로 느려질 수도 있음을 확인할 수 있었다. 이를 해결하기 위하여 영상처리 알고리즘을 구현하기 [ 1 ] I. K. Park, M. H. Lee, and Y. Choi, "Trends of computer vision on embedded platform," Journal of the Institute of Electronics Engineers of Korea, vol.39 no.2, pp.157-164, 2012. [ 2 ] N. Singhal, J. W. Yoo, H. Y. Choi, and I. K. Park, "Implementation and optimization of image processing algorithms on embedded GPU," IEICE Trans. on Information and Systems, vol.95 no.5, pp. 1475-1484, 2012. [ 3 ] A. Munshi, et al.. OpenGL ES 2.0 Programming Guide. Addison-Wesley Professional, 2009. [ 4 ] R. J. Rost, et al.. OpenGL Shading Language, Addison-Wesley Professional, 2006. [ 5 ] A. Munshi, et al.,. OpenCL programming guide. Addison-Wesley Professional, 2012. [ 6 ] C. Tomasi and R. Manduchi, "Bilateral filtering for gray and color images," Proc. of IEEE International Conference on Computer Vision, pp.839-846, 1998. [ 7 ] R. O. Duda and P. E. Hart, "Use of the Hough transformation to detect lines and curves in pictures," Communication of the ACM, vol.15, pp.11-15, Jan. 1972. [ 8 ] D. G. Low, "Distinctive image features from scaleinvariant keypoints," International Journal of Computer Vision, vol.60, no.2, pp.91-110, Nov. 2004. [ 9 ] H. Bay, A. Ess, T. Tuytelaars, and L. V. Gool. "Speeded-up robust features," Computer Vision and Image Understanding, vol.110, no.3, pp.346-359, Jun. 2008.