中圖分類(lèi)號(hào):G434文獻(xiàn)標(biāo)識(shí)碼:A論文編號(hào):1674-2117(2025)09-0083-03
問(wèn)題的提出:網(wǎng)頁(yè)前端訓(xùn)練模型如何本地推理
浦育平臺(tái)(OpenInnolab)的“AI體驗(yàn)”欄目提供了一些AI模型訓(xùn)練實(shí)驗(yàn),用戶通過(guò)網(wǎng)頁(yè)就能采集數(shù)據(jù),形成數(shù)據(jù)集,然后訓(xùn)練模型、測(cè)試模型。因?yàn)槠溆?xùn)練模型的算力來(lái)自瀏覽器前端,所以實(shí)現(xiàn)了環(huán)境的零配置,做到了算力的零提供。這就降低了AI模型訓(xùn)練實(shí)驗(yàn)的實(shí)施難度,使一個(gè)班級(jí)的學(xué)生同時(shí)在課堂上訓(xùn)練模型得以實(shí)現(xiàn)。
2024年年初,XEdu團(tuán)隊(duì)在網(wǎng)頁(yè)前端訓(xùn)練模型的基礎(chǔ)上增加了模型轉(zhuǎn)換功能,可以導(dǎo)出為通用的ONNX模型,并可以用XEduHub進(jìn)行推理,從而實(shí)現(xiàn)了在網(wǎng)頁(yè)上用無(wú)代碼方式訓(xùn)練模型,然后用低代碼部署在本地計(jì)算機(jī)或者各種開(kāi)源硬件上。這樣一來(lái),網(wǎng)頁(yè)前端訓(xùn)練的模型不再是“體驗(yàn)”,而是能部署應(yīng)用,是一個(gè)能解決問(wèn)題的工具,實(shí)現(xiàn)了“學(xué)用結(jié)合”。
可行性分析:聲音分類(lèi)模型能否導(dǎo)出為ONNX格式
在網(wǎng)頁(yè)前端訓(xùn)練的聲音分類(lèi)模型能不能導(dǎo)出為ONNX格式?答案是肯定的。這些在網(wǎng)頁(yè)上訓(xùn)練模型的功能,大都基于TensorFlow.JS(簡(jiǎn)稱為T(mén)FJS)開(kāi)發(fā)。借助“tf2onnx”的庫(kù),TFJS的模型都能轉(zhuǎn)換為ONNX,支持OnnxRuntime框架推理。筆者曾經(jīng)在《在行空板上部署Web前端訓(xùn)練的AI模型》一文(發(fā)表于《中國(guó)信息技術(shù)教育》雜志2023年第11期)中做過(guò)詳細(xì)介紹。只可惜轉(zhuǎn)換后的模型雖然能推理卻無(wú)法真正使用,因?yàn)橥评頂?shù)據(jù)的前處理工作依然是難題。
筆者用一個(gè)流程圖來(lái)講解模型訓(xùn)練和推理過(guò)程(如下頁(yè)圖1)。大部分模型的訓(xùn)練數(shù)據(jù)都要先經(jīng)過(guò)“前處理”,模型輸出的推理結(jié)果,也要進(jìn)行“后處理”。數(shù)據(jù)處理的方式很多,以大家熟悉的“圖像分類(lèi)”為例,要根據(jù)具體的算法(網(wǎng)絡(luò)結(jié)構(gòu)),將原始圖像轉(zhuǎn)換為規(guī)定的格式,如“LeNet”需要轉(zhuǎn)換為 的灰度圖,“MobileNet”需要轉(zhuǎn)換為
的RGB圖。在模型訓(xùn)練完成后,推理數(shù)據(jù)也要使用同樣的方式處理,否則無(wú)法正常推理。
在網(wǎng)頁(yè)前端訓(xùn)練聲音分類(lèi)模型,實(shí)際上先要將聲音數(shù)據(jù)轉(zhuǎn)換為類(lèi)似圖像的數(shù)據(jù)。其使用短時(shí)傅里葉變換(short-timeFouriertransform,STFT)之類(lèi)的技術(shù),將一維的聲音信號(hào)變?yōu)槎S的時(shí)頻譜圖。時(shí)頻譜圖的橫坐標(biāo)為時(shí)間,縱坐標(biāo)為頻率,顏色深度為對(duì)應(yīng)時(shí)間和對(duì)應(yīng)頻率的大小,變換前后的信號(hào)如圖2所示?!对谛锌瞻迳喜渴餡eb前端訓(xùn)練的AI模型》一文對(duì)具體原理做過(guò)介紹,感興趣的讀者可以參考。
在了解模型訓(xùn)練過(guò)程之后,就可以進(jìn)一步討論數(shù)據(jù)前處理的問(wèn)題了。聲音模型是利用前端代碼將聲音轉(zhuǎn)換為“時(shí)頻譜圖”后再訓(xùn)練的,但是這些“時(shí)頻譜圖”的具體格式、轉(zhuǎn)換的方法,都需要分析源代碼才能了解。只有了解了具體的做法,才能找到合適的Python庫(kù),用Python代碼實(shí)現(xiàn)同樣的數(shù)據(jù)前處理工作,再將處理好的數(shù)據(jù)送到模型中推理。機(jī)器學(xué)習(xí)的應(yīng)用原則就是訓(xùn)練模型的數(shù)據(jù)和推理數(shù)據(jù)要保持一致。
問(wèn)題的解決:使用librosa庫(kù)實(shí)現(xiàn)數(shù)據(jù)前處理
筆者在AI平臺(tái)開(kāi)發(fā)團(tuán)隊(duì)的支持下,分析了TFJS的代碼,確認(rèn)了一些重要的信息,如提取的幀數(shù)為43,特征維度是232等。音頻轉(zhuǎn)“時(shí)頻譜圖”前處理工作,借助Librosa庫(kù)來(lái)實(shí)現(xiàn),最終在本地用Python代碼完成了聲音分類(lèi)模型的推理。參考代碼如圖3所示。
現(xiàn)在,就可以簡(jiǎn)單介紹在網(wǎng)頁(yè)端訓(xùn)練聲音分類(lèi)模型并在本地推理的具體過(guò)程了。
① 打開(kāi)中鳴AI平臺(tái),在“AI體驗(yàn)”欄選擇“聲音分類(lèi)”(地址:https://ai.zmrobo.com/).如圖4所示,在網(wǎng)頁(yè)端左邊增加類(lèi)別,然后錄制聲音、提取特征。因?yàn)椴僮骱芎?jiǎn)單,具體訓(xùn)練過(guò)程不再描述。需要注意的是,類(lèi)別中需要有“背景噪音”。
② 下載“ONNX”模型,使用上面提供的代碼進(jìn)行推理。
問(wèn)題的延續(xù):如何用XEduHub推理模型
完成本地推理僅僅是第一步。
XEdu的設(shè)計(jì)理念是模型的訓(xùn)練工作和推理分離,所有的模型推理都由XEduHub來(lái)實(shí)現(xiàn)。這樣做可以讓模型推理的代碼一致,降低學(xué)習(xí)和應(yīng)用的難度。所以,我們可以借助XEduHub提供的repo功能,自己寫(xiě)一個(gè)第三方的推理代碼,接入XEdu的生態(tài)。
筆者設(shè)計(jì)的代碼如圖5所示,其中“xiezuoru/tfjs_speech\"為推理代碼下載信息,“model.onnx”為聲音分類(lèi)模型名稱,“test.wav”為要推理的聲音文件。運(yùn)行這段代碼,推理的核心代碼(如圖6)會(huì)從網(wǎng)上自動(dòng)下載到本地。
總結(jié):用開(kāi)源的方式共建AI學(xué)習(xí)工具生態(tài)
中小學(xué)能不能學(xué)習(xí)AI,取決于學(xué)習(xí)工具的使用門(mén)檻是否足夠低。十年前,一批創(chuàng)客教師和企業(yè)合作,設(shè)計(jì)了掌控板、行空板、Mind+和SIoT等一系列低門(mén)檻的軟硬件,使義務(wù)教育的“過(guò)程與控制”“物聯(lián)網(wǎng)”得以落地?,F(xiàn)在,人工智能教育同樣需要多方合作,《教育部辦公廳關(guān)于加強(qiáng)中小學(xué)人工智能教育的通知》也在強(qiáng)調(diào)統(tǒng)籌高校、教科研機(jī)構(gòu)、高科技企業(yè)、中小學(xué)校等各方力量,統(tǒng)籌推進(jìn)中小學(xué)和大學(xué)人工智能教育一體化發(fā)展。