inference: support movenet 94/268794/2 accepted/tizen/unified/20220110.140009 submit/tizen/20220105.080154 submit/tizen/20220105.081745
authorTae-Young Chung <ty83.chung@samsung.com>
Mon, 20 Dec 2021 09:01:24 +0000 (18:01 +0900)
committerInki Dae <inki.dae@samsung.com>
Wed, 5 Jan 2022 07:20:54 +0000 (07:20 +0000)
[Version] 0.12.0
[Issue type] new feature

Movenet models with variants, Lightning3/4 and Thunder3/4, are supported.
Models can be downloaded from tfhub.dev and
meta files for the models are added as examples.
In addition, testsuite with those Movenet models are updated.

Change-Id: I1c526cba688842e408fad1c84ba7dff4d0320e80
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
15 files changed:
meta-template/pld_movenet_lightning3_192x192.json [new file with mode: 0644]
meta-template/pld_movenet_lightning3_192x192_int8_quant.json [new file with mode: 0644]
meta-template/pld_movenet_lightning4_192x192.json [new file with mode: 0644]
meta-template/pld_movenet_lightning4_192x192_int8_quant.json [new file with mode: 0644]
meta-template/pld_movenet_thunder3_256x256.json [new file with mode: 0644]
meta-template/pld_movenet_thunder3_256x256_int8_quant.json [new file with mode: 0644]
meta-template/pld_movenet_thunder4_256x256.json [new file with mode: 0644]
meta-template/pld_movenet_thunder4_256x256_int8_quant.json [new file with mode: 0644]
mv_machine_learning/mv_inference/inference/include/Landmark.h
mv_machine_learning/mv_inference/inference/include/OutputMetadataTypes.h
mv_machine_learning/mv_inference/inference/src/Inference.cpp
mv_machine_learning/mv_inference/inference/src/OutputMetadata.cpp
mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp
packaging/capi-media-vision.spec
test/testsuites/machine_learning/inference/inference_test_suite.c

diff --git a/meta-template/pld_movenet_lightning3_192x192.json b/meta-template/pld_movenet_lightning3_192x192.json
new file mode 100644 (file)
index 0000000..f40c6ff
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "input:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 192, 192, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
diff --git a/meta-template/pld_movenet_lightning3_192x192_int8_quant.json b/meta-template/pld_movenet_lightning3_192x192_int8_quant.json
new file mode 100644 (file)
index 0000000..f40c6ff
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "input:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 192, 192, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
diff --git a/meta-template/pld_movenet_lightning4_192x192.json b/meta-template/pld_movenet_lightning4_192x192.json
new file mode 100644 (file)
index 0000000..bcbf9d0
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "serving_default_input_0:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 192, 192, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "StatefulPartitionedCall_0:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "StatefulPartitionedCall_0:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
diff --git a/meta-template/pld_movenet_lightning4_192x192_int8_quant.json b/meta-template/pld_movenet_lightning4_192x192_int8_quant.json
new file mode 100644 (file)
index 0000000..bcbf9d0
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "serving_default_input_0:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 192, 192, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "StatefulPartitionedCall_0:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "StatefulPartitionedCall_0:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
diff --git a/meta-template/pld_movenet_thunder3_256x256.json b/meta-template/pld_movenet_thunder3_256x256.json
new file mode 100644 (file)
index 0000000..5d22c4a
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "input:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 256, 256, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
diff --git a/meta-template/pld_movenet_thunder3_256x256_int8_quant.json b/meta-template/pld_movenet_thunder3_256x256_int8_quant.json
new file mode 100644 (file)
index 0000000..5d22c4a
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "input:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 256, 256, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "Identity:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
diff --git a/meta-template/pld_movenet_thunder4_256x256.json b/meta-template/pld_movenet_thunder4_256x256.json
new file mode 100644 (file)
index 0000000..d28d5c7
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "serving_default_input:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 256, 256, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "StatefulPartitionedCall:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "StatefulPartitionedCall:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
diff --git a/meta-template/pld_movenet_thunder4_256x256_int8_quant.json b/meta-template/pld_movenet_thunder4_256x256_int8_quant.json
new file mode 100644 (file)
index 0000000..d28d5c7
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "inputmetadata" :
+    {
+        "tensor_info" : [
+            {
+                "name" : "serving_default_input:0",
+                "shape_type" : "NHWC",
+                "shape_dims" : [ 1, 256, 256, 3],
+                "data_type" : "FLOAT32",
+                "color_space" : "RGB888"
+            }
+        ],
+        "preprocess" : [
+            {
+                "normalization" : [
+                    {
+                        "mean" : [0.0, 0.0, 0.0],
+                        "std" : [1.0, 1.0, 1.0]
+                    }
+                ]
+            }
+        ]
+    },
+    "outputmetadata" :
+    {
+        "score" : [
+            {
+                "name" : "StatefulPartitionedCall:0",
+                "index" : [-1, -1, -1, 1],
+                "top_number" : 1,
+                "threshold" : 0.5,
+                "score_type" : "NORMAL"
+            }
+        ],
+        "landmark" : [
+            {
+                "name" : "StatefulPartitionedCall:0",
+                "index" : [-1, -1, 1, -1],
+                "landmark_type" : "2D_SINGLE",
+                "landmark_coordinate" : "RATIO",
+                "decoding_type" : "BYPASS_MULTICHANNEL",
+                "landmark_offset" : 3
+            }
+        ]
+    }
+}
index 26dda7f..4aae027 100644 (file)
@@ -99,6 +99,7 @@ namespace inference
                        supportedLandmarkCoordinateTypes.insert({"PIXEL", INFERENCE_LANDMARK_COORDINATE_TYPE_PIXEL});
 
                        supportedLandmarkDecodingTypes.insert({"BYPASS", INFERENCE_LANDMARK_DECODING_TYPE_BYPASS});
