移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介...
?
???? 平時工作就是做深度學(xué)習(xí),但是深度學(xué)習(xí)沒有落地就是比較虛,目前在移動端或嵌入式端應(yīng)用的比較實際,也了解到目前主要有
caffe2,騰訊ncnn,tensorflow,因為工作用tensorflow比較多,所以也就從tensorflow上下手了。
下面內(nèi)容主要參考&翻譯:
https://www.tensorflow.org/mobile/?hl=zh-cn
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md
?????? ....等等,目前自己也是剛開始學(xué)移動端和嵌入式端部署,雖然這項技術(shù)感覺已經(jīng)有點old了。
單獨(dú)閱讀英文文檔沒有翻譯理解的透徹,如果有表述不對或者誤人子弟的地方,還請拍磚,讓我改正。
?
?
TensorFlow Lite和TensorFlow Mobile簡介:
???? tensorflow旨在成為深度學(xué)習(xí)在移動端平臺部署的良好解決方案。google公司目前主要有兩套在移動端和嵌入式端部署解決方案,
分別是:TensorFlow for Mobile 和?TensorFlow Lite.我們這次主要學(xué)習(xí)tensorflow lite,然后再看tensorflow Mobile。
??? 他們兩個的主要不同點:
TensorFlow Lite是TensorFlow Mobile的演變,在大多數(shù)情況下,使用TensorFlow Lite開發(fā)的應(yīng)用程序?qū)⒕哂懈〉亩M(jìn)制
大小,更少的依賴性和更好的性能。TensorFlow Lite僅支持一組有限的運(yùn)算符,因此默認(rèn)情況下并非所有模型都可以使用它。 TensorFlow for Mobile具有更全面的支持功能
TensorFlow Lite在移動平臺上提供更好的性能和更小的二進(jìn)制文件存儲大小,并且可以利用硬件進(jìn)行加速(如果該平臺支持)。此外,
它具有更少的依賴,因此可以在更簡單,更受約束的設(shè)備方案上構(gòu)建(build/編譯)和托管。TensorFlow Lite還支持 Neural Networks API 的定位加速器。
TensorFlow Lite目前包含了一組有限的操作集合(operators set)。雖然TensorFlow for Mobile默認(rèn)情況下僅支持一組約束操作,
但原則上:可以對其進(jìn)行自定義以編譯該內(nèi)核,使得在TensorFlow中使用任意運(yùn)算符。因此,TensorFlow Lite當(dāng)前不支持的用例應(yīng)繼續(xù)使用TensorFlow for Mobile。
隨著TensorFlow Lite的發(fā)展,它所支持的操作集合將不斷增加,使得在移動端的部署更加地容易。
?
TensorFlow Lite簡介:
??? TensorFlow Lite是TensorFlow針對移動和嵌入式設(shè)備的輕量級解決方案。它支持設(shè)備端機(jī)器學(xué)習(xí)推理,并具有的低延遲和較小的二進(jìn)制文件尺寸。
TensorFlow Lite還支持Android Neural Networks API的硬件加速。TensorFlow Lite使用許多技術(shù)來實現(xiàn)低延遲,例如優(yōu)化移動應(yīng)用程序的內(nèi)核,
預(yù)融合激活層,以及允許量化內(nèi)核(更小和更快(定點數(shù)學(xué)/定點數(shù)計算)模型,浮點轉(zhuǎn)整型)。
大多數(shù)TensorFlow Lite文檔暫時都在GitHub上(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite)。
?
TensorFlow Lite包含什么?
??? TensorFlow Lite支持一組核心運(yùn)算符,包括量化和浮點運(yùn)算,它們已針對移動平臺進(jìn)行了調(diào)整。它們結(jié)合了預(yù)融合激活和偏置,
以進(jìn)一步提高性能和量化精度。此外,TensorFlow Lite還支持在模型中使用自定義操作。TensorFlow Lite基于FlatBuffers定義了一種新的模型文件格式。
FlatBuffers是一個開源,高效的跨平臺序列化庫。它類似于?protocol buffers(協(xié)議緩沖區(qū)),但主要區(qū)別在于FlatBuffers在訪問數(shù)據(jù)之前通常與每個對象的內(nèi)存分配相結(jié)合,
不需要對輔助表示(a secondary representation)進(jìn)行解析/解包步驟。此外,FlatBuffers的代碼占用空間比protocol buffers(協(xié)議緩沖區(qū))小一個數(shù)量級。
??? TensorFlow Lite擁有一個新的移動優(yōu)化解釋器,其主要目標(biāo)是保持應(yīng)用程序的精簡和快速。解釋器使用靜態(tài)圖形排序和自定義(少量動態(tài))內(nèi)存分配器來確保最小的負(fù)載、初始化和執(zhí)行延遲。
??? TensorFlow Lite提供了一個利用硬件加速的接口(如果在設(shè)備支持)。它通過Android Neural Networks API, 實現(xiàn),可在Android 8.1(API級別27)及更高版本上使用。
?
為什么我們需要一個新的移動專用庫?
???? 機(jī)器學(xué)習(xí)正在改變計算范式,我們看到了移動和嵌入式設(shè)備上新用例的新趨勢。在相機(jī)和語音交互模型的推動下,消費(fèi)者的期望也趨向于與其設(shè)備進(jìn)行自然的,類人的交互。
???? 有幾個因素引起了這個領(lǐng)域的興趣:
???????????? × 硅層的創(chuàng)新為硬件加速提供了新的可能性,而Android Neural Networks API 等框架可以輕松利用這些功能。
??? ???????? ×實時計算機(jī)視覺技術(shù)和口語理解的最新進(jìn)展已引導(dǎo)了移動優(yōu)化的基準(zhǔn)模型的開源(例如,MobileNets,SqueezeNet)。
??? ???????? ×廣泛可用的智能應(yīng)用為設(shè)備智能創(chuàng)造了新的可能性。
??? ???????? ×能夠提供“離線”用例,其中設(shè)備不需要連接到網(wǎng)絡(luò)。
我們相信下一波機(jī)器學(xué)習(xí)應(yīng)用程序?qū)⒃谝苿雍颓度胧皆O(shè)備上進(jìn)行大量處理。
?
TensorFlow Lite亮點
??? TensorFlow Lite提供:
??????? × 一組核心運(yùn)算操作(operators),包括量化和浮動,其中許多已經(jīng)針對移動平臺進(jìn)行了調(diào)整。
這些可用于創(chuàng)建和運(yùn)行自定義模型。開發(fā)人員還可以編寫自己的自定義運(yùn)算符并在模型中使用它們。
?????? × 一種新的基于FlatBuffers的模型文件格式。
?????? ×? 具有基于設(shè)備的內(nèi)核優(yōu)化解釋器,可在移動設(shè)備上更快地執(zhí)行。
?????? × TensorFlow轉(zhuǎn)換器(TensorFlow converter)將TensorFlow訓(xùn)練的模型轉(zhuǎn)換為TensorFlow Lite格式。
?????? × 更小的尺寸:當(dāng)所有支持的操作鏈接時,TensorFlow Lite小于300KB,當(dāng)僅使用支持InceptionV3和Mobilenet所需的操作時,小于200KB。
??????? ×預(yù)先測試的模型:
??????????? 以下所有模型均可保證“開箱即用/work”:
? ? ? ? ? ?? ?? × Inception V3,一種用于檢測圖像中存在的主要對象的流行模型。
??? ? ? ?? ?? ? ×MobileNets一系列移動優(yōu)先計算機(jī)視覺模型,旨在有效地最大限度地提高準(zhǔn)確性,同時注意到設(shè)備或嵌入式應(yīng)用程序的受限資源。
它們是小型,低延遲,低功耗模型,參數(shù)化以滿足各種用例的資源限制。它們可以用于分類,檢測,嵌入(特征編碼)和分割。
MobileNet模型比Inception V3更小但精度更低(稍低)。
??? ? ? ? ? ?? ×在智能回復(fù)上,一種端上模型,通過聯(lián)系與上下文相關(guān)的消息,為新傳入的文本消息提供一鍵式回復(fù)。該模型專為內(nèi)存受限設(shè)備(如手表和手機(jī))而構(gòu)建,
并已成功應(yīng)用于Smart Replies on Android Wear,在所有第一方和第三方應(yīng)用。
另請參閱TensorFlow Lite支持的模型的完整列表TensorFlow Lite's supported models(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md),包括型號,性能編號和可下載的模型文件。
????? × MobileNet 模型的量化版本,其運(yùn)行速度比CPU上的非量化(浮點)版本快。
????? × 新的Android演示應(yīng)用程序,用于說明使用TensorFlow Lite和量化的MobileNet模型進(jìn)行對象分類。
????? × Java和C ++ API支持
?
TensorFlow Lite架構(gòu):
下圖顯示了TensorFlow Lite的架構(gòu)設(shè)計:
???
?????? 從磁盤上經(jīng)過訓(xùn)練的TensorFlow模型開始,您將使用TensorFlow Lite轉(zhuǎn)換器將該模型轉(zhuǎn)換為TensorFlow Lite文件格式(.tflite)。然后,您可以在移動應(yīng)用程序中使用該轉(zhuǎn)換后的文件。
?
? 部署TensorFlow Lite模型文件使用:
????????? Java API:圍繞Android上的C ++ API的便利包裝器。
????????? C ++ API:加載TensorFlow Lite模型文件并調(diào)用Interpreter。 Android和iOS都提供相同的庫。
????????? 解釋器:使用一組內(nèi)核執(zhí)行模型。解釋器支持選擇性內(nèi)核加載。沒有內(nèi)核它只有100KB,加載了所有內(nèi)核300KB。這比TensorFlow Mobile要求的1.5M顯著降低。
???????? 在部分Android設(shè)備上,Interpreter將使用Android Neural Networks API進(jìn)行硬件加速,如果沒有,則默認(rèn)為CPU執(zhí)行。
?????? 您還可以使用可由Interpreter使用的C ++ API實現(xiàn)自定義內(nèi)核。
?
未來的工作
??? 在未來的版本中,TensorFlow Lite將支持更多模型和內(nèi)置運(yùn)算符,包括定點和浮點模型的性能改進(jìn),工具的改進(jìn),以便更輕松地開發(fā)工作流程以及支持其他更小的設(shè)備等。
在我們繼續(xù)開發(fā)的過程中,我們希望TensorFlow Lite能夠大大簡化針對小型設(shè)備模型的開發(fā)人員體驗。
?
Next Steps
? ? ? ??TensorFlow Lite GitHub存儲庫。包含其他文檔,代碼示例和演示應(yīng)用程序。 ?
?
轉(zhuǎn)載于:https://www.cnblogs.com/YouXiangLiThon/p/9381252.html
總結(jié)
以上是生活随笔為你收集整理的移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: Python 列表(数组)初识
- 下一篇: 关于前端与微信交互账号绑定的问题