axinc-ai / ailia-models

The collection of pre-trained, state-of-the-art AI models for ailia SDK
2.04k stars 323 forks source link

ADD movenet #503

Closed kyakuno closed 3 years ago

kyakuno commented 3 years ago

https://twitter.com/TensorFlow/status/1402384949991313414

https://tfhub.dev/s?q=movenet

kyakuno commented 3 years ago

tf2onnxで変換する。

seijikojima commented 3 years ago

変換コマンド 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. 入力画像 input 出力画像 output

seijikojima commented 3 years ago

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]]]]
sabosantech commented 3 years ago

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

sabosantech commented 3 years ago

https://github.com/tensorflow/hub/blob/master/examples/colab/movenet.ipynb こちらを参考にサンプルコードを作成.

前処理対応

後処理対応

sabosantech commented 3 years ago

原画像に描画するための座標修正

save_no_revise 修正なし

save_org 修正あり

sabosantech commented 3 years ago

前フレームで検出した体幹ポイントから,切り取る範囲を算出. アスペクト比を保ったまま入力するため,paddingを行って切り出し. 最後,入力サイズにresize.

org_image_save 原画像

crop_image_save Cropping画像

sabosantech commented 3 years ago

thunder, ligntning, 2種類の入力サイズのモデルが存在する. 入力サイズの大きいmodel thunderの方が正確に骨格点を抽出する傾向.

result_thunder model thunder 入力サイズ(1,256,256,3) result_lightning model lightning 入力サイズ(1,192,192,3)