명함의 글씨 인식부터, 사람 얼굴 인식까지, 왠만한 형태는 이제 핸드폰으로도 인식이 가능하다. OpenCV라는 컴퓨터 비전 라이브러리를 사용하는 것이다. 인텔이 개발하였고, 현재 윈도, 리눅스 등의 여러 플랫폼에서 사용하는 OpenCV는 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다.
현재 2,500개가 넘는 알고리즘으로 구성되어 있으며, C, C++, 파이썬, MatLab 인터페이스를 제공하고 있다.
OPENCV = Open Source Computer Vision Library
비즈니스 미팅으로 업체 관계자를 만나 악수와 함께 명함을 교환했다. 생각보다 어린 나이의 친구인데, 최신 노트북과 이제 갓 나온 핸드폰을 가진 이 친구, 내 명함을 내려놓더니 앞뒤로 사진을 찍는다. 반면 나는 날짜와 이슈 등을 명함에 적고, 고개를 드는데.. 이 친구, 내 명함을 다시 돌려주며 하는말이.. “저는 명함앱으로 핸드폰에 다 저장했습니다. 저는 이게 더 편하거든요. 명함 찾기도 힘들고 해서, 받을 때마다 다 저장해놔요.”
명함의 글씨부터, 사람 얼굴 인식까지, 웬만한 형태의 이미지는 이제 핸드폰으로도 인식할 수 있다. OpenCV라는 컴퓨터 비전 라이브러리를 사용하는 것이다. 인텔이 개발하였고, 현재 윈도, 리눅스 등의 여러 플랫폼에서 사용하는 OpenCV는 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. 현재 2,500개가 넘는 알고리즘으로 구성되어 있으며, C, C ++, 파이선, MatLab 등의 인터페이스에서 사용할 수 있다.
기기에 있어 사람의 눈과 같은 역할을 하는 카메라 성능의 발달과 실시간 천만 단위의 화소를 프로세싱하는 칩의 성능 개선을 통해, 기존 CPU에서나 사용이 가능하던 사물 인식기능이 우리가 항상 지니고 다니는 핸드폰에서도 가능하게 되었다. 이러한 발달은 산업, 및 의료 기기에서 얼굴 검출과 인식, 객체 인식, 객체의 3D 모델 추출, 스테레오 카메라에서 3D 좌표 생성, 고해상도 영상 생성을 위한 이미지 스티칭, 영상 검색, 적목 현상 제거, 안구 운동 추적 등 다양한 방법으로 사용되고 있다.
비전 분야에 있어 다양한 지원을 하는 자일링스는 Open VX , OpenCL 에 이어 이번에는 OpenCV도 개발 지원하기로 하였다. 자일링스의 임베디드 사업부 DSP Specialist로 있는 정웅 부장은 ‘지속적인 사용자 수 증가와 버전 3.0 에서부터 지원하는 딥러닝 기능 등의 확장이 더욱 많은 OpenCV 사용자층을 만들고 있다’라며 지원 배경 설명하였다. 또한, Xilinx 의 Zynq SoC가 기존의 프로세서 기반의 비전 플랫폼 보다, 한 차원 높은 성능으로 시장 우위를 점할 것으로 예상했다.
이에 대한 근거로 ARM cortex-A53을 통한 OpenCV의 Harris Corner Detect, Stereo Depth Map, Dense Optical Flow Function 실행 시, 일반적인 이미지 프로세싱 요구 기준인 30 FPS에 비해 상당히 낮은 2.4 FPS, 2.1 FPS, 0.1 FPS를 보여주는 것과 시장에서의 지속적인 이미지 Resolution 증가 추세를 볼 때 같은 Function을 고화질로 지원할 경우 성능 부족 상황 발생하며, 이는 OpenCV Function 가속화가 필요 할 것 이라고 하였다.
임베디드 비젼 얼라이언스의 OpenCV 사용 현황과 Cortex-A53 성능표
eGPU대비 17배 성능, 절반의 전력 사용
자일링스의 Zynq SoC를 이용하여 OpenCV Function을 가속화 할 경우, 1080P의 Stereo LBM 을 비교 시 대표적인 그래픽칩 벤더인 엔비디아의 Tegra X1의 43 FPS보다 최대 17배 이상인 700 FPS의 성능을 보여준다. 여기에 전력 소모는 Tegra X1의 7.9W보다 절반에 가까운 2.2W에서 4.8W를 소모한다. 720P 기반의 LK Dense Optical Flow도 같은 엔비디아의 Tegra X1과 비교 시 7FPS보다 최대 24배 높은 170 FPS를 보여주며 전력 소모는 Stereo LBM 사례와 같이 소모량을 보여주었다.
Xilinx Zynq SoC와 엔비디아의 Tegra X1의 성능 비교표
프로그래머블 로직을 통한 프로세싱 레이턴시 감소
이러한 고효율의 성능이 가능한 부분에 대해서 자일링스의 정웅 부장은 자일링스만의 DDR 운영법을 언급했다. 일반적인 프로세서나 GPU의 프로세싱 데이터 플로는, 카메라와 같은 이미지 센서 데이터가 먼저 DDR에 저장되고 각 프로세싱 블록에서 DDR 데이터를 올려 처리하고, 처리된 결과를 다시 DDR에 저장하는 과정을 반복하는 시퀀싱 블록 프로세싱의 구조로 되어 있다. 이에 반해 자일링스의 Zynq SoC는 프로그래머블 로직을 이용하여 구현하는데, 한 블록의 프로세싱이 완료되기 전에 각 픽셀에 대한 처리결과가 나오면 다음 프로세싱 블록에서 처리를 시작하는 스트리밍 방식으로 처리한다.
전통적인 프로세싱 구조와 자일링스의 xfOpenCV를 사용한 프로세싱 비교
픽셀 단계의 스트리밍이 아닌 라인 버퍼 단계의 스트리밍이 진행되어 프로그래머블 로직 내의 인터널 블록 램인 BRAM이나 대용량 BRAM인 ULTRARAM 을 이용하여 저장할 수 있다. 이는 외부 메모리에 접근하지 않고 프로그래머블 로직 내에서 처리할 수 있기 때문에 더 높은 성능을 제공할 수가 있다.
정웅부장은 ‘실제로 자일링스 프로그래머블 로직을 이용하여 이미지 프로세싱 블록들이 연속적으로 처리되는 경우의 레이턴시를 살펴보면 Bilateral Filter만 처리하는 경우에 1,573만 클록 정도로 대략 15.73msec 정도가 소요된다’라고 하며 ‘Bilateral Filter 이후 단에 Wrap Transform을 처리하는 경우 대략 15.85msec, 그 이후 단에 Customer ISP block을 처리하더라도 15.86msec 정도’라고 하였다.
일반적으로 시퀀셜 블록 프로세싱의 경우 대략적인 레이턴시는 DDR 접근 시간을 제외하더라도 각 프로세싱 블록 레이턴시의 더한 값이다. 하지만 파이프라인 구조에서는 가장 레이턴시가 큰 블록 레이턴시에 약간의 플러스알파 정도의 레이턴시를 갖는다.
프로그래머블 로직을 활용한 프로세싱 단계 비교
이러한 강점이 있는 자일링스의 xfOpenCV 라이브러리는 기존의 Open CV 와 같은 구조의 코드에서 각 블록 간의 파이프라인 구조를 자동으로 구성함으로써 프레임 버퍼나 외부 메모리 접근을 피할 수 있으므로 처리속도에 있어 높은 성능을 제공할 수 있다. 또한, 외부 메모리 접근을 사용하지 않음으로써 전력 효율도 좋아지는 장점이 있다.
50여가지의 사용가능한 다양한 라이브러리 제공
현재 자일링스는 OpenCV 를 위한 50가지 이상의 라이브러리를 제공하고 있다. 크게 6가지의 주요 기능으로 기본적인 기능 라이브러리, Geometric Transforms, 이미지 프로세싱 및 필터, 사물 인식, 3D Reconstruction, 모션 분석과 위치추적으로 나뉘며, 모든 소스는 깃허브에서 다운할 수 있다.
xfOpenCV : 50가지 이상의 자일링스에서 제공하는 OpenCV 기능들
정웅 부장은 자일링스가 이러한 컴퓨터 비전 분야에서 선도적인 입장을 가질 수 있는 것은 자사의 ZynQ만이 가지고 있는 SoC 구조 때문이라고 설명하였다. Zynq US+ 의 경우는 cortex A53 APU가, CG 디바이스 에는 듀얼 코어, EG/EV 디바이스에는 쿼드코어가 들어 있다. 그리고 R5 Real-Time Processor가 듀얼 코어로 들어가 있어, 실시간 애플리케이션의 처리가 가능하다.
그리고 ARM Mali GPU가 내장되어 있어 디스플레이에 이미지 렌더링 같은 작업 수행이 가능하며, EV 디바이스의 경우에는, H.265 비디오 코덱이 내장되어 있다. 이 외에도 모든 임베디드 애플리케이션에서 매우 중요한 최신의 전원 관리 와 보안 및 안전에 관한 기능도 가지고 있다.
자일링스가 제공하는 컴퓨터비젼 분야 가속화 SoC 구조
정웅부장은 ‘다양한 프로세서를 가지고 있는 Zynq SoC이지만, 다른 SoC들과 가장 차이가 나는 부분은 알고리즘을 병렬처리할 수 있도록 HW에 구현하는 프로그래머블 로직’이라며 ‘Zynq SoC를 통하여 임베디드 비전 시스템을 설계하면, 기존의 프로세스 기반의 플랫폼 보다 더욱 유연하고 효율적인 성능을 경험 할 수 있을 것’이라고 하였다.
자일링스는 3월 13일 자사의 ZynQ SoC를 활용한 Open CV 공개 웨비나를 진행하며, 그동안 OpenCV에 관하여 엔지니어들이 가지고 있던 궁금한 점들을 실시간으로 답변할 예정이다.