From 9b1532d86c2cf48a63017f3460897d8d14b98b60 Mon Sep 17 00:00:00 2001 From: Scheaven <xuepengqiang> Date: 星期三, 08 九月 2021 17:45:25 +0800 Subject: [PATCH] coding --- src/detecter_tools/trt_utils.h | 76 +++++++++++++++++++++++++++++++++++++- 1 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/detecter_tools/trt_utils.h b/src/detecter_tools/trt_utils.h index 189a60b..a166a6f 100644 --- a/src/detecter_tools/trt_utils.h +++ b/src/detecter_tools/trt_utils.h @@ -67,6 +67,34 @@ } } }; +nvinfer1::ILayer* netAddMaxpool(int layerIdx, std::map<std::string, std::string>& block, + nvinfer1::ITensor* input, nvinfer1::INetworkDefinition* network); +nvinfer1::ILayer* netAddConvLinear(int layerIdx, std::map<std::string, std::string>& block, + std::vector<float>& weights, + std::vector<nvinfer1::Weights>& trtWeights, int& weightPtr, + int& inputChannels, nvinfer1::ITensor* input, + nvinfer1::INetworkDefinition* network); + +nvinfer1::ILayer* net_conv_bn_mish(int layerIdx, + std::map<std::string, std::string>& block, + std::vector<float>& weights, + std::vector<nvinfer1::Weights>& trtWeights, + int& weightPtr, + int& inputChannels, + nvinfer1::ITensor* input, + nvinfer1::INetworkDefinition* network); + +nvinfer1::ILayer* netAddConvBNLeaky(int layerIdx, std::map<std::string, std::string>& block, + std::vector<float>& weights, + std::vector<nvinfer1::Weights>& trtWeights, int& weightPtr, + int& inputChannels, nvinfer1::ITensor* input, + nvinfer1::INetworkDefinition* network); +std::string dimsToString(const nvinfer1::Dims d); +std::vector<float> loadWeights(const std::string weightsFilePath, const std::string& networkType); +int getNumChannels(nvinfer1::ITensor* t); +std::string trim(std::string s); +std::string triml(std::string s, const char* t); +std::string trimr(std::string s, const char* t); float clamp(const float val, const float minVal, const float maxVal); // Common helper functions cv::Mat blobFromDsImages(const std::vector<DsImage>& inputImages, const int& inputH, @@ -77,9 +105,53 @@ nvinfer1::ICudaEngine* loadTRTEngine(const std::string planFilePath, PluginFactory* pluginFactory, Logger& logger); uint64_t get3DTensorVolume(nvinfer1::Dims inputDims); - +std::vector<std::string> loadImageList(const std::string filename, const std::string prefix); std::vector<BBoxInfo> nmsAllClasses(const float nmsThresh, std::vector<BBoxInfo>& binfo, const uint32_t numClasses, const std::string &model_type); - +void printLayerInfo(std::string layerIndex, std::string layerName, std::string layerInput, + std::string layerOutput, std::string weightPtr); std::vector<BBoxInfo> nonMaximumSuppression(const float nmsThresh, std::vector<BBoxInfo> binfo); +std::vector<int> split_layer_index(const std::string &s_,const std::string &delimiter_); +nvinfer1::ILayer * layer_split(const int n_layer_index_, + nvinfer1::ITensor *input_, + nvinfer1::INetworkDefinition* network); +nvinfer1::ILayer* netAddUpsample(int layerIdx, std::map<std::string, std::string>& block, + std::vector<float>& weights, + std::vector<nvinfer1::Weights>& trtWeights, int& inputChannels, + nvinfer1::ITensor* input, nvinfer1::INetworkDefinition* network); +std::vector<std::string> loadListFromTextFile(const std::string filename); +class YoloTinyMaxpoolPaddingFormula : public nvinfer1::IOutputDimensionsFormula +{ +private: + std::set<std::string> m_SamePaddingLayers; + + nvinfer1::DimsHW compute(nvinfer1::DimsHW inputDims, nvinfer1::DimsHW kernelSize, + nvinfer1::DimsHW stride, nvinfer1::DimsHW padding, + nvinfer1::DimsHW dilation, const char* layerName) const override + { + // assert(inputDims.d[0] == inputDims.d[1]); + assert(kernelSize.d[0] == kernelSize.d[1]); + assert(stride.d[0] == stride.d[1]); + assert(padding.d[0] == padding.d[1]); + + int output_h, output_w; + // Only layer maxpool_12 makes use of same padding + if (m_SamePaddingLayers.find(layerName) != m_SamePaddingLayers.end()) + { + output_h = (inputDims.d[0] + 2 * padding.d[0]) / stride.d[0]; + output_w = (inputDims.d[1] + 2 * padding.d[1]) / stride.d[1]; + } + // Valid Padding + else + { + output_h = (inputDims.d[0] - kernelSize.d[0]) / stride.d[0] + 1; + output_w = (inputDims.d[1] - kernelSize.d[1]) / stride.d[1] + 1; + } + return nvinfer1::DimsHW{output_h, output_w}; + } + +public: + void addSamePaddingLayer(std::string input) { m_SamePaddingLayers.insert(input); } +}; + #endif -- Gitblit v1.8.0