MCPcopy Create free account
hub / github.com/NVIDIA/TensorRT / getOutputDimensions

Method getOutputDimensions

plugin/efficientNMSPlugin/efficientNMSPlugin.cpp:166–234  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

164}
165
166DimsExprs EfficientNMSPlugin::getOutputDimensions(
167 int32_t outputIndex, DimsExprs const* inputs, int32_t nbInputs, IExprBuilder& exprBuilder) noexcept
168{
169 try
170 {
171 DimsExprs out_dim;
172
173 // When pad per class is set, the output size may need to be reduced:
174 // i.e.: outputBoxes = min(outputBoxes, outputBoxesPerClass * numClasses)
175 // As the number of classes may not be static, numOutputBoxes must be a dynamic
176 // expression. The corresponding parameter can not be set at this time, so the
177 // value will be calculated again in configurePlugin() and the param overwritten.
178 IDimensionExpr const* numOutputBoxes = exprBuilder.constant(mParam.numOutputBoxes);
179 if (mParam.padOutputBoxesPerClass && mParam.numOutputBoxesPerClass > 0)
180 {
181 IDimensionExpr const* numOutputBoxesPerClass = exprBuilder.constant(mParam.numOutputBoxesPerClass);
182 IDimensionExpr const* numClasses = inputs[1].d[2];
183 numOutputBoxes = exprBuilder.operation(DimensionOperation::kMIN, *numOutputBoxes,
184 *exprBuilder.operation(DimensionOperation::kPROD, *numOutputBoxesPerClass, *numClasses));
185 }
186
187 if (mParam.outputONNXIndices)
188 {
189 // ONNX NMS
190 PLUGIN_ASSERT(outputIndex == 0);
191
192 // detection_indices
193 out_dim.nbDims = 2;
194 out_dim.d[0] = exprBuilder.operation(DimensionOperation::kPROD, *inputs[0].d[0], *numOutputBoxes);
195 out_dim.d[1] = exprBuilder.constant(3);
196 }
197 else
198 {
199 // Standard NMS
200 PLUGIN_ASSERT(outputIndex >= 0 && outputIndex <= 3);
201
202 // num_detections
203 if (outputIndex == 0)
204 {
205 out_dim.nbDims = 2;
206 out_dim.d[0] = inputs[0].d[0];
207 out_dim.d[1] = exprBuilder.constant(1);
208 }
209 // detection_boxes
210 else if (outputIndex == 1)
211 {
212 out_dim.nbDims = 3;
213 out_dim.d[0] = inputs[0].d[0];
214 out_dim.d[1] = numOutputBoxes;
215 out_dim.d[2] = exprBuilder.constant(4);
216 }
217 // detection_scores: outputIndex == 2
218 // detection_classes: outputIndex == 3
219 else if (outputIndex == 2 || outputIndex == 3)
220 {
221 out_dim.nbDims = 2;
222 out_dim.d[0] = inputs[0].d[0];
223 out_dim.d[1] = numOutputBoxes;

Callers

nothing calls this directly

Calls 3

caughtErrorFunction · 0.85
constantMethod · 0.80
operationMethod · 0.80

Tested by

no test coverage detected