@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそ、すべては、SystemC v0.9公開から始まった
のブログの中のビデオにも出てきた「TensorFlow Select」
Twitterで皆さんに聞いてみましたが、31人の回答によると知っている人は1割。
TensorFlow Select って知っていますか?
— TensorFlow Lite DelegateとTensorFlow Select (@Vengineer) November 4, 2019
で、では、「TensorFlow Select」とは?
TensorFlow Liteに、TensorFlowのOpを使えるようにするためのものです。
— TensorFlow Lite DelegateとTensorFlow Select (@Vengineer) November 4, 2019
「Select TensorFlow operators to use in TensorFlow Lite」https://t.co/pIaDxDhrza
このビデオ「Inside TensorFlow: TensorFlow Lite」のModel Conversionの説明部分。https://t.co/PCdcIC9EMD
です。このビデオの「TensorFlow Select」のスライドを抜き出してみると、
Available now
- Enables hundres more ops from TensorFlow on CPU.
- Leverages eagper runtime
- Caveat: binari size increase (~6MB compressed)
In the pipeline (このビデオでは、Future ではなく、in the pipeline を使っています)
- Selective registration (of TensorFlow ops)
- Improved performance
とあります。また、
Converter
- Node def describles attributes values of op
- Add a new custom op w/ NodeDef in flexbuffer
Runtime
ガイドライとしてのドキュメントもあります。
TensorFlow Lite Converter をビルドするときには、下記のように --define=tflite_convert_with_select_tf_ops=true が必要なようです。これでビルドすると、TensorFlow Liteでサポートされていない Op には、”Flex”が prefix として付いて変換されます。
こんな感じ。
— TensorFlow Lite DelegateとTensorFlow Select (@Vengineer) November 4, 2019
bazel run --define=tflite_convert_with_select_tf_ops=true tflite_convert --\
--output_file=/tmp/foo.tflite \
--graph_def_file=/tmp/foo.pb \
--input_arrays=input \
--output_arrays=MobilenetV1/Predictions/Reshape_1 \
--target_ops=TFLITE_BUILTINS,SELECT_TF_OPS
変換したモデルを動かすためには、Flex Delegateの共有ライブラリ lite/delegates/flex/delegate.so が必要になります。この共有ライブラリはデフォルト状態で bazel コマンドでビルドしても生成されません。
% cd tensorflow/lite/delegates/flex
% bazel build delegate
にて、手動でビルドする必要があります。ただし、これをビルドすると、TensorFlow Liteだけでなく、TensorFlow本体のソースコードをビルドするのでかなり時間がかかります。