作者:TensorFlow 中國團隊,Google 工程師 Renmin Gu. 最新的中文技術分享視頻來了!本期來自 Google 的工程師 Renmin 為大家?guī)?TensorFlow Lite 的深度解析視頻,主要講述 TensorFlow Lite 模型文件格式,并可視化以幫助大家記憶理解,也包含 TensorFlow Lite 的具體加載運行過程,并給出關鍵的數(shù)據(jù)結(jié)構描述,同樣以可視化的形式呈現(xiàn)給大家。 首先,我們需要在臺式機上設計、訓練出目標模型,并將其轉(zhuǎn)化成 TensorFlow Lite 的格式。接著,此格式文件在 TensorFlow Lite 中會被內(nèi)置了 Neon 指令集的解析器加載到內(nèi)存,并執(zhí)行相應的計算。由于 TensorFlow Lite 對硬件加速接口良好的支持,開發(fā)者可以設計出性能更優(yōu)的 App 供用戶使用。 模型文件格式Model 結(jié)構體:模型的主結(jié)構table Model { 在上面的 Model 結(jié)構體定義中, SubGraph 結(jié)構體:Model 中最重要的部分table SubGraph { 類似的, Tensor 結(jié)構體:包含維度、數(shù)據(jù)類型、Buffer 位置等信息table Tensor {
Operator 結(jié)構體:SubGraph 中最重要的結(jié)構體Operator 結(jié)構體定義了子圖的結(jié)構: table Operator {
解析器概況那么 TensorFlow Lite 的解析器又是如何工作的呢? 一開始,終端設備會通過 mmap 以內(nèi)存映射的形式將模型文件載入客戶端內(nèi)存中,其中包含了所有的 Tensor,Operator 和 Buffer 等信息。出于數(shù)據(jù)使用的需要,TensorFlow Lite 會同時創(chuàng)建 Buffer 的只讀區(qū)域和分配可寫 Buffer 區(qū)域。 由于解析器中包含了集體執(zhí)行計算的代碼,這一部分被稱為 Kernel。模型中的各個 Tensor 會被加載為 TfLiteTensor 的格式并集中存放在 TfLiteContext 中。 每個 Tensor 的指針都指向了內(nèi)存中的只讀 Buffer 區(qū)域或是一開始新分配的可寫入 Buffer 區(qū)域。 模型中的 Operator 被重新加載為 TfLiteNode,它包含輸入輸出的 Tensor 索引值。這些 Node 對應的操作符存儲于 TfLiteRegistration 中,它包含了指向 Kernel 的函數(shù)指針。OpResolver 負責維護函數(shù)指針的對應關系。 TensorFlow Lite 加載模型的過程中會確定執(zhí)行 Node 的順序,然后依次執(zhí)行。 大家如果想要更好掌握 TensorFlow Lite 的技術細節(jié),一定要閱讀以下文件:
希望我們的分享能讓廣大開發(fā)者們對 TensorFlow Lite 的代碼有一個初步認識,期待看到大家精彩的作品! 另外,視頻中提到的 TensorFlow Lite 的代碼位置: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite 模型的模式文件位于: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/schema/schema.fbs 更多騰訊視頻鏈接: https://v.qq.com/x/page/h0672e1j6gd.html 在 Google 官方 Bilibili 頻道查看本視頻 ( ゜- ゜)つロ: https://www.bilibili.com/video/av24219725/ YouTube 播放列表: 'DevBytes 開發(fā)者小技巧' https://www./playlist?list=PLwv-rHS37fS_f-hjlS7-maXNPcfrPNS8J Youku 視頻播單: 'DevBytes 開發(fā)者小技巧' http://list.youku.com/albumlist/show/id_51314721 |
|
來自: alayavijnana > 《科技未來》