+                       supportedLandmarkDecodingTypes.insert({"BYPASS_MULTICHANNEL", INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL});
                        supportedLandmarkDecodingTypes.insert({"HEATMAP", INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP});
                        supportedLandmarkDecodingTypes.insert({"HEATMAP_REFINE", INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE});
                }
index 440fa76..7ce558b 100644 (file)
@@ -67,6 +67,7 @@ namespace inference
 
        typedef enum {
                INFERENCE_LANDMARK_DECODING_TYPE_BYPASS,
+               INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL,
                INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP,
                INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE
        } inference_landmark_decoding_type_e;
index fdd0560..8cb63c8 100755 (executable)
@@ -1542,6 +1542,8 @@ namespace inference
                                LOGI("landmark dim size: %zd and idx[0] is %d", channelIndexes.size(), channelIndexes[0]);
                                number_of_landmarks = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]]
                                                                        / outputMeta.GetLandmarkOffset();
+                       } else if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) {
+                               number_of_landmarks = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]];
                        } else {
                                heatMapWidth = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().wIdx];
                                heatMapHeight = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().hIdx];
@@ -1635,7 +1637,8 @@ namespace inference
                        int heatMapHeight = 0;
                        int heatMapChannel = 0;
 
-                       if (outputMeta.GetLandmarkDecodingType() != INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) {
+                       if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP ||
+                               outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE) {
                                heatMapWidth = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().wIdx];
                                heatMapHeight = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().hIdx];
                                heatMapChannel = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().cIdx];
@@ -1652,6 +1655,8 @@ namespace inference
 
                        if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS)
                                landmarkChannel = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]] / outputMeta.GetLandmarkOffset();
+                       else if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL)
+                               landmarkChannel = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]];
 
                        poseResult->number_of_landmarks_per_pose = mUserListName.empty() ? landmarkChannel :
                                                                                                                static_cast<int>(mUserListName.size());
index 738116f..391b265 100755 (executable)
@@ -468,7 +468,8 @@ namespace inference
                }
 
                if (!landmark.GetName().empty()) {
-                       if (landmark.GetDecodingType() != INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) {
+                       if (landmark.GetDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP ||
+                               landmark.GetDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE) {
                                ret = landmark.ParseDecodeInfo(root, mSupportedShapeType);
                                if (ret != MEDIA_VISION_ERROR_NONE) {
                                        LOGE("Fail to GetLandmarkDecodeInfo[%d]", ret);
index ca04829..e1596aa 100644 (file)
@@ -56,7 +56,8 @@ namespace inference
                        return MEDIA_VISION_ERROR_INVALID_OPERATION;
                }
 
-               if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) {
+               if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS ||
+                       mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) {
                        LOGI("Skip init");
                        return MEDIA_VISION_ERROR_NONE;
                }
@@ -245,14 +246,16 @@ namespace inference
                        mMeta.GetLandmarkType() == INFERENCE_LANDMARK_TYPE_3D_SINGLE) {
                        mPoseLandmarks.resize(1);
 
-                       if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) {
+                       if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS ||
+                               mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) {
                                mPoseLandmarks[0].landmarks.resize(mNumberOfLandmarks);
                        } else {
                                mPoseLandmarks[0].landmarks.resize(mHeatMapChannel);
                        }
                }
 
