[테크월드=정환용 기자] 실시간 운영체제 VxWorks 플랫폼에는 인텔의 IPP(Integrated Performance Primitives)가 포함돼 있다. 이 라이브러리 모음은 신호 처리, 이미지 처리, 비디오 처리, 암호화 및 기타 큰 벡터와 매트릭스를 포함한 연산에 활용된다. IPP가 적용된 VxWorks 애플리케이션에는 항공사진의 텍스트와 개체 검출, 자동 제조의 머신 비전(사람의 눈을 대신해 물체를 검사하고 판단하는 기술), 항공기의 오디오 신호 처리, 신호의 고속 암호화 및 해독이 포함된다.

IPP 라이브러리는 인텔의 SSE(Streaming SIMD Extensions)와 AVX(Advanced Vector Extensions) 명령을 활용하도록 설계돼 있다. 이 명령은 128비트와 256, 512비트 데이터를 하나의 명령으로 처리하며, 매트릭스 처리 속도를 높여준다. 또한, VxWorks 플랫폼은 인텔 아키텍처 최적화를 위해 ICC(Intel C++ 컴파일러)도 포함하고 있다. VxWorks 라이브러리와 커널, 드라이버, 애플리케이션은 모두 인텔 아키텍처에 맞춰 ICC를 활용해 빌드할 수 있다.

최근 VxWorks 플랫폼은 ICC 버전 16과 Intel IPP 버전 9를 지원할 수 있도록 업그레이드 됐다. 새로운 버전의 Intel IPP에는 SSE 4.2와 Intel AVX2를 위한 대부분의 이미지 처리와 색 변환, 컴퓨터 비전 기능의 최적화가 포함돼 있다. 다음 세부 정보에서는 Intel IPP v9의 여러 다양한 기능과 이 버전의 업그레이드가 제공하는 이점에 대해 살펴보겠다.

 

이미지 처리
대부분의 경우 머신 비전의 첫 번째 처리 단계는 노이즈 감소와 에지(edge) 검출이다. 에지가 식별되면 컴퓨터는 일련의 패턴 인식 단계를 거쳐 사물과 문자, 면을 식별할 수 있다. IPP 이미지 처리 라이브러리에는 간단한 단계을 통해 머신 비전을 지원하기 위한 여러 가지 기능이 포함되어 있다.

VxWorks에서 IPP의 컴퓨터 비전 라이브러리를 활용한 에지 검출의 결과를 보기 위해 6메가픽셀의 항공기 사진부터 살펴보자. 일반적인 FHD(Full High Definition)의 1920x1080 해상도의 이미지는 약 2메가픽셀 정도로, 이 작업 이미지의 크기는 일반적인 HD 이미지의 3배다. [그림 1]은 각 IPP 매트릭스 변환의 결과를 보여준다. 첫 번째 단계에서는 컬러 이미지를 그레이스케일로 변환한다. 그 다음 5x5 로우패스 가우시안(Low-Pass Gaussian) 필터를 사용해 이미지 노이즈를 제거한다. 마지막으로 캐니 에지 검출(Canny Edge Detection) 기능으로 에지 검출 이미지를 생성한다.

[그림 1]의 이미지는 축소된 6메가픽셀 항공기 이미지의 일부분이다. 에지 검출 이미지는 원본 이미지의 에지를 잘 나타내는 것으로 확인되고 있다.

개발 시간 측면의 이점
비교를 위해 IPP를 사용하지 않고 에지 검출을 다시 시도했다. IPP에 사용되는 에지 검출 알고리즘은 캐니 알고리즘이다. IPP의 첫 번째 명확한 이점은 에지 검출 구현에 필요한 개발 시간이 크게 단축됐다는 것이다. 인터넷을 검색해 바로 사용할 수 있는 캐니 에지 검출 C 라이브러리를 찾아 사용했지만, 애플리케이션에서 제대로 에지를 검출하기까지는 많은 시간이 걸렸다.

필자가 찾은 C와 유사한 라이브러리에는 버그가 있었다. 이 버그를 수정하기 위해 캐니 에지 검출 알고리즘을 깊이 연구해 실제 알고리즘을 따르도록 코드를 수정해야 했다. 그 결과 소스 코드는 원본 소스와는 상당히 다른데, 특히 VxWorks C 애플리케이션에서 일반적인 로우 레벨 어레이 액세스 최적화(low-level array access optimizations)를 적용한 이후에는 더욱 달라졌다.


성능 측면의 이점
또 다른 IPP의 확실한 이점은 성능이다. 직접 작성해 구현한 것을 순차 처리에서 한 번에 하나의 픽셀을 처리했다. 애플리케이션은 싱글 프로세서 코어 상에서 하나의 VxWorks 작업에서 실행됐으며, AVX 명령을 사용하지 않았다. VxWorks 멀티코어 프로세싱과 AVX를 활용하기 위해 코드를 다시 작업했다면, 개발 시간은 두 배 또는 세 배가 걸렸을 것이다.

3.4GHz 속도로 실행되는 4세대 인텔 코어 프로세서 제품군의 코어 i7-4700EQ 프로세서에서 VxWorks를 실행하고 있으며, 이 프로세서에는 AVX-2 확장 기능이 있다. 검출할 에지가 그렇게 많지 않은 600만 픽셀 이미지의 경우, VxWorks의 IPP는 컬러 이미지에서 에지 이미지를 얻기까지 28.8ms(밀리세컨드, 1천분의 1초)가 걸렸다. IPP에서 이는 초당 35프레임이다. 반면 VxWorks에서 순차 처리 구현을 사용할 경우 소요된 시간은 1.4초(초당 0.7프레임)였다. 한 자리, 또는 두 자릿수만큼의 차이다.

