PaddleX
PaddleX copied to clipboard
使用C++代码,windows下使用cpp的代码部署,问题还是比较多
第一:detector里面推理出来的坐标信息不对:
这里坐标应该是,左上角坐标和框的长宽,这样才是对的,排查了老半天才发现。
另外,检测里面,没做阈值顾虑和iou过滤,看到阈值过滤是放到了外面,但是iou过滤外面也没做。
第二:seg分量,使用PaddleX.exe里面的样例:视盘分割,训练出来的代码,使用seg模块加载后推理,推理处理的data为1024,但是暗像素访问data[j + imgs[0].cols * i这样必越界,远远大于1024,没法可视化:

可否提供你们测试使用的模型,找了半天都没找到测试使用cpp的模型,然后自己训练的视盘分割,但是不知道是模型训练问题,还是啥问题。 cpp里面提供了,四种类型的推理,det seg clas mask,可否都提供一个代码调试的模型和测试图片?
det有了框的信息,自己容易可视化,但是另外的三种,可否提供cpp的可视化的代码部分,都是predict后,就没有了,想看到predict后的图像结果,验证模型可行性,好排查问题,到底是我们自己训练的模型问题,还是代码使用问题。
seg模式cpp推理,可视化部分,可否提供一下,怎么可视化?
这种模式是不对的,data的尺寸只有1024,但是,data[j + imgs[0].cols * i暗像素访问,必越界。没法可视化
在model_deploy/utils目录下有可视化和过滤相关代码。你参考使用看看是否还有问题?
utils里面Visualize的参数,numclasses哪里取?
使用PaddleX.exe里面的样例:视盘分割,训练出来的模型,不行的。那个data的尺寸是1024不对的。另外一个人像的,可以
numclasses是模型的的类别数, model.yaml文件里应该也有, 视盘分割的例子是两个类别, 填2即可
后面这个“data的尺寸是1024不对的” 没看懂啥意思
numclasses是模型的的类别数, model.yaml文件里应该也有, 视盘分割的例子是两个类别, 填2即可
后面这个“data的尺寸是1024不对的” 没看懂啥意思
我使用paddleX.exe里面自带的视盘分割例子来做seg的cpp推理 pdetector->pppseg->Predict(imgs, &results, 1); std::vector<uint8_t> data = results[0].seg_result->label_map.data; 然后,这里data.size = 1024 但是,下面访问的时候, for (int i = 0; i < imgs[0].rows; i++) { for (int j = 0; j < imgs[0].cols; j++) { log_msg_ex("j + imgs[0].cols * i = %d", j + imgs[0].cols * i); if (data[j + imgs[0].cols * i] == 0) { continue; } _resultMat.atcv::Vec3b(i, j)[0] = data[j + imgs[0].cols * i] * 100; _resultMat.atcv::Vec3b(i, j)[1] = data[j + imgs[0].cols * i] * 100; _resultMat.atcv::Vec3b(i, j)[2] = data[j + imgs[0].cols * i] * 100; } } 是按像素访问data[j + imgs[0].cols * i],像素的下标:j + imgs[0].cols * i,远远大于1024,导致越界崩溃
numclasses是模型的的类别数, model.yaml文件里应该也有, 视盘分割的例子是两个类别, 填2即可
后面这个“data的尺寸是1024不对的” 没看懂啥意思
视盘分割,用Visual函数来显示,崩溃:
这个label_map.data()的大小是1024,虽然是赋值给了mask 512*512,但是后面访问mark的是,错误导致。就是这个label_map.data()引起的。
正常,应该label_map.data()尺寸跟mask尺寸一样大
模型配置文件:
Model: DeepLabV3P
Transforms:
- Resize:
interp: LINEAR
keep_ratio: false
target_size:
- 512
- 512
- Normalize:
is_scale: true
max_val:
- 255.0
- 255.0
- 255.0 mean:
- 0.5
- 0.5
- 0.5 min_val:
- 0
- 0
- 0 std:
- 0.5
- 0.5
- 0.5 _Attributes: eval_metrics: miou: 0.913982093334198 fixed_input_shape:
- -1
- 3
- -1
- -1 labels:
- background
- optic_disc model_type: segmenter num_classes: 2 _init_params: num_classes: 2 use_mixed_loss: false completed_epochs: 0 status: Infer version: 2.0.0
这个是正常的人像分割visual里面的label_map.data()的尺寸,跟图像大小是一样的,所以正常。但是人像分割里面参数文件Deploy.yaml很简单,没有类别numclasses:
Deploy:
model: model.pdmodel
params: model.pdiparams
transforms:
- target_size:
- 192
- 192 type: Resize
- type: Normalize
另外,检测里面,没做阈值顾虑和iou过滤,看到阈值过滤是放到了外面,但是iou过滤外面也没做。
理解你说的iou过滤应该是说nms吧,这个在模型内部已经做过了,检测模型出来的预测结果是已经经过nms的。拿到预测结果之后,可以执行根据score thresh过滤掉低分结果,具体可视化代码如前所述在model_deploy/utils目录下。
2.0.0部署代码的分割可视化之前也测试过没有问题,你的模型是使用哪个版本的paddlex训练得到的?然后部署代码是develop分支的吗?
2.0.0部署代码的分割可视化之前也测试过没有问题,你的模型是使用哪个版本的paddlex训练得到的?然后部署代码是develop分支的吗? paddx版本:
视频分割训练(都是默认):
部署是https://github.com/PaddlePaddle/PaddleX/tree/release/2.0.0/deploy/cpp分支做的 最后部署模型是,paddle发布的模型:
gui对应的样例工程,也可以使用python api完成,具体的tutorials在https://github.com/PaddlePaddle/PaddleX/tree/release/2.0.0/tutorials ,使用文档 https://github.com/PaddlePaddle/PaddleX#paddlex-%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3
使用gui导出后部署的问题,我们会尽快复现排查
我们重新测试了PaddleX GUI 2.0和release 2.0分支下的Paddle deploy,检测和分割均可正常可视化。现已将可视化流程整理至FAQ中,可参考下 https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/FAQ/FAQ.md 中的Q4答案。
回头看了下你前面提到的问题,如果你输入给predict()的图片大小是1024x1024,然后预处理阶段会resize到512x512,那么模型返回的预测label map是1024x1014的,请确保你传入给Visualize的img是1024x1024(即原图)。
我们重新测试了PaddleX GUI 2.0和release 2.0分支下的Paddle deploy,检测和分割均可正常可视化。现已将可视化流程整理至FAQ中,可参考下 https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/FAQ/FAQ.md 中的Q4答案。
回头看了下你前面提到的问题,如果你输入给predict()的图片大小是1024x1024,然后预处理阶段会resize到512x512,那么模型返回的预测label map是1024x1014的,请确保你传入给Visualize的img是1024x1024(即原图)。
不是啊,这是我输入的原图:
512*512
我最后画的图:
这是label_map的shape也是512,但是这个data确实1024:

我们重新测试了PaddleX GUI 2.0和release 2.0分支下的Paddle deploy,检测和分割均可正常可视化。现已将可视化流程整理至FAQ中,可参考下 https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/FAQ/FAQ.md 中的Q4答案。
回头看了下你前面提到的问题,如果你输入给predict()的图片大小是1024x1024,然后预处理阶段会resize到512x512,那么模型返回的预测label map是1024x1014的,请确保你传入给Visualize的img是1024x1024(即原图)。
难道要我,输入的原图是512,再resize到1024画?
我们现已将可视化流程整理至FAQ中,可参考下 https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/FAQ/FAQ.md 中的Q4答案
就确实挺奇怪的,我们也是用的PaddleX GUI 2.0和release 2.0分支下的Paddle deploy。你的可视化代码跟我们开放的一样么?
我们重新测试了PaddleX GUI 2.0和release 2.0分支下的Paddle deploy,检测和分割均可正常可视化。现已将可视化流程整理至FAQ中,可参考下 https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/FAQ/FAQ.md 中的Q4答案。
回头看了下你前面提到的问题,如果你输入给predict()的图片大小是1024x1024,然后预处理阶段会resize到512x512,那么模型返回的预测label map是1024x1014的,请确保你传入给Visualize的img是1024x1024(即原图)。
检测的可视化,确实,如果用你们Visual里面的,确实没问题,只是我们里面的Rect的四个坐标是左上角和长、宽,我刚开始自己画的时候,看的注释是左上角坐标和右下角,所以是错误的,后来把后面坐标看成了长和宽,就对了,所以注释里面还是不对的

我们现已将可视化流程整理至FAQ中,可参考下 https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/FAQ/FAQ.md 中的Q4答案
就确实挺奇怪的,我们也是用的PaddleX GUI 2.0和release 2.0分支下的Paddle deploy。你的可视化代码跟我们开放的一样么?
一样的呢:
这里报错:
可否把您的模型给我发一份:[email protected]
看的注释是左上角坐标和右下角,所以是错误的,后来把后面坐标看成了长和宽,就对了,所以注释里面还是不对的
你说的注释是指 https://github.com/PaddlePaddle/PaddleX/blob/develop/deploy/cpp/docs/apis/model.md#52-%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E7%BB%93%E6%9E%9C 或者 https://github.com/PaddlePaddle/PaddleX/blob/develop/deploy/cpp/docs/demo/model_infer.md#%E6%AD%A5%E9%AA%A4%E4%B8%89%E4%BD%BF%E7%94%A8%E7%BC%96%E8%AF%91%E5%A5%BD%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E9%A2%84%E6%B5%8B 还是指哪里啊 ?
模型我们也是用样例工程训练得到的,啥也没改,跟你现在这个一样
要不你贴下你的model_infer.cpp,以及运行命令
看的注释是左上角坐标和右下角,所以是错误的,后来把后面坐标看成了长和宽,就对了,所以注释里面还是不对的
你说的注释是指 https://github.com/PaddlePaddle/PaddleX/blob/develop/deploy/cpp/docs/apis/model.md#52-%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E7%BB%93%E6%9E%9C 或者 https://github.com/PaddlePaddle/PaddleX/blob/develop/deploy/cpp/docs/demo/model_infer.md#%E6%AD%A5%E9%AA%A4%E4%B8%89%E4%BD%BF%E7%94%A8%E7%BC%96%E8%AF%91%E5%A5%BD%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E9%A2%84%E6%B5%8B 还是指哪里啊 ?
这里的注释:

模型我们也是用样例工程训练得到的,啥也没改,跟你现在这个一样
要不你贴下你的model_infer.cpp,以及运行命令
分割这里有问题:
执行之前,这个data尺寸是对的,512*512 = 262,144
但是,执行之后,就不对了:
感觉是,应该分配的262,144大小,但是只赋值了1024,后面的变成了野数据,会出来一个很大的值,然后再color_map那里就越界了。
这个注释是c#案例demo的,写错了。所以你现在是跑的c++的还是c#的?我们测试的是c++的demo可以正常可视化
这个注释是c#案例demo的,写错了。所以你现在是跑的c++的还是c#的?我们测试的是c++的demo可以正常可视化
嗯。我当时是参考的c#的写的C++的可视化。哈哈。
分割现在的可视化是怎么写的?要不你贴下你的完整model_infer.cpp
模型我们也是用样例工程训练得到的,啥也没改,跟你现在这个一样 要不你贴下你的model_infer.cpp,以及运行命令
分割这里有问题: 执行之前,这个data尺寸是对的,512512 = 262,144
但是,执行之后,就不对了:
感觉是,应该分配的262,144大小,但是只赋值了1024,后面的变成了野数据,会出来一个很大的值,然后再color_map那里就越界了。 这个assign是有问题的,assign后尺寸就变了,变成1024,但是我觉得应该是原图尺寸的大小512512,我改成copy后,尺寸不变,使用人像分割的模型,貌似可以正常。但是,视盘分割,结果不对
这个注释是c#案例demo的,写错了。所以你现在是跑的c++的还是c#的?我们测试的是c++的demo可以正常可视化
嗯。我当时是参考的c#的写的C++的可视化。哈哈。
分割现在的可视化是怎么写的?要不你贴下你的完整model_infer.cpp
我的分割,就是简单的这样: // prepare data std::vectorcv::Mat imgs; imgs.push_back(std::move(frame));
// predict
std::vector<PaddleDeploy::Result> results;
pdetector->pppseg->Predict(imgs, &results, 1);
if (results.size() <= 0)
{
return false;
}
Visualize(imgs[0], *(results[0].seg_result), &_resultMat, 2);
贴下完整的可以么
贴下完整的可以么
//初始化网络 //log_msg_ex("new DBDetector"); recogtask->pppseg = PaddleDeploy::CreateModel("seg"); if (recogtask->pppseg == NULL) { recogtask->fd = NULL; } else {
// model init
recogtask->pppseg->Init(_cfg_file);
// inference engine init
PaddleDeploy::PaddleEngineConfig engine_config;
engine_config.model_filename = _model_filename;
engine_config.params_filename = _params_filename;
engine_config.use_gpu = use_gpu;
engine_config.gpu_id = gpu_id;
engine_config.key = "";
recogtask->pppseg->PaddleEngineInit(engine_config);
}
推理: if (pdetector == NULL) { return false; }
// prepare data
std::vector<cv::Mat> imgs;
imgs.push_back(std::move(frame));
// predict
std::vector<PaddleDeploy::Result> results;
pdetector->pppseg->Predict(imgs, &results, 1);
if (results.size() <= 0)
{
return false;
}
Visualize(imgs[0], *(results[0].seg_result), &_resultMat, pdetector->numclasses);
视频分割训练(都是默认):
部署是https://github.com/PaddlePaddle/PaddleX/tree/release/2.0.0/deploy/cpp分支做的
最后部署模型是,paddle发布的模型:

