快速構(gòu)建ML Kit自定義模型,實(shí)現(xiàn)特定領(lǐng)域圖像/文本分類

一犀呼、前言

如何以最低成本開發(fā)自定義深度學(xué)習(xí)模型洲押?可以使用華為機(jī)器學(xué)習(xí)最近推出的自定義模型服務(wù),該服務(wù)制作的模型大小可控圆凰,能夠以最小成本運(yùn)行到端側(cè)杈帐。僅需要簡單的接口調(diào)用就可以進(jìn)行推斷,主要支持圖片分類和文本分類處理自己定義的特定場景分類专钉。下面以圖片分類為例讓我們來看看自定義模型的訓(xùn)練和使用方法挑童。

二、訓(xùn)練和使用

1跃须、首先通過Android Studio的Marketplace安裝HMS Toolkit站叼,安裝完成后需重啟Android Studio.



2、通過AI Create功能完成遷移

(1)基礎(chǔ)配置

AI Create訓(xùn)練框架采用MindSpore菇民,推理框架采用MindSpore

Lite尽楔。在Coding Assistant中,選擇“AI > AI Create”第练。使用遷移學(xué)習(xí)則選擇“Image”或“Text”阔馋,點(diǎn)擊“Confirm”。需提前安裝python環(huán)境娇掏,然后重啟IDE呕寝。再次選擇“Image”或“Text”,點(diǎn)擊“Confirm”婴梧,會自動(dòng)安裝MindSpore工具下梢。HMS Toolkit還提供一鍵生成模型調(diào)用的API文件和模型調(diào)用Demo示例工程的功能客蹋,方便開發(fā)者在應(yīng)用程序中快速驗(yàn)證和調(diào)用圖像分類AI模型。使用圖像分類遷移學(xué)習(xí)能力前孽江,需要按照要求準(zhǔn)備用于訓(xùn)練的圖像資源讶坯。訓(xùn)練圖像需要按照圖像進(jìn)行分類,在每個(gè)分類的目錄下岗屏,放入合適的清晰圖像闽巩。


(2)模型訓(xùn)練

圖像分類針對特定領(lǐng)域(如汽車、動(dòng)物等)百張級數(shù)據(jù)進(jìn)行分鐘級的學(xué)習(xí)訓(xùn)練担汤,自動(dòng)生成圖像分類識別的新模型涎跨,該生成的新模型可以自動(dòng)識別圖像所屬的類別。在Coding Assistant中崭歧,選擇“AI > AI Create > Image”隅很,設(shè)置圖像訓(xùn)練模型的操作類型和模型部署位置,然后點(diǎn)擊“Confirm”率碾。Operation type(操作類型)部分固定選擇“New Model”叔营。Model Deployment Location(模型部署位置)固定選擇“Deployment

Cloud”。將分類好的圖像文件夾拖入或添加到“Please select train image folder”所宰,并設(shè)置生成的模型的存儲路徑(Output

model file path)和訓(xùn)練參數(shù)(Train parameter)绒尊。訓(xùn)練參數(shù)保持默認(rèn)值即可。Iteration count:迭代次數(shù)仔粥,默認(rèn)值為100婴谱。Learning rate:學(xué)習(xí)速率,默認(rèn)值為0.01躯泰。點(diǎn)擊“Create Model”開始進(jìn)行訓(xùn)練谭羔,生成圖像分類識別模型。等待模型生成后麦向,查看模型學(xué)習(xí)的結(jié)果(訓(xùn)練精度和驗(yàn)證精度)瘟裸、對應(yīng)的學(xué)習(xí)參數(shù)和訓(xùn)練數(shù)據(jù)等信息。



(3)模型驗(yàn)證

模型訓(xùn)練完成后诵竭,在“Add test image”的“Please select test image folder”加入需要測試的圖像文件夾進(jìn)行模型驗(yàn)證话告。工具會自動(dòng)利用訓(xùn)練好的模型進(jìn)行測試,并顯示測試結(jié)果卵慰。在模型訓(xùn)練結(jié)果中點(diǎn)擊“Generate Demo”沙郭,HMS Toolkit會自動(dòng)生成Demo工程,該工程自動(dòng)集成了該訓(xùn)練后的圖像分類識別模型呵燕,可以直接運(yùn)行和編譯該Demo工程棠绘,生成APK文件在模擬器或者真實(shí)設(shè)備上運(yùn)行件相,查看圖像分類識別的應(yīng)用效果再扭。



3氧苍、使用模型

(1)上傳模型

通過對圖片中的實(shí)體對象進(jìn)行分類和添加標(biāo)注信息,如:人泛范、物让虐、環(huán)境、活動(dòng)罢荡、藝術(shù)形式等信息赡突,幫助定義圖片題材和適用場景等。圖片分類支持端側(cè)識別和云側(cè)識別区赵。同時(shí)惭缰,該服務(wù)提供了預(yù)置模型能力。在華為開發(fā)者聯(lián)盟網(wǎng)站上笼才,進(jìn)入“我的項(xiàng)目”漱受,選擇“機(jī)器學(xué)習(xí)服務(wù) > Custom ML”進(jìn)入模型上傳界面,把模型上傳到云側(cè)骡送。另外也可以通過該界面對已有模型進(jìn)行更新昂羡。



(2)加載遠(yuǎn)程模型

先判斷遠(yuǎn)程模型是否已經(jīng)下載完成,然后加載模型摔踱,當(dāng)遠(yuǎn)程模型未下載時(shí)加載本地模型虐先。

localModel = new MLCustomLocalModel.Factory("localModelName")

???????.setAssetPathFile("assetpathname")

??????? .create();

??? remoteModel =newMLCustomRemoteModel.Factory("yourremotemodelname").create();

???MLLocalModelManager.getInstance()

??????? //判斷遠(yuǎn)程模型是否存在。

??????? .isModelExist(remoteModel)

???????.addOnSuccessListener(new OnSuccessListener() {

??????????? @Override

??????????? public voidonSuccess(Boolean isDownloaded) {

???????????????MLModelExecutorSettings settings;

??????????????? //如果遠(yuǎn)程模型存在派敷,優(yōu)先加載本地已有的遠(yuǎn)程模型蛹批,否則加載本地已有的本地模型。

??????????????? if(isDownloaded) {

??????????????????? settings =new MLModelExecutorSettings.Factory(remoteModel).create();

??????????????? } else {

??????????????????? settings =new MLModelExecutorSettings.Factory(localModel).create();

????? ??????????}

??????????????? finalMLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings);

???????????????executorImpl(modelExecutor, bitmap);

??????????? }

??????? })

???????.addOnFailureListener(new OnFailureListener() {

??????????? @Override

??????????? public voidonFailure(Exception e) {

??????????????? //異常處理篮愉。

??????????? }

??????? });


(3)使用模型推理器推理

設(shè)置輸入輸出格式般眉,把圖片數(shù)據(jù)輸入到推理器,然后使用加載好的modelExecutor(MLModelExecutor) 進(jìn)行推理潜支。

private void executorImpl(final MLModelExecutor modelExecutor,Bitmap bitmap){

??? //準(zhǔn)備輸入數(shù)據(jù)甸赃。

??? final Bitmap inputBitmap =Bitmap.createScaledBitmap(srcBitmap, 224, 224, true);

??? final float[][][][] input= new float[1][224][224][3];

??? for (int i = 0; i <224; i++) {

??????? for (int j = 0; j <224; j++) {

??????????? int pixel =inputBitmap.getPixel(i, j);

???????????input[batchNum][j][i][0] = (Color.red(pixel) - 127) / 128.0f;

???????????input[batchNum][j][i][1] = (Color.green(pixel) - 127) / 128.0f;

???????????input[batchNum][j][i][2] = (Color.blue(pixel) - 127) / 128.0f;

??????? }

??? }

??? MLModelInputs inputs =null;

??? try {

??????? inputs = newMLModelInputs.Factory().add(input).create();

??????? //若模型需要多路輸入,您需要多次調(diào)用add()以便圖片數(shù)據(jù)能夠一次輸入到推理器冗酿。

??? } catch (MLException e) {

??????? //處理輸入數(shù)據(jù)格式化異常埠对。

??? }


// 執(zhí)行推理。您可以通過“addOnSuccessListener”來監(jiān)聽推理成功裁替,在“onSuccess”回調(diào)中處理推理成功项玛。同時(shí),可以通過“addOnFailureListener”來監(jiān)聽推理失敗弱判,在“onFailure”中處理推理失敗襟沮。

??? modelExecutor.exec(inputs,inOutSettings).addOnSuccessListener(newOnSuccessListener() {

??????? @Override

??????? public voidonSuccess(MLModelOutputs mlModelOutputs) {

??????????? float[][] output =mlModelOutputs.getOutput(0);

??????????????? //這里推理的返回結(jié)果在output數(shù)組里,可以進(jìn)一步處理。

??????????????? }

???????}).addOnFailureListener(new OnFailureListener() {

??????? @Override

??????? public voidonFailure(Exception e) {

??????????? //推理異常开伏。

??????? }

??? });

}

三膀跌、總結(jié)

綜上所述,利用華為的深度學(xué)習(xí)框架固灵,通過簡單幾個(gè)步驟就可以創(chuàng)建和使用屬于自己業(yè)務(wù)的深度學(xué)習(xí)模型捅伤,是不是十分高效?同時(shí)巫玻,華為機(jī)器學(xué)習(xí)服務(wù)自定義模型支持包括MindSpore丛忆、TensorFlow Lite、Caffe仍秤、Onnx在內(nèi)的全部主流的模型推理熄诡,轉(zhuǎn)換成MS格式后可以在端側(cè)推理框架運(yùn)行。另外通過量化壓縮诗力,可以采用更小的體積在端側(cè)部署粮彤,如果想進(jìn)一步降低APK體積,也可以直接托管到云端姜骡,通過這種方式即使不了解深度學(xué)習(xí)导坟,也能夠快速構(gòu)建特定領(lǐng)域的AI應(yīng)用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末圈澈,一起剝皮案震驚了整個(gè)濱河市惫周,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌康栈,老刑警劉巖耸袜,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盏求,死亡現(xiàn)場離奇詭異锣笨,居然都是意外死亡框产,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門悬荣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菠秒,“玉大人,你說我怎么就攤上這事氯迂〖” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵嚼蚀,是天一觀的道長禁灼。 經(jīng)常有香客問我,道長轿曙,這世上最難降的妖魔是什么弄捕? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任僻孝,我火速辦了婚禮,結(jié)果婚禮上守谓,老公的妹妹穿的比我還像新娘穿铆。我一直安慰自己,他們只是感情好分飞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布悴务。 她就那樣靜靜地躺著睹限,像睡著了一般譬猫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羡疗,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天染服,我揣著相機(jī)與錄音,去河邊找鬼叨恨。 笑死柳刮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痒钝。 我是一名探鬼主播秉颗,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼送矩!你這毒婦竟也來了蚕甥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤栋荸,失蹤者是張志新(化名)和其女友劉穎菇怀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晌块,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爱沟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匆背。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呼伸。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钝尸,靈堂內(nèi)的尸體忽然破棺而出蜂大,到底是詐尸還是另有隱情,我是刑警寧澤蝶怔,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布奶浦,位于F島的核電站,受9級特大地震影響踢星,放射性物質(zhì)發(fā)生泄漏澳叉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望成洗。 院中可真熱鬧五督,春花似錦、人聲如沸瓶殃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遥椿。三九已至基矮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冠场,已是汗流浹背家浇。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碴裙,地道東北人钢悲。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像舔株,于是被迫代替她去往敵國和親莺琳。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容