From 4a1fc91ccaf4a7f8be21a4c822ef7d148c0781ac Mon Sep 17 00:00:00 2001 From: chenhaozhe Date: Thu, 25 Feb 2021 11:03:19 +0800 Subject: [PATCH] update interface in ascend310_infer of SSD --- .../cv/ssd/ascend310_infer/inc/utils.h | 4 +- .../cv/ssd/ascend310_infer/src/main.cc | 57 +++++++++------- .../cv/ssd/ascend310_infer/src/utils.cc | 68 +++++++++---------- model_zoo/official/cv/ssd/src/ssd.py | 3 +- 4 files changed, 66 insertions(+), 66 deletions(-) diff --git a/model_zoo/official/cv/ssd/ascend310_infer/inc/utils.h b/model_zoo/official/cv/ssd/ascend310_infer/inc/utils.h index 6080fbd8f25..efebe03a8c1 100644 --- a/model_zoo/official/cv/ssd/ascend310_infer/inc/utils.h +++ b/model_zoo/official/cv/ssd/ascend310_infer/inc/utils.h @@ -27,6 +27,6 @@ std::vector GetAllFiles(std::string_view dirName); DIR *OpenDir(std::string_view dirName); std::string RealPath(std::string_view path); -std::shared_ptr ReadFileToTensor(const std::string &file); -int WriteResult(const std::string& imageFile, const std::vector &outputs); +mindspore::MSTensor ReadFileToTensor(const std::string &file); +int WriteResult(const std::string& imageFile, const std::vector &outputs); #endif diff --git a/model_zoo/official/cv/ssd/ascend310_infer/src/main.cc b/model_zoo/official/cv/ssd/ascend310_infer/src/main.cc index ec4b2b6f4a2..30552bad54b 100644 --- a/model_zoo/official/cv/ssd/ascend310_infer/src/main.cc +++ b/model_zoo/official/cv/ssd/ascend310_infer/src/main.cc @@ -25,23 +25,25 @@ #include "include/api/model.h" #include "include/api/context.h" -#include "minddata/dataset/include/minddata_eager.h" -#include "../inc/utils.h" #include "include/api/types.h" #include "include/api/serialization.h" -#include "minddata/dataset/include/vision.h" +#include "include/minddata/dataset/include/vision.h" +#include "include/minddata/dataset/include/execute.h" + +#include "../inc/utils.h" + +using mindspore::GlobalContext; +using mindspore::Serialization; +using mindspore::Model; +using mindspore::ModelContext; +using mindspore::Status; +using mindspore::ModelType; +using mindspore::GraphCell; +using mindspore::kSuccess; +using mindspore::MSTensor; +using mindspore::dataset::Execute; +using mindspore::dataset::vision::DvppDecodeResizeCropJpeg; -using mindspore::api::Context; -using mindspore::api::Serialization; -using mindspore::api::Model; -using mindspore::api::kModelOptionInsertOpCfgPath; -using mindspore::api::Status; -using mindspore::api::MindDataEager; -using mindspore::api::Buffer; -using mindspore::api::ModelType; -using mindspore::api::GraphCell; -using mindspore::api::SUCCESS; -using mindspore::dataset::vision::DvppDecodeResizeJpeg; DEFINE_string(mindir_path, "", "mindir path"); DEFINE_string(dataset_path, ".", "dataset path"); @@ -59,16 +61,17 @@ int main(int argc, char **argv) { return 1; } - Context::Instance().SetDeviceTarget("Ascend310").SetDeviceID(FLAGS_device_id); + GlobalContext::SetGlobalDeviceTarget(mindspore::kDeviceTypeAscend310); + GlobalContext::SetGlobalDeviceID(FLAGS_device_id); auto graph = Serialization::LoadModel(FLAGS_mindir_path, ModelType::kMindIR); - Model model((GraphCell(graph))); - std::map build_options; + auto model_context = std::make_shared(); if (!FLAGS_aipp_path.empty()) { - build_options.emplace(kModelOptionInsertOpCfgPath, FLAGS_aipp_path); + ModelContext::SetInsertOpConfigPath(model_context, FLAGS_aipp_path); } - Status ret = model.Build(build_options); - if (ret != SUCCESS) { + Model model(GraphCell(graph), model_context); + Status ret = model.Build(); + if (ret != kSuccess) { std::cout << "ERROR: Build failed." << std::endl; return 1; } @@ -81,22 +84,24 @@ int main(int argc, char **argv) { std::map costTime_map; size_t size = all_files.size(); - MindDataEager SingleOp({DvppDecodeResizeJpeg({640, 640})}); + Execute resize_op(DvppDecodeResizeCropJpeg({640, 640}, {640, 640})); for (size_t i = 0; i < size; ++i) { struct timeval start = {0}; struct timeval end = {0}; double startTimeMs; double endTimeMs; - std::vector inputs; - std::vector outputs; + std::vector inputs; + std::vector outputs; std::cout << "Start predict input files:" << all_files[i] << std::endl; - auto imgDvpp = SingleOp(ReadFileToTensor(all_files[i])); + auto imgDvpp = std::make_shared(); + resize_op(ReadFileToTensor(all_files[i]), imgDvpp.get()); - inputs.emplace_back(imgDvpp->Data(), imgDvpp->DataSize()); + inputs.emplace_back(imgDvpp->Name(), imgDvpp->DataType(), imgDvpp->Shape(), + imgDvpp->Data().get(), imgDvpp->DataSize()); gettimeofday(&start, nullptr); ret = model.Predict(inputs, &outputs); gettimeofday(&end, nullptr); - if (ret != SUCCESS) { + if (ret != kSuccess) { std::cout << "Predict " << all_files[i] << " failed." << std::endl; return 1; } diff --git a/model_zoo/official/cv/ssd/ascend310_infer/src/utils.cc b/model_zoo/official/cv/ssd/ascend310_infer/src/utils.cc index 3a924da007f..323781f8d33 100644 --- a/model_zoo/official/cv/ssd/ascend310_infer/src/utils.cc +++ b/model_zoo/official/cv/ssd/ascend310_infer/src/utils.cc @@ -19,10 +19,8 @@ #include #include "../inc/utils.h" -using mindspore::api::Tensor; -using mindspore::api::Buffer; -using mindspore::api::DataType; - +using mindspore::MSTensor; +using mindspore::DataType; std::vector GetAllFiles(std::string_view dirName) { struct dirent *filename; @@ -45,11 +43,11 @@ std::vector GetAllFiles(std::string_view dirName) { return res; } -int WriteResult(const std::string& imageFile, const std::vector &outputs) { +int WriteResult(const std::string& imageFile, const std::vector &outputs) { std::string homePath = "./result_Files"; for (size_t i = 0; i < outputs.size(); ++i) { size_t outputSize; - const void * netOutput; + std::shared_ptr netOutput; netOutput = outputs[i].Data(); outputSize = outputs[i].DataSize(); int pos = imageFile.rfind('/'); @@ -57,44 +55,42 @@ int WriteResult(const std::string& imageFile, const std::vector &outputs fileName.replace(fileName.find('.'), fileName.size() - fileName.find('.'), '_' + std::to_string(i) + ".bin"); std::string outFileName = homePath + "/" + fileName; FILE * outputFile = fopen(outFileName.c_str(), "wb"); - fwrite(netOutput, outputSize, sizeof(char), outputFile); + fwrite(netOutput.get(), outputSize, sizeof(char), outputFile); fclose(outputFile); outputFile = nullptr; } return 0; } -std::shared_ptr ReadFileToTensor(const std::string &file) { - auto buffer = std::make_shared(); - if (file.empty()) { - std::cout << "Pointer file is nullptr" << std::endl; - return buffer; - } - std::ifstream ifs(file); - if (!ifs.good()) { - std::cout << "File: " << file << " is not exist" << std::endl; - return buffer; - } - if (!ifs.is_open()) { - std::cout << "File: " << file << "open failed" << std::endl; - return buffer; - } - ifs.seekg(0, std::ios::end); - size_t size = ifs.tellg(); - buffer->ResizeData(size); - if (buffer->DataSize() != size) { - std::cout << "Malloc buf failed, file: " << file << std::endl; - ifs.close(); - return buffer; - } - ifs.seekg(0, std::ios::beg); - ifs.read(reinterpret_cast(buffer->MutableData()), size); - ifs.close(); - buffer->SetDataType(DataType::kMsUint8); - buffer->SetShape({static_cast(size)}); - return buffer; +mindspore::MSTensor ReadFileToTensor(const std::string &file) { + if (file.empty()) { + std::cout << "Pointer file is nullptr" << std::endl; + return mindspore::MSTensor(); + } + + std::ifstream ifs(file); + if (!ifs.good()) { + std::cout << "File: " << file << " is not exist" << std::endl; + return mindspore::MSTensor(); + } + + if (!ifs.is_open()) { + std::cout << "File: " << file << "open failed" << std::endl; + return mindspore::MSTensor(); + } + + ifs.seekg(0, std::ios::end); + size_t size = ifs.tellg(); + mindspore::MSTensor buffer(file, mindspore::DataType::kNumberTypeUInt8, {static_cast(size)}, nullptr, size); + + ifs.seekg(0, std::ios::beg); + ifs.read(reinterpret_cast(buffer.MutableData()), size); + ifs.close(); + + return buffer; } + DIR *OpenDir(std::string_view dirName) { if (dirName.empty()) { std::cout << " dirName is null ! " << std::endl; diff --git a/model_zoo/official/cv/ssd/src/ssd.py b/model_zoo/official/cv/ssd/src/ssd.py index 29fdafa053f..7c103e5ea0e 100644 --- a/model_zoo/official/cv/ssd/src/ssd.py +++ b/model_zoo/official/cv/ssd/src/ssd.py @@ -423,7 +423,6 @@ class SSDWithLossCell(nn.Cell): self.less = P.Less() self.tile = P.Tile() self.reduce_sum = P.ReduceSum() - self.reduce_mean = P.ReduceMean() self.expand_dims = P.ExpandDims() self.class_loss = SigmoidFocalClassificationLoss(config.gamma, config.alpha) self.loc_loss = nn.SmoothL1Loss() @@ -436,7 +435,7 @@ class SSDWithLossCell(nn.Cell): # Localization Loss mask_loc = self.tile(self.expand_dims(mask, -1), (1, 1, 4)) smooth_l1 = self.loc_loss(pred_loc, gt_loc) * mask_loc - loss_loc = self.reduce_sum(self.reduce_mean(smooth_l1, -1), -1) + loss_loc = self.reduce_sum(self.reduce_sum(smooth_l1, -1), -1) # Classification Loss loss_cls = self.class_loss(pred_label, gt_label)