2018년도 대한전기학회 하계학술대회 논문집 2018. 7. 11 - 13 이기종 컴퓨팅 환경에서 스테레오 카메라를 위한 고속 영상처리 장치 구현 박상우, 김성도, 김도윤 위드로봇(주) Implementation of a High-Speed Vision Processor for Stereo Camera in a Heterogeneous Computing Environment Sang-Woo Park, Seung-Do Kim, Do-Yoon Kim WITHROBOT Inc. – FPGA, RPU 및 APU, GPU 등으로 구성된 이기 종 컴퓨팅 환경을 1 Chip으로 제공하는 Zynq 프로세서를 이용 하여, 스테레오 카메라의 영상처리를 위한 고속 영상처리 장치 를 구현하였다. OpenCV에서 제공하는 Stereo Calibration과 Block Matching 알고리즘을 FPGA로 구현하고, 영상획득과 Depth Map 생성 및 그 결과의 전송은 APU로 구현하였다. APU와 FPGA를 활용하여 최대 640⨯480의 스테레오 영상 입력 을 받아 Depth Map을 계산하는데 소요되는 시간이 최대 20ms 이내임을 확인하였다. Abstract 1. 서 론 자율주행 자동차, 드론 등과 같은 이동체가 주변환경을 인식 하기 위해 Deep Learning 알고리즘을 적용하거나, 대량의 센서 정보를 처리하고, 판단할 필요가 있으며 이를 위한 고속 연산 장치의 필요성도 점점 커지고 있다. 이를 구현하기 위한 방법으 로 CPU, GPU, DSP 등 계산 장치를 고성능화하거나 다중 CPU 를 이용하여 연산속도를 높이려는 방법 등이 시도되고 있다. 또 다른 흐름으로 CPU, GPU, FPGA등의 이기종 처리장치를 하나 의 시스템으로 구성하여 각 처리 장치의 장점을 활용하는 이기 종 컴퓨팅도 주목받고 있다. 고해상도 스테레오 영상을 처리하기 위한 방법으로, 다중 프로 세서를 사용하는 방식은 개발 시간이 가장 짧게 소요되지만, 고 해상도의 영상을 처리하기 위해서는 고성능의 CPU를 여러 개 사용하는 구조가 되므로 처리 장치의 가격이 높아진다. 비교적 프로그램하기 쉬운 GPU를 사용하는 영상 처리 장치가 최근 각 광을 받고 있지만 그 가격 역시 고성능 CPU에 버금간다. 따라서 본 논문에서는 궁극적으로 최소 가격으로 대량 생산이 가능한 방식인 ASIC 제작이 가능하도록 FPGA를 이용한 스테 레오 영상을 고속으로 처리하는 장치를 제작하는 것을 목표로 Zynq-MPSoc를 이용하여 스테레오 카메라를 위한 고속 영상처 리 장치를 제작하였다. Zynq-MPSoc는 상대적으로 가격이 저렴 한 대용량의 FPGA와 4개의 A53 CPU를 가지고 있어 이기종 컴퓨팅 환경을 Embedded 보드로 구현 가능하며 스테레오 영상 을 고속으로 처리할 수 있다. 본 논문에서는 고속 영상처리 장 치를 구현하고 그 성능을 평가하기 위해 스테레오 카메라의 영 상을 실시간 처리가 가능한 지 평가하였다. 2. 본 서 배치가 정렬되어 있지 않으므로, 렌즈 보정(Lens Correction) 과 Epipolar Line을 일치시키는 작업인 Rectification을 수행해야 한다. 렌즈 보정을 위해 Camera Calibration이 선행되어야 하며, 그 결과로 얻어지는 카메라 파라미터를 이용하여 렌즈 보정 알 고리즘을 통해 영상의 왜곡을 제거한다. 왜곡이 제거된 영상이 라도 좌우 영상이 약간 어긋나 있으므로 이를 보정하여야 Rectification이 완료된 영상이 얻어진다. Rectification이 끝난 영 상에서 Feature를 추출하고 Matching을 통해 동일한 특징점이 좌우 영상에서 얼마나 차이가 있는지를 나타내는 Disparity Map을 생성하게 된다. 이 때 적용되는 알고리즘으로 Block Matching 방법을 사용한다. Block Matching 알고리즘은 스테레 오 영상에서 Disparity Map을 생성하는 가장 간단한 알고리즘 이다. Disparity Map은 16bit의 해상도로 Pixel에 대한 차이를 나타내고 있어, 이를 다시 실제 거리로 바꾸는 과정이 Depth Map을 생성하는 과정이다. 이 때 카메라의 Base Line정보와 카 메라 파라미터를 이용하여 카메라가 바라보는 실제 거리를 구하 게 된다. 이 Depth Map을 이용하여 Post-Processing 단계에서 장애물을 회피하거나, SLAM 알고리즘을 이용하여 자신의 위치를 계산할 수 있다. 2.2 고속영상처리 시스템의 구조 2.2.1 Zynq-MpSoC의 구조 고속 영상처리 시스템의 가장 중요한 요소는 Zynq-MPSoc (이하, Zynq)이다. Zynq는 크게 Processing System(PS)과 Programmable Logic(PL)로 나누어지며, PS는 Cortex A53 Quad Core, Cortex R7 Dual Core, Mali 400 GPU 등을 가지고 있으며, PL는 FPGA Block을 가지고 있다. PS와 PL사이의 통신 을 위해 AXI-BUS를 12개 가지고 있고, 기타 외부장치 인터페 이스를 위한 Peripheral를 가지고 있다. 다음은 Zynq의 블록도이 다. 론 2.1 스테레오 영상 처리 프로세스 스테레오 카메라를 이용하여 Depth 정보를 계산하기 위한 과 정은 다음과 같다. 1) 영상획득 2) Rectification 3) Disparity Map 생성 4) Depth Map 생성 먼저 카메라를 이용하여 동기화된 스테레오 영상을 획득한다. 스테레오 카메라 영상의 해상도는 640⨯480이고 8bit의 해상도 를 갖는다. 스테레오 카메라로 획득된 영상은 렌즈의 왜곡과 센 - 1 - <그림 1> Zynq UltraScale+ MPSoC: Block Diagram 2.2.2 고속 영상처리 시스템의 구조 스테레오 영상을 위한 고속 영상처리 시스템은 다음 그림 1과 같은 구조로 되어 있다. 본 연구에서 사용한 스테레오 카메라는 위드로봇(주)의 oCamS-1CGN-U이다. 이 스테레오 카메라는 Global Shutter를 지원하고 최대 1280⨯960의 스테레오 영상을 45fps로 제공할 수 있으며, USB 인터페이스를 통해 영상을 획 득할 수 있다. 출력 영상은 Bayer RGB 형태이므로 영상 포맷을 변경하는 과정이 필요하고 이는 PS에서 이루어진다. PL에서는 OpenCV가 제공하는 Rectification과 Block Matching 알고리즘을 FPGA에서 하드웨어 블록을 이용하여 구현하였다. 최대 640⨯480의 스테레오 영상을 처리할 수 있고, 설정을 통해 카메라 파라미터를 변경할 수 있다. Disparity Map을 계산하는 데 최대 10ms의 시간이 걸린다. PL에서 계산된 Disparity Map은 다시 PS로 전달되어 4개의 A53코어를 이용하여 Depth Map을 생성한다. 최종 결과물인 Depth Map을 이더넷을 통해 호스트로 전송하여 Visualization 하였다. Visualization을 위해 Host에 ROS (Robot Operating System)을 사용하였고 ROS에서 제공하는 여러 가지 도구들을 이용하여 Postprocessing 하였다. 구분 Rectification PS 23.4ms PL 4.9ms PC 3.2ms Matching 110.2ms 5.2ms 22.7ms 기타 Quad Cortex A53 FPGA Intel NUC i5 2.5 적용 사례 2.5.1 Disparity Map 아래 영상은 좌측의 Rectification 영상과 우측의 Disparity Map 영상이며, 이를 Ethernet으로 전송 받아 Host에서 보여지는 영 상이다. Visualization을 위해 ROS에서 제공하는 RVIZ 패키지를 사용하였다. <그림 3> Disparity Map Display 2.5.2 Point Cloud ROS의 RTABMAP 패키지를 이용하여 Ethernet으로 입력 받 은 영상을 Point Cloud 정보로 변환한 영상은 다음과 같다. View Point를 조정하여 보면 앞쪽의 박스의 위치와 뒤쪽 배경 이 떨어져 있음을 확인할 수 있다. <그림 2> Block Diagram 2.3 FPGA HW Block의 Utilization 640⨯480의 스테레오 영상에 대해 Rectification 과 Block Matching을 구현하기 위해 사용한 Zynq의 HW 블록의 크기와 전체 HW 블록의 정보는 다음 표 1과 같다. <표 1> Zynq FPGA Utilization Resource LUT LUTRAM FF BRAM DSP BUFG MMCM Utilization 26658 3171 29842 124 102 5 1 Available Utilization % 47232 56.44 28800 11.01 <그림 4> Point Cloud Display 94464 31.59 3. 결 론 150 82.67 스테레오 카메라 영상을 고속으로 처리하기 위해 Zynq를 이용 240 42.50 하여 고속 영상처리 보드를 제작하였고, Zynq FPGA HW 196 2.55 Block을 활용하여, 스테레오 카메라 640 ⨯ 480의 스테레오 영상 3 33.33 Zynq의 BRAM 영역을 83%를 사용하고 있는데, Rectification 과정에서 데이터의 저장 공간으로 BRAM이 사용되므로 더 큰 해상도의 스테레오 영상을 처리하려면 BRAM 용량이 더 많이 필요하게 된다. 2.4 Processing Time 영상이 입력된 후 Rectification 과 Block Matching에 걸린 처리 시간은 표2와 같다. PS의 A53 Quad Core에서 OpenMP를 이용 한 처리시간보다 FPGA에서 계산하는 것이 매우 빠름을 알 수 있다. 비교를 위해 Intel NUC i5에서 처리한 시간도 표에 나타 내었다. PC에서 계산은 OpenCL을 통하여 GPU를 활용하여 처 리시간을 단축시킨 결과이다. 영상입력부터 Depth Map을 생성하는 전체 과정의 처리시간은 약 20ms로 측정 되었다. 따라서 영상포맷을 바꾸고, Disparity Map을 Depth Map으로 변환하는데 약5ms가 걸린다. 을 Rectification과 Disparity Map을 10.1ms로 생성할 수 있음을 보였다. 영상 입력부터 Depth Map의 출력까지의 처리 시간은 20ms이므로 640⨯480의 스테레오 영상으로부터 50fps로 Depth Map을 생성할 수 있음을 확인하였다. 추후 연구에서 FPGA의 용량이 더 큰 HW를 선택하여 1280⨯960의 영상을 처리하고, Depth Map의 계산 및 영상 변환도 PL영역에서 구현하고자 한 다. 감사의 글 이 연구는 국토교통부 교통물류연구 “고령자 자립지원 개인 교통수단 개발(1615008899)”의 지원을 받아 이루어졌으며, 관련된 모든 연구기관에 감사드립니다. <표 2> 단계별 처리 시간 - 2 - [참 고 문 헌] [1] Xilinx, “Zynq UltrasScale+ MPSoc Product Tables and Product Selection Guide” [2] Xilinx, “UltraScale and UltraScale+ FPGAs Packaging and Pinouts Product Specification User Guide” [3] 표윤석 “ROS 로봇 프로그래밍” [4] 나갑주, 백웅기, 정영준, “임베디드 기기를 위한 이기종 멀티 코어 프로세서 및 소프트웨어 기술 동향”, ETRI, 2013 [5] docs.opencv.org, “OpenCV” - 3 -