| 21 | } |
| 22 | |
| 23 | std::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)}; |
nothing calls this directly
no test coverage detected