91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT106x的小車上部署AI實施設(shè)計案例分析

電子設(shè)計 ? 來源:CSDN 博主 ? 作者:卓晴 ? 2020-12-28 16:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

繼卓大大發(fā)布了推文“基于RT106x電磁智能車AI算法”,并將此列為2020年智能車競賽的比賽項目之一以后,AI算法智能車受到了廣大同學和專家的熱烈討論。很多同學都想在自己的賽道上感受一下AI的魅力,但苦于沒有文檔和工具而無從下手。

在這里向大家介紹我們在RT106x的小車上部署實施AI的方法,以及一個base line的電磁導(dǎo)引神經(jīng)網(wǎng)絡(luò)模型,希望能拋磚引玉,激發(fā)同學們開動腦筋,將AI在電磁智能車上的應(yīng)用發(fā)揚光大。

先期準備

硬件條件

話不多說,首先必須有電磁智能車一輛,無線透傳模塊用于采集訓(xùn)練數(shù)據(jù)(感謝逐飛科技友情贊助)。

下圖是我們使用的車模,其中紅色框內(nèi)車身的7個電感,是AI算法中電磁車運行導(dǎo)向的輸入電感。

AI電磁實驗的車模及其傳感器配置

藍色框內(nèi)的電感是抓取訓(xùn)練數(shù)據(jù)時的導(dǎo)航電感,在AI算法中并不使用(在模型部署成功后可以拆除)。

軟件環(huán)境

Python:3.7.3

Keras:2.2.4

TensorFlow:1.13.1

模型設(shè)計

模型的目的是通過車身的電感值來推導(dǎo)出對小車舵機的轉(zhuǎn)向控制命令,這是典型的回歸問題。

我們訓(xùn)練了簡易的Baseline模型,結(jié)構(gòu)如下:

使用Netron軟件顯示的網(wǎng)絡(luò)結(jié)構(gòu)圖

如圖所示,模型只使用了Dense算子——也就是全連接層,在一些文獻里稱之為多層感知機。模型使用最新一筆7個電感的讀數(shù),參數(shù)19,301個,內(nèi)存需求很小,運算速度快,用RT1060哪怕是按16位量化也完全無壓力。

不過,各位同學不要以為設(shè)計完了模型就萬事大吉了,以為有了AI模型就可以忘掉經(jīng)典算法中調(diào)參的痛苦。小編可以負責任地告訴你,痛苦才剛剛開始……

采集數(shù)據(jù),訓(xùn)練模型

數(shù)據(jù)采集和處理

眾所周知訓(xùn)練數(shù)據(jù)是機器學習的重中之重,沒有完備的數(shù)據(jù)AI模型只不過是鏡中花水中月,沒有任何意義。訓(xùn)練數(shù)據(jù)對于模型而言就是韓信點兵多多益善,但也一定要小心不要引入錯誤數(shù)據(jù),錯誤數(shù)據(jù)會讓你出軌~啊不,是讓小車出軌,然后就無跡可尋了。小編為了訓(xùn)練數(shù)據(jù)不知道掉了多少頭發(fā),死了多少腦細胞。

我們獲取訓(xùn)練數(shù)據(jù)的方法是:小車運行經(jīng)典導(dǎo)航算法,由小車的前置電感導(dǎo)航,實時抓取車身的電感數(shù)據(jù),轉(zhuǎn)向數(shù)據(jù),再通過無線透傳模塊發(fā)送到PC端,PC上的串口工具把數(shù)據(jù)保存成文本格式。

怎么把文本格式的數(shù)據(jù)轉(zhuǎn)換成訓(xùn)練數(shù)據(jù)呢?這就要借助強大的Python了,在腳本里讀入文本文件,把7組AD值作為x_train、x_test,對應(yīng)的轉(zhuǎn)向值pwm作為y_train、y_test,并保存成numpy數(shù)組文件以方便訓(xùn)練腳本調(diào)用,建議生成四個文件x_train.npy、x_test.npy、y_train.npy、y_test.npy,注意數(shù)據(jù)格式要符合模型結(jié)構(gòu),數(shù)據(jù)范圍要壓縮至-128~127之間用于制作測試文件。

在數(shù)據(jù)轉(zhuǎn)換時需要對AD值做一個簡單濾波。以下是我們使用的濾波算法僅供參考。

簡單的濾波算法

模型訓(xùn)練