동일한 이미지 처리 애플리케이션을 이전 버전의 IPP로도 실행해봤다.(그림 2 참조) IPP 8에서는 119ms가 소요되었다. IPP 9의 28.8ms에 비해 훨씬 긴 시간이다. IPP 8에서 IPP 9로 업그레이드되면서 성능이 크게 향상된 것이다.

[그림 2]


캐니 에지 검출 알고리즘을 C 애플리케이션으로 직접 작성할 때 얻는 이점 중 하나는 캐니 에지 검출 알고리즘의 처리 과정을 단계별로 살펴볼 수 있다는 것이다. 알고리즘은 먼저 인접 픽셀에서의 색 강도 변화의 크기를 보여주는 이미지인 그라디언트 크기 이미지를 생성한다. 큰 크기는 대략적인 에지의 위치를 보여준다. 그런 다음 두 방향 그라디언트 이미지를 사용하여 비최대점 억제라고 하는 에지 시닝(Edge-thinning) 프로세스가 사용된다.

그 다음 에지 시닝된 이미지의 그라디언트가 상한과 하한을 기준으로 강한 에지, 약한 에지, 에지 없음으로 분류된다. 

 

[그림 3] 순차 처리(Sequential Processing) C 애플리케이션의 캐니 에지 검출.

[그림 3]의 5번 이미지에서 빨간색 선은 강한 에지, 파란색 선은 약한 에지를 나타낸다. 히스테리시스 임계값(Hysteresis Thresholding)라는 프로세스에서 모든 약한 에지는 강한 에지에 연결된 선과 접촉하는 경우에만 실제 에지로 식별된다.

 

[그림 4] 히스테리시스 임계값을 사용한 최종 에지 이미지

등가 임계치(Equivalent Thresholds)를 사용하는 IPP 애플리케이션과 순차 처리 VxWorks 구현은 거의 동일한 에지를 산출한다. 가장 큰 차이는 성능과 개발 시간이다.

한 가지 언급할 중요한 점은 VxWorks에서 IPP를 사용할 때 애플리케이션 스택 크기의 감소다. 강한 에지와 접촉하는 약한 에지를 추적하는 캐니 에지 검출 알고리즘의 히스테리시스 임계값 처리 단계에서 순차 처리 구현은 재귀 추적(Recursive trace) 루틴을 사용한다. 고밀도 대용량 에지 검출 이미지의 경우 추적 루틴의 인수 목록을 최소화한 이후에도 애플리케이션 스택의 점유 공간은 IPP 애플리케이션보다 최대 5배 더 컸다.

 

[그림 5] 에지 밀도가 더 높은 500만 픽셀 이미지의 일부분

 

에지 밀도
캐니 에지 검출 알고리즘의 히스테리시스 임계값 프로세스에는 막대한 양의 선 추적이 수반된다. 사진에 에지가 많을수록 애플리케이션에 걸리는 시간도 길어진다. 픽셀 수는 510만 개로 더 작지만 식별해야 할 에지는 훨씬 더 많은 다른 이미지를 보겠다.

[그림 5]는 에지가 많은 이미지의 일부분이다. 빨간색 선은 에지가 검출된 부분을 나타낸다.
전체 크기의 조종석 이미지 크기는 전체 크기의 항공기 이미지보다 약 18% 더 작은데, 작은 이미지에 대한 프레임 비율이 약간 더 낮았다. 즉, 처리 프레임 비율은 이미지 콘텐츠에 따라 영향을 받을 수 있다.


이미지 크기
항공 지도 제작, 자동화 제조 환경과 같이 일반적으로 머신 비전을 사용하는 애플리케이션의 이미지 크기에 관한 요구 사항은 제각기 다르다. 성능에 대한 영향을 확인하기 위해 서로 다른 크기의 여러 이미지에 VxWorks 에지 검출 애플리케이션을 실행했다.

[그림 6] 인텔 에디슨 아두이노 보드. VxWorks에서 IPP가 50만 픽셀 이미지를 처리하는 데 걸린 시간은 7.1ms.

 

[그림7] 항공 지도의 일부. VxWorks에서 IPP가 2메가픽셀의 전체 크기 이미지를 처리하는데 걸린 시간은 23.2ms.

 

[그림 8]은 다양한 이미지 크기에 대한 IPP 이미지 처리 성능을 보여준다. 일반적으로 보면 이미지가 더 작을수록 더 높은 프레임 레이트로 처리된다. 그러나 실제 프레임 레이트는 이미지 콘텐츠에 따라 달라진다.

[그림 8]

 

신호 처리
지금까지 IPP의 이미지 처리 라이브러리를 집중적으로 살펴봤다. VxWorks는 IPP 신호 처리 라이브러리도 함께 제공한다.

[그림 9]는 오디오 신호를 보여준다. 그림에서 볼 수 있듯이 VxWorks에서 신호는 오디오 신호를 주파수 프로필로 변환하는 IPP FFT(Fast Fourier Transform) 루틴을 사용해 처리했다. 음성 인식의 다음 단계는 애플리케이션에서 패턴 매칭 알고리즘을 실행해 음소를 식별하는 것이다. 일련의 음소는 단어로 식별할 수 있다.

[그림 9] VxWorks에서 Intel IPP를 사용한 신호 처리.

 

FFT 루틴의 성능 측정치를 수집하면 여기서도 IPP 9가 IPP 8에 비해 똑같이 성능이 개선되었음을 확인할 수 있다.

ICC와 IPP는 모두 VxWorks 플랫폼의 일부이다. 윈드리버는 인텔 아키텍처의 라이브러리를 포함해 VxWorks에서 사용하기 위한 고도로 최적화된 소프트웨어 라이브러리를 계속해서 제공해 나갈 것이다.

 

글: 장승한 윈드리버 차장

회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지