#include "class_model.h" namespace trt_vehicle{ ClassModel::ClassModel(const std::string& modelPath, bool isVehicle, std::string meanfile) :BaseModel(isVehicle ? NetworkInputType::CHW : NetworkInputType::HWC, meanfile) { isVehicleModel = isVehicle; auto ret = m_predictor.init(modelPath); assert(ret == 0); setSize(); m_score = new float[m_batch*m_outputSizeC]; m_scoreCuda = nullptr; cudaMalloc(&m_scoreCuda,m_batch*m_outputSizeC*sizeof(float)); m_imageDataCuda= nullptr; cudaMalloc(&m_imageDataCuda, m_batch*m_inputSizeW*m_inputSizeH*m_inputSizeC*sizeof(float)); } ClassModel::~ClassModel(){ if(m_score){ delete [] m_score; } if(m_scoreCuda){ cudaFree(m_scoreCuda); } if(m_imageDataCuda){ cudaFree(m_imageDataCuda); } } int ClassModel::setSize(){ int tmp1,tmp2; if(isVehicleModel) m_predictor.getSizeVehicle(m_batch, m_inputSizeC, m_inputSizeH, m_inputSizeW, m_outputSizeC, tmp1, tmp2); else m_predictor.getSize(m_batch,m_inputSizeC,m_inputSizeH,m_inputSizeW,m_outputSizeC,tmp1,tmp2); return 0; } int ClassModel::extractFeature(std::vector imgs) { vector imageData; for(int i=0;i buffers = { m_imageDataCuda, m_scoreCuda }; m_predictor.infer(buffers, imgs.size()); return 0; } std::vector> ClassModel::predictNoPadding(std::vector imgs){ std::vector> scores; extractFeature(imgs); cudaMemcpy(m_score, m_scoreCuda,m_batch*m_outputSizeC*sizeof(float), cudaMemcpyDeviceToHost); for(int i=0;i< imgs.size(); i++) { float sumScores = 0.0; float minScore = 999999999.0; for(int j=0;jm_score[i*m_outputSizeC+j]) minScore = m_score[i*m_outputSizeC+j]; } if(minScore<0){ for(int j=0;j score; for(int j=0;j> ClassModel::predictPadding(std::vector imgs,int paddingValue){ std::vector imgPaddings; for(int i=0;ih){ s = w; } cv::Mat imgPadding = cv::Mat::zeros(s,s,CV_8UC3)+paddingValue; // imgPadding.setTo(paddingValue); int wStart = int((s-w)/2); int hStart = int((s-h)/2); cv::Rect roi = cv::Rect(wStart,hStart,w,h); img.copyTo(imgPadding(roi)); imgPaddings.push_back(imgPadding); } return predictNoPadding(imgPaddings); } }