程式忍者PGNinja

Hacker News

開發者在 2 美元微控制器上用 SIMD 加速電腦視覺

· 開發者 shraiwi 在僅 2 美元的 ESP32-S3 微控制器上,利用其冷門的 SIMD 指令集加速角點偵測,速度提升超過兩倍。

開發者 shraiwi 在部落格分享了一個專案:在價格只要約 2 美元的 ESP32-S3 微控制器上,實作一套 SIMD 加速的 FAST 角點偵測演算法。FAST 角點偵測是電腦視覺裡常用來找出影像中明顯特徵點的方法,常見於追蹤、辨識等應用。這個專案要解決的問題,是如何在這麼便宜、資源有限的晶片上,也能跑出堪用的即時影像處理速度。

ESP32-S3 內建 128 位元的 SIMD 指令集,但這組指令集功能有限且少被討論:它只支援有號 8 位元的比較運算,而影像像素資料通常是無號格式;同時也無法直接讀取未對齊的記憶體位址,飽和運算還容易造成數值溢位。作者的解法包括用 XOR 0x80 把無號像素值翻轉進有號範圍,迴避飽和減法的限制,並利用兩個相鄰暫存器的切片提取指令來處理未對齊的資料,一次平行處理 16 個像素。

這個專案的效果相當明顯:處理速度從每秒 5.1 百萬像素提升到 11.2 百萬像素,等於提升了 220%,處理一張 QVGA 解析度影像大約只要 6 毫秒,足以支援 VGA 解析度、每秒 30 張畫面的即時影像串流。社群對這類文章感興趣的地方,通常在於作者如何啃透一塊便宜晶片冷門的硬體特性,再用巧妙的位元技巧換出效能。

對正在學程式、對硬體與演算法有興趣的孩子來說,這是一個很好的例子:便宜的硬體不代表不能做有趣的事,重點是理解晶片規格、找出限制,再用創意的方法繞過去。想進一步學習的話,可以從認識二進位表示、位元運算(像是 XOR)開始,這些正是這個專案解法的基礎。

硬體演算法開源電腦視覺

其他新聞