Компьютерное зрение на микроконтроллере за $2: SIMD на ESP32-S3 ускорил FAST в 2,2 раза

opium 44 минуты назад Краткое содержание статьи Компьютерное зрение на микроконтроллере за $2: SIMD на ESP32-S3 ускорил FAST в 2,2 раза 4 мин 869 Программирование микроконтроллеров * Assembler * Обработка изображений *...
Will Anthropic have the best AI model at the end of October 2026?
Вот важная новость с фронта ИИ: opium 44 минуты назад Краткое содержание статьи Компьютерное зрение на микроконтроллере за $2: SIMD на ESP32-S3 ускорил FAST в 2,2 раза 4 мин 869 Программирование микроконтроллеров * Assembler * Обработка изображений * DIY или Сделай сам Кейс Перевод Автор оригинала: shraiwi Я написал ускоренный детектор особых точек FAST для ESP32-S3 на его 128-битных SIMD-инструкциях. Он работает примерно вдвое быстрее эталонной реализации и обрабатывает кадр QVGA (320×240) примерно за 6 мс. Исходный код лежит здесь.
За свои деньги ESP32-S3 — очень мощный микроконтроллер. В невзрачном пластиковом корпусе прячется двухъядерный процессор с частотой до 240 МГц и куча периферии, включая радиомодули Wi-Fi и Bluetooth Low Energy. Копаясь в его техническом справочнике, я обнаружил, что чип поддерживает ограниченный набор SIMD-инструкций.
Технические детали
Для кремния, который стоит дешевле чашки кофе, это здорово. Посмотрим, что с ним можно сделать! Пока я писал детектор углов FAST на SIMD, я освоил основы ассемблера ESP32-S3, научился обходить его странные ограничения и в итоге написал собственный простой распределитель регистров basm.
Что уже былоПоискав ещё, я понял, что эти инструкции вовсе не секретные, просто малоизвестные. Мне хотелось поэкспериментировать с ними самому и написать что-то сложнее того, что можно найти в сети. Компьютерное зрение меня в последнее время очень увлекает, поэтому я решил сделать SIMD-версию детектора особых точек FAST для ESP32-S3.
Начал я с поиска примеров кода с SIMD-инструкциями. На момент написания статьи я нашёл всего три источника:блог Ларри Бэнка, где он разбирает эту возможность и приводит минимальный пример;библиотеку Espressif esp-dsp для задач в духе DSP (свёртки, БПФ и т. );библиотеку Espressif esp-dl для ускорения ИИ прямо на чипе.
Отраслевые последствия
Просмотрев их, я с облегчением понял, что ассемблер на ESP32-S3 не так уж страшен. В итоге я остановился на такой общей структуре: . rodata # read-only data here .
type add,@function # a simple function that adds two numbers # int32_t add(int32_t a, int32_t b) add: entry sp, 48 # sp (stack pointer) is an alias for a1 #define r_a a2 #define r_b a3 # code here add a2, r_a, r_b # a2 = a + b retw. n # return, with a2 containing the return value. Первое ограничение: невыровненное чтениеДальше я взялся за SIMD-версию предварительной проверки угла в FAST.
По сути, она берёт по одному пикселю в каждой из четырёх сторон света и проверяет, есть ли среди них хотя бы три «экстремальных». Экстремальным здесь считается пиксель, который отличается от центрального по модулю больше заданного порога. Я решил написать функцию, которая считает число экстремумов сразу для шестнадцати пикселей: в каждый векторный регистр помещается шестнадцать восьмибитных значений.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





