提交 151ae40b 编写于 作者: S syyxsxx

change chinese annotation to english

上级 2c94ac53
...@@ -40,7 +40,7 @@ void Model::create_predictor(const std::string& model_dir, ...@@ -40,7 +40,7 @@ void Model::create_predictor(const std::string& model_dir,
} }
#endif #endif
if (yaml_input == "") { if (yaml_input == "") {
// 读取配置文件 // read yaml file
std::ifstream yaml_fin(yaml_file); std::ifstream yaml_fin(yaml_file);
yaml_fin.seekg(0, std::ios::end); yaml_fin.seekg(0, std::ios::end);
size_t yaml_file_size = yaml_fin.tellg(); size_t yaml_file_size = yaml_fin.tellg();
...@@ -48,7 +48,7 @@ void Model::create_predictor(const std::string& model_dir, ...@@ -48,7 +48,7 @@ void Model::create_predictor(const std::string& model_dir,
yaml_fin.seekg(0); yaml_fin.seekg(0);
yaml_fin.read(&yaml_input[0], yaml_file_size); yaml_fin.read(&yaml_input[0], yaml_file_size);
} }
// 读取配置文件内容 // load yaml file
if (!load_config(yaml_input)) { if (!load_config(yaml_input)) {
std::cerr << "Parse file 'model.yml' failed!" << std::endl; std::cerr << "Parse file 'model.yml' failed!" << std::endl;
exit(-1); exit(-1);
...@@ -64,13 +64,13 @@ void Model::create_predictor(const std::string& model_dir, ...@@ -64,13 +64,13 @@ void Model::create_predictor(const std::string& model_dir,
} }
config.SwitchUseFeedFetchOps(false); config.SwitchUseFeedFetchOps(false);
config.SwitchSpecifyInputNames(true); config.SwitchSpecifyInputNames(true);
// 开启图优化 // enable graph Optim
#if defined(__arm__) || defined(__aarch64__) #if defined(__arm__) || defined(__aarch64__)
config.SwitchIrOptim(false); config.SwitchIrOptim(false);
#else #else
config.SwitchIrOptim(use_ir_optim); config.SwitchIrOptim(use_ir_optim);
#endif #endif
// 开启内存优化 // enable Memory Optim
config.EnableMemoryOptim(); config.EnableMemoryOptim();
if (use_trt) { if (use_trt) {
config.EnableTensorRtEngine( config.EnableTensorRtEngine(
...@@ -108,9 +108,9 @@ bool Model::load_config(const std::string& yaml_input) { ...@@ -108,9 +108,9 @@ bool Model::load_config(const std::string& yaml_input) {
return false; return false;
} }
} }
// 构建数据处理流 // build data preprocess stream
transforms_.Init(config["Transforms"], to_rgb); transforms_.Init(config["Transforms"], to_rgb);
// 读入label list // read label list
labels.clear(); labels.clear();
for (const auto& item : config["_Attributes"]["labels"]) { for (const auto& item : config["_Attributes"]["labels"]) {
int index = labels.size(); int index = labels.size();
...@@ -152,19 +152,19 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) { ...@@ -152,19 +152,19 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) {
"to function predict()!" << std::endl; "to function predict()!" << std::endl;
return false; return false;
} }
// 处理输入图像 // im preprocess
if (!preprocess(im, &inputs_)) { if (!preprocess(im, &inputs_)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
return false; return false;
} }
// 使用加载的模型进行预测 // predict
auto in_tensor = predictor_->GetInputTensor("image"); auto in_tensor = predictor_->GetInputTensor("image");
int h = inputs_.new_im_size_[0]; int h = inputs_.new_im_size_[0];
int w = inputs_.new_im_size_[1]; int w = inputs_.new_im_size_[1];
in_tensor->Reshape({1, 3, h, w}); in_tensor->Reshape({1, 3, h, w});
in_tensor->copy_from_cpu(inputs_.im_data_.data()); in_tensor->copy_from_cpu(inputs_.im_data_.data());
predictor_->ZeroCopyRun(); predictor_->ZeroCopyRun();
// 取出模型的输出结果 // get result
auto output_names = predictor_->GetOutputNames(); auto output_names = predictor_->GetOutputNames();
auto output_tensor = predictor_->GetOutputTensor(output_names[0]); auto output_tensor = predictor_->GetOutputTensor(output_names[0]);
std::vector<int> output_shape = output_tensor->shape(); std::vector<int> output_shape = output_tensor->shape();
...@@ -174,7 +174,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) { ...@@ -174,7 +174,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) {
} }
outputs_.resize(size); outputs_.resize(size);
output_tensor->copy_to_cpu(outputs_.data()); output_tensor->copy_to_cpu(outputs_.data());
// 对模型输出结果进行后处理 // postprocess
auto ptr = std::max_element(std::begin(outputs_), std::end(outputs_)); auto ptr = std::max_element(std::begin(outputs_), std::end(outputs_));
result->category_id = std::distance(std::begin(outputs_), ptr); result->category_id = std::distance(std::begin(outputs_), ptr);
result->score = *ptr; result->score = *ptr;
...@@ -198,12 +198,12 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -198,12 +198,12 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
return false; return false;
} }
inputs_batch_.assign(im_batch.size(), ImageBlob()); inputs_batch_.assign(im_batch.size(), ImageBlob());
// 处理输入图像 // preprocess
if (!preprocess(im_batch, &inputs_batch_, thread_num)) { if (!preprocess(im_batch, &inputs_batch_, thread_num)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
return false; return false;
} }
// 使用加载的模型进行预测 // predict
int batch_size = im_batch.size(); int batch_size = im_batch.size();
auto in_tensor = predictor_->GetInputTensor("image"); auto in_tensor = predictor_->GetInputTensor("image");
int h = inputs_batch_[0].new_im_size_[0]; int h = inputs_batch_[0].new_im_size_[0];
...@@ -218,7 +218,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -218,7 +218,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
in_tensor->copy_from_cpu(inputs_data.data()); in_tensor->copy_from_cpu(inputs_data.data());
// in_tensor->copy_from_cpu(inputs_.im_data_.data()); // in_tensor->copy_from_cpu(inputs_.im_data_.data());
predictor_->ZeroCopyRun(); predictor_->ZeroCopyRun();
// 取出模型的输出结果 // get result
auto output_names = predictor_->GetOutputNames(); auto output_names = predictor_->GetOutputNames();
auto output_tensor = predictor_->GetOutputTensor(output_names[0]); auto output_tensor = predictor_->GetOutputTensor(output_names[0]);
std::vector<int> output_shape = output_tensor->shape(); std::vector<int> output_shape = output_tensor->shape();
...@@ -228,7 +228,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -228,7 +228,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
} }
outputs_.resize(size); outputs_.resize(size);
output_tensor->copy_to_cpu(outputs_.data()); output_tensor->copy_to_cpu(outputs_.data());
// 对模型输出结果进行后处理 // postprocess
(*results).clear(); (*results).clear();
(*results).resize(batch_size); (*results).resize(batch_size);
int single_batch_size = size / batch_size; int single_batch_size = size / batch_size;
...@@ -258,7 +258,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) { ...@@ -258,7 +258,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) {
return false; return false;
} }
// 处理输入图像 // preprocess
if (!preprocess(im, &inputs_)) { if (!preprocess(im, &inputs_)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
return false; return false;
...@@ -288,7 +288,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) { ...@@ -288,7 +288,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) {
im_info_tensor->copy_from_cpu(im_info); im_info_tensor->copy_from_cpu(im_info);
im_shape_tensor->copy_from_cpu(im_shape); im_shape_tensor->copy_from_cpu(im_shape);
} }
// 使用加载的模型进行预测 // predict
predictor_->ZeroCopyRun(); predictor_->ZeroCopyRun();
std::vector<float> output_box; std::vector<float> output_box;
...@@ -306,7 +306,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) { ...@@ -306,7 +306,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) {
return true; return true;
} }
int num_boxes = size / 6; int num_boxes = size / 6;
// 解析预测框box // box postprocess
for (int i = 0; i < num_boxes; ++i) { for (int i = 0; i < num_boxes; ++i) {
Box box; Box box;
box.category_id = static_cast<int>(round(output_box[i * 6])); box.category_id = static_cast<int>(round(output_box[i * 6]));
...@@ -321,7 +321,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) { ...@@ -321,7 +321,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) {
box.coordinate = {xmin, ymin, w, h}; box.coordinate = {xmin, ymin, w, h};
result->boxes.push_back(std::move(box)); result->boxes.push_back(std::move(box));
} }
// 实例分割需解析mask // mask postprocess
if (name == "MaskRCNN") { if (name == "MaskRCNN") {
std::vector<float> output_mask; std::vector<float> output_mask;
auto output_mask_tensor = predictor_->GetOutputTensor(output_names[1]); auto output_mask_tensor = predictor_->GetOutputTensor(output_names[1]);
...@@ -366,12 +366,12 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -366,12 +366,12 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
inputs_batch_.assign(im_batch.size(), ImageBlob()); inputs_batch_.assign(im_batch.size(), ImageBlob());
int batch_size = im_batch.size(); int batch_size = im_batch.size();
// 处理输入图像 // preprocess
if (!preprocess(im_batch, &inputs_batch_, thread_num)) { if (!preprocess(im_batch, &inputs_batch_, thread_num)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
return false; return false;
} }
// 对RCNN类模型做批量padding // RCNN model padding
if (batch_size > 1) { if (batch_size > 1) {
if (name == "FasterRCNN" || name == "MaskRCNN") { if (name == "FasterRCNN" || name == "MaskRCNN") {
int max_h = -1; int max_h = -1;
...@@ -452,10 +452,10 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -452,10 +452,10 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
im_info_tensor->copy_from_cpu(im_info.data()); im_info_tensor->copy_from_cpu(im_info.data());
im_shape_tensor->copy_from_cpu(im_shape.data()); im_shape_tensor->copy_from_cpu(im_shape.data());
} }
// 使用加载的模型进行预测 // predict
predictor_->ZeroCopyRun(); predictor_->ZeroCopyRun();
// 读取所有box // get all box
std::vector<float> output_box; std::vector<float> output_box;
auto output_names = predictor_->GetOutputNames(); auto output_names = predictor_->GetOutputNames();
auto output_box_tensor = predictor_->GetOutputTensor(output_names[0]); auto output_box_tensor = predictor_->GetOutputTensor(output_names[0]);
...@@ -472,7 +472,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -472,7 +472,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
} }
auto lod_vector = output_box_tensor->lod(); auto lod_vector = output_box_tensor->lod();
int num_boxes = size / 6; int num_boxes = size / 6;
// 解析预测框box // box postprocess
(*results).clear(); (*results).clear();
(*results).resize(batch_size); (*results).resize(batch_size);
for (int i = 0; i < lod_vector[0].size() - 1; ++i) { for (int i = 0; i < lod_vector[0].size() - 1; ++i) {
...@@ -492,7 +492,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -492,7 +492,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
} }
} }
// 实例分割需解析mask // mask postprocess
if (name == "MaskRCNN") { if (name == "MaskRCNN") {
std::vector<float> output_mask; std::vector<float> output_mask;
auto output_mask_tensor = predictor_->GetOutputTensor(output_names[1]); auto output_mask_tensor = predictor_->GetOutputTensor(output_names[1]);
...@@ -537,7 +537,7 @@ bool Model::predict(const cv::Mat& im, SegResult* result) { ...@@ -537,7 +537,7 @@ bool Model::predict(const cv::Mat& im, SegResult* result) {
return false; return false;
} }
// 处理输入图像 // preprocess
if (!preprocess(im, &inputs_)) { if (!preprocess(im, &inputs_)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
return false; return false;
...@@ -549,10 +549,10 @@ bool Model::predict(const cv::Mat& im, SegResult* result) { ...@@ -549,10 +549,10 @@ bool Model::predict(const cv::Mat& im, SegResult* result) {
im_tensor->Reshape({1, 3, h, w}); im_tensor->Reshape({1, 3, h, w});
im_tensor->copy_from_cpu(inputs_.im_data_.data()); im_tensor->copy_from_cpu(inputs_.im_data_.data());
// 使用加载的模型进行预测 // predict
predictor_->ZeroCopyRun(); predictor_->ZeroCopyRun();
// 获取预测置信度,经过argmax后的labelmap // get labelmap
auto output_names = predictor_->GetOutputNames(); auto output_names = predictor_->GetOutputNames();
auto output_label_tensor = predictor_->GetOutputTensor(output_names[0]); auto output_label_tensor = predictor_->GetOutputTensor(output_names[0]);
std::vector<int> output_label_shape = output_label_tensor->shape(); std::vector<int> output_label_shape = output_label_tensor->shape();
...@@ -565,7 +565,7 @@ bool Model::predict(const cv::Mat& im, SegResult* result) { ...@@ -565,7 +565,7 @@ bool Model::predict(const cv::Mat& im, SegResult* result) {
result->label_map.data.resize(size); result->label_map.data.resize(size);
output_label_tensor->copy_to_cpu(result->label_map.data.data()); output_label_tensor->copy_to_cpu(result->label_map.data.data());
// 获取预测置信度scoremap // get scoremap
auto output_score_tensor = predictor_->GetOutputTensor(output_names[1]); auto output_score_tensor = predictor_->GetOutputTensor(output_names[1]);
std::vector<int> output_score_shape = output_score_tensor->shape(); std::vector<int> output_score_shape = output_score_tensor->shape();
size = 1; size = 1;
...@@ -577,7 +577,7 @@ bool Model::predict(const cv::Mat& im, SegResult* result) { ...@@ -577,7 +577,7 @@ bool Model::predict(const cv::Mat& im, SegResult* result) {
result->score_map.data.resize(size); result->score_map.data.resize(size);
output_score_tensor->copy_to_cpu(result->score_map.data.data()); output_score_tensor->copy_to_cpu(result->score_map.data.data());
// 解析输出结果到原图大小 // get origin image result
std::vector<uint8_t> label_map(result->label_map.data.begin(), std::vector<uint8_t> label_map(result->label_map.data.begin(),
result->label_map.data.end()); result->label_map.data.end());
cv::Mat mask_label(result->label_map.shape[1], cv::Mat mask_label(result->label_map.shape[1],
...@@ -647,7 +647,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -647,7 +647,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
return false; return false;
} }
// 处理输入图像 // preprocess
inputs_batch_.assign(im_batch.size(), ImageBlob()); inputs_batch_.assign(im_batch.size(), ImageBlob());
if (!preprocess(im_batch, &inputs_batch_, thread_num)) { if (!preprocess(im_batch, &inputs_batch_, thread_num)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
...@@ -670,10 +670,10 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -670,10 +670,10 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
im_tensor->copy_from_cpu(inputs_data.data()); im_tensor->copy_from_cpu(inputs_data.data());
// im_tensor->copy_from_cpu(inputs_.im_data_.data()); // im_tensor->copy_from_cpu(inputs_.im_data_.data());
// 使用加载的模型进行预测 // predict
predictor_->ZeroCopyRun(); predictor_->ZeroCopyRun();
// 获取预测置信度,经过argmax后的labelmap // get labelmap
auto output_names = predictor_->GetOutputNames(); auto output_names = predictor_->GetOutputNames();
auto output_label_tensor = predictor_->GetOutputTensor(output_names[0]); auto output_label_tensor = predictor_->GetOutputTensor(output_names[0]);
std::vector<int> output_label_shape = output_label_tensor->shape(); std::vector<int> output_label_shape = output_label_tensor->shape();
...@@ -698,7 +698,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -698,7 +698,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
(*results)[i].label_map.data.data()); (*results)[i].label_map.data.data());
} }
// 获取预测置信度scoremap // get scoremap
auto output_score_tensor = predictor_->GetOutputTensor(output_names[1]); auto output_score_tensor = predictor_->GetOutputTensor(output_names[1]);
std::vector<int> output_score_shape = output_score_tensor->shape(); std::vector<int> output_score_shape = output_score_tensor->shape();
size = 1; size = 1;
...@@ -722,7 +722,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch, ...@@ -722,7 +722,7 @@ bool Model::predict(const std::vector<cv::Mat>& im_batch,
(*results)[i].score_map.data.data()); (*results)[i].score_map.data.data());
} }
// 解析输出结果到原图大小 // get origin image result
for (int i = 0; i < batch_size; ++i) { for (int i = 0; i < batch_size; ++i) {
std::vector<uint8_t> label_map((*results)[i].label_map.data.begin(), std::vector<uint8_t> label_map((*results)[i].label_map.data.begin(),
(*results)[i].label_map.data.end()); (*results)[i].label_map.data.end());
......
...@@ -12,12 +12,14 @@ ...@@ -12,12 +12,14 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#include "include/paddlex/transforms.h"
#include <math.h>
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <vector> #include <vector>
#include <math.h>
#include "include/paddlex/transforms.h"
namespace PaddleX { namespace PaddleX {
...@@ -195,7 +197,7 @@ std::shared_ptr<Transform> Transforms::CreateTransform( ...@@ -195,7 +197,7 @@ std::shared_ptr<Transform> Transforms::CreateTransform(
} }
bool Transforms::Run(cv::Mat* im, ImageBlob* data) { bool Transforms::Run(cv::Mat* im, ImageBlob* data) {
// 按照transforms中预处理算子顺序处理图像 // do all preprocess ops by order
if (to_rgb_) { if (to_rgb_) {
cv::cvtColor(*im, *im, cv::COLOR_BGR2RGB); cv::cvtColor(*im, *im, cv::COLOR_BGR2RGB);
} }
...@@ -211,8 +213,8 @@ bool Transforms::Run(cv::Mat* im, ImageBlob* data) { ...@@ -211,8 +213,8 @@ bool Transforms::Run(cv::Mat* im, ImageBlob* data) {
} }
} }
// 将图像由NHWC转为NCHW格式 // data format NHWC to NCHW
// 同时转为连续的内存块存储到ImageBlob // img data save to ImageBlob
int h = im->rows; int h = im->rows;
int w = im->cols; int w = im->cols;
int c = im->channels(); int c = im->channels();
......
...@@ -47,7 +47,7 @@ cv::Mat Visualize(const cv::Mat& img, ...@@ -47,7 +47,7 @@ cv::Mat Visualize(const cv::Mat& img,
boxes[i].coordinate[2], boxes[i].coordinate[2],
boxes[i].coordinate[3]); boxes[i].coordinate[3]);
// 生成预测框和标题 // draw box and title
std::string text = boxes[i].category; std::string text = boxes[i].category;
int c1 = colormap[3 * boxes[i].category_id + 0]; int c1 = colormap[3 * boxes[i].category_id + 0];
int c2 = colormap[3 * boxes[i].category_id + 1]; int c2 = colormap[3 * boxes[i].category_id + 1];
...@@ -63,13 +63,13 @@ cv::Mat Visualize(const cv::Mat& img, ...@@ -63,13 +63,13 @@ cv::Mat Visualize(const cv::Mat& img,
origin.x = roi.x; origin.x = roi.x;
origin.y = roi.y; origin.y = roi.y;
// 生成预测框标题的背景 // background
cv::Rect text_back = cv::Rect(boxes[i].coordinate[0], cv::Rect text_back = cv::Rect(boxes[i].coordinate[0],
boxes[i].coordinate[1] - text_size.height, boxes[i].coordinate[1] - text_size.height,
text_size.width, text_size.width,
text_size.height); text_size.height);
// 绘图和文字 // draw
cv::rectangle(vis_img, roi, roi_color, 2); cv::rectangle(vis_img, roi, roi_color, 2);
cv::rectangle(vis_img, text_back, roi_color, -1); cv::rectangle(vis_img, text_back, roi_color, -1);
cv::putText(vis_img, cv::putText(vis_img,
...@@ -80,7 +80,7 @@ cv::Mat Visualize(const cv::Mat& img, ...@@ -80,7 +80,7 @@ cv::Mat Visualize(const cv::Mat& img,
cv::Scalar(255, 255, 255), cv::Scalar(255, 255, 255),
thickness); thickness);
// 生成实例分割mask // mask
if (boxes[i].mask.data.size() == 0) { if (boxes[i].mask.data.size() == 0) {
continue; continue;
} }
......
...@@ -44,11 +44,11 @@ int main(int argc, char** argv) { ...@@ -44,11 +44,11 @@ int main(int argc, char** argv) {
return -1; return -1;
} }
// 加载模型 // load model
PaddleX::Model model; PaddleX::Model model;
model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_device); model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_device);
// 进行预测 // predict
if (FLAGS_image_list != "") { if (FLAGS_image_list != "") {
std::ifstream inf(FLAGS_image_list); std::ifstream inf(FLAGS_image_list);
if (!inf) { if (!inf) {
......
...@@ -54,13 +54,13 @@ int main(int argc, char** argv) { ...@@ -54,13 +54,13 @@ int main(int argc, char** argv) {
return -1; return -1;
} }
// // load model
PaddleX::Model model; PaddleX::Model model;
model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_device); model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_device);
int imgs = 1; int imgs = 1;
auto colormap = PaddleX::GenerateColorMap(model.labels.size()); auto colormap = PaddleX::GenerateColorMap(model.labels.size());
// 进行预测 // predict
if (FLAGS_image_list != "") { if (FLAGS_image_list != "") {
std::ifstream inf(FLAGS_image_list); std::ifstream inf(FLAGS_image_list);
if (!inf) { if (!inf) {
...@@ -96,7 +96,7 @@ int main(int argc, char** argv) { ...@@ -96,7 +96,7 @@ int main(int argc, char** argv) {
<< result.boxes[i].coordinate[3] << ")" << std::endl; << result.boxes[i].coordinate[3] << ")" << std::endl;
} }
if (FLAGS_save_dir != "") { if (FLAGS_save_dir != "") {
// 可视化 // visualize
cv::Mat vis_img = PaddleX::Visualize( cv::Mat vis_img = PaddleX::Visualize(
im, result, model.labels, colormap, FLAGS_threshold); im, result, model.labels, colormap, FLAGS_threshold);
std::string save_path = std::string save_path =
......
...@@ -48,11 +48,9 @@ int main(int argc, char** argv) { ...@@ -48,11 +48,9 @@ int main(int argc, char** argv) {
return -1; return -1;
} }
// // load model
std::cout << "init start" << std::endl;
PaddleX::Model model; PaddleX::Model model;
model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_device); model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_device);
std::cout << "init done" << std::endl;
int imgs = 1; int imgs = 1;
auto colormap = PaddleX::GenerateColorMap(model.labels.size()); auto colormap = PaddleX::GenerateColorMap(model.labels.size());
......
...@@ -67,9 +67,9 @@ bool Model::load_config(const std::string& cfg_file) { ...@@ -67,9 +67,9 @@ bool Model::load_config(const std::string& cfg_file) {
return false; return false;
} }
} }
// 构建数据处理流 // init preprocess ops
transforms_.Init(config["Transforms"], type, to_rgb); transforms_.Init(config["Transforms"], type, to_rgb);
// 读入label lis // read label list
for (const auto& item : config["_Attributes"]["labels"]) { for (const auto& item : config["_Attributes"]["labels"]) {
int index = labels.size(); int index = labels.size();
labels[index] = item.as<std::string>(); labels[index] = item.as<std::string>();
...@@ -98,7 +98,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) { ...@@ -98,7 +98,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) {
<< std::endl; << std::endl;
return false; return false;
} }
// 处理输入图像 // preprocess
InferenceEngine::InferRequest infer_request = InferenceEngine::InferRequest infer_request =
executable_network_.CreateInferRequest(); executable_network_.CreateInferRequest();
std::string input_name = network_.getInputsInfo().begin()->first; std::string input_name = network_.getInputsInfo().begin()->first;
...@@ -109,6 +109,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) { ...@@ -109,6 +109,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) {
return false; return false;
} }
// predict
infer_request.Infer(); infer_request.Infer();
std::string output_name = network_.getOutputsInfo().begin()->first; std::string output_name = network_.getOutputsInfo().begin()->first;
...@@ -118,7 +119,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) { ...@@ -118,7 +119,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) {
auto moutputHolder = moutput->rmap(); auto moutputHolder = moutput->rmap();
float* outputs_data = moutputHolder.as<float *>(); float* outputs_data = moutputHolder.as<float *>();
// 对模型输出结果进行后处理 // post process
auto ptr = std::max_element(outputs_data, outputs_data+sizeof(outputs_data)); auto ptr = std::max_element(outputs_data, outputs_data+sizeof(outputs_data));
result->category_id = std::distance(outputs_data, ptr); result->category_id = std::distance(outputs_data, ptr);
result->score = *ptr; result->score = *ptr;
...@@ -206,20 +207,20 @@ bool Model::predict(const cv::Mat& im, SegResult* result) { ...@@ -206,20 +207,20 @@ bool Model::predict(const cv::Mat& im, SegResult* result) {
"function predict()!" << std::endl; "function predict()!" << std::endl;
return false; return false;
} }
// // init infer
InferenceEngine::InferRequest infer_request = InferenceEngine::InferRequest infer_request =
executable_network_.CreateInferRequest(); executable_network_.CreateInferRequest();
std::string input_name = network_.getInputsInfo().begin()->first; std::string input_name = network_.getInputsInfo().begin()->first;
inputs_.blob = infer_request.GetBlob(input_name); inputs_.blob = infer_request.GetBlob(input_name);
// // preprocess
cv::Mat im_clone = im.clone(); cv::Mat im_clone = im.clone();
if (!preprocess(&im_clone, &inputs_)) { if (!preprocess(&im_clone, &inputs_)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
return false; return false;
} }
// // predict
infer_request.Infer(); infer_request.Infer();
InferenceEngine::OutputsDataMap out_map = network_.getOutputsInfo(); InferenceEngine::OutputsDataMap out_map = network_.getOutputsInfo();
......
...@@ -201,7 +201,7 @@ std::shared_ptr<Transform> Transforms::CreateTransform( ...@@ -201,7 +201,7 @@ std::shared_ptr<Transform> Transforms::CreateTransform(
} }
bool Transforms::Run(cv::Mat* im, ImageBlob* data) { bool Transforms::Run(cv::Mat* im, ImageBlob* data) {
// 按照transforms中预处理算子顺序处理图像 // preprocess by order
if (to_rgb_) { if (to_rgb_) {
cv::cvtColor(*im, *im, cv::COLOR_BGR2RGB); cv::cvtColor(*im, *im, cv::COLOR_BGR2RGB);
} }
...@@ -224,8 +224,8 @@ bool Transforms::Run(cv::Mat* im, ImageBlob* data) { ...@@ -224,8 +224,8 @@ bool Transforms::Run(cv::Mat* im, ImageBlob* data) {
} }
} }
// 将图像由NHWC转为NCHW格式 // image format NHWC to NCHW
// 同时转为连续的内存块存储到Blob // img data save to ImageBlob
InferenceEngine::SizeVector blobSize = data->blob->getTensorDesc().getDims(); InferenceEngine::SizeVector blobSize = data->blob->getTensorDesc().getDims();
const size_t width = blobSize[3]; const size_t width = blobSize[3];
const size_t height = blobSize[2]; const size_t height = blobSize[2];
......
...@@ -47,7 +47,7 @@ cv::Mat Visualize(const cv::Mat& img, ...@@ -47,7 +47,7 @@ cv::Mat Visualize(const cv::Mat& img,
boxes[i].coordinate[2], boxes[i].coordinate[2],
boxes[i].coordinate[3]); boxes[i].coordinate[3]);
// 生成预测框和标题 // draw box and title
std::string text = boxes[i].category; std::string text = boxes[i].category;
int c1 = colormap[3 * boxes[i].category_id + 0]; int c1 = colormap[3 * boxes[i].category_id + 0];
int c2 = colormap[3 * boxes[i].category_id + 1]; int c2 = colormap[3 * boxes[i].category_id + 1];
...@@ -63,13 +63,13 @@ cv::Mat Visualize(const cv::Mat& img, ...@@ -63,13 +63,13 @@ cv::Mat Visualize(const cv::Mat& img,
origin.x = roi.x; origin.x = roi.x;
origin.y = roi.y; origin.y = roi.y;
// 生成预测框标题的背景 // background
cv::Rect text_back = cv::Rect(boxes[i].coordinate[0], cv::Rect text_back = cv::Rect(boxes[i].coordinate[0],
boxes[i].coordinate[1] - text_size.height, boxes[i].coordinate[1] - text_size.height,
text_size.width, text_size.width,
text_size.height); text_size.height);
// 绘图和文字 // draw
cv::rectangle(vis_img, roi, roi_color, 2); cv::rectangle(vis_img, roi, roi_color, 2);
cv::rectangle(vis_img, text_back, roi_color, -1); cv::rectangle(vis_img, text_back, roi_color, -1);
cv::putText(vis_img, cv::putText(vis_img,
...@@ -80,7 +80,7 @@ cv::Mat Visualize(const cv::Mat& img, ...@@ -80,7 +80,7 @@ cv::Mat Visualize(const cv::Mat& img,
cv::Scalar(255, 255, 255), cv::Scalar(255, 255, 255),
thickness); thickness);
// 生成实例分割mask // mask
if (boxes[i].mask.data.size() == 0) { if (boxes[i].mask.data.size() == 0) {
continue; continue;
} }
......
...@@ -44,11 +44,11 @@ int main(int argc, char** argv) { ...@@ -44,11 +44,11 @@ int main(int argc, char** argv) {
return -1; return -1;
} }
// 加载模型 // load model
PaddleX::Model model; PaddleX::Model model;
model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_thread_num); model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_thread_num);
std::cout << "init is done" << std::endl; std::cout << "init is done" << std::endl;
// 进行预测 // predict
if (FLAGS_image_list != "") { if (FLAGS_image_list != "") {
std::ifstream inf(FLAGS_image_list); std::ifstream inf(FLAGS_image_list);
if (!inf) { if (!inf) {
......
...@@ -54,13 +54,13 @@ int main(int argc, char** argv) { ...@@ -54,13 +54,13 @@ int main(int argc, char** argv) {
return -1; return -1;
} }
// // load model
PaddleX::Model model; PaddleX::Model model;
model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_thread_num); model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_thread_num);
int imgs = 1; int imgs = 1;
auto colormap = PaddleX::GenerateColorMap(model.labels.size()); auto colormap = PaddleX::GenerateColorMap(model.labels.size());
// 进行预测 // predict
if (FLAGS_image_list != "") { if (FLAGS_image_list != "") {
std::ifstream inf(FLAGS_image_list); std::ifstream inf(FLAGS_image_list);
if (!inf) { if (!inf) {
...@@ -97,7 +97,7 @@ int main(int argc, char** argv) { ...@@ -97,7 +97,7 @@ int main(int argc, char** argv) {
<< result.boxes[i].coordinate[3] << ")" << std::endl; << result.boxes[i].coordinate[3] << ")" << std::endl;
} }
if (FLAGS_save_dir != "") { if (FLAGS_save_dir != "") {
// 可视化 // visualize
cv::Mat vis_img = PaddleX::Visualize( cv::Mat vis_img = PaddleX::Visualize(
im, result, model.labels, colormap, FLAGS_threshold); im, result, model.labels, colormap, FLAGS_threshold);
std::string save_path = std::string save_path =
......
...@@ -47,7 +47,7 @@ int main(int argc, char** argv) { ...@@ -47,7 +47,7 @@ int main(int argc, char** argv) {
return -1; return -1;
} }
// // load model
std::cout << "init start" << std::endl; std::cout << "init start" << std::endl;
PaddleX::Model model; PaddleX::Model model;
model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_thread_num); model.Init(FLAGS_model_dir, FLAGS_cfg_file, FLAGS_thread_num);
......
...@@ -46,9 +46,9 @@ bool Model::load_config(const std::string& cfg_file) { ...@@ -46,9 +46,9 @@ bool Model::load_config(const std::string& cfg_file) {
return false; return false;
} }
} }
// 构建数据处理流 // init preprocess ops
transforms_.Init(config["Transforms"], to_rgb); transforms_.Init(config["Transforms"], to_rgb);
// 读入label lis // read label list
for (const auto& item : config["_Attributes"]["labels"]) { for (const auto& item : config["_Attributes"]["labels"]) {
int index = labels.size(); int index = labels.size();
labels[index] = item.as<std::string>(); labels[index] = item.as<std::string>();
...@@ -77,14 +77,14 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) { ...@@ -77,14 +77,14 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) {
<< std::endl; << std::endl;
return false; return false;
} }
// 处理输入图像 // preprocess
inputs_.input_tensor_ = std::move(predictor_->GetInput(0)); inputs_.input_tensor_ = std::move(predictor_->GetInput(0));
cv::Mat im_clone = im.clone(); cv::Mat im_clone = im.clone();
if (!preprocess(&im_clone, &inputs_)) { if (!preprocess(&im_clone, &inputs_)) {
std::cerr << "Preprocess failed!" << std::endl; std::cerr << "Preprocess failed!" << std::endl;
return false; return false;
} }
// predict
predictor_->Run(); predictor_->Run();
std::unique_ptr<const paddle::lite_api::Tensor> output_tensor( std::unique_ptr<const paddle::lite_api::Tensor> output_tensor(
...@@ -92,7 +92,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) { ...@@ -92,7 +92,7 @@ bool Model::predict(const cv::Mat& im, ClsResult* result) {
const float *outputs_data = output_tensor->mutable_data<float>(); const float *outputs_data = output_tensor->mutable_data<float>();
// 对模型输出结果进行后处理 // postprocess
auto ptr = std::max_element(outputs_data, outputs_data+sizeof(outputs_data)); auto ptr = std::max_element(outputs_data, outputs_data+sizeof(outputs_data));
result->category_id = std::distance(outputs_data, ptr); result->category_id = std::distance(outputs_data, ptr);
result->score = *ptr; result->score = *ptr;
......
...@@ -201,7 +201,7 @@ std::shared_ptr<Transform> Transforms::CreateTransform( ...@@ -201,7 +201,7 @@ std::shared_ptr<Transform> Transforms::CreateTransform(
} }
bool Transforms::Run(cv::Mat* im, ImageBlob* data) { bool Transforms::Run(cv::Mat* im, ImageBlob* data) {
// 按照transforms中预处理算子顺序处理图像 // preprocess by order
if (to_rgb_) { if (to_rgb_) {
cv::cvtColor(*im, *im, cv::COLOR_BGR2RGB); cv::cvtColor(*im, *im, cv::COLOR_BGR2RGB);
} }
...@@ -218,8 +218,8 @@ bool Transforms::Run(cv::Mat* im, ImageBlob* data) { ...@@ -218,8 +218,8 @@ bool Transforms::Run(cv::Mat* im, ImageBlob* data) {
} }
} }
// 将图像由NHWC转为NCHW格式 // image format NHWC to NCHW
// 同时转为连续的内存块存储到Blob // img data save to ImageBlob
int height = im->rows; int height = im->rows;
int width = im->cols; int width = im->cols;
int channels = im->channels(); int channels = im->channels();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册