【本期推薦】 8歲小朋友的兒童節,有點硬核,一起來認識這些小小程式員,看他們如何coding出一個與衆不同的童年。

摘要: 如果還能再過一次兒童節……
本文分享自華為雲社群《“夢回童年,盡享美食“--ModelArts + Wechaty 識别童年美食》,原文作者:華為雲EI專家胡琦。
大家好,我是Copy攻城獅胡琦,昨晚終于把憋了很久的 ModelArts + Wechaty 實作有趣的美食圖檔識别應用跑通了。盡管結合 Wechaty 調用 AI 相關服務在多年以前就被千人實作過了,不過作為小白的我能夠借助一站式AI開發平台 ModelArts 新手制作資料集、訓練模型并部署,最終通過最好的微信開發庫 Wechaty 實作調用 AI 服務的聊天小助手,還是十分有趣的。當然,我也迫不及待地将我的實踐分享給大家,也希望能夠獲得各位大佬的指導!
我們從AI開發流程出發,當我确定了我的目的是要結合 ModelArts + Wechaty 來實作童年美食識别,基本上我的技術選型也就确定了,鑒于我學藝不精,零基礎都能上手的一站式AI開發平台ModelArts和四行代碼就能實作聊天機器人的微信開發庫 Wechaty,便成了我唯一的選擇。準備資料的階段,我有幸遇到了前輩貢獻的代碼,是以能夠快速從某度圖檔擷取我想要的圖檔,具體操作可以檢視我的曆史文章《新手小白如何快速擷取資料集》。我用同樣的手法擷取到了鳳梨啤、大白兔奶糖、幹脆面、果丹皮、漢堡橡皮糖、猴王丹、花生牛軋糖、健力寶、酒心巧克力、烤蕃薯、辣條、老冰棍、三色冰淇淋、沙琪瑪、跳跳糖、娃哈哈AD鈣、旺旺碎冰冰、旺仔牛奶、西瓜泡泡糖、仙貝、魚皮花生、玉米軟糖、真知棒、咪咪蝦條共24個分類,從7200張圖檔中一張一張分揀,最終标注3543張,實作了一個暫時看上去想那麼回事的資料集--《"兒童節特輯"--8090的童年美食》。
不過,目前從資料的标簽分布來看,不太合理,被标注最多的标簽數量多達268個,而被标注最少的标簽數量僅23個,兩者差了一個數量級,是以訓練出來的模型大機率會跑偏。
在ModelArts上進行資料标注時,其實也是有一定技巧的。比如,我在本地擷取到了大量的圖檔,通過 OBS 的指令行工具上傳到 OBS 桶中之後,由于此次标注是圖像分類,是以我在标注時可以通過圖檔存放的 OBS 目錄來快速篩選出目前要分揀的标簽以及進行标注。目前ModelArts資料集處理時單頁最多可顯示60張圖檔,這也給我對圖檔進行精挑細選提供了強有力的支援。其次,在進行圖檔挑選時,可以從最後一頁進行,每次删除圖檔時順帶把源檔案也從 OBS 中移除,移除往前直至處理到第一頁。最後,又可以全選目前頁進行标注。整個資料集從資料擷取到資料處理再到資料集釋出,花了不到2小時,個人感覺對新手小白已經很友好了!
如果您對《"兒童節特輯"--8090的童年美食》資料集感興趣,可以在 AI Gallery 進行一鍵下載下傳,既可以下載下傳到 OBS 也也可直接下載下傳到 ModelArts 資料集。
基于資料集,在 ModelArts 平台上除了可以自行開發算法并訓練模型,也可以使用 AI Gallery 的訂閱算法或者直接使用 ModelArts 的自動學習來訓練模型。這裡為了更簡便的操作,本大獅就直接使用簡單粗暴的自動學習來實作,主要想看到目前的資料集能訓練出怎麼樣的結果(PS:其實主要是免費,「請把免費打在評論區」),您期待嗎?
在建立完自動學習的任務運作9分鐘之後,我 Get 到了一個模型,從訓練結果來看還是非常理想的,不過究竟是騾子是馬,還得看最終部署之後的效果。
表中是各個标簽所對應的參考值,其中F1值是模型精确率和召回率的權重調和平均,用于評價模型的好壞,當F1值較高時說明模型效果較好;精确度指的是被模型預測為某個分類的所有樣本中,模型正确預測的樣本比率,反映模型對負樣本的區分能力;召回率指的是被使用者标注為某個分類的所有樣本中,模型正确預測為該分類的樣本比率,反映模型對正樣本的識别能力。
目前 ModelArts 支援一個免費的部署服務執行個體,因為我之前的實踐已經占用了名額,是以當我再次在自動學習中部署模型時會提示以下圖中的報錯,進而我隻能去到「部署線上--線上服務」手動建立一個服務執行個體。
在部署模型的時候,我們可以根據自身的需求添加一些個性化設定或者其他功能,比如資料采集、難例篩選等等。
看到服務部署成功之後,我已經迫不及待地想先調試一下,随便找了一張「跳跳糖」的圖檔,讓 AI 識别一下,哎呀還不錯哦,感覺比我想象中的要好。ModelArts 的開發部分就告一段落,接着我們按照線上服務的調試指南進行與 Wechaty 的聯合開發,“Talk is cheap. Show me the code.”
此時,我們獲得的資訊: AI 服務的線上位址以及file形式的輸入參數images。
先看看我們最終的呈現效果,也就是像微信機器人發送指定關鍵字之後再發送圖檔,微信機器人就會調用 ModelArts 的線上服務來識别圖檔并将結果傳回給微信端。這裡我們就需要用到 Wechaty 這個強大的微信開發庫。關于 Wechaty 的詳細情況,您可以通路 Wechaty 的官網了解--https://wechaty.js.org/。 從域名來看,這個開發庫應該和 JavaScript 有關,經過翻閱文檔,我得知,新手使用 Wechaty 僅需四行代碼:
我們可以建立一個檔案夾,執行<code>npm init</code>初始化一個項目,然後執行上述代碼,接着建立<code>index.js</code>,寫入:
基本上就完成了 Wechaty 部分的開發,執行<code>node index.js</code>就能在控制台顯示一個二維碼,其實類似我們登入桌面端的微信,接着我們主要需要解決的問題:
監聽微信消息 -- 可以使用 <code>bot.on('message')</code>來實作;
對接 ModelArts -- 可以使用 token 鑒權方式通路;
檔案傳遞 -- 可以通過 <code>form-data</code>進行資料轉換。
基本代碼實作如下:
完整代碼參見: https://github.com/hu-qi/modelarts-wechaty
溫馨提示:使用 Wechaty 的相關風險請自行評估。
1. 使用這種方式登入微信存在被微信官方風控的可能性,嚴重者可封号;
2. 非所有賬号可使用此方案進行登入/操作,如果您的賬号無法通過 Wechaty 提供的接口登入,則無法使用。
擷取更多 AI 相關資料、算法、模型等 AI 資産,請點選“了解更多”,AI Gallery等您!
點選關注,第一時間了解華為雲新鮮技術~