-               if (mMeta.GetLandmarkDecodingType() != INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) {
+               if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP ||
+                       mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE) {
                        while (!mCandidates.empty()) {
 
                                LandmarkPoint &root = mCandidates.front();
@@ -311,6 +314,21 @@ namespace inference
                        for (auto& pose : mPoseLandmarks) {
                                pose.score /= static_cast<float>(mHeatMapChannel);
                        }
+               } else if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) {
+                       int landmarkOffset = mMeta.GetLandmarkOffset();
+                       for (int idx = 0; idx < mNumberOfLandmarks; ++idx) {
+                                       float py = mTensorBuffer.getValue<float>(mMeta.GetLandmarkName(), idx * landmarkOffset);
+                                       float px = mTensorBuffer.getValue<float>(mMeta.GetLandmarkName(), idx * landmarkOffset + 1);
+                                       float pscore = mTensorBuffer.getValue<float>(mMeta.GetScoreName(), idx * landmarkOffset + 2);
+
+                                       mPoseLandmarks[0].landmarks[idx].score = pscore;
+                                       mPoseLandmarks[0].landmarks[idx].heatMapLoc = cv::Point(-1, -1);
+                                       mPoseLandmarks[0].landmarks[idx].decodedLoc = cv::Point2f(px / scaleWidth, py / scaleHeight);
+                                       mPoseLandmarks[0].landmarks[idx].id = idx;
+                                       mPoseLandmarks[0].landmarks[idx].valid =  true;
+
+                                       LOGI("idx[%d]: %.4f, %.4f, score: %.4f", idx, px, py, pscore);
+                       }
                } else {
                        // multi pose is not supported
                        std::vector<int> scoreIndexes = mMeta.GetScoreDimInfo().GetValidIndexAll();
index 50fcffc..2aeff26 100644 (file)
@@ -1,6 +1,6 @@
 Name:        capi-media-vision
 Summary:     Media Vision library for Tizen Native API
-Version:     0.11.0
+Version:     0.12.0
 Release:     0
 Group:       Multimedia/Framework
 License:     Apache-2.0 and BSD-3-Clause
index 188524d..681afab 100644 (file)
 #define PLD_TFLITE_WEIGHT_INT8_MOVENET_PATH \
        "/usr/share/capi-media-vision/models/PLD/tflite/pld_int8_movenet.tflite"
 
+#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256.tflite"
+#define PLD_TFLITE_META_MOVENET_THUNDER3_256_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256.json"
+#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192.tflite"
+#define PLD_TFLITE_META_MOVENET_LIGHTNING3_192_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192.json"
+
+#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256_int8_quant.tflite"
+#define PLD_TFLITE_META_MOVENET_THUNDER3_256_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256_int8_quant.json"
+#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192_int8_quant.tflite"
+#define PLD_TFLITE_META_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192_int8_quant.json"
+
+#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256.tflite"
+#define PLD_TFLITE_META_MOVENET_THUNDER4_256_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256.json"
+#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192.tflite"
+#define PLD_TFLITE_META_MOVENET_LIGHTNING4_192_FLOAT32_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192.json"
+
+#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256_int8_quant.tflite"
+#define PLD_TFLITE_META_MOVENET_THUNDER4_256_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256_int8_quant.json"
+#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192_int8_quant.tflite"
+#define PLD_TFLITE_META_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH \
+       "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192_int8_quant.json"
+
 #define TASK_IC 0
 #define TASK_OD 1
 #define TASK_FD 2
@@ -1622,6 +1658,14 @@ int perform_pose_landmark_detection()
                "Hosted[o]: TFLITE(CPU) + CPM",
                "Hosted[o]: TFLITE(CPU) + MOBILENET_V1_POSENET",
                "Hosted[x]: TFLITE(CPU) + INT8_MOVENET",
+               "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_THUNDER3",
+               "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_LIGHTNING3",
+               "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_THUNDER3",
+               "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_LIGHTNING3",
+               "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_THUNDER4",
+               "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_LIGHTNING4",
+               "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_THUNDER4",
+               "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_LIGHTNING4",
        };
 
        int sel_opt = show_menu_linear("Select Action:", names, ARRAY_SIZE(names));
@@ -1655,6 +1699,46 @@ int perform_pose_landmark_detection()
                                engine_cfg, PLD_TFLITE_WEIGHT_INT8_MOVENET_PATH,
                                NULL);
        } break;
+       case 5: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_FLOAT32_PATH,
+                               PLD_TFLITE_META_MOVENET_THUNDER3_256_FLOAT32_PATH);
+       } break;
+       case 6: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_FLOAT32_PATH,
+                               PLD_TFLITE_META_MOVENET_LIGHTNING3_192_FLOAT32_PATH);
+       } break;
+       case 7: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_INT8_QUANT_PATH,
+                               PLD_TFLITE_META_MOVENET_THUNDER3_256_INT8_QUANT_PATH);
+       } break;
+       case 8: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH,
+                               PLD_TFLITE_META_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH);
+       } break;
+       case 9: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_FLOAT32_PATH,
+                               PLD_TFLITE_META_MOVENET_THUNDER4_256_FLOAT32_PATH);
+       } break;
+       case 10: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_FLOAT32_PATH,
+                               PLD_TFLITE_META_MOVENET_LIGHTNING4_192_FLOAT32_PATH);
+       } break;
+       case 11: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_INT8_QUANT_PATH,
+                               PLD_TFLITE_META_MOVENET_THUNDER4_256_INT8_QUANT_PATH);
+       } break;
+       case 12: {
+               err = engine_config_hosted_tflite_cpu(
+                               engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH,
+                               PLD_TFLITE_META_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH);
+       } break;
        }
        if (err != MEDIA_VISION_ERROR_NONE) {
                printf("Fail to perform config [err:%i]\n", err);