Thursday, June 30, 2022

[TensorFlow Lite] TensorFlow Lite 有用的工具

TensorFlow Lite Tool: Toco (轉換器)

toco是用來生成一個可供TensorFlow Lite框架使用tflite文件。

bazel 編譯方式
$ bazel build tensorflow/lite/toco:toco

程式位於tensorflow/lite/toco資料夾下。Toco有三個主要功能,即匯入、匯出和轉換。匯入將輸入轉為Model類別,匯出將模型轉為flite模型或是grpahviz。轉換以輸入標示為基礎對模型操作,並且它會刪除未使用的運算元等。


凍結模型: freeze_graph

freeze_graph是模型固化工具。把模型參數也一同寫進同一個模型檔案中。它的部分核心是convert_variables_to_constrants

summarize_graph 這工具在tensorflow/python/tools

bazel 編譯方式
bazel build tensorflow/python/tools:freeze_graph


影像標記 (label_image)

這工具在 tensorflow/lite/examples/label_image類,它是一個月C++寫的影像分類工具。它會讀取一個影像和模型檔案,按照標記的噹案進行分類

首先,下載影像逼較要用到的幾個檔案:


$ ./tensorflow/lite/examples/ios/download_models.sh

然後,建置執行檔案。Android裝置的ABI可以透過以下指令過得:

adb shell getprop | grep abi

假設你的裝置是armv864位元晶片,可以執行下列指令:

$ baxel build --config android_arm64 --config monolithic --cxxopt=-std=c++11 \
 //tensorflow/lite/examples/label_image:label_image

若是在x86的機器上,可以執行下列指令:

$ baxel build --config monolithic \
 //tensorflow/lite/examples/label_image:label_image


最小整合 (Minimal)

這工具在tensorflow/lite/examples/minimal,它示範了怎像讀取模型、建置解譯器,以及執行預測。


Graphviz (dot format)

TensorFlow提供了很多視覺化工具,例如: 透過tocoTensorFlow張量流圖轉為Graphviz:

$ toco --input_file=tf_files/optimized_graph.lite \
--output_file=tf_files/lite.dot \
--input_format=TFLITE \
--output_format=GRAPHVIZ_DOT \
--input_shape=1,224,224,3 \
--input_array=input \
--output_array=final_result \
--inference_type=FLOAT \
--input_data_type=FLOAT

產生出來的.dot file 可以透過支援Graphviz視覺化工具(例如: Dot Viewer) 來看模型圖


模型評校 (summarize_graph & benchmark_model)

summarize_graph 這工具在tensorflow/tools/graph_transforms,它示範了怎像讀取模型、建置解譯器,以及執行預測。

bazel 編譯方式
$ bazel build tensorflow/tools/graph_transforms:summarize_graph

例如: 執行下面的指令,產生模型概要

$ summarize_graph --in_graph=tf_files/retrained_graph.pb


benchmark_model這工具也是在tensorflow/tools/graph_transforms

bazel 編譯方式
$ bazel build tensorflow/tools/graph_transforms:benchmark_model

例如: 執行下面的指令,產生模型概要

$ benchmark_model --graph=tf_files/retrained_graph.pb \
--show_flops \
--input_layer=Placeholder \
--input_layer_type=float \
--input_layer_shape=1,299,299,3 \
--output_layer=final_result


No comments: