2달러 마이크로컨트롤러에서 SIMD로 컴퓨터 비전 가속하기

1 week ago 20

ESP32-S3의 128비트 SIMD 명령어를 활용한 FAST 특징점 검출 구현으로 참조 구현 대비 약 2배의 성능을 달성했으며, QVGA(320×240) 프레임 처리에 약 6ms가 걸림 FAST 코너 사전 검사에서 동서남북 픽셀과 중심 픽셀의 차이를 비교하며, 벡터 레지스터 하나에 담기는 8비트 값 16개를 활용해 중심 픽셀 16개의 검사를 동시에 수행함 비정렬 메모리 읽기를 직접 지원하지 않는 제약은 인접한 정렬 블록을 읽고, 두 레지스터를 이어 붙인 데이터에서 필요한 구간을 추출하는 방식으로 우회함 부호 있는 8비트 비교만 지원하고 SIMD 산술 연산이 포화 방식으로 동작하는 문제는 0x80 XOR로 최상위 비트를 반전해 픽셀 값의 범위를 변환하는 방식으로 해결함 자체 테스트에서 처리량이 5.1MP/s에서 11.2MP/s로 늘었으며, 실시간 컴퓨터 비전 작업에 활용할 수 있는 수준으로 VGA 30fps 스트림 처리가 가능함 ESP32-S3와 FAST 가속 구현 ESP32-S3는 최대 240MHz로 동작하는 듀얼 코어 CPU, Wi-Fi와 Bluetooth Low Energy 무선 기능을 비롯한 주변 장치를 갖춘 약 2달러짜리 마이크로컨트롤러임 기술 참조 매뉴얼에 제한적인 SIMD 명령어 집합이 문서화돼 있음 이 명령어들은 비밀 기능은 아니지만 상대적으로 덜 알려져 있었음 온라인에서 찾은 예제보다 복잡한 코드를 실험하기 위해 FAST 특징점 검출기를 SIMD로 구현함 구현 과정에서 ESP32-S3 어셈블리의 기초를 익히고 하드웨어 제약을 우회했으며, 간단한 자체 레지스터 할당기 basm 도 작성함 어셈블리 구현의 출발점 구현 당시 찾을 수 있었던 SIMD 예제 코드 출처는 세 곳이었음 Larry Bank의 블로그와 최소 예제는 SIMD 기능과 기본 사용법을 다룸 Espressif의 esp-dsp 는 합성곱과 FFT 등 DSP 성격의 기능을 위한 라이브러리임 Espressif의 esp-dl 은 칩 내부 AI 가속을 위한 라이브러리임 기본 함수는 .rodata와 .text 로 읽기 전용 데이터와 코드를 나누고, 정렬 및 전역 함수 선언을 배치하는 구조로 작성함 덧셈 예제에서는 entry sp, 48로 진입하고 a2, a3의 값을 더한 뒤, a2에 반환값을 남기고 retw.n으로 복귀함 sp는 a1의 별칭이며, 전처리기 매크로로 인자 레지스터에 이름을 붙임 FAST 사전 검사를 16개 픽셀씩 처리 FAST 코너 ...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