在訓(xùn)練腳本讀取訓(xùn)練數(shù)據(jù)numpy文件,并把數(shù)據(jù)范圍標準化至-1~+1的浮點數(shù)。并調(diào)整數(shù)據(jù)表形狀(reshape)為模型輸入?yún)?shù)的結(jié)構(gòu)。

輸入?yún)?shù)結(jié)構(gòu)
(建議把源代碼的若干個相關(guān)行分自然段,每個自然段添加一行中文注釋。比如reshape的,astype的)

模型函數(shù):

模型函數(shù)

模型訓(xùn)練部分代碼(添加少量關(guān)鍵中文注釋):

訓(xùn)練部分代碼
這里保存了臨時文件xxx_ctx.h5,為了訓(xùn)練中途意外停止后,重新訓(xùn)練時可以支持斷點續(xù)練。

優(yōu)化器使用RMSprop,損失函數(shù)使用mean_squared_error。

訓(xùn)練損失函數(shù)

訓(xùn)練時誤差迅速下降,下降速度越來越慢,20輪訓(xùn)練后精度即已接近最終效果。這里顯示了訓(xùn)練了120次后的結(jié)果:loss=0.0044.

訓(xùn)練過程誤差

各位看官讀到這里是不是腦海里已經(jīng)有了智能車策馬奔騰的畫面了,并且迫不及待的想把訓(xùn)練好的模型部署到小車上了?
No No No,經(jīng)常被生活打臉的小編告訴你這是完全不夠的。為什么呢?很簡單模型過擬合了。AI模型運行時會有誤差,遲早導(dǎo)致出軌,那么有哪些誤差呢:

模型計算的誤差,邏輯回歸引入的誤差,無論訓(xùn)練多少遍一定會存在一定的誤差

訓(xùn)練數(shù)據(jù)采集時的誤差,前置電感和車身電感距離上的誤差

累積誤差,前兩種誤差會導(dǎo)致小車偏離軌道以至誤差越來越大。積累到在訓(xùn)練數(shù)據(jù)里沒有出現(xiàn)過的程度時,模型就不知該怎么辦了,這是出軌的根源(說起來簡單,小編其實被虐了很久才悟出來)。

知道了癥結(jié)所在,就可以對癥下藥了:盡可能讓訓(xùn)練數(shù)據(jù)里出現(xiàn)小車的各種回歸正軌的模式。簡單的說就是要引入從偏離軌道狀態(tài)重返回軌道過程的糾正數(shù)據(jù),我們通過兩種辦法獲得糾正數(shù)據(jù)。

第1種方法:把小車電機配置成手動控制模式,但要保留轉(zhuǎn)向控制功能和數(shù)據(jù)采集功能。把小車移動到偏離位置,手動推動小車,小車原有的控制算法會矯正方向使小車回到軌道上去。同時要抓取實時數(shù)據(jù)并保存。如下視頻所示

手動控制模式采集數(shù)據(jù)

第2種方法:在用經(jīng)典算法引導(dǎo)小車時,加入隨機干擾,故意讓小車偏離軌道一會,同時讓控制算法短暫休眠,小車在此期間會出軌,待算法喚醒后趕緊再糾正回來,并且實時保存糾正的數(shù)據(jù)。如下視頻所示

經(jīng)典算法引導(dǎo)采集數(shù)據(jù)

總結(jié)一下,數(shù)據(jù)分三部分:

經(jīng)典算法導(dǎo)航的正常數(shù)據(jù)。

手動偏移的糾正數(shù)據(jù)。

經(jīng)典算法隨機干擾的糾正數(shù)據(jù)。

把三個數(shù)據(jù)合成一套訓(xùn)練數(shù)據(jù)。特別注意第2種方法中可能會引入錯誤數(shù)據(jù)(小車過度偏離賽道,手動移動小車時小車與賽道平面角度過大或與水平面距離太遠),實際操作過程中要小心。由于機器學習的不可解釋特性,錯誤數(shù)據(jù)或不合適數(shù)據(jù)會導(dǎo)致不可預(yù)知的行為,所以整個過程可能需要多次嘗試和調(diào)整。

模型部署

經(jīng)過多輪的訓(xùn)練,我們得到最終的模型文件smartcar.h5。

