27 #ifndef __NVDSINFERSERVER_POST_PROCESS_H__
28 #define __NVDSINFERSERVER_POST_PROCESS_H__
31 #include <condition_variable>
38 #include <cuda_runtime_api.h>
43 #include "infer_datatypes.h"
46 #include "infer_post_datatypes.h"
47 #include "nvdsinfer_custom_impl.h"
48 #include "nvdsinferserver_config.pb.h"
50 namespace ic = nvdsinferserver::config;
52 struct NvDsInferDBScan;
59 class Postprocessor :
public BasePostprocessor {
79 const std::vector<std::vector<std::string>>&
getLabels()
const {
90 const std::vector<int>& devIds)
override;
104 std::vector<NvDsInferLayerInfo>& outputLayers,
105 const std::vector<SharedBatchBuf> outputBufs, uint32_t batchSize,
124 std::vector<std::vector<std::string>>
m_Labels;
133 class DetectPostprocessor :
public Postprocessor {
142 std::vector<NvDsInferLayerInfo>& outputLayers,
143 const std::vector<SharedBatchBuf> outputBufs, uint32_t batchSize,
146 bool parseBoundingBox(
147 std::vector<NvDsInferLayerInfo>
const& outputLayersInfo,
150 std::vector<NvDsInferObjectDetectionInfo>& objectList);
152 void clusterAndFillDetectionOutputCV(
153 const std::vector<NvDsInferObjectDetectionInfo>& objectList,
154 std::vector<NvDsInferObject> &outputs);
155 void clusterAndFillDetectionOutputDBSCAN(
156 const std::vector<NvDsInferObjectDetectionInfo>& objectList,
157 std::vector<NvDsInferObject>& outputs);
158 void copyWithoutCluster(
159 const std::vector<NvDsInferObjectDetectionInfo>& objectList,
160 std::vector<NvDsInferObject>& outputs);
162 const std::vector<NvDsInferLayerInfo>& outputLayers,
163 std::vector<NvDsInferObject> &output);
164 void filterDetectionOutput(
166 std::vector<NvDsInferObjectDetectionInfo> &objectList);
167 void clusterAndFillDetectionOutputNMS(
168 const std::vector<NvDsInferObjectDetectionInfo>& objectList,
169 uint32_t topk, std::vector<NvDsInferObject>& outputs);
170 std::vector<int> nonMaximumSuppression(
171 const std::vector<std::pair<float, int>>& scoreIndex,
172 const std::vector<NvDsInferParseObjectInfo>& bbox,
173 const float nmsThreshold);
194 float nmsIOUThreshold;
198 std::shared_ptr<NvDsInferDBScan> m_DBScanHandle;
200 uint32_t m_NumDetectedClasses = 0;
203 std::vector<NvDsInferDetectionParams> m_PerClassDetectionParams;
207 ic::DetectionParams m_DetectConfig;
213 class ClassifyPostprocessor :
public Postprocessor {
220 std::vector<NvDsInferLayerInfo>& outputLayers,
221 const std::vector<SharedBatchBuf> outputBufs, uint32_t batchSize,
225 const std::vector<NvDsInferLayerInfo>& outputLayers,
226 InferClassificationOutput& output);
228 bool parseAttributesFromSoftmaxLayers(
229 std::vector<NvDsInferLayerInfo>
const& outputLayersInfo,
231 std::vector<NvDsInferAttribute>& attrList, std::string& attrString);
234 float m_ClassifierThreshold = 0;
237 ic::ClassificationParams m_Config;
243 class SegmentPostprocessor :
public Postprocessor {
250 std::vector<NvDsInferLayerInfo>& outputLayers,
251 const std::vector<SharedBatchBuf> outputBufs, uint32_t batchSize,
255 const std::vector<NvDsInferLayerInfo>& outputLayers,
258 bool parseSemanticSegmentationOutput(
259 std::vector<NvDsInferLayerInfo>
const& outputLayersInfo,
261 float segmentationThreshold,
unsigned int numClasses,
262 int* classificationMap,
float*& classProbabilityMap);
265 float m_SegmentationThreshold = 0.0f;
267 m_CustomSemSegmentationParseFunc =
nullptr;
268 unsigned int m_NumSegmentationClasses = 0;
269 ic::SegmentationParams m_Config;
275 class OtherPostprocessor :
public Postprocessor {
281 std::vector<NvDsInferLayerInfo>& outputLayers,
282 const std::vector<SharedBatchBuf> outputBufs, uint32_t batchSize,
289 ic::OtherNetworkParams m_Config;
295 class TrtIsClassifier :
public Postprocessor {
304 std::vector<NvDsInferLayerInfo>& outputLayers,
305 const std::vector<SharedBatchBuf> outputBufs, uint32_t batchSize,
310 "TrtIsClassifer(uid:%d) should not reach here, check error",
316 ic::TritonClassifyParams m_Config;