TensorFlow Lite初次嘗試

1. TensorFlow Lite 簡介

????????TensorFlow Lite是TensorFlow針對移動和嵌入式設備的輕量級解決方案莺葫。它使設備上的機器學習預測具有低延遲和小的二進制大小。 TensorFlow Lite還支持硬件加速Android神經(jīng)網(wǎng)絡API(SDK27以上)偏螺。

Github項目地址

文檔地址

2. TensorFlow Lite 架構

????????下圖顯示了TensorFlow Lite的架構設計:

img

????????首先痪宰,將TensorFlow模型(.pb)轉換為TensorFlow Lite文件格式(.tflite)叼架,這需要使用TensorFlow Lite轉換器畔裕。然后,您可以在移動應用程序中部署轉換后的模型文件乖订。

????????部署TensorFlow Lite模型文件使用:

  • Java API:圍繞Android上C++ API的便捷包裝扮饶。
  • C++ API:加載TensorFlow Lite模型文件并調(diào)用解釋器。 Android和iOS都提供相同的庫乍构。
  • 解釋器:使用一組內(nèi)核來執(zhí)行模型甜无,解釋器支持選擇性內(nèi)核加載。沒有內(nèi)核哥遮,只有100KB岂丘;加載了所有內(nèi)核,300KB眠饮。這比TensorFlow Mobile要求的1.5M的顯著減少奥帘。
  • 在選定的Android設備上,解釋器將使用Android神經(jīng)網(wǎng)絡API進行硬件加速仪召,如果沒有可用的寨蹋,則默認為CPU執(zhí)行。

3. 遇到的問題

  • 在用toco轉換模型時扔茅,其轉換工具要求固定模型的輸入大小已旧,而風格遷移模型要求輸入圖像的大小是任意的,輸出圖像的大小與輸入圖像相同召娜,TensorFlow Lite不能滿足這一點需求运褪。
  • TensorFlow Lite只包含了一小部分必須的TensorFlow運算符,在風格遷移模型中用到的許多操作都沒有實現(xiàn)好萤晴,只能自己寫C++代碼去自定義運算符吐句,難度過大。

4. 查閱的資料

4.1 Feature request : Allow variable (None) input_shape for Tflite toco #21440

gargn commented on 17 Aug

@Kayoku It's currently not feasible to get TOCO to support this. A suggested work around is to put an arbitrary size into TOCO and use ResizeInputTensor when calling the TFLite interpreter.

miaout17 commented on 25 Aug

I skimmed over the paper and I think it should handle variable input size as you said.

Assuming the network architecture can really handle arbitrary input size (I skimmed over the paper and I think it does), could you try this and let us know if it works:

  • When converting, use an arbitrary input size like (1, 512, 512, 3).
  • When using the interpreter, call interpreter->ResizeInputTensor to resize the input tensor before calling interpreter->Invoke.

Theoretically it should do the trick. Let us know if it works for your case.

4.2 TensorFlow Lite Guide

Each output should be an array or multi-dimensional array of the supported primitive types, or a ByteBuffer of the appropriate size. Note that some models have dynamic outputs, where the shape of output tensors can vary depending on the input. There's no straightforward way of handling this with the existing Java inference API, but planned extensions will make this possible.

5. 模型轉換

The model generated (or downloaded) in the previous step is a standard Tensorflow model and you should now have a .pb or .pbtxt tf.GraphDef file. Models generated with transfer learning (re-training) or custom models must be converted—but, we must first freeze the graph to convert the model to the Tensorflow Lite format. This process uses several model formats:

  • tf.GraphDef (.pb) —A protobuf that represents the TensorFlow training or computation graph. It contains operators, tensors, and variables definitions.
  • CheckPoint (.ckpt) —Serialized variables from a TensorFlow graph. Since this does not contain a graph structure, it cannot be interpreted by itself.
  • FrozenGraphDef —A subclass of GraphDef that does not contain variables. A GraphDef can be converted to a FrozenGraphDef by taking a CheckPoint and a GraphDef, and converting each variable into a constant using the value retrieved from the CheckPoint.
  • SavedModel —A GraphDef and CheckPoint with a signature that labels input and output arguments to a model. A GraphDef and CheckPoint can be extracted from a SavedModel.
  • TensorFlow Lite model (.tflite) —A serialized FlatBuffer that contains TensorFlow Lite operators and tensors for the TensorFlow Lite interpreter, similar to a FrozenGraphDef.

After a TensorFlow model is trained, the TensorFlow Lite converter uses that model to generate a TensorFlow Lite FlatBuffer file (.tflite). The converter supports as input: SavedModels, frozen graphs (models generated byfreeze_graph.py), and tf.keras models. The TensorFlow Lite FlatBuffer file is deployed to a client device (generally a mobile or embedded device), and the TensorFlow Lite interpreter uses the compressed model for on-device inference. This conversion process is shown in the diagram below:

TFLite converter workflow
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末店读,一起剝皮案震驚了整個濱河市嗦枢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屯断,老刑警劉巖文虏,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異殖演,居然都是意外死亡氧秘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門趴久,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丸相,“玉大人,你說我怎么就攤上這事彼棍∶鹬遥” “怎么了膳算?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弛作。 經(jīng)常有香客問我涕蜂,道長,這世上最難降的妖魔是什么映琳? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任机隙,我火速辦了婚禮,結果婚禮上萨西,老公的妹妹穿的比我還像新娘有鹿。我一直安慰自己,他們只是感情好原杂,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布印颤。 她就那樣靜靜地躺著您机,像睡著了一般穿肄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上际看,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天咸产,我揣著相機與錄音,去河邊找鬼仲闽。 笑死脑溢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的赖欣。 我是一名探鬼主播屑彻,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼顶吮!你這毒婦竟也來了社牲?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤悴了,失蹤者是張志新(化名)和其女友劉穎搏恤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湃交,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡熟空,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搞莺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片息罗。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖才沧,靈堂內(nèi)的尸體忽然破棺而出迈喉,到底是詐尸還是另有隱情俏扩,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布弊添,位于F島的核電站录淡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏油坝。R本人自食惡果不足惜嫉戚,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澈圈。 院中可真熱鬧彬檀,春花似錦、人聲如沸瞬女。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诽偷。三九已至坤学,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間报慕,已是汗流浹背深浮。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眠冈,地道東北人飞苇。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像蜗顽,于是被迫代替她去往敵國和親布卡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

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