▼點擊下方名片,關注公眾號,獲取更多精彩內容▼
這里是《賀老師講嵌入式AI》,我是《嵌入式AI:讓單片機學會思考》課程主理人,專注AI在MCU上的落地實踐。
關注公眾號,回復【嵌入式AI】,可以免費獲取更多賀老師準備的專業資料。
模型文件就是菜譜。它記錄先做什么、后做什么,也保存了每一步需要使用的參數。
菜譜里寫“兩個雞蛋、一個番茄、少量鹽”,模型里同樣保存著大量已經確定好的數值。訓練模型的過程,可以理解成反復試菜,最后把合適的做法和用量寫進菜譜。
張量就是食材和半成品。剛拿出來的雞蛋和番茄是輸入;切好的番茄、打散的雞蛋和炒到一半的菜是中間結果;最后裝盤的番茄炒蛋是輸出。它們都有數量和形狀,所以模型會要求輸入必須按照規定的大小擺放。
算子就是打蛋、切菜和翻炒這些動作。模型不會籠統地說“做一道菜”,它會把任務拆成許多可以執行的小步驟。神經網絡中的加法、卷積和激活,都可以先理解成不同的烹飪動作。
解釋器就是照著菜譜做菜的廚師。它能讀懂模型中寫的菜譜的步驟,找到每一步需要的輸入,調用對應的算子,然后把這一步的結果交給下一步。所有步驟執行完,模型才會給出最終判斷。
Resolver 是允許使用的廚具清單。菜譜里寫了“切番茄”,廚房里就要有刀;菜譜里寫了“翻炒”,就要準備鍋和鍋鏟。Resolver 告訴解釋器:這個單片機工程里已經準備了哪些算子,可以完成哪些計算。
在電腦上運行模型,就像是在設備齊全的大廚房里做菜。刀、鍋、烤箱、攪拌機都已經準備好了,操作臺也足夠大。
菜譜里突然出現一種新動作,比如讓廚師跳個舞,廚房里也有足夠的空間給廚師耍。
單片機更像露營時帶的小灶。背包(Flash)容量有限,桌面(RAM)也很小。做番茄炒蛋只需要鍋、刀、碗和鍋鏟,就沒有必要背上一臺烤箱。單片機工程也會只帶模型真正需要的算子,節省寶貴的存儲空間。
這也解釋了一個常見現象:同一個模型在電腦上運行正常,放進單片機卻提示某個算子找不到。這個問題就出在廚具清單里少登記了一件工具。
Flash 可以理解成你要去露營時候的背包,用來裝模型和執行這些動作所需的程序;
RAM 更像做菜時的案板和操作臺,用來擺放輸入、中間結果和輸出。
背包裝得下菜譜,不代表案板一定放得下所有半成品。因此,模型文件很小,運行時仍然可能缺少 RAM。
理解這套關系以后,再看到“缺少算子”“模型無法分配內存”之類的提示,就不用把它們都歸結為“單片機性能不夠”。先想想菜譜要求什么動作、廚房有沒有對應工具、案板還能不能放下半成品,問題會清楚很多。


END