

摘要:中小學人工智能教育的核心要素是模型,但目前缺少相應的技術規范和社區平臺,導致中小學生的人工智能學習成果難以有效“流通”。本文介紹了XEduHub的“repo”功能,提出借助XEduHub和魔搭社區分享AI模型作品的方法,并以MMEdu的“車牌識別”模型為例,展示了分享AI模型作品的具體過程。
關鍵詞:XEduHub;人工智能教育
中圖分類號:G434 文獻標識碼:A 論文編號:1674-2117(2024)19-0090-03
新一代人工智能教育的核心要素是模型。中小學的人工智能教育一般要圍繞模型展開,經歷從搭建、訓練、部署到應用的過程,最終解決一個真實問題。然而,在信息科技類課程中學生的作品類型有Word文檔、演示文稿、Flash動畫等,也有網頁、程序代碼等,但幾乎很少看到中小學生發布或者分享模型方面的學習成果。
人工智能教育的學習成果有哪些?筆者在編寫清華大學出版社出版的《信息科技》教材時曾經討論過這個問題,并對學生的學習成果進行了梳理,認為大致有如下幾類:數據集、模型、訓練代碼、推理代碼、在模型基礎上開發的應用程序等。相對來說,要求“分享”模型作品很簡單,但是如何讓分享的模型有效“流通”起來卻并不容易。
人工智能模型的有效“流通”是一道難題
人工智能模型的有效“流通”是一道難題,首先難在技術規范上。人工智能的開發工具很多,僅Python代碼中就有Scikit-Learn、SciPy和BaseML等傳統機器學習工具,還有TensorFlow、PyTorch和PaddlePaddle等深度學習開發框架。幾乎每一種開發框架都會有自己特定類型的模型,如PyTorch的模型格式為“.pth”,TensorFlow的模型格式為“.h5”等。那么,中小學生選擇哪一種類型的模型進行分享呢?還有,模型推理往往需要對數據進行前處理和后處理,僅僅提供模型顯然沒辦法讓其他人方便地拿來就用,達不到“流通”的目的。
其次,還缺少方便青少年分享模型的社區。模型分享是一個相對比較專業的工作,直接將模型作品放在云盤上,顯然不是一個可行的分享方式,也很難達到分享交流的目的。例如,人工智能企業或者研究者往往會選擇Hugging Face、魔搭(ModelScope)等開源模型社區或者平臺。這些平臺會提供特定的運行環境和下載協議,吸引了越來越多的愛好者前來“尋寶”。
借助XEduHub分享學生人工智能模型
為了方便人工智能模型的交流,XEduHub在設計之初就選擇了ONNX Runtime推理框架。支持ONNX Runtime的企業很多,其模型格式為ONNX,全稱為Open Neural Network Exchange,即開放神經網絡交換格式,旨在實現不同深度學習框架之間的模型互操作性,便于模型的共享和部署??紤]到更多的模型需要快速支持,XEduHub設計了“repo”功能,無意中為學生模型的有效流通問題提供了一個不錯的解決方案。
1.XEduHub的“repo”功能
“repo”一詞是“Repository(倉庫)”的縮寫,是指用來存儲代碼、模型以及其他項目文件的地方。想要分享任何一個模型或者其他作品,都需要將相關的文件放在一個公共的區域,如GitHub、GitLab、魔搭等。XEduHub的“repo”功能也一樣,要求分享者將代碼、模型等文件放在公共的網絡空間中,公開其空間信息。使用者通過空間信息,將網絡空間的項目自動下載(同步)到本地(如圖1),達到了分享的目的。
經過多方面的比較XEduHub最終選擇魔搭社區為統一分享的空間。分享者需要在開源模型社區上創建一個新的倉庫(repo),并上傳所需的代碼、模型等項目文件。這個倉庫的名稱就是workflow對象的“repo”參數名稱。
2.XEduHub的“repo”功能的基礎代碼
在Python程序中使用以“repoUS9m5IA4VYw0dDcT6XaUlKaXeJRuNZytvppfZ0MfNqA=”形式分享的模型僅需要三行代碼,如圖2所示,其中第二行代碼將云端的項目同步到本地,并實例化為模型以供調用,第三行代碼則調用了模型的推理函數,對數據進行處理并返回推理計算的結果。如果云端項目已經同步,則不會重復下載,其規則和XEduHub的其他模型保持一致。
人工智能模型的分享實例
這里以MMEdu訓練的車牌檢測模型為例,展示一個人工智能模型的分享流程。首先,利用MMEdu的模型轉換功能,將PyTorch模型格式轉換為ONNX模型格式,并命名為“model.onnx”。其次,編寫一個名為“data_process.py”的模型推理代碼,可以實現“端到端”推理。在這里,“端到端”指的是輸入一張圖片,即可輸出模型的推理結果——圖片中車牌的坐標信息?!癲ata_process.py”的核心代碼如圖3所示。
在圖3所示的代碼中,定義了一個函數get_model_path來輔助模型實例化。另一個函數inference則定義了核心的模型推理參數、流程和返回值。函數名“inference”不能修改,內容可以根據模型的具體情況來實現。接著,將這兩個文件上傳到魔搭社區。如用戶名為“yikshing”,創建的倉庫名為“det_plate_ssd”,那么“repo”的參數名稱就是“yikshing/det_plate_ssd”(如圖4)。圖5中的代碼實現了調用AI模型,推理一張名為“plate0.png”的圖片。這段代碼可以在任意支持Python并安裝好XEduHub的電腦上運行。
借助“repo”功能實現更復雜的“流通”
在使用過程中筆者發現,結合一些創意,“repo”功能還能實現更復雜的“流通”。
①在一個人工智能項目中多次“repo”其他模型。例如,在一個語音交互的智能作品中,可以將其劃分為“語音識別+智能問答+語音合成”的模型組合,借助XEduLLM(大語言模型庫)和兩個repo的配合,實現語音交互的完整應用。事實上,很多生活中的真實問題需要多個模型聯合工作。用“repo”來組合這些模型,流程清晰且代碼簡潔。
②使用“repo”分享機器學習的模型?!皉epo”功能一開始僅僅為深度學習的模型分享而設計,所以規定了必須有model.onnx和data_process.py兩個文件。但用戶只要將模型的擴展名改為“.onnx”,就可以用“repo”方式分享機器學習的模型了。
③在項目中同時分享其他代碼資源。“repo”功能會將一個項目中的全部文件都同步在本地,因此可以在項目中提供一些與模型相關的資源,如數據采集工具、模型訓練代碼、功能介紹視頻等,甚至可以同步教學案例,方便教師們的交流分享。
④使用“repo”傳遞各種非AI的代碼?!皉epo”功能的核心在于data_process.py文件。使用者可以在inference函數中加入各種復雜的功能,如可以設計一個圖形化的交互界面,用gradio來實現一個網頁端的編程助手等。
結語
XEduHub的“repo”功能為模型的分享而開發,因此項目組還在XEdu文檔中提供了“repo”倉庫收集頁面,匯集了各種自定義的模型,方便大家查詢,如人臉情緒判斷、人臉特征提取、語音識別、語音合成等。只要看到有趣、有用的開源模型,或者自己訓練了特定的模型,使用者都可以用這樣的方式分享出來。因而,中小學生訓練的人工智能模型也會因此相互“流通”起來。