Closed kyakuno closed 3 years ago
tf2onnxで変換する。
変換コマンド
python -m tf2onnx.convert --opset 11 --tflite lite-model_movenet_singlepose_thunder_3.tflite --output movenet_thunder.onnx
tflite modelとonnxruntimeの出力が一致することを確認. 前処理は,アスペクト比を保ったまま0-paddingを行い,(1,256,256,3)に変換し,float32型で入力. 出力は,(1,1,17,3) 17点の x, y, prob. 入力画像 出力画像
onnxruntimeでは正しく出力されるが,ailia modelでは出力が異なる. [x, y, prob] それぞれ0-1.0の範囲.
tfmodelやonnxruntimeの出力
[array([[[[0.33554435, 0.57272404, 0.92817456],
[0.31263214, 0.5779005 , 0.69413507],
[0.31315586, 0.55245346, 0.66920173],
[0.31425914, 0.5580873 , 0.62777984],
[0.3213759 , 0.4919685 , 0.94457537],
[0.41055557, 0.56177735, 0.7958834 ],
[0.4021089 , 0.43064475, 0.7763065 ],
[0.50763804, 0.6726977 , 0.9327747 ],
[0.51388466, 0.52900004, 0.80666685],
[0.41427827, 0.659105 , 0.74058735],
[0.410809 , 0.6184621 , 0.8134104 ],
[0.606961 , 0.40519625, 0.7414748 ],
[0.6047726 , 0.30253115, 0.66097707],
[0.64801186, 0.5765516 , 0.9151981 ],
[0.67689645, 0.43577892, 0.69415796],
[0.8250746 , 0.52198714, 0.80072594],
[0.8924368 , 0.3646664 , 0.9463905 ]]]], dtype=float32)]
ailia modelでの出力
[[[[ 2.96673268e-01 8.21293220e-02 1.90956931e-10]
[ 3.97703528e-01 4.74371351e-02 1.28238444e-19]
[ 3.44641864e-01 1.24253787e-01 6.31433077e-19]
[ 1.90295041e-01 -4.63371873e-02 7.67730758e-15]
[ 1.33993894e-01 3.98021229e-02 3.34983065e-14]
[ 2.22495332e-01 -2.65425723e-02 1.58288943e-14]
[-2.74990499e-02 -1.65383533e-01 1.62259715e-24]
[ 5.22588968e-01 -1.48591958e-03 8.73668876e-04]
[ 4.27544296e-01 -7.65536800e-02 1.25166262e-04]
[ 4.65755463e-01 -3.77568901e-02 2.97235923e-13]
[ 3.69912386e-01 -1.22724213e-01 1.24766274e-11]
[ 5.97550869e-01 1.32746007e-02 1.06074367e-04]
[ 5.74379385e-01 -3.82950343e-02 1.17694006e-04]
[ 6.72319114e-01 2.60677487e-02 8.16486523e-09]
[ 6.83521986e-01 5.54343360e-03 5.38770255e-05]
[ 8.40865850e-01 8.64615943e-03 6.35459670e-04]
[ 8.85232210e-01 -8.22016783e-03 3.70795642e-05]]]]
tfliteはfloat32入力, float32出力.
saved_modelはint32入力,float32出力.
saved modelの変換コマンド
python -m tf2onnx.convert --saved-model movenet_singlepose_thunder_3 --opset 11 --output movenet_thunder.onnx
https://github.com/tensorflow/hub/blob/master/examples/colab/movenet.ipynb こちらを参考にサンプルコードを作成.
前処理対応
後処理対応
原画像に描画するための座標修正
修正なし
修正あり
前フレームで検出した体幹ポイントから,切り取る範囲を算出. アスペクト比を保ったまま入力するため,paddingを行って切り出し. 最後,入力サイズにresize.
原画像
Cropping画像
thunder, ligntning, 2種類の入力サイズのモデルが存在する. 入力サイズの大きいmodel thunderの方が正確に骨格点を抽出する傾向.
model thunder 入力サイズ(1,256,256,3) model lightning 入力サイズ(1,192,192,3)
https://twitter.com/TensorFlow/status/1402384949991313414
https://tfhub.dev/s?q=movenet