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

SIMD-accelerated computer vision on a $2 microcontroller

shraiwi.com ▲ 223 댓글 64 zdw

요약

2달러짜리 ESP32-S3의 SIMD 명령어로 FAST 특징점 검출을 약 2.2배 빠르게 만들었습니다.

컴퓨터 비전에 관심이 많은 한 개발자가 개인 블로그에 쓴 글입니다. ESP32-S3가 128비트 SIMD(한 명령으로 여러 데이터를 동시에 처리하는 방식) 명령어를 지원하지만 활용 예제가 거의 없어서 직접 시험해 봤다고 했습니다.

왜 중요한가

  • 커피 한 잔보다 싼 칩에서도 실시간 컴퓨터 비전이 충분히 가능하다는 것을 수치로 보였습니다.
  • 문서가 부족한 ESP32-S3 SIMD 명령어를 실제로 활용한 사례와 코드를 GitHub에 공개했습니다.

핵심 내용

  • 처리량이 초당 510만 화소(5.1MP/s)에서 1,120만 화소(11.2MP/s)로 늘어 참조 구현의 약 두 배가 됐습니다.
  • QVGA(320x240) 한 프레임을 약 6ms에 처리합니다. 저자는 30fps VGA 영상도 거뜬하다고 봤습니다.
  • FAST(영상에서 모서리 같은 특징점을 빠르게 찾는 알고리즘)의 사전 검사를 16화소씩 묶어 한 번에 계산했습니다.
  • 정렬되지 않은 메모리 읽기와 부호 없는 비교가 없는 제약은 레지스터 잘라 붙이기와 0x80 XOR 기법으로 피했습니다.
  • 어셈블리 작성을 돕는 간단한 레지스터 할당기 basm도 직접 만들었습니다.

HN 반응

  • 일부 이용자는 5.1MP/s에서 11.2MP/s로 늘어난 것은 220%가 아니라 120% 증가, 즉 2.2배라고 지적했습니다.
  • ESP32 보드가 몇 달러에 팔린다는 데 감탄하며 홈 자동화 센서, 인터폰 개조 같은 활용 경험담이 이어졌습니다.

댓글

30개 표시 · 전체 64개
  1. jwr HN

    그나저나 ESP32-S3-Zero 보드를 알리익스프레스에서 통째로 5.33달러에 살 수 있다는 게 참 놀랍습니다. 칩, 세라믹 안테나, USB 커넥터, LED까지 달린 작은 보드가 그 가격이에요.

    ESP32-C3-Zero는 개당 2.80달러입니다.

    이 성능에 이 가격은 정말 말도 안 됩니다. 사용하기 쉬운 것도 대단합니다. USB로 컴퓨터에 꽂기만 하면 바로 시작할 수 있습니다.

  2. snarfy HN

    이길 상대가 없죠. 프로젝트용으로 RP2040을 몇 개 샀는데, 블루투스 지원 때문에 ESP32-C3로 바꾸려고 합니다. 5개들이 한 팩이 20~30달러 정도였습니다.

  3. twisteriffic HN

    일화이긴 하지만 충분히 있을 법한 이야기라서, 미국에 계신 분들은 주의하세요.

    https://www.reddit.com/r/GlobalEntry/comments/1x4c062/us_ordering_electronics_from_overseas_watch_out/

  4. afdbcreid HN

    원글과 https://www.reddit.com/r/esp32/comments/1x3bmjh/ordering_esp32_from_overseas_watch_out_global/ 의 토론을 보면, 주문한 기기가 위조품이었을 가능성이 높고 그중 하나는 FCC ID도 가짜였다고 합니다. 새 법과는 상관없이 애초에 구매 자체가 불법이었고, 아마 그래서 압수된 것 같습니다.

    그러니 결론은 "ESP를 사지 마라"가 아니라 "무엇을 사는지 확인하라"입니다.

  5. dataflow HN

    바보 같은 질문일 수 있는데, 뭘 사는지 어떻게 확인하나요?

  6. ashkankiani HN

    주문하고 물건이 도착하기 전에 FCC ID 수입 자격을 취소해 버리면 어떻게 되나요(DJI 때처럼요)? 전혀 있을 수 없는 시나리오도 아니고, 그쪽에서 그런 미묘한 사정까지 봐줄 것 같지도 않습니다. 이번 행정부는 정말 변덕스럽고 제멋대로니까요.

  7. monocasa HN

    그 ESP32 대부분이 금속 캔 모듈로 되어 있는 이유가 바로 이미 테스트를 거쳤고 FCC 인증도 받았기 때문입니다. 즉 의도적 송신기(intentional transmitter)가 이미 인증된 상태라서 통합하는 쪽이 훨씬 편해지는 거죠.

    글쓴이가 말하지 않은 사정이 있거나, 아니면 CBP가 잘못 판단한 거겠죠.

  8. lp92 HN

    교육을 제대로 받지 못한 CBP 직원들이 규정을 잘못 적용했을 가능성이 높습니다.

  9. afdbcreid HN

    아닙니다. https://www.reddit.com/r/esp32/comments/1x3bmjh/ordering_esp32_from_overseas_watch_out_global/ 의 토론을 보면 FCC ID가 위조였고 제품도 위조품이었다고 나옵니다.

  10. blacksmith_tb HN

    아니면 미국 아마존에서 Xiao ESP32-C3 3개들이를 20달러에 사면 걱정할 일이 없지 않나요? Seeed도 국내 배송을 해 주는데 좀 느릴 뿐이고요. 이걸로 제품을 만들어 팔 거라면 가격이 3배인 게 신경 쓰이겠지만, 저처럼 Home Assistant 같은 걸로 취미 삼아 만지작거리는 정도라면 웃돈을 내도 괜찮습니다.

  11. htrp HN

    그걸로 뭘 하세요?

  12. ra120271 HN

    저는 우리 집 대문 GSM 인터콤의 잘못된 설계 결정을 우회하는 데 씁니다. 덕분에 택배를 계속 놓치던 일이 사라졌어요.

    이 인터콤은 순차 호출 방식입니다. 방문자가 버튼을 누르면 목록의 첫 번째 번호(제 휴대폰)로 전화를 걸고, 아무도 받지 않으면 다음 번호(아내의 휴대폰)로 넘어갑니다. 문제는 음성사서함을 응답으로 친다는 겁니다. 첫 번째 전화기가 음성사서함으로 넘어가면 인터콤은 할 일이 끝났다고 판단해서 두 번째, 세 번째 번호에는 아예 걸지 않습니다. 그러니 제 폰이 수신 불가 상태면 목록은 사실상 번호 하나짜리입니다. 전원이 꺼져 있거나 런던 지하철을 타고 있는 전화기로는 테스트해 본 적이 없는 모양입니다.

    택배 배달이 여러 번 실패한 첫 주에 연쇄 호출은 포기했습니다. 지금은 ESP32와 SIM7600이 목록 맨 앞에 있습니다. 모뎀이 3초 뒤에 전화를 받아서 # DTMF 톤(인터콤의 문 열기 명령)을 보내고 끊은 다음, 누가 들어왔다고 제게 문자를 보냅니다.

    여긴 여러 사람이 쓰는 중고차 주차장 출입문이라 보안 장치로는 허술하고, 주차하면 안 되는 곳에 아무나 차를 대지 못하게 막는 정도의 용도입니다. 그리고 이제 제 택배도 받습니다 :P

  13. nsarrazin HN

    저는 Home Assistant 환경에 쓸 맞춤 센서와 액추에이터를 아주 쉽게 만들 수 있게 됐습니다. esphome 설정 파일을 모아 둔 폴더가 있는데, 거기에 Claude Code를 연결해서 필요한 항목을 추가해 달라고 하면 됩니다. 이걸 정말 잘해서 특정 센서용 드라이버도 알아서 짜 줍니다. 물론 배선과 납땜은 아직 손으로 해야 하지만요(아직은요!).

    집 안에서만 이만큼 쓰고 있습니다.

    • 레코드플레이어의 오디오 출력을 받아서 LAN으로 스트리밍하는 보드(집 안 모든 스피커로 LP를 들을 수 있습니다)

    • 집 곳곳에 둔 자작 스피커마다 들어간 ESP32 한 개씩. DAC와 앰프를 구동합니다.

    • 토양 습도, 온도 등을 재는 스마트 화분 센서

    • 새집 안에 설치한 태양광 카메라

    • 수면 단계를 감지하는 8x8 라이다 ToF 거리 측정 보드

  14. aardvarkdriver HN

    수면 단계 감지가 궁금합니다. 그 배열에서 몸의 움직임 말고 또 어떤 데이터를 뽑을 수 있나요? 웨어러블보다 실제로 느끼는 컨디션을 더 잘 반영하던가요?

  15. lp92 HN

    토양 습도, 온도 등을 재는 스마트 화분 센서

    하, 저도 ESP32가 나오기 한참 전에 처음 만든 프로젝트 중 하나가 그거였어요(PIC 만세!). 많은 사람이 한 번씩 거치는 입문 과제 같은 느낌이네요.

  16. beagle3 HN

    오디오 지연이나 패킷 손실 같은 건 어떻게 처리하세요?

  17. jwr HN

    저는 지금 블루투스 메시 홈 네트워크를 만들고 있습니다. 조명을 제어하고 여러 곳에서 센서 데이터를 모으는 용도입니다(집 경보 시스템과 연동해서 재실 감지를 하는 걸 떠올려 보세요).

    디스플레이가 달려 있고 메시 네트워크에도 값을 보고하는 실내 공기질 모니터도 만들고 있고요.

    아니면 이런 "비행기 레이더"를 만들 수도 있습니다 :-) https://github.com/ironicbadger/ESP32-Plane-Radar

  18. nl HN

    ESP32는 대부분(전부?) 듀얼 코어라는 점도 짚어 둘 만합니다.

    얼마 전에 LLM 전사 기능이 있는 빔포밍 마이크를 구현했는데(전사는 브라우저 모델에 넘겼습니다)[1], 빔포밍과 노이즈 캔슬링 DSP 코드는 전부 두 번째 코어에서 UI와 함께 돌리고, 오디오를 스트리밍하는 웹서버는 코어 0을 쓰게 했더니 잘 돌아갔습니다.

    저는 SIMD를 직접 쓰지는 않았지만, 이미 SIMD를 쓰고 있는 esp-dsp를 사용합니다.

    [1] https://github.com/nlothian/earwing

  19. iqbal1980 HN

    흥미롭네요. OpenCV 코드를 여기로 포팅할 방법이 있을까요? OpenCV 코드를 FPGA에서 돌리는 방법은 알고 있는데, 저전력 마이크로컨트롤러에서도 할 수 있으면 좋겠습니다. 아니면 알고리즘을 처음부터 직접 짜신 건가요?

  20. pjmlp HN

    가격을 생각하면 ESP32-S3는 대단한 성능의 마이크로컨트롤러입니다.

    맞아요, 이런 컴퓨터보다도 더 강력하다는 걸 잊으면 안 되죠.

    https://en.wikipedia.org/wiki/Amstrad_PC1512

  21. asimeqi HN

    제가 처음 가졌던 컴퓨터가 딱 그거였어요. CGA 그래픽에 GEM Desktop, Locomotive Basic 등이 들어 있었죠. 소프트웨어는 전부 360KB짜리 디스켓 4장에 담겨 있었습니다. 디스켓마다 저마다 예쁜 색이었고요. 제 눈에는 꽤 대단해 보이던 샘플 Basic 프로그램이 3개 있었습니다. 하나는 문서 관리 시스템이었고, 다른 하나는 마우스로 그림을 그리는 그림판 같은 프로그램이었어요. GEM Desktop을 Digital Research에서 만들었다는 건 몰랐습니다. 아주 훌륭한 윈도 시스템이었어요. MS-DOS 기반이었던 걸로 기억합니다. CP/M 운영체제도 있었고요. 겨우 1.2MB에 그 많은 소프트웨어가 들어 있었다니.

  22. pjmlp HN

    맞아요, 공유해 주셔서 고맙습니다.

  23. sedatk HN

    그 키보드의 따뜻한 빨간색 Caps Lock 불빛이 아직도 생생합니다. 거기서 Print Master를 돌리고 BASIC 프로그램을 짜던 시간도요.

  24. anigbrowl HN

    말 그대로 Doom도 돌릴 수 있어요. 새로운 얘기도 아니고요. 8년 전에 그걸 보여 주는 영상이 있는데, 만든 사람도 자기가 처음은 아니라고 말합니다. https://www.youtube.com/watch?v=y6PP_IBbOTY

    ESP32-P4 같은 신형은 훨씬 강력합니다. 듀얼 코어에 온갖 연산 가속 기능까지 들어 있고요.

  25. MeteorMarc HN

    언젠가는 칫솔의 연산 능력이 최초의 IBM PC보다 높아지는 날을 보게 되겠죠.

  26. zimpenfish HN

    이미 그런 날이 온 걸로 아는데요. 예를 들어 [0]을 보면 "TI의 MSPM0Cx MCU는 24MHz CPU, 32비트 구조, 4~16KB 플래시를 갖춘 Arm® Cortex®-M0+ 코어를 탑재해 전동 칫솔과 면도기 용도의 경제적인 설계를 제공합니다."라고 되어 있습니다. 5150[1]과 비교하면 버스 폭은 4배, CPU 클럭은 5배예요. RAM은 더 적지만요.

    [0] https://www.ti.com/lit/ab/slaaeg0/slaaeg0.pdf

    [1] https://en.wikipedia.org/wiki/IBM_Personal_Computer

  27. randerson HN

    그 말도 안 되게 대단한 신형 다이슨 칫솔은 확실히 그렇습니다. 내장 카메라의 28fps 영상을 기기 안에서 AI로 분석하거든요.

    https://www.youtube.com/watch?v=tF2piG0N5gg

  28. camel-cdr HN

    CH32V407/CH32V467은 조금 더 비싸서 두 달 전에는 개당 2.4달러였는데, RISC-V 벡터 확장의 임베디드 부분집합을 지원합니다.

    그러니까 FP 지원이 없고 SIMD 폭이 64비트라는 점만 빼면 사실상 AVX-512/SVE급 SIMD ISA를 갖게 되는 겁니다. 그래도 LMUL이 있어서 여기서 활용도를 끌어올리는 데 아주 유용할 겁니다.

  29. peesem HN

    사소한 지적인데, 5.1MP/s에서 11.2MP/s는 220% 증가가 아니라 120% 증가입니다. 2.2배 빨라진 건 맞지만, 증가율은 100%가 아니라 0%에서 시작합니다. 100% 빨라지면 두 배, 200% 빨라지면 세 배죠.

  30. seritools HN

    사소한 지적의 제곱: "2.2x faster"가 아니라 "2.2x as fast"나 "2.2 times the speed"라고 해야 합니다. 방금 지적하신 것과 같은 문제예요.

    배수 표현에 faster를 붙이면 오해를 부르기 십상입니다.

Hacker News에서 보기 ↗