TensorRT  5.1.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
NvInferPlugin.h
Go to the documentation of this file.
1 /*
2  * Copyright 1993-2019 NVIDIA Corporation. All rights reserved.
3  *
4  * NOTICE TO LICENSEE:
5  *
6  * This source code and/or documentation ("Licensed Deliverables") are
7  * subject to NVIDIA intellectual property rights under U.S. and
8  * international Copyright laws.
9  *
10  * These Licensed Deliverables contained herein is PROPRIETARY and
11  * CONFIDENTIAL to NVIDIA and is being provided under the terms and
12  * conditions of a form of NVIDIA software license agreement by and
13  * between NVIDIA and Licensee ("License Agreement") or electronically
14  * accepted by Licensee. Notwithstanding any terms or conditions to
15  * the contrary in the License Agreement, reproduction or disclosure
16  * of the Licensed Deliverables to any third party without the express
17  * written consent of NVIDIA is prohibited.
18  *
19  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
20  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
21  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
22  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
23  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
24  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
25  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
26  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
27  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
28  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
29  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
30  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
31  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
32  * OF THESE LICENSED DELIVERABLES.
33  *
34  * U.S. Government End Users. These Licensed Deliverables are a
35  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
36  * 1995), consisting of "commercial computer software" and "commercial
37  * computer software documentation" as such terms are used in 48
38  * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
39  * only as a commercial end item. Consistent with 48 C.F.R.12.212 and
40  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
41  * U.S. Government End Users acquire the Licensed Deliverables with
42  * only those rights set forth herein.
43  *
44  * Any use of the Licensed Deliverables in individual and commercial
45  * software must include, in the user documentation and internal
46  * comments to the code, the above Disclaimer and U.S. Government End
47  * Users Notice.
48  */
49 
50 #ifndef NV_INFER_PLUGIN_H
51 #define NV_INFER_PLUGIN_H
52 
53 #include "NvInfer.h"
54 
60 
61 namespace nvinfer1
62 {
70 enum class PluginType : int
71 {
72  kFASTERRCNN = 0,
73  kNORMALIZE = 1,
74  kPERMUTE = 2,
75  kPRIORBOX = 3,
77  kCONCAT = 5,
78  kPRELU = 6,
79  kYOLOREORG = 7,
80  kYOLOREGION = 8,
81  kANCHORGENERATOR = 9,
82 };
83 
85 template <>
86 inline int EnumMax<PluginType>()
87 {
88  return 10;
89 }
90 
91 namespace plugin
92 {
103 class INvPlugin : public IPlugin
104 {
105 public:
111  virtual PluginType getPluginType() const = 0;
112 
120  virtual const char* getName() const = 0;
121 
127  virtual void destroy() = 0;
128 
129 protected:
130  ~INvPlugin() {}
131 }; // INvPlugin
132 
150 TENSORRTAPI INvPlugin* createFasterRCNNPlugin(int featureStride, int preNmsTop,
151  int nmsMaxOut, float iouThreshold, float minBoxSize,
152  float spatialScale, DimsHW pooling,
153  Weights anchorRatios, Weights anchorScales);
154 TENSORRTAPI INvPlugin* createFasterRCNNPlugin(const void* data, size_t length);
155 
164 TENSORRTAPI INvPlugin* createSSDNormalizePlugin(const Weights* scales, bool acrossSpatial, bool channelShared, float eps);
165 TENSORRTAPI INvPlugin* createSSDNormalizePlugin(const void* data, size_t length);
166 
171 typedef struct
172 {
173  int data[4];
174 } Quadruple;
175 
180 TENSORRTAPI INvPlugin* createSSDPermutePlugin(Quadruple permuteOrder);
181 TENSORRTAPI INvPlugin* createSSDPermutePlugin(const void* data, size_t length);
182 
203 {
204  float *minSize, *maxSize, *aspectRatios;
205  int numMinSize, numMaxSize, numAspectRatios;
206  bool flip;
207  bool clip;
208  float variance[4];
209  int imgH, imgW;
210  float stepH, stepW;
211  float offset;
212 };
213 
227 {
228  float minSize, maxSize;
229  float* aspectRatios;
230  int numAspectRatios, H, W;
231  float variance[4];
232 };
233 
238 TENSORRTAPI INvPlugin* createSSDPriorBoxPlugin(PriorBoxParameters param);
239 TENSORRTAPI INvPlugin* createSSDPriorBoxPlugin(const void* data, size_t length);
240 
247 TENSORRTAPI INvPlugin* createSSDAnchorGeneratorPlugin(GridAnchorParameters* param, int numLayers);
248 TENSORRTAPI INvPlugin* createSSDAnchorGeneratorPlugin(const void* data, size_t length);
249 
254 enum class CodeTypeSSD : int
255 {
256  CORNER = 0,
257  CENTER_SIZE = 1,
258  CORNER_SIZE = 2,
259  TF_CENTER = 3
260 };
261 
281 {
282  bool shareLocation, varianceEncodedInTarget;
283  int backgroundLabelId, numClasses, topK, keepTopK;
284  float confidenceThreshold, nmsThreshold;
285  CodeTypeSSD codeType;
286  int inputOrder[3];
287  bool confSigmoid;
288  bool isNormalized;
289 };
290 
295 TENSORRTAPI INvPlugin* createSSDDetectionOutputPlugin(DetectionOutputParameters param);
296 TENSORRTAPI INvPlugin* createSSDDetectionOutputPlugin(const void* data, size_t length);
297 
306 TENSORRTAPI INvPlugin* createConcatPlugin(int concatAxis, bool ignoreBatch);
307 TENSORRTAPI INvPlugin* createConcatPlugin(const void* data, size_t length);
308 
315 TENSORRTAPI INvPlugin* createPReLUPlugin(float negSlope);
316 TENSORRTAPI INvPlugin* createPReLUPlugin(const void* data, size_t length);
317 
323 TENSORRTAPI INvPlugin* createYOLOReorgPlugin(int stride);
324 TENSORRTAPI INvPlugin* createYOLOReorgPlugin(const void* data, size_t length);
325 
337 typedef struct
338 {
339  int* leaf;
340  int n;
341  int* parent;
342  int* child;
343  int* group;
344  char** name;
345 
346  int groups;
347  int* groupSize;
348  int* groupOffset;
349 } softmaxTree; // softmax tree
350 
352 {
353  int num;
354  int coords;
355  int classes;
356  softmaxTree* smTree;
357 };
358 
359 TENSORRTAPI INvPlugin* createYOLORegionPlugin(RegionParameters params);
360 TENSORRTAPI INvPlugin* createYOLORegionPlugin(const void* data, size_t length);
361 
378 
380 {
381  bool shareLocation;
382  int backgroundLabelId, numClasses, topK, keepTopK;
383  float scoreThreshold, iouThreshold;
384  bool isNormalized;
385 };
386 
387 } // end plugin namespace
388 } // end nvinfer1 namespace
389 
390 extern "C"
391 {
407 TENSORRTAPI nvinfer1::IPluginV2* createRPNROIPlugin(int featureStride, int preNmsTop,
408  int nmsMaxOut, float iouThreshold, float minBoxSize,
409  float spatialScale, nvinfer1::DimsHW pooling,
410  nvinfer1::Weights anchorRatios, nvinfer1::Weights anchorScales);
411 
420 TENSORRTAPI nvinfer1::IPluginV2* createNormalizePlugin(const nvinfer1::Weights* scales, bool acrossSpatial, bool channelShared, float eps);
421 
428 
436 
443 
449 TENSORRTAPI nvinfer1::IPluginV2* createLReLUPlugin(float negSlope);
450 
457 TENSORRTAPI nvinfer1::IPluginV2* createReorgPlugin(int stride);
458 
467 
478 TENSORRTAPI nvinfer1::IPluginV2* createClipPlugin(const char* layerName, float clipMin, float clipMax);
479 
507 
515 TENSORRTAPI bool initLibNvInferPlugins(void* logger, const char* libNamespace);
516 } // extern "C"
517 
518 #endif // NV_INFER_PLUGIN_H
TENSORRTAPI bool initLibNvInferPlugins(void *logger, const char *libNamespace)
Initialize and register all the existing TensorRT plugins to the Plugin Registry with an optional nam...
Plugin class for user-implemented layers.
Definition: NvInfer.h:3016
The Permute plugin layer permutes the input tensor by changing the memory order of the data...
Definition: NvInferPlugin.h:171
YOLO PReLU Plugin.
TENSORRTAPI nvinfer1::IPluginV2 * createRegionPlugin(nvinfer1::plugin::RegionParameters params)
The Region plugin layer performs region proposal calculation: generate 5 bounding boxes per cell (for...
virtual const char * getName() const =0
Get the name of the plugin from the ID.
SSD Grid Anchor Generator.
PluginType
The type values for the various plugins.
Definition: NvInferPlugin.h:70
virtual PluginType getPluginType() const =0
Get the parameter plugin ID.
Plugin class for user-implemented layers.
Definition: NvInfer.h:2849
Common interface for the Nvidia created plugins.
Definition: NvInferPlugin.h:103
TENSORRTAPI nvinfer1::IPluginV2 * createReorgPlugin(int stride)
The Reorg plugin reshapes input of shape CxHxW into a (C*stride*stride)x(H/stride)x(W/stride) shape...
FasterRCNN fused plugin (RPN + ROI pooling).
SSD DetectionOutput plugin.
TENSORRTAPI nvinfer1::IPluginV2 * createBatchedNMSPlugin(nvinfer1::plugin::NMSParameters param)
The BatchedNMS Plugin performs non_max_suppression on the input boxes, per batch, across all classes...
TENSORRTAPI nvinfer1::IPluginV2 * createRPNROIPlugin(int featureStride, int preNmsTop, int nmsMaxOut, float iouThreshold, float minBoxSize, float spatialScale, nvinfer1::DimsHW pooling, nvinfer1::Weights anchorRatios, nvinfer1::Weights anchorScales)
Create a plugin layer that fuses the RPN and ROI pooling using user-defined parameters. Registered plugin type "RPROI_TRT". Registered plugin version "1".
The PriorBox plugin layer generates the prior boxes of designated sizes and aspect ratios across all ...
Definition: NvInferPlugin.h:202
The NMSParameters are used by the BatchedNMSPlugin for performing the non_max_suppression operation o...
Definition: NvInferPlugin.h:379
virtual void destroy()=0
Destroy the plugin.
An array of weights used as a layer parameter.
Definition: NvInfer.h:516
The Region plugin layer performs region proposal calculation: generate 5 bounding boxes per cell (for...
Definition: NvInferPlugin.h:337
TENSORRTAPI nvinfer1::IPluginV2 * createNMSPlugin(nvinfer1::plugin::DetectionOutputParameters param)
The DetectionOutput plugin layer generates the detection output based on location and confidence pred...
Definition: NvInferPlugin.h:351
TENSORRTAPI nvinfer1::IPluginV2 * createPriorBoxPlugin(nvinfer1::plugin::PriorBoxParameters param)
The PriorBox plugin layer generates the prior boxes of designated sizes and aspect ratios across all ...
TENSORRTAPI nvinfer1::IPluginV2 * createNormalizePlugin(const nvinfer1::Weights *scales, bool acrossSpatial, bool channelShared, float eps)
The Normalize plugin layer normalizes the input to have L2 norm of 1 with scale learnable. Registered plugin type "Normalize_TRT". Registered plugin version "1".
Descriptor for two-dimensional spatial data.
Definition: NvInfer.h:224
TENSORRTAPI nvinfer1::IPluginV2 * createLReLUPlugin(float negSlope)
The LReLu plugin layer performs leaky ReLU for 4D tensors. Give an input value x, the PReLU layer com...
TENSORRTAPI nvinfer1::IPluginV2 * createClipPlugin(const char *layerName, float clipMin, float clipMax)
The Clip Plugin performs a clip operation on the input tensor. It clips the tensor values to a specif...
TENSORRTAPI nvinfer1::IPluginV2 * createAnchorGeneratorPlugin(nvinfer1::plugin::GridAnchorParameters *param, int numLayers)
The Grid Anchor Generator plugin layer generates the prior boxes of designated sizes and aspect ratio...
The Anchor Generator plugin layer generates the prior boxes of designated sizes and aspect ratios acr...
Definition: NvInferPlugin.h:226
The DetectionOutput plugin layer generates the detection output based on location and confidence pred...
Definition: NvInferPlugin.h:280