那么怎么部署到小車上呢,這要借助“NNCU”這一套神器了。NNCU模型轉(zhuǎn)換器可以點擊這里從網(wǎng)盤下載,這里有個大禮包,里面有nnCU工具、教學視頻、用戶手冊,還有一個MCU+AI的ppt。
通過轉(zhuǎn)換器把模型轉(zhuǎn)換成C文件。這樣就可以很方便的集成到原有的工程中了,注意還需要集成一些依賴庫和算法庫,可以參考性能測試工程(nncie_stub.uvproj)。
從網(wǎng)盤中下載解壓nncu_test_nighty.7z,運行“nncu_vbgui.bat”,選擇模型文件,配置信息如下:

模型配置信息
這里我們使用14位來量化模型,對于NNCU工具,9-16位都會使用16位整數(shù)來封裝。

16位量化和8位量化相比,以犧牲少量模型推理時間和加倍模型數(shù)據(jù)的代價,換來幾乎無損的精度。
這里還有個重要的小建議:雖然使用16位整數(shù)來表達,但實際最好只使用其中的9-15位(未用的位會自動做有符號擴展),是為了防止模型運算期間的乘累加溢出。

注意輸入數(shù)據(jù)移位指數(shù)7位,這意思是說數(shù)據(jù)里有7個二進制位用于表達分數(shù)(或者說是小數(shù))部分?;叵肭拔奶岬綔y試集和訓(xùn)練集中數(shù)據(jù)范圍是-128+127,而模型訓(xùn)練時,模型處理數(shù)據(jù)范圍是-1+1,所以量化數(shù)據(jù)里其實是放大到128倍了,也就是7個二進制分數(shù)位。

我們再看“輸出后處理類型“。由于模型是做預(yù)測,后處理需要用戶自己處理,不需要執(zhí)行引擎后處理。
中間層、輸出層分數(shù)位數(shù):由于模型輸出是-1~+1之間,10位分辨率也比較夠用,這里占用量化總位數(shù)14位中的10位來表達分數(shù)。大家也可以試試其它的,比如9-13,一般影響極小。
點擊”干活!”,會跳出后臺轉(zhuǎn)換腳本的命令窗口,稍候片刻會在nncu_pc目錄下生成model1.nncu.c—模型執(zhí)行文件。那么怎么使用以及模型量化后性能怎么樣呢?

NNCU工具里提供了測試工程“test_mcu”,各位同學可以通過這個工程測試量化后的模型性能,也可以參考這個工程來進行模型移植工作。具體的操作,可以點擊看這個視頻(末尾部分),也可以看這篇微信文章"在MCU上實現(xiàn)AI深度學習,你想知道的都在這兒"以了解更多。

測試性能,首先需要制作測試數(shù)據(jù)集。我們把ad_test_dat.npy作為輸入,把模型計算結(jié)果和pwm_test_label.npy值的平方差作為誤差,計算平均差值來評估量化后的模型性能。

把訓(xùn)練集和測試集復(fù)制到”datasetssmartcar_ad”目錄,命名如下:

存儲訓(xùn)練集和測試集合的目錄

點擊工具右下角“制作測試數(shù)據(jù)”按鈕。選擇迷你數(shù)據(jù)集中smartcar_ad,點擊”干活"。在目錄nncu_pc下生成測試文件smartcar_ad.nctv.c。

生成測試文件
下一步是測試模型性能(參照幫助視頻“nncu_使用入門.mp4”)。拷貝model1.nncu.c, smartcar_ad.nctv.c到目錄test_mcuoardsevkmimxrt1060demo_apps ncie_stub中,覆蓋原有文件:model.nncu.c,tv.nctv.c。

打開工程mdk ncie_stub.uvprojx,在helo_world.c中的測試函數(shù)CIETest,模型計算測試集求得平均差值。平均差值越小表示模型在測試集的擬合性越高。但注意這是沒有累積誤差情況下,實際上需要多加入回歸正軌的數(shù)據(jù),否則即使差值小也不能保證實際效果,只是模型過擬合,在測試集上表現(xiàn)的很好。

應(yīng)用模型激素測試集合進行測試

CI_RunModelXIP_NoCopyOutput(pvModel, pImg + 8, (void**)&g_out);

是模型執(zhí)行的函數(shù)調(diào)用,用法如下:

pvModel – 模型數(shù)據(jù),在model1.nncu.c定義,包含了模型的信息和參數(shù)

pImg + 8 – x_text 也就是7個AD數(shù)值

g_out – 模型輸出buffer,根據(jù)配置輸出為16bit,帶有分數(shù)位的數(shù)據(jù)。需要移位得到-128~+127的數(shù)值范圍才能發(fā)送給舵機。

編譯工程,通過JLink連接板子,并打開串口程序,接收串口的調(diào)試信息。開始debug模式,工程默認使用sram運行程序,等待測試程序執(zhí)行。執(zhí)行結(jié)束后,串口會輸出執(zhí)行結(jié)果:即平均差值,和平均執(zhí)行時間。

小編訓(xùn)練的模型6000次平均差值是16,每次計算時間1.87dms——0.187ms。

o4YBAF_pktSAbcYgAACOxclUo0U798.png

串口輸出測試結(jié)果

實戰(zhàn)演習

經(jīng)過模擬測試,模型性能符合預(yù)期,下一步就是把相關(guān)代碼集成到電磁車系統(tǒng)中。首先集成nncie庫nncie_imxrt10x0.lib,model.nncu.c,以及nncu_mcucmsis_nnSource中的CMSIS_NN相關(guān)代碼(參照測試工程)。其次集成模型的調(diào)用方法:

o4YBAF_pkuGABtizAADaoN6bz3I138.png

模型調(diào)用方法
model1數(shù)組就是模型數(shù)據(jù),ad_array是7個電感數(shù)據(jù)(如果12bit,需要移位到8bit),pwm是模型計算的轉(zhuǎn)向值(范圍-128+127)。請注意,制作訓(xùn)練數(shù)據(jù)時,為了方便訓(xùn)練計算,我們把轉(zhuǎn)向值范圍由真實值-420420壓縮到了-128127,所以在控制舵機時,需要把計算所得的轉(zhuǎn)向值放大到-420+420。

現(xiàn)在小伙伴可以在賽道上驗證模型的實際性能了,可能第一次不會成功,需要多些耐心處理訓(xùn)練數(shù)據(jù)反復(fù)的重新訓(xùn)練,迭代調(diào)試了。

結(jié)果展示

這是小編訓(xùn)練的模型的實際運行情況(摘除了前置采集裝置)

AI電磁車模實際運行情況

未來展望

以上是AI機器學習部署到電磁智能車的全過程,可以驗證機器學習在電磁智能車上實施的可行性。
在這個過程中遇到很多問題,主要是處理分析訓(xùn)練數(shù)據(jù),經(jīng)過多次迭代訓(xùn)練才得到一個基本可靠的模型。
當然還存在一些有待改進地方:

小車目前還是勻速運動,沒有速度變化,怎樣設(shè)計更好的模型來引入速度參數(shù)?

數(shù)據(jù)獲得方式是不是有更好的辦法,通過對電磁軌道的模擬,來通過公式工具推導(dǎo)訓(xùn)練數(shù)據(jù)?

