병렬영상처리 기반 고속 머신비전 기술
2000년대 중반까지도 머신비전 시스템의 영상처리부는 DSP 보드와 같은 전용보드가 주를 이뤘다.
이 후 GPGPU(General-Purpose Graphic Processing Unit) 보드와 멀티 코어(Multi-core) CPU의 발달, CUDA(Compute Unified Device Architecture) 프로그래밍 기술의 도입으로
DSP 기반의 영상처리 전용보드가 병렬처리 가능한 GPU와 CPU 기반의
일반 컴퓨터 시스템으로 대체되고 있는 추세다.
머신비전 세미나(Machine Vision Seminar)에서 인하대학교 김학일 교수가
발표한 ‘병렬영상처리 기반 고속 머신비전 기술’을 정리했다.
▲ 김학일 교수
최근의 머신비전 기술은 고정밀성, 다양성, 지능화로 특성화되고 있다. 고정밀성은 영상 센서 기술의 발달에 따라, 영상 화소의 공간해상도가 수 마이크로미터(μm)에서 서브 마이크로미터로 더욱 정밀해지고 있음을 의미한다. 그 결과, 동일한 물체에 대한 영상 데이터의 크기가 해상도 증가율의 제곱으로 증가하게 됐다.
다양성은 기존의 그레이 영상 이외에 컬러 영상, 적외선, X-선, 3차원 영상 등 다양한 광센서의 도입을 의미한다. 이 역시 적용되는 센서의 개수에 비례해 영상 데이터의 증가를 초래한다.
지능화는 다양한 환경 변화에 적응적인 영상처리 알고리즘들의 발전을 말한다. 일반적으로 더욱 많은 계산량을 포함한다. 즉, 영상 센서의 고정밀성, 다양성 등과 함께, 영상처리 알고리즘의 지능화는 방대한 크기의 영상 데이터에 더욱 많은 연산을 수행해야 하는 고속화를 요구하고 있다.
고정밀성, 다양성, 지능화를 요구하는 머신비전 기술의 애플리케이션 요구 사항(Application-demand)과 Multi-core CPU, GPGPU 및 컴퓨터 비전 알고리즘 발전에 따른 기술 방향(Technology-push)이 맞물려 병렬영상처리 기반의 고속 머신비전 기술이 도래하게 됐다.
OpenCL 프로그래밍 도입
일반적인 병렬처리는 다수의 독립된 컴퓨터 시스템들이 네트워크로 연결돼 동일한 목적의 연산을 나누어 처리하는 분산 시스템(Distributed system) 방식도 있지만, 머신비전 분야의 상용화된 병렬영상처리 시스템은 단일 시스템 내에서 다수의 thread(하나의 CPU에서 여러 프로세서를 처리)를 동시에 수행할 수 있도록 여러 종류의 프로세서들로 구성된다.
가령, DSP와 Multi-core CPU가 연동되거나, GPGPU와 Multi-core CPU가 연동돼 동일한 영상처리 연산을 병렬로 처리한다.
GPGPU와 Multi-core CPU를 기반으로 하는 일반 데스크탑 컴퓨터 시스템을 활용해 상대적으로 가격이 저렴하고 구현이 빠른 머신비전 기술들은 크게 CPU 기반의 SSE(Streaming SIMD Extension)와 OpenMP, GPGPU 기반의 CUDA 및 이종 플랫폼에서 실행 가능한 OpenCL(Open Computing Language) 4가지가 있다.
인텔과 AMD의 CPU 프로세서가 제공하는 SSE(Streaming SIMD Extension) 기술은 128비트의 리지스터(register)에 저장된 16개의 8비트 데이터를 한 번의 연산으로 동시에 처리하는 대표적인 병렬처리 기술이다.
1999년 인텔은 펜티엄3 프로세서에 32비트 리지스터를 포함시켜 SIMD (Single Instruction Multiple Data)연산이 가능한 SSE 기술을 처음 소개한 후 128비트 XMM 리지스터에 이어256비트 YMM 리지스터를 이용해 SIMD 연산이 가능한 AVX(Advanced Vector Extensions)로 발전시켰다. 최근에는 AVX-512로 확장돼 512 비트(ZMM 리지스터) 처리도 가능하게 됐다.
SSE 프로그래밍 기법은 최적화된 병렬처리 프로그램을 구현하는데 많은 시간과 노력을 요구하지만, 상대적으로 높은 병렬처리율, 구현의 어려움, 낮은 재활용성 등으로 인해 관심을 끌지 못하고 있다.
Multi-core CPU는 OpenMP라는 프로그래밍 기술을 이용해 하나의 작업을 코어의 개수만큼 분할해 실행할 수 있도록 한다. 이 기법은 매우 용이한 구현 과정을 포함하지만, 병렬처리율은 코어의 개수보다 낮다.
2007년에 NVIDIA는 GPU가 가지고 있는 수백 개의 ALU(Arithmetic Logic Unit)를 쉽게 활용할 수 있는 CUDA 프로그래밍을 제공하여 수천 개의 영상 화소를 동시에 처리할 수 있게 하였다. 이는 GPGPU 개념을 본격적으로 사용하는데 큰 기여를 하였다. GPU 내에서 이뤄지는 연산은 최고 수백 배까지 달성될 수 있으나, CPU와 GPU 사이의 데이터 전송에 소요되는 시간을 포함하면 병렬처리율은 기대에 못 미치는 경우가 많다. OpenMP와 GPGPU프로그램은 상대적으로 구현이 쉬워, 10년 전부터 머신비전 분야에 도입돼 왔다.
GPU와 Multi-core CPU, MMX 리지스터를 모두 활용하기 위한 OpenCL 프로그래밍은 최근 들어 부각되고 있고, 머신비전 분야에 적극 도입되고 있는 상황이다.
이 기술은 사용 가능한 모든 프로세서들과 메모리를 활용할 수 있는 반면, 프로그램 최적화를 위해 많은 시간과 노력이 필요하다.
병렬영상처리 기법들을 머신비전에 적용함에 있어 절대적으로 우월한 기법은 없다. 영상처리 알고리즘에 따라 최적의 기법들이 선택적으로 구현돼야 한다. 병렬영상처리 기술은 영상처리의 다양한 애플리케이션에 적용돼 실시간 처리 및 고속화를 이뤄내고 있다.
10배 이상 빠른 처리 속도
3차원 머신비전에서 많이 사용하고 있는 Atan2를 계산하는 알고리즘에 SSE와 CUDA를 적용하면 일반 C++ 프로그램을 가동시켰을 때보다 각각 18~26배, 13배 처리속도가 향상된 결과가 도출됐다(데이터를 CPU에서 GPU로 올리는데 걸린 시간 포함).
CPU/GPU 등 프로세서의 발달로 일반 컴퓨터 시스템은 점차 고성능화 되고, 영상 처리 알고리즘 및 영상 센서 기술들의 발달로 다양한 목적의 머신비전 기술은 더욱 지능적으로 진화하고 있다. 따라서, 저렴한 가격의 일반 컴퓨터 시스템으로도 고속 머신비전 시스템 구현이 점차 가능해지고 있다.
향후 병렬영상처리 기술은 CPU와 GPU, MMX 리지스터를 모두 융합해 활용하는 방향으로 발전하고 있다.
머신비전 분야에 병렬영상처리 기법이 활발히 적용되기 위해서는 무엇보다 병렬 프로그래밍 기술과 영상처리 기술을 모두 보유한 엔지니어의 육성이 우선돼야 한다.
정리 최천욱 기자 (atided@hellot.net)