Skip to content

Commit f334a1a

Browse files
authored
yolop TRT8 support (wang-xinyu#1202)
* yolop TRT8 support * yolop TRT8 support
1 parent 772d353 commit f334a1a

File tree

5 files changed

+74
-51
lines changed

5 files changed

+74
-51
lines changed

yolop/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ The original pytorch model is from [hustvl/YOLOP](https://github.com/hustvl/YOLO
77

88
<a href="https://github.com/ausk"><img src="https://avatars.githubusercontent.com/u/4545060?v=4?s=48" width="40px;" alt=""/></a>
99
<a href="https://github.com/aliceint"><img src="https://avatars.githubusercontent.com/u/15520773?v=4?s=48" width="40px;" alt=""/></a>
10+
<a href="https://github.com/mantuoluozk"><img src="https://avatars.githubusercontent.com/u/43333969?v=4?s=48" width="40px;" alt=""/></a>
1011

1112
## 1. Prepare building environments
1213

yolop/logging.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,20 @@
99
#include <ostream>
1010
#include <sstream>
1111
#include <string>
12+
#include "macros.h"
13+
14+
#if NV_TENSORRT_MAJOR >= 8
15+
#define TRT_NOEXCEPT noexcept
16+
#else
17+
#define TRT_NOEXCEPT
18+
#endif
1219

1320
using Severity = nvinfer1::ILogger::Severity;
1421

1522
class Logger : public nvinfer1::ILogger
1623
{
1724
public:
18-
void log(Severity severity, const char* msg) noexcept override
25+
void log(Severity severity, const char* msg) TRT_NOEXCEPT override
1926
{
2027
if (severity < Severity::kINFO) {
2128
std::cout << msg << std::endl;

yolop/macros.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#ifndef __MACROS_H
2+
#define __MACROS_H
3+
4+
#if NV_TENSORRT_MAJOR >= 8
5+
#define TRT_NOEXCEPT noexcept
6+
#define TRT_CONST_ENQUEUE const
7+
#else
8+
#define TRT_NOEXCEPT
9+
#define TRT_CONST_ENQUEUE
10+
#endif
11+
12+
#endif // __MACROS_H

yolop/yololayer.cu

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ namespace nvinfer1
7878
assert(d == a + length);
7979
}
8080

81-
void YoloLayerPlugin::serialize(void* buffer) const
81+
void YoloLayerPlugin::serialize(void* buffer) const TRT_NOEXCEPT
8282
{
8383
using namespace Tn;
8484
char* d = static_cast<char*>(buffer), *a = d;
@@ -95,17 +95,17 @@ namespace nvinfer1
9595
assert(d == a + getSerializationSize());
9696
}
9797

98-
size_t YoloLayerPlugin::getSerializationSize() const
98+
size_t YoloLayerPlugin::getSerializationSize() const TRT_NOEXCEPT
9999
{
100100
return sizeof(mClassCount) + sizeof(mThreadCount) + sizeof(mKernelCount) + sizeof(Yolo::YoloKernel) * mYoloKernel.size() + sizeof(mNetWidth) + sizeof(mNetHeight) + sizeof(mMaxOutObject);
101101
}
102102

103-
int YoloLayerPlugin::initialize()
103+
int YoloLayerPlugin::initialize() TRT_NOEXCEPT
104104
{
105105
return 0;
106106
}
107107

108-
Dims YoloLayerPlugin::getOutputDimensions(int index, const Dims* inputs, int nbInputDims)
108+
Dims YoloLayerPlugin::getOutputDimensions(int index, const Dims* inputs, int nbInputDims) TRT_NOEXCEPT
109109
{
110110
//output the result to channel
111111
int totalsize = mMaxOutObject * sizeof(Detection) / sizeof(float);
@@ -114,63 +114,63 @@ namespace nvinfer1
114114
}
115115

116116
// Set plugin namespace
117-
void YoloLayerPlugin::setPluginNamespace(const char* pluginNamespace)
117+
void YoloLayerPlugin::setPluginNamespace(const char* pluginNamespace) TRT_NOEXCEPT
118118
{
119119
mPluginNamespace = pluginNamespace;
120120
}
121121

122-
const char* YoloLayerPlugin::getPluginNamespace() const
122+
const char* YoloLayerPlugin::getPluginNamespace() const TRT_NOEXCEPT
123123
{
124124
return mPluginNamespace;
125125
}
126126

127127
// Return the DataType of the plugin output at the requested index
128-
DataType YoloLayerPlugin::getOutputDataType(int index, const nvinfer1::DataType* inputTypes, int nbInputs) const
128+
DataType YoloLayerPlugin::getOutputDataType(int index, const nvinfer1::DataType* inputTypes, int nbInputs) const TRT_NOEXCEPT
129129
{
130130
return DataType::kFLOAT;
131131
}
132132

133133
// Return true if output tensor is broadcast across a batch.
134-
bool YoloLayerPlugin::isOutputBroadcastAcrossBatch(int outputIndex, const bool* inputIsBroadcasted, int nbInputs) const
134+
bool YoloLayerPlugin::isOutputBroadcastAcrossBatch(int outputIndex, const bool* inputIsBroadcasted, int nbInputs) const TRT_NOEXCEPT
135135
{
136136
return false;
137137
}
138138

139139
// Return true if plugin can use input that is broadcast across batch without replication.
140-
bool YoloLayerPlugin::canBroadcastInputAcrossBatch(int inputIndex) const
140+
bool YoloLayerPlugin::canBroadcastInputAcrossBatch(int inputIndex) const TRT_NOEXCEPT
141141
{
142142
return false;
143143
}
144144

145-
void YoloLayerPlugin::configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput)
145+
void YoloLayerPlugin::configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput) TRT_NOEXCEPT
146146
{
147147
}
148148

149149
// Attach the plugin object to an execution context and grant the plugin the access to some context resource.
150-
void YoloLayerPlugin::attachToContext(cudnnContext* cudnnContext, cublasContext* cublasContext, IGpuAllocator* gpuAllocator)
150+
void YoloLayerPlugin::attachToContext(cudnnContext* cudnnContext, cublasContext* cublasContext, IGpuAllocator* gpuAllocator) TRT_NOEXCEPT
151151
{
152152
}
153153

154154
// Detach the plugin object from its execution context.
155-
void YoloLayerPlugin::detachFromContext() {}
155+
void YoloLayerPlugin::detachFromContext() TRT_NOEXCEPT {}
156156

157-
const char* YoloLayerPlugin::getPluginType() const
157+
const char* YoloLayerPlugin::getPluginType() const TRT_NOEXCEPT
158158
{
159159
return "YoloLayer_TRT";
160160
}
161161

162-
const char* YoloLayerPlugin::getPluginVersion() const
162+
const char* YoloLayerPlugin::getPluginVersion() const TRT_NOEXCEPT
163163
{
164164
return "1";
165165
}
166166

167-
void YoloLayerPlugin::destroy()
167+
void YoloLayerPlugin::destroy() TRT_NOEXCEPT
168168
{
169169
delete this;
170170
}
171171

172172
// Clone the plugin
173-
IPluginV2IOExt* YoloLayerPlugin::clone() const
173+
IPluginV2IOExt* YoloLayerPlugin::clone() const TRT_NOEXCEPT
174174
{
175175
YoloLayerPlugin* p = new YoloLayerPlugin(mClassCount, mNetWidth, mNetHeight, mMaxOutObject, mYoloKernel);
176176
p->setPluginNamespace(mPluginNamespace);
@@ -254,7 +254,7 @@ namespace nvinfer1
254254
}
255255

256256

257-
int YoloLayerPlugin::enqueue(int batchSize, const void*const * inputs, void** outputs, void* workspace, cudaStream_t stream)
257+
int YoloLayerPlugin::enqueue(int batchSize, const void*const * inputs, void*TRT_CONST_ENQUEUE* outputs, void* workspace, cudaStream_t stream) TRT_NOEXCEPT
258258
{
259259
forwardGpu((const float *const *)inputs, (float*)outputs[0], stream, batchSize);
260260
return 0;
@@ -271,22 +271,22 @@ namespace nvinfer1
271271
mFC.fields = mPluginAttributes.data();
272272
}
273273

274-
const char* YoloPluginCreator::getPluginName() const
274+
const char* YoloPluginCreator::getPluginName() const TRT_NOEXCEPT
275275
{
276276
return "YoloLayer_TRT";
277277
}
278278

279-
const char* YoloPluginCreator::getPluginVersion() const
279+
const char* YoloPluginCreator::getPluginVersion() const TRT_NOEXCEPT
280280
{
281281
return "1";
282282
}
283283

284-
const PluginFieldCollection* YoloPluginCreator::getFieldNames()
284+
const PluginFieldCollection* YoloPluginCreator::getFieldNames() TRT_NOEXCEPT
285285
{
286286
return &mFC;
287287
}
288288

289-
IPluginV2IOExt* YoloPluginCreator::createPlugin(const char* name, const PluginFieldCollection* fc)
289+
IPluginV2IOExt* YoloPluginCreator::createPlugin(const char* name, const PluginFieldCollection* fc) TRT_NOEXCEPT
290290
{
291291
int class_count = -1;
292292
int input_w = -1;
@@ -321,7 +321,7 @@ namespace nvinfer1
321321
return obj;
322322
}
323323

324-
IPluginV2IOExt* YoloPluginCreator::deserializePlugin(const char* name, const void* serialData, size_t serialLength)
324+
IPluginV2IOExt* YoloPluginCreator::deserializePlugin(const char* name, const void* serialData, size_t serialLength) TRT_NOEXCEPT
325325
{
326326
// This object will be deleted when the network is destroyed, which will
327327
// call YoloLayerPlugin::destroy()

yolop/yololayer.h

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <vector>
55
#include <string>
66
#include "NvInfer.h"
7+
#include "macros.h"
78

89
namespace Yolo
910
{
@@ -40,53 +41,55 @@ namespace nvinfer1
4041
YoloLayerPlugin(const void* data, size_t length);
4142
~YoloLayerPlugin();
4243

43-
int getNbOutputs() const override
44+
int getNbOutputs() const TRT_NOEXCEPT override
4445
{
4546
return 1;
4647
}
4748

48-
Dims getOutputDimensions(int index, const Dims* inputs, int nbInputDims) override;
49+
Dims getOutputDimensions(int index, const Dims* inputs, int nbInputDims) TRT_NOEXCEPT override;
4950

50-
int initialize() override;
51+
int initialize() TRT_NOEXCEPT override;
5152

52-
virtual void terminate() override {};
53+
virtual void terminate() TRT_NOEXCEPT override {};
5354

54-
virtual size_t getWorkspaceSize(int maxBatchSize) const override { return 0; }
55+
virtual size_t getWorkspaceSize(int maxBatchSize) const TRT_NOEXCEPT override { return 0; }
5556

56-
virtual int enqueue(int batchSize, const void*const * inputs, void** outputs, void* workspace, cudaStream_t stream) override;
57+
virtual int enqueue(int batchSize, const void*const * inputs, void*TRT_CONST_ENQUEUE* outputs, void* workspace, cudaStream_t stream) TRT_NOEXCEPT override;
5758

58-
virtual size_t getSerializationSize() const override;
59+
virtual size_t getSerializationSize() const TRT_NOEXCEPT override;
5960

60-
virtual void serialize(void* buffer) const override;
61+
virtual void serialize(void* buffer) const TRT_NOEXCEPT override;
6162

62-
bool supportsFormatCombination(int pos, const PluginTensorDesc* inOut, int nbInputs, int nbOutputs) const override {
63+
bool supportsFormatCombination(int pos, const PluginTensorDesc* inOut, int nbInputs, int nbOutputs) const TRT_NOEXCEPT override {
6364
return inOut[pos].format == TensorFormat::kLINEAR && inOut[pos].type == DataType::kFLOAT;
6465
}
6566

66-
const char* getPluginType() const override;
67+
const char* getPluginType() const TRT_NOEXCEPT override;
6768

68-
const char* getPluginVersion() const override;
69+
const char* getPluginVersion() const TRT_NOEXCEPT override;
6970

70-
void destroy() override;
71+
void destroy() TRT_NOEXCEPT override;
7172

72-
IPluginV2IOExt* clone() const override;
73+
IPluginV2IOExt* clone() const TRT_NOEXCEPT override;
7374

74-
void setPluginNamespace(const char* pluginNamespace) override;
75+
void setPluginNamespace(const char* pluginNamespace) TRT_NOEXCEPT override;
7576

76-
const char* getPluginNamespace() const override;
77+
const char* getPluginNamespace() const TRT_NOEXCEPT override;
7778

78-
DataType getOutputDataType(int index, const nvinfer1::DataType* inputTypes, int nbInputs) const override;
79+
DataType getOutputDataType(int index, const nvinfer1::DataType* inputTypes, int nbInputs) const TRT_NOEXCEPT override;
7980

80-
bool isOutputBroadcastAcrossBatch(int outputIndex, const bool* inputIsBroadcasted, int nbInputs) const override;
81+
bool isOutputBroadcastAcrossBatch(int outputIndex, const bool* inputIsBroadcasted, int nbInputs) const TRT_NOEXCEPT override;
8182

82-
bool canBroadcastInputAcrossBatch(int inputIndex) const override;
83+
bool canBroadcastInputAcrossBatch(int inputIndex) const TRT_NOEXCEPT override;
8384

8485
void attachToContext(
85-
cudnnContext* cudnnContext, cublasContext* cublasContext, IGpuAllocator* gpuAllocator) override;
86+
cudnnContext* cudnnContext, cublasContext* cublasContext, IGpuAllocator* gpuAllocator) TRT_NOEXCEPT override;
8687

87-
void configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput) override;
88+
void configurePlugin(const PluginTensorDesc* in, int nbInput, const PluginTensorDesc* out, int nbOutput) TRT_NOEXCEPT override;
8889

89-
void detachFromContext() override;
90+
using IPluginV2Ext::configurePlugin;
91+
92+
void detachFromContext() TRT_NOEXCEPT override;
9093

9194
private:
9295
void forwardGpu(const float *const * inputs, float * output, cudaStream_t stream, int batchSize = 1);
@@ -108,22 +111,22 @@ namespace nvinfer1
108111

109112
~YoloPluginCreator() override = default;
110113

111-
const char* getPluginName() const override;
114+
const char* getPluginName() const TRT_NOEXCEPT override;
112115

113-
const char* getPluginVersion() const override;
116+
const char* getPluginVersion() const TRT_NOEXCEPT override;
114117

115-
const PluginFieldCollection* getFieldNames() override;
118+
const PluginFieldCollection* getFieldNames() TRT_NOEXCEPT override;
116119

117-
IPluginV2IOExt* createPlugin(const char* name, const PluginFieldCollection* fc) override;
120+
IPluginV2IOExt* createPlugin(const char* name, const PluginFieldCollection* fc) TRT_NOEXCEPT override;
118121

119-
IPluginV2IOExt* deserializePlugin(const char* name, const void* serialData, size_t serialLength) override;
122+
IPluginV2IOExt* deserializePlugin(const char* name, const void* serialData, size_t serialLength) TRT_NOEXCEPT override;
120123

121-
void setPluginNamespace(const char* libNamespace) override
124+
void setPluginNamespace(const char* libNamespace) TRT_NOEXCEPT override
122125
{
123126
mNamespace = libNamespace;
124127
}
125128

126-
const char* getPluginNamespace() const override
129+
const char* getPluginNamespace() const TRT_NOEXCEPT override
127130
{
128131
return mNamespace.c_str();
129132
}

0 commit comments

Comments
 (0)