怎樣可以引入更加豐富的賽道內(nèi)容,比如交通引導(dǎo)線,指示燈,障礙物?等等。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4838

    瀏覽量

    107875
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39943

    瀏覽量

    301570
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AI端側(cè)部署開發(fā)(SC171開發(fā)套件V2-FAS)

    AI端側(cè)部署開發(fā)(SC171開發(fā)套件V2-FAS) 序列 課程名稱 視頻課程時長 視頻課程鏈接 課件鏈接 工程源碼 1 Fibo AI Stack模型轉(zhuǎn)化指南 27分19秒 https
    發(fā)表于 02-11 11:44

    AI端側(cè)部署開發(fā)(SC171開發(fā)套件V3)2026版

    AI端側(cè)部署開發(fā)(SC171開發(fā)套件V3)2026版 序列 課程名稱 視頻課程時長 視頻課程鏈接 課件鏈接 工程源碼 1 Fibo AI Stack模型轉(zhuǎn)化指南 27分19秒 https
    發(fā)表于 01-15 10:31

    工廠人員定位軟件管理系統(tǒng)從部署實施流程、ROI分析到風險與避坑要點詳解(二)

    本文詳解工廠人員定位系統(tǒng)部署全流程,涵蓋勘測、POC驗證、分階段實施及驗收培訓(xùn);結(jié)合ROI分析與風險規(guī)避要點,助力企業(yè)實現(xiàn)安全、高效、合規(guī)的人員管理智能化升級。
    的頭像 發(fā)表于 01-14 17:33 ?122次閱讀

    如何在NVIDIA Jetson AGX Thor上部署1200億參數(shù)大模型

    我們將嘗試能否在 Jetson AGX Thor 上部署并成功運行高達 1,200 億參數(shù)量的 gpt-oss-120b 大模型。
    的頭像 發(fā)表于 12-26 17:06 ?4894次閱讀
    如何在NVIDIA Jetson AGX Thor<b class='flag-5'>上部署</b>1200億參數(shù)大模型

    1 GHz Arm? Cortex?-M85 MCU上部署AI模型

    ,即可體驗在1GHzArmCortex-M85MCU上部署AI模型。(公眾號后臺回復(fù)RA8P1,加入交流群)目錄應(yīng)用效果預(yù)覽流程圖環(huán)境準備訓(xùn)練模型ai模型轉(zhuǎn)換ai
    的頭像 發(fā)表于 12-02 21:04 ?9239次閱讀
    1 GHz Arm? Cortex?-M85 MCU<b class='flag-5'>上部署</b><b class='flag-5'>AI</b>模型

    迅為如何在RK3576上部署YOLOv5;基于RK3576構(gòu)建智能門禁系統(tǒng)

    迅為如何在RK3576開發(fā)板上部署YOLOv5;基于RK3576構(gòu)建智能門禁系統(tǒng)
    的頭像 發(fā)表于 11-25 14:06 ?1822次閱讀
    迅為如何在RK3576<b class='flag-5'>上部署</b>YOLOv5;基于RK3576構(gòu)建智能門禁系統(tǒng)

    求一套聽聲辯位的算法,并在板機上部署?

    求一套聽聲辯位的算法,并在板機上部署。有謝。
    發(fā)表于 11-10 23:07

    如何快速在云服務(wù)器上部署Web環(huán)境?

    如何快速在云服務(wù)器上部署Web環(huán)境
    的頭像 發(fā)表于 10-14 14:16 ?681次閱讀

    如何在基于Arm架構(gòu)的邊緣AI設(shè)備上部署飛槳模型

    當 Arm 與領(lǐng)先的開源深度學習平臺強強聯(lián)合,會帶來什么?那就是推動創(chuàng)新的“火箭燃料”。Arm 攜手百度,利用雙方在高能效計算平臺與 AI 模型的技術(shù)積累,助力廣大開發(fā)者加快邊緣 AI 解決方案的開發(fā)和部署。
    的頭像 發(fā)表于 09-06 14:07 ?1126次閱讀

    ai_cube訓(xùn)練模型最后部署失敗是什么原因?

    ai_cube訓(xùn)練模型最后部署失敗是什么原因?文件保存路徑里也沒有中文 查看AICube/AI_Cube.log,看看報什么錯?
    發(fā)表于 07-30 08:15

    Arm方案 基于Arm架構(gòu)的邊緣側(cè)設(shè)備(樹莓派或 NVIDIA Jetson Nano)上部署PyTorch模型

    本文將為你展示如何在樹莓派或 NVIDIA Jetson Nano 等基于 Arm 架構(gòu)的邊緣側(cè)設(shè)備上部署 PyTorch 模型。
    的頭像 發(fā)表于 07-28 11:50 ?2891次閱讀

    stm32N657上部署cubeAI生成代碼,編譯出錯的原因?怎么解決?

    你好,要怎么在stm32N657上部署cubeAI生成代碼呢,編譯出錯,我使用cubeAI生成的手寫數(shù)字模型的代碼,編譯報錯 要怎么配置呢,我看其他AI demo都是分了兩個文件,這里要怎么燒錄進去使用呢?
    發(fā)表于 06-20 06:31

    STM32F769是否可以部署邊緣AI?

    STM32F769是否可以部署邊緣AI
    發(fā)表于 06-17 06:44

    手把手教程:基于RT-Thread在單片機上部署大模型AI終端

    還在羨慕那些動輒幾十GB顯存的AI大佬?今天,就讓你體驗到與大語言模型暢聊的快感!誰說嵌入式設(shè)備只能閃爍LED?今天我們就要讓它"口吐蓮花"!從"
    的頭像 發(fā)表于 04-11 18:19 ?2295次閱讀
    手把手教程:基于<b class='flag-5'>RT</b>-Thread在單片機<b class='flag-5'>上部署</b>大模型<b class='flag-5'>AI</b>終端

    RAKsmart企業(yè)服務(wù)器上部署DeepSeek編寫運行代碼

    在RAKsmart企業(yè)服務(wù)器上部署并運行DeepSeek模型的代碼示例和詳細步驟。假設(shè)使用 Python + Transformers庫 + FastAPI實現(xiàn)一個基礎(chǔ)的AI服務(wù)。主機推薦小編為您整理發(fā)布RAKsmart企業(yè)服務(wù)器上部署
    的頭像 發(fā)表于 03-25 10:39 ?715次閱讀