MCPcopy Create free account
hub / github.com/alibaba/MNN / onEncode

Method onEncode

source/backend/tensorrt/execution/TRTDepthwiseConvolution.cpp:23–83  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21}
22
23std::vector<ITensor *> TRTDepthwiseConvolution::onEncode(const std::vector<ITensor *> &xOp) {
24 auto opName = mOp->name()->str();
25
26 auto conv2D = mOp->main_as_Convolution2D();
27 auto conv2DCommon = conv2D->common();
28
29 auto kernelX = conv2DCommon->kernelX();
30 auto kernelY = conv2DCommon->kernelY();
31 auto outputCount = conv2DCommon->outputCount();
32 nvinfer1::DimsHW NVKSize(kernelY, kernelX);
33 nvinfer1::DimsHW NVKDSize(conv2DCommon->dilateY(), conv2DCommon->dilateX());
34 nvinfer1::DimsHW NVKSSize(conv2DCommon->strideY(), conv2DCommon->strideX());
35 const float *source = nullptr;
36 int weightSize = 0;
37 std::shared_ptr<ConvolutionCommon::Int8Common> quanWeight;
38 if (nullptr != mOp->main_as_Convolution2D()->quanParameter()) {
39 quanWeight = ConvolutionCommon::load(mOp, backend(), true);
40 source = quanWeight->weightFloat.get();
41 weightSize = quanWeight->weightFloat.size();
42 } else {
43 if (nullptr != conv2D->weight()) {
44 source = conv2D->weight()->data();
45 weightSize = conv2D->weight()->size();
46 }
47 }
48 mTrtBackend->pushCache(quanWeight);
49 TRTWeight weight{nvinfer1::DataType::kFLOAT, static_cast<void *>(const_cast<float *>(source)),
50 static_cast<size_t>(weightSize)};
51
52 TRTWeight bias{nvinfer1::DataType::kFLOAT, static_cast<void *>(const_cast<float *>(conv2D->bias()->data())),
53 static_cast<size_t>(conv2D->bias()->size())};
54 auto conv_layer =
55 mTrtBackend->getNetwork()->addConvolution(*(xOp[0]), outputCount, NVKSize, weight.get(), bias.get());
56
57 conv_layer->setStride(NVKSSize);
58 conv_layer->setDilation(NVKDSize);
59 conv_layer->setNbGroups(outputCount);
60 auto pads = ConvolutionCommon::convolutionPad(mInputs[0], mOutputs[0], conv2DCommon);
61 conv_layer->setPadding(nvinfer1::DimsHW{pads.second, pads.first});
62 if (conv2DCommon->padMode() == PadMode_SAME) {
63 conv_layer->setPaddingMode(nvinfer1::PaddingMode::kSAME_UPPER);
64 }
65 conv_layer->setName(mOp->name()->str().c_str());
66 auto relu = conv2DCommon->relu();
67 auto relu6 = conv2DCommon->relu6();
68
69 if (relu) {
70 mActivationLayer = mTrtBackend->getNetwork()->addActivation(*conv_layer->getOutput(0), ActivationType::kRELU);
71 }
72
73 if (relu6) {
74 mActivationLayer = mTrtBackend->getNetwork()->addActivation(*conv_layer->getOutput(0), ActivationType::kCLIP);
75 mActivationLayer->setAlpha(0.);
76 mActivationLayer->setBeta(6.);
77 }
78
79 if (relu || relu6) {
80 return {mActivationLayer->getOutput(0)};

Callers

nothing calls this directly

Calls 15

backendFunction · 0.85
weightMethod · 0.80
pushCacheMethod · 0.80
biasMethod · 0.80
getNetworkMethod · 0.80
setPaddingMethod · 0.80
loadFunction · 0.50
strMethod · 0.45
nameMethod · 0.45
getMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected