bool NvDsInferParseCustomGluonYoloV3()

in lab1/deepstream_plugin/nvdsinfer_custombboxparser.cc [14:51]


bool NvDsInferParseCustomGluonYoloV3 (std::vector<NvDsInferLayerInfo> const &outputLayersInfo,
        NvDsInferNetworkInfo  const &networkInfo,
        NvDsInferParseDetectionParams const &detectionParams,
        std::vector<NvDsInferObjectDetectionInfo> &objectList)
{
  static NvDsInferDims *cidLayerDims;
  static NvDsInferDims *scoreLayerDims;
  static NvDsInferDims *bboxLayerDims;
  static NvDsInferDims temp;
  static bool classMismatchWarn = false;
  int numClassesToParse;
  float *outputCidBuf = (float *) outputLayersInfo[0].buffer;
  float *outputCovBuf = (float *) outputLayersInfo[1].buffer;
  float *outputBboxBuf = (float *) outputLayersInfo[2].buffer;
  for (int c = 0; c < outputLayersInfo[0].inferDims.d[0]; c++)
  {
    float *outputX1 = outputBboxBuf + (c * 4);
    float *outputY1 = outputX1 + 1;
    float *outputX2 = outputX1 + 2;
    float *outputY2 = outputX1 + 3;

    float threshold = detectionParams.perClassPreclusterThreshold[c];
    if (outputCovBuf[c] >= threshold)
    {
      NvDsInferObjectDetectionInfo object;
      object.classId = outputCidBuf[c];
      object.detectionConfidence = outputCovBuf[c];

      /* Clip object box co-ordinates to network resolution */
      object.left = CLIP(*outputX1, 0, networkInfo.width - 1);
      object.top = CLIP(*outputY1, 0, networkInfo.height - 1);
      object.width = (*outputX2) - (*outputX1);
      object.height = (*outputY2) - (*outputY1);
      objectList.push_back(object);
    }
  }
  return true;
}