android 理解用于位姿检测的媒体管道tflite模型的输出形状

31moq8wy  于 2023-03-21  发布在  Android
关注(0)|答案(1)|浏览(172)

我正在尝试使用一个mediapipes预训练的tflite模型在android(java)中执行姿势地标检测,它为我提供了关于人体33个地标的信息。我知道有不同的方法,例如使用ML Kit,但为了获得更好的结果,使用一个mediapipes模型会更好。
我想使用(https://google.github.io/mediapipe/solutions/models.html)姿势地标模型。
要在android中使用这些模型,需要知道(尤其是理解)模型的输出形状,这些可以在java(或python)中读取:

  • 五项产出:[195],[1],[256,256,1],[64,64,1],[117]如果我没弄错的话。

但在模型的模型卡中,输出阵列被定义为[33,5],这是有意义的,因为目标是检测33个界标,每个界标具有5个值。
有没有人能解释一下tflite模型的输出形状以及如何使用它们,或者给予我一个我错过的文档的线索。
所用代码由android studio自动生成,并由ml文件夹中模型的“示例代码部分”提供(遵循以下说明https://www.tensorflow.org/lite/inference_with_metadata/codegen#mlbinding,但使用以下方法获得相同形状https://www.tensorflow.org/lite/guide/inference#load_and_run_a_model_in_java):

try {
        PoseDetection model = PoseDetection.newInstance(getApplicationContext());

        // Creates inputs for reference.
        TensorBuffer inputFeature0 = TensorBuffer.createFixedSize(new int[]{1, 224, 224, 3}, DataType.FLOAT32);

        // imageBuffer is the image as ByteBuffer
        inputFeature0.loadBuffer(imageBuffer);

        // Runs model inference and gets result.
        PoseDetection.Outputs outputs = model.process(inputFeature0);
        TensorBuffer outputFeature0 = outputs.getOutputFeature0AsTensorBuffer();
        TensorBuffer outputFeature1 = outputs.getOutputFeature1AsTensorBuffer();
        TensorBuffer outputFeature2 = outputs.getOutputFeature2AsTensorBuffer();
        TensorBuffer outputFeature3 = outputs.getOutputFeature3AsTensorBuffer();
        TensorBuffer outputFeature4 = outputs.getOutputFeature4AsTensorBuffer();

        // Releases model resources if no longer used.
        model.close();
    } catch (IOException e) {
        // TODO Handle the exception
    }

我通过使用调试器检查outputFeatures得到了形状。
多谢了。

xu3bshqb

xu3bshqb1#

由于MediaPipe文档“免责声明:在Windows上运行MediaPipe是实验性的。”(https://developers.google.com/mediapipe/framework/getting_started/install#installing_on_windows),我按照google.github.io/mediapipe/getting_started/android.html@莫里森Chang建议的方法在www.example.com上进行了操作。这种方法需要花很多时间来理解,但赠款很高的可定制性和良好的效果。这解决了我的问题,旧的方法似乎并不适用。

相关问题