iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 30
0

這是第三十篇文章,今天想和大家分享的是 tf.lite,身處在大家人手一台智慧型手機的時代,神經網路能運用的地方無所不在,如果你今天想將模型部署到手機上面,那使用 Google 專門為移動式設備使用的模型 tf.lite 實在是再適合不過啦!

要產生 tf.lite 模型很簡單,你只要有符合的 pb 模型即可,而產生模型,你需要 tf.lite.TFLiteConverter,然後告訴你的輸入和輸出節點。

def main():
   converter = tf.lite.TFLiteConverter.from_frozen_graph('../pb/frozen_shape_28.pb',
                                                         ['new_input_node'], ['final_dense/MatMul'])
   converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_LATENCY]
   tflite_model = converter.convert()

   with open("../tflite/model.lite", "wb") as f:
       f.write(tflite_model)

而這邊我使用 pycharm 執行會有以下錯誤。
https://ithelp.ithome.com.tw/upload/images/20191008/20107299uroi9kCKaz.png

所以我後來是使用 command line 來執行。
https://ithelp.ithome.com.tw/upload/images/20191008/20107299EsikQVFzd9.png

而產生出來的 lite 模型可以看到又比 pb 檔更小了。
https://ithelp.ithome.com.tw/upload/images/20191008/201072991Dcuimw34L.png
https://ithelp.ithome.com.tw/upload/images/20191008/20107299qDGuyoI41o.png

接下來測試推論速度,程式碼如下:

TIMES = 1000

def main():

   interpreter = tf.lite.Interpreter(model_path="../tflite/model.lite")
   interpreter.allocate_tensors()
   input_index = interpreter.get_input_details()[0]["index"]
   output_index = interpreter.get_output_details()[0]["index"]

   image = cv2.imread('../05/ithome.jpg')
   image = cv2.resize(image, (128, 128))
   image = image.astype(np.float32)

   start = timeit.default_timer()
   for _ in range(0, TIMES):
       interpreter.set_tensor(input_index, np.expand_dims(image, axis=0))
       interpreter.invoke()
       interpreter.get_tensor(output_index)

   print(f'cost time:{(timeit.default_timer() - start)} sec')

結果:
https://ithelp.ithome.com.tw/upload/images/20191008/20107299jfuAbO7iNX.png

你會發現推論超級慢,這是因為我使用的是 Mac 去跑這個模型,tf.lite 因為主要的部屬環境是像手機等移動端,所使用的 CPU 是 ARM 架構,而我的 Mac 是 x86_64 架構,在這上面的表現並沒有很好。

有關 tf.lite 的短暫介紹就到這邊,謝謝讀著大家的閱讀!有關最後心得文我想發在 Day31 就等明天囉!

github原始碼


上一篇
【29】tensorflow 模型優化手術:優化前 vs 優化後評比篇
下一篇
【31】鐵人參賽心得與那八個月在家自修的日子
系列文
How to Train Your Model 訓模高手:我的 Tensorflow 個人使用經驗系列文31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
willy0804
iT邦新手 5 級 ‧ 2020-03-07 18:42:11

請問怎麼把pb量化成INT8轉tflite

我要留言

立即登入留言