19#include <NvInferVersion.h>
33#ifdef NV_TENSORRT_MAJOR
34#if NV_TENSORRT_MAJOR != 8
35class DFMBPSROIAlignPlugin :
public nvinfer1::IPlugin {
38 const DFMBPSROIAlignParameter &dfmb_psroi_align_parameter,
39 nvinfer1::Dims *in_dims,
int nbInputs) {
40 heat_map_a_ = dfmb_psroi_align_parameter.heat_map_a();
41 output_channel_ = dfmb_psroi_align_parameter.output_dim();
42 group_height_ = dfmb_psroi_align_parameter.group_height();
43 group_width_ = dfmb_psroi_align_parameter.group_width();
44 pooled_height_ = dfmb_psroi_align_parameter.pooled_height();
45 pooled_width_ = dfmb_psroi_align_parameter.pooled_width();
46 pad_ratio_ = dfmb_psroi_align_parameter.pad_ratio();
47 sample_per_part_ = dfmb_psroi_align_parameter.sample_per_part();
49 trans_std_ = dfmb_psroi_align_parameter.trans_std();
50 part_height_ = dfmb_psroi_align_parameter.part_height();
51 part_width_ = dfmb_psroi_align_parameter.part_width();
52 heat_map_b_ = dfmb_psroi_align_parameter.heat_map_b();
53 no_trans_ = (nbInputs < 3);
54 num_classes_ = no_trans_ ? 1 : in_dims[2].d[1];
56 CHECK_GT(heat_map_a_, 0);
57 CHECK_GE(heat_map_b_, 0);
58 CHECK_GE(pad_ratio_, 0);
59 CHECK_GT(output_channel_, 0);
60 CHECK_GT(sample_per_part_, 0);
61 CHECK_GT(group_height_, 0);
62 CHECK_GT(group_width_, 0);
63 CHECK_GT(pooled_height_, 0);
64 CHECK_GT(pooled_width_, 0);
65 CHECK_GE(part_height_, 0);
66 CHECK_GE(part_width_, 0);
68 channels_ = in_dims[0].d[0];
69 height_ = in_dims[0].d[1];
70 width_ = in_dims[0].d[2];
71 output_dims_ = nvinfer1::Dims4(in_dims[1].d[0], output_channel_,
72 pooled_height_, pooled_width_);
74 in_dims[1].d[0] * output_channel_ * pooled_height_ * pooled_width_;
76 CHECK_EQ(channels_, output_channel_ * group_height_ * group_width_);
77 CHECK_EQ(in_dims[1].d[1], 5);
79 CHECK_EQ(in_dims[2].d[1] % 2, 0);
80 int num_classes = in_dims[2].d[1] / 2;
81 CHECK_EQ(output_channel_ % num_classes, 0);
82 CHECK_EQ(part_height_, in_dims[2].d[2]);
83 CHECK_EQ(part_width_, in_dims[2].d[3]);
94 int nbInputDims)
override {
99 void configure(
const nvinfer1::Dims *inputDims,
int nbInputs,
100 const nvinfer1::Dims *outputDims,
int nbOutputs,
101 int maxBatchSize)
override {}
105 virtual int enqueue(
int batchSize,
const void *
const *inputs,
void **outputs,
106 void *workspace, cudaStream_t stream);
111 char *d =
reinterpret_cast<char *
>(buffer), *a = d;
113 CHECK_EQ(d, a + size);
117 const int thread_size_ = 512;
125 int sample_per_part_;
139 nvinfer1::Dims output_dims_;
143class DFMBPSROIAlignPlugin :
public nvinfer1::IPluginV2Ext {
146 const DFMBPSROIAlignParameter &dfmb_psroi_align_parameter,
147 nvinfer1::Dims *in_dims,
int nbInputs) {
148 heat_map_a_ = dfmb_psroi_align_parameter.heat_map_a();
149 output_channel_ = dfmb_psroi_align_parameter.output_dim();
150 group_height_ = dfmb_psroi_align_parameter.group_height();
151 group_width_ = dfmb_psroi_align_parameter.group_width();
152 pooled_height_ = dfmb_psroi_align_parameter.pooled_height();
153 pooled_width_ = dfmb_psroi_align_parameter.pooled_width();
154 pad_ratio_ = dfmb_psroi_align_parameter.pad_ratio();
155 sample_per_part_ = dfmb_psroi_align_parameter.sample_per_part();
157 trans_std_ = dfmb_psroi_align_parameter.trans_std();
158 part_height_ = dfmb_psroi_align_parameter.part_height();
159 part_width_ = dfmb_psroi_align_parameter.part_width();
160 heat_map_b_ = dfmb_psroi_align_parameter.heat_map_b();
161 no_trans_ = (nbInputs < 3);
162 num_classes_ = no_trans_ ? 1 : in_dims[2].d[1];
164 CHECK_GT(heat_map_a_, 0);
165 CHECK_GE(heat_map_b_, 0);
166 CHECK_GE(pad_ratio_, 0);
167 CHECK_GT(output_channel_, 0);
168 CHECK_GT(sample_per_part_, 0);
169 CHECK_GT(group_height_, 0);
170 CHECK_GT(group_width_, 0);
171 CHECK_GT(pooled_height_, 0);
172 CHECK_GT(pooled_width_, 0);
173 CHECK_GE(part_height_, 0);
174 CHECK_GE(part_width_, 0);
176 channels_ = in_dims[0].d[0];
177 height_ = in_dims[0].d[1];
178 width_ = in_dims[0].d[2];
179 output_dims_ = nvinfer1::Dims4(in_dims[1].d[0], output_channel_,
180 pooled_height_, pooled_width_);
182 in_dims[1].d[0] * output_channel_ * pooled_height_ * pooled_width_;
184 CHECK_EQ(channels_, output_channel_ * group_height_ * group_width_);
185 CHECK_EQ(in_dims[1].d[1], 5);
187 CHECK_EQ(in_dims[2].d[1] % 2, 0);
188 int num_classes = in_dims[2].d[1] / 2;
189 CHECK_EQ(output_channel_ % num_classes, 0);
190 CHECK_EQ(part_height_, in_dims[2].d[2]);
191 CHECK_EQ(part_width_, in_dims[2].d[3]);
198 virtual int initialize() noexcept {
return 0; }
200 int32_t
getNbOutputs() const noexcept
override {
return 1; }
203 const nvinfer1::Dims *inputs,
204 int32_t nbInputDims)
noexcept override {
209 void configureWithFormat(
const nvinfer1::Dims *inputDims, int32_t nbInputs,
210 const nvinfer1::Dims *outputDims, int32_t nbOutputs,
211 nvinfer1::DataType type, nvinfer1::PluginFormat format,
212 int32_t maxBatchSize)
noexcept override {}
215 const noexcept override {
return 0; }
217 int32_t
enqueue(int32_t batchSize,
const void *
const *inputs,
218 void *
const *outputs,
void *workspace,
219 cudaStream_t stream)
noexcept override;
223 void serialize(
void *buffer)
const noexcept override {
224 char *d =
reinterpret_cast<char *
>(buffer), *a = d;
226 CHECK_EQ(d, a + size);
229 nvinfer1::AsciiChar
const* getPluginType() const noexcept
override {
233 nvinfer1::AsciiChar
const* getPluginVersion() const noexcept
override {
234 return plugin_version;
237 void setPluginNamespace(
const nvinfer1::AsciiChar* libNamespace)
239 plugin_namespace =
const_cast<nvinfer1::AsciiChar*
>(libNamespace);
242 nvinfer1::AsciiChar
const* getPluginNamespace() const noexcept
override {
243 return const_cast<nvinfer1::AsciiChar*
>(plugin_namespace);
246 bool supportsFormat(nvinfer1::DataType type,
247 nvinfer1::PluginFormat format)
const noexcept override {
251 void destroy() noexcept
override {
255 bool isOutputBroadcastAcrossBatch(int32_t outputIndex,
256 bool const *inputIsBroadcasted,
257 int32_t nbInputs)
const noexcept override {
261 bool canBroadcastInputAcrossBatch(int32_t inputIndex)
262 const noexcept override {
266 nvinfer1::DataType getOutputDataType(int32_t index,
267 nvinfer1::DataType
const *inputTypes,
268 int32_t nbInputs)
const noexcept {
269 return nvinfer1::DataType::kFLOAT;
272 void configurePlugin(
273 nvinfer1::Dims
const *inputDims, int32_t nbInputs,
274 nvinfer1::Dims
const *outputDims, int32_t nbOutputs,
275 nvinfer1::DataType
const *inputTypes, nvinfer1::DataType
const *outputTypes,
276 bool const *inputIsBroadcast,
bool const *outputIsBroadcast,
277 nvinfer1::PluginFormat floatFormat, int32_t maxBatchSize)
noexcept {}
279 nvinfer1::IPluginV2Ext* clone() const noexcept
override {
281 p->heat_map_a_ = heat_map_a_;
282 p->heat_map_b_ = heat_map_b_;
283 p->pad_ratio_ = pad_ratio_;
285 p->output_channel_ = output_channel_;
286 p->no_trans_ = no_trans_;
287 p->trans_std_ = trans_std_;
288 p->sample_per_part_ = sample_per_part_;
289 p->group_height_ = group_height_;
290 p->group_width_ = group_width_;
291 p->pooled_height_ = pooled_height_;
292 p->pooled_width_ = pooled_width_;
293 p->part_height_ = part_height_;
294 p->part_width_ = part_width_;
295 p->num_classes_ = num_classes_;
297 p->channels_ = channels_;
298 p->height_ = height_;
300 p->output_size_ = output_size_;
302 p->output_dims_ = nvinfer1::Dims4(
303 output_size_ / (output_channel_ * pooled_height_ * pooled_width_),
304 output_channel_, pooled_height_, pooled_width_);
306 p->plugin_namespace = plugin_namespace;
311 const int thread_size_ = 512;
319 int sample_per_part_;
333 nvinfer1::Dims output_dims_;
335 nvinfer1::AsciiChar* plugin_namespace;
336 const nvinfer1::AsciiChar* plugin_type =
"";
337 const nvinfer1::AsciiChar* plugin_version =
"";
size_t getSerializationSize() override
void terminate() override
virtual ~DFMBPSROIAlignPlugin()
DFMBPSROIAlignPlugin(const DFMBPSROIAlignParameter &dfmb_psroi_align_parameter, Dims *in_dims, int nbInputs)
size_t getWorkspaceSize(int maxBatchSize) const override
int getNbOutputs() const override
int initialize() override
void serialize(void *buffer) override
Dims getOutputDimensions(int index, const Dims *inputs, int nbInputDims) override
void configure(const Dims *inputDims, int nbInputs, const Dims *outputDims, int nbOutputs, int maxBatchSize) override
int enqueue(int batchSize, const void *const *inputs, void **outputs, void *workspace, cudaStream_t stream) override