Tenserflow lite 踩坑記

Tenserflow lite是谷歌在2017年11月推出的輕量級(jí)移動(dòng)端預(yù)測(cè)框架,目前已經(jīng)支持Android和iOS,并且支持iOS的CoreML。TensorFlow是針對(duì)手機(jī)和嵌入式設(shè)備提供的輕量級(jí)解決方案。它提供了低延遲和小體積的端側(cè)機(jī)器學(xué)習(xí)預(yù)測(cè)能力。TensorFlow Lite同時(shí)支持通過(guò)Android Neural Networks API硬件加速。

image
image

TensorFlow Lite使用了很多技術(shù)實(shí)現(xiàn)低延遲,例如為特定的手機(jī)App優(yōu)化內(nèi)核,預(yù)置激活函數(shù)(pre-fused activations),允許運(yùn)行小而快的量化過(guò)的模型的量子化內(nèi)核。未來(lái)廠(chǎng)商還可以使用特定的機(jī)器學(xué)習(xí)硬件, 讓某個(gè)模型在某個(gè)特定設(shè)備上獲得最好的運(yùn)算性能。

tflite同時(shí)提供了toco腳本工具,可以把tensorflow pb模型轉(zhuǎn)化成tflite格式,一種基于flatbuffer的加載更快的序列化格式。tflite只能加載tflite格式的模型,不能加載以前tensorflow android使用的pb模型。

目前tflite官方支持的op還很少,因此很多復(fù)雜模型都沒(méi)法在tflite上運(yùn)行,目前實(shí)驗(yàn)轉(zhuǎn)換成功的只有mobilenet模型, inceptionV3、ssd-mobilenet等模型都沒(méi)法用toco轉(zhuǎn)換成功,因?yàn)槟P陀玫降膐p不支持。

Android tflite demo默認(rèn)的tensorflow/contrib/lite/java/demo/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java只支持量化后的tflite模型, 具體的轉(zhuǎn)換參考下面的命令。

如果需要使用沒(méi)有量化的模型,需要修改ImageClassifier的代碼,。具體參考
https://stackoverflow.com/questions/47463204/tensorflow-lite-convert-error-for-the-quantized-graphdef
https://github.com/tensorflow/tensorflow/issues/14719
修改代碼后, 可以運(yùn)行inceptionv3_slim_2016.tflite模型,這個(gè)模型沒(méi)有量化過(guò),預(yù)測(cè)速度很慢,預(yù)測(cè)一次大概需要1200ms,比tensorflow android的500ms還有慢。

toco轉(zhuǎn)換模型和生成Demo App


# 測(cè)試通過(guò),
 bazel-bin/tensorflow/contrib/lite/toco/toco \
 --input_file=PATH/model/mobilenet_v1_1.0_224/frozen_graph.pb \
--output_file=PATH/tensorflow/tensorflow/contrib/lite/java/demo/app/src/main/assets/mobilenet_v1_50_128q.tflite \
  --input_format=TENSORFLOW_GRAPHDEF \
  --output_format=TFLITE \
  --inference_type=QUANTIZED_UINT8 \
  --input_shape=1,224,224,3 \
  --input_array=input \
  --output_array=MobilenetV1/Predictions/Reshape_1 \
  --default_ranges_min=0 \
  --default_ranges_max=6 \
  --mean_value=128 \
  --std_value=128

#修改Android相關(guān)的代碼,使用新的模型,編譯app
bazel build --cxxopt=--std=c++11 //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo

Android tflite demo也可以通過(guò)Android Studio編譯生成,具體參考官方文檔

實(shí)測(cè)發(fā)現(xiàn), 使用toco腳本轉(zhuǎn)換tflite模型時(shí),目前支持的op有限, ssd-mobilenet模型不能正確轉(zhuǎn)換,提示有op不支持。
tflite目前還很不完善,在生產(chǎn)環(huán)境中使用有很多限制,但運(yùn)行速度確實(shí)很快,mobilenet1.0模型使用tflite做一次推斷只需要80ms。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容