web-dev-qa-db-ja.com

.tfliteファイルで重みを表示するにはどうすればよいですか?

MobileNetの事前トレーニング済みの.pbファイルを取得しましたが、完全に量子化されたモデルを.tflite形式に変換する必要があるのに、量子化されていないことがわかりました。私はモバイルアプリ開発用のツールに精通していないので、.tfliteファイルからMobileNetの完全に量子化された重みを取得するにはどうすればよいですか。より正確には、量子化されたパラメーターを抽出してその数値を表示するにはどうすればよいですか?

4
mingxin zhao

Netronモデルビューアには、データのニースビューとエクスポート、およびニースネットワークダイアグラムビューがあります。 https://github.com/lutzroeder/netron

5
Jay Norwood

私はまた、TFLiteがどのように機能するかを研究している最中です。私が見つけたものは最善のアプローチではないかもしれません、そして私は専門家の意見をいただければ幸いです。 flatbuffer python APIを使用してこれまでに見つけたものは次のとおりです。

まず、フラットバッファを使用してスキーマをコンパイルする必要があります。出力はtfliteというフォルダーになります。

_flatc --python tensorflow/contrib/lite/schema/schema.fbs_

次に、モデルをロードして、必要なテンソルを取得できます。 TensorにはBuffer()というメソッドがあります。これは、スキーマによれば、

モデルのルートにあるバッファテーブルを参照するインデックス。

したがって、データの場所を示します。

_from tflite import Model
buf = open('/path/to/mode.tflite', 'rb').read()
model = Model.Model.GetRootAsModel(buf, 0)
subgraph = model.Subgraphs(0)
# Check tensor.Name() to find the tensor_idx you want
tensor = subgraph.Tensors(tensor_idx) 
buffer_idx = tensor.Buffer()
buffer = model.Buffers(buffer_idx)
_

その後、buffer.Data()を呼び出すことでデータを読み取ることができます。

参照: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/schema/schema.fbshttps://github.com/google/ flatbuffers/tree/master/samples

4
Jia Guo

TensorFlow 2.0を使用すると、次のスクリプトを使用して、テンソルに関する重みといくつかの情報(形状、dtype、名前、量子化)を抽出できます TensorFlowドキュメント

import tensorflow as tf
import h5py


# Load TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_path="v3-large_224_1.0_uint8.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()


# get details for each layer
all_layers_details = interpreter.get_tensor_details() 


f = h5py.File("mobilenet_v3_weights_infos.hdf5", "w")   

for layer in all_layers_details:
     # to create a group in an hdf5 file
     grp = f.create_group(str(layer['index']))

     # to store layer's metadata in group's metadata
     grp.attrs["name"] = layer['name']
     grp.attrs["shape"] = layer['shape']
     # grp.attrs["dtype"] = all_layers_details[i]['dtype']
     grp.attrs["quantization"] = layer['quantization']

     # to store the weights in a dataset
     grp.create_dataset("weights", data=interpreter.get_tensor(layer['index']))


 f.close()
2
Samuel Tap