歡迎關注我的公眾號 [極智視界],回覆001獲取Google程式設計規範
O_o
>_<
o_O
O_o
~_~
o_O
本文介紹一下 Tengine 模型轉換及量化流程。
Tengine 同 ncnn 一樣,也是優秀的端側推理框架,前面寫過一篇《ncnn 模型轉換及量化流程》,有興趣的同學可以查閱。
下面開始。
1、編譯 Tengine Tools
CmakeList.txt 中開啟 CONVERT_TOOL 和 QUANT_TOOL 開關:
開始編譯:
cd <Tengine-path>
mkdir build
cd build
# 開始編譯
camke ..
make -j32
make install
編譯完會在 ./build/install/bin/
目錄下生成 convert_tool
和 quant_tool
,如下:
2、Tengine 模型轉換
用如下命令看一下 convert_tool
需要什麼樣的傳參:
cd ./build/install/bin
./convert_tool -h
如上,前面為輸入,後面為輸出。
Tengine 提供的模型轉換工具前端支援的十分豐富,基本通吃了國外、國內主流的深度學習框架。
前端為 Caffe:
./convert_tool -f caffe -p ./mobilenet.prototxt -m ./mobilenet.caffemodel -o ./mobilenet.tmfile
前端為 Onnx:
./convert_tool -f onnx -m ./mobilenet.onnx -o ./mobilenet.tmfile
前端為 Mxnet:
./convert_tool -f mxnet -p ./mobilenet.params -m ./mobilenet.json -o ./mobilenet.tmfile
前端為 Darknet:
./convert_tool -f darknet -p ./yolov3.weights -m ./yolov3.cfg -o yolov3.tmfile
前端為 TensorFlow:
./convert_tool -f tensorflow -m mobielenet_v1_1.0_224_frozen.pb -o mobilenet.tmfile
前端為 TFLite:
./convert_tool -f tflite -m mobielenet.tflite -o mobilenet.tmfile
前端為 MegEngine:
./convert_tool -f megengine -m mobilenet.pkl -o mobilenet.tmfile
前端為 OneFlow:
./convert_tool -f oneflow -p mobilenet.prototxt -m mobilenet/ -o mobilenet.tmfile
前端為 ncnn:
./convert_tool -f ncnn -p mobilenet.param -m mobilenet.bin -o mobilenet.tmfile
3、Tengine 量化推理
可以看到 Tengine 提供的量化工具有三個:quant_tool_int8
、quant_tool_uint8
、quant_tool_uint8_perchannel
,分別是對稱量化、非對稱量化、非對稱逐通道量化,裡面的量化策略類似,這裡挑 quant_tool_int8
說一下。
先安裝一下依賴庫:
apt update
apt install libopencv-dev
用如下命令檢視量化工具傳參:
./quant_tool_int8 -h
可以看到傳參還是比較豐富的。
前端輸入為 fp32 tmfile,執行量化示例:
./quant_tool_int8 -m ./mobilenet_fp32.tmfile -i ./dataset -o ./mobilenet_int8.tmfile -g 3,224,224 -w 104.007,116.669,122.679 -s 0.017,0.017,0.017
執行成功會輸出如下日誌:
並生成如下 int8 模型檔案:
然後就可以拿去執行推理了。
以上分享了 Tengine 模型轉換及量化方法,希望我的分享能對你的學習有一點幫助。
【公眾號傳送】
《【模型推理】Tengine 模型轉換及量化》