文 /Lu Wang、Chen Cen、Arun Venkatesan 和 Khanh LeViet
概述
在移動(dòng)設(shè)備上使用 TensorFlow Lite 模型運(yùn)行推理不僅僅是與模型交互,還需要額外的代碼來(lái)處理復(fù)雜的邏輯,如數(shù)據(jù)轉(zhuǎn)換、預(yù)處理/后處理、加載關(guān)聯(lián)文件等。
額外的代碼
今天,我們將為大家介紹 TensorFlow Lite Task Library,這是一組功能強(qiáng)大且易于使用的模型接口,可代您處理大多數(shù)預(yù)處理和后處理以及其他復(fù)雜邏輯。Task Library 支持主流的機(jī)器學(xué)習(xí)任務(wù),包括圖像分類與分割、目標(biāo)檢測(cè)和自然語(yǔ)言處理。模型接口針對(duì)每個(gè)任務(wù)進(jìn)行過(guò)專門設(shè)計(jì),可實(shí)現(xiàn)最佳性能和易用性——現(xiàn)在,只需 5 行代碼就可以在受支持任務(wù)的預(yù)訓(xùn)練和自定義模型上執(zhí)行推理!目前,Task Library 已廣泛用于許多 Google 產(chǎn)品的生產(chǎn)環(huán)境中。
TensorFlow Lite Task Library
https://tensorflow.google.cn/lite/inference_with_metadata/task_library/overview
支持的 ML 任務(wù)
TensorFlow Lite Task Library 目前支持六個(gè) ML 任務(wù),包括視覺和自然語(yǔ)言處理用例。下面將逐一進(jìn)行簡(jiǎn)要介紹。
ImageClassifier
圖像分類器是機(jī)器學(xué)習(xí)的一種常見用例,用于識(shí)別圖像所代表的內(nèi)容。例如,我們可能想知道給定圖片中出現(xiàn)了哪種動(dòng)物。ImageClassifier API 支持常見的圖像處理和配置,還允許在特定的受支持區(qū)域設(shè)置中顯示標(biāo)簽,并根據(jù)標(biāo)簽許可名單和禁止名單篩選結(jié)果。
ObjectDetector
物體檢測(cè)器可以識(shí)別一組中可能存在哪些已知物體,并提供這些物體在給定圖像或視頻串流中的位置信息。ObjectDetector API 支持類似于 ImageClassifer 的圖像處理選項(xiàng)。輸出結(jié)果將列出檢測(cè)到的前 k 個(gè)物體并帶有標(biāo)簽、邊界框和概率。
ImageSegmenter
圖像分割器預(yù)測(cè)圖像的每個(gè)像素是否與某個(gè)類相關(guān)聯(lián)。這與物體檢測(cè)(檢測(cè)矩形區(qū)域中的物體)和圖像分類(對(duì)整個(gè)圖像進(jìn)行分類)相反。除圖像處理外,ImageSegmenter 還支持兩種類型的輸出蒙版:類別蒙版和置信度蒙版。
NLClassifier 和 BertNLClassifier
NLClassifier將輸入文本分為不同的類別。可對(duì)該通用 API 進(jìn)行配置,使其可以加載任何支持文本輸入和分?jǐn)?shù)輸出的 TFLite 模型。
BertNLClassifier 與 NLClassifier 類似,不同之處在于,此 API 專門為 BERT 相關(guān)模型量身定制,需要在 TFLite 模型之外進(jìn)行 Wordpiece 和 Sentencepiece 分詞。
BertQuestionAnswerer
BertQuestionAnswerer 加載 BERT 模型并根據(jù)給定段落的內(nèi)容回答問題。目前支持 MobileBERT 和 ALBERT。與 BertonCollector 類似,BertQuestionAnswerer 封裝了對(duì)輸入文本的復(fù)雜分詞處理。您可以將上下文和問題以字符串形式傳遞給 BertQuestionAnswerer 模型。
支持的模型
Task Library 與下列已知的模型源兼容:
TensorFlow Hub Task Library 模型集合(圖像分類/物體檢測(cè)/圖像分割/問答)。
TensorFlow Lite Model Maker 創(chuàng)建的模型。
AutoML Vision Edge 創(chuàng)建的模型。
Task Library 還支持符合每個(gè) Task API 的模型兼容性要求的自定義模型。關(guān)聯(lián)的文件(即標(biāo)簽圖和 vocab 文件)和處理參數(shù)(如果適用)應(yīng)正確填充到模型元數(shù)據(jù)中。有關(guān)更多詳細(xì)信息,請(qǐng)參見 TensorFlow 網(wǎng)站上針對(duì)每個(gè) API 的文檔。
模型元數(shù)據(jù)
https://tensorflow.google.cn/lite/convert/metadata
TensorFlow 網(wǎng)站上針對(duì)每個(gè) API 的文檔
https://tensorflow.google.cn/lite/inference_with_metadata/task_library/overview
使用 Task Library 運(yùn)行推理
Task Library 可跨平臺(tái)工作,并且在 Java、C++(實(shí)驗(yàn)性)和 Swift(實(shí)驗(yàn)性)上均受支持。使用 Task Library 運(yùn)行推理十分簡(jiǎn)單,只需編寫幾行代碼。例如,您可以使用 DeepLab v3 TFLite 模型在 Android 中分割飛機(jī)圖像(圖 1),如下所示:
// Create the API from a model file and options String modelPath = "path/to/model.tflite" ImageSegmenterOptions options = ImageSegmenterOptions.builder().setOutputType(OutputType.CONFIDENCE_MASK).build(); ImageSegmenter imageSegmenter = ImageSegmenter.createFromFileAndOptions(context, modelPath, options); // Segment an image TensorImage image = TensorImage.fromBitmap(bitmap); List results = imageSegmenter.segment(image);
圖 1. ImageSegmenter 輸入圖像
圖 2. 分割蒙版
然后,您可以在結(jié)果中使用彩色標(biāo)簽和類別蒙版來(lái)構(gòu)造分割蒙版圖像,如圖 2 所示。
三個(gè)文本 API 均支持 Swift。要在 iOS 中使用 SQuAD v1 TFLite 模型對(duì)給定的上下文和問題執(zhí)行問答,您可以運(yùn)行:
let modelPath = "path/to/model.tflite" // Create the API from a model file let mobileBertAnswerer = TFLBertQuestionAnswerer.mobilebertQuestionAnswerer(modelPath: modelPath) let context = """ The Amazon rainforest, alternatively, the Amazon Jungle, also known in English as Amazonia, is a moist broadleaf tropical rainforest in the Amazon biome that covers most of the Amazon basin of South America. This basin encompasses 7,000,000 square kilometers(2,700,000 square miles), of which 5,500,000 square kilometers(2,100,000 square miles) are covered by the rainforest. This region includes territory belonging to nine nations. """ let question = "Where is Amazon rainforest?" // Answer a question let answers = mobileBertAnswerer.answer(context: context, question: question) // answers.[0].text could be “South America.”
DeepLab v3 TFLite 模型
https://tfhub.dev/tensorflow/lite-model/deeplabv3/1/metadata/1
SQuAD v1 TFLite 模型
https://tfhub.dev/tensorflow/lite-model/albert_lite_base/squadv1/1
為您的用例構(gòu)建一個(gè) Task API
如果現(xiàn)有 Task 庫(kù)不支持您的用例,則您可以利用 Task API 基礎(chǔ)架構(gòu)并構(gòu)建自定義 C++/Android/iOS 推理 API。有關(guān)更多詳細(xì)信息,請(qǐng)參閱本指南。
指南
https://tensorflow.google.cn/lite/inference_with_metadata/task_library/customized_task_api
未來(lái)工作
我們將繼續(xù)改善 Task Library 的用戶體驗(yàn)。近期的路線圖如下:
改善 C++ Task Library 的易用性,例如為希望從源代碼構(gòu)建的用戶提供預(yù)構(gòu)建的二進(jìn)制文件并創(chuàng)建人性化工作流。
使用 Task Library 發(fā)布參考示例。
通過(guò)新的任務(wù)類型支持更多的機(jī)器學(xué)習(xí)用例。
改善跨平臺(tái)支持,針對(duì) iOS 支持更多任務(wù)。
反饋
歡迎大家提供反饋,并就 Task Library 中支持的新用例給出建議。請(qǐng)向 tflite@tensorflow.org 發(fā)送電子郵件或在 GitHub 中提 issue。
issue
https://github.com/tensorflow/tflite-support/issues/new
致謝
這項(xiàng)成果離不開以下人員的共同努力:
Task Library Vision API 的主要貢獻(xiàn)者 Cédric Deltheil 和 Maxime Brénon。
Task Library 原生/Android/iOS 基礎(chǔ)架構(gòu)和 Text API 的主要貢獻(xiàn)者 Chen Cen。
開發(fā)基礎(chǔ)結(jié)構(gòu)和發(fā)布流程的主要貢獻(xiàn)者 Xunkai 和 YoungSeok Yoon。
以及 Tian Lin、Sijia Ma、YoungSeok Yoon、Yuqi Li、Hsiu Wang、Qifei Wang、Alec Go、Christine Kaeser-Chen、Yicheng Fan、Elizabeth Kemp、Willi Gierke、Arun Venkatesan、Amy Jang、Mike Liang、Denis Brulé、Gaurav Nemade、Khanh LeViet、Luiz GUStavo Martins、Shuangfeng Li、Jared Duke、Erik Vee、Sarah Sirajuddin 以及 Tim Davis 都對(duì)本項(xiàng)目給予了大力支持,在此一并表示感謝。
原文標(biāo)題:推出 TF Lite Task Library 接口,簡(jiǎn)化 ML移動(dòng)端開發(fā)流程
文章出處:【微信公眾號(hào):TensorFlow】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
TF
+關(guān)注
關(guān)注
0文章
60瀏覽量
33061 -
源代碼
+關(guān)注
關(guān)注
96文章
2943瀏覽量
66578 -
TensorFlow Lite
+關(guān)注
關(guān)注
0文章
26瀏覽量
588
原文標(biāo)題:推出 TF Lite Task Library 接口,簡(jiǎn)化 ML移動(dòng)端開發(fā)流程
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論