Crash on load - MoveNet tensorflow lite (tflite) model

I am trying to load/run the MoveNet tensorflow lite model published by google on an OpenMV H7+ board.

As of now, I get a hard system crash / reboot with no error message when it gets to loading the tflite model file. The file is offered in an int8 model (singlepose lighting int8) on tfhub:

TensorFlow Hub (tfhub.dev)

I did find this OpenMV forum post describing a similar phenomenon. In that case, the error was a datatype error:
Crash without error message when loading tflite model - OpenMV Products - OpenMV Forums

Does anyone have any advice on getting MoveNet to load/run on an OpenMV H7+ ? I did get it running on a Rasp Pi 4B.

Thanks in advance.

It probably can’t run on our device. We specifically support networks generated by Edge Impulse. Any other types use operators that we don’t have in the TensorFlow library we have compiled.

It would be nice if the OpenMV IDE could somehow throw a labelled error when a tflite with a disallowed operation type was included. I don’t know how to inspect the tflite file for specific operations used.

To be clear, my understanding is that TFLite operations listed here (without the comment bars) are the supported-operation list:

static void libtf_init_op_resolver(tflite::MicroMutableOpResolver<LIBTF_MAX_OPS> &resolver)
{
    // resolver.AddAbs();
    resolver.AddAdd();
    resolver.AddAddN();
    // resolver.AddArgMax();
    // resolver.AddArgMin();
    // resolver.AddAssignVariable();
    resolver.AddAveragePool2D();
    // resolver.AddBatchToSpaceNd();
    // resolver.AddCallOnce();
    // resolver.AddCeil();
    // resolver.AddConcatenation();
    resolver.AddConv2D();
    // resolver.AddCos();
    // resolver.AddCumSum();
    // resolver.AddDepthToSpace();
    resolver.AddDepthwiseConv2D();
    // resolver.AddDequantize();
    // resolver.AddDetectionPostprocess();
    // resolver.AddElu();
    // resolver.AddEqual();
    // resolver.AddEthosU();
    // resolver.AddExpandDims();
    // resolver.AddFloor();
    // resolver.AddFloorDiv();
    // resolver.AddFloorMod();
    resolver.AddFullyConnected();
    // resolver.AddGreater();
    // resolver.AddGreaterEqual();
    // resolver.AddHardSwish();
    // resolver.AddL2Normalization();
    // resolver.AddL2Pool2D();
    resolver.AddLeakyRelu();
    // resolver.AddLess();
    // resolver.AddLessEqual();
    // resolver.AddLog();
    // resolver.AddLogicalAnd();
    // resolver.AddLogicalNot();
    // resolver.AddLogicalOr();
    resolver.AddLogistic();
    // resolver.AddMaximum();
    resolver.AddMaxPool2D();
    resolver.AddMean();
    // resolver.AddMinimum();
    // resolver.AddMul();
    // resolver.AddNeg();
    // resolver.AddNotEqual();
    // resolver.AddPack();
    resolver.AddPad();
    // resolver.AddPadV2();
    // resolver.AddPrelu();
    // resolver.AddQuantize();
    // resolver.AddReadVariable();
    // resolver.AddReduceMax();
    resolver.AddRelu();
    resolver.AddRelu6();
    resolver.AddReshape();
    // resolver.AddResizeBilinear();
    // resolver.AddResizeNearestNeighbor();
    // resolver.AddRound();
    // resolver.AddRsqrt();
    resolver.AddShape();
    // resolver.AddSin();
    resolver.AddSoftmax();
    // resolver.AddSpaceToBatchNd();
    // resolver.AddSpaceToDepth();
    // resolver.AddSplit();
    // resolver.AddSplitV();
    // resolver.AddSqrt();
    // resolver.AddSquare();
    // resolver.AddSqueeze();
    // resolver.AddStridedSlice();
    resolver.AddSub();
    // resolver.AddSvdf();
    resolver.AddTanh();
    // resolver.AddTranspose();
    // resolver.AddTransposeConv();
    // resolver.AddUnpack();
    // resolver.AddVarHandle();
}

It normally would. However, the TensorFlow code by Google is of such a low quality that it just segfaults.

I suppose we can do a patch on the library to support this.