在使用大佬的tensorrtx进行yolov5分割模型部署时遇到了一个问题,使用engine文件进行推理时每次都会报mat.at
的错误,分类和目标检测可以正常运行。
debug发现mask可以正常生成,怀疑生成的box超过图像范围,测试只输出box,如图,验证了猜测,回归得到的bounding box超过了图像边界,应该是有分割的像素在图像之外。
解决方法:
先后处理中加入判断分割得到的点是否在图像范围内
cv::Rect2i rect(0, 0, img_mask.cols, img_mask.rows);
for (int x = r.x; x < r.x + r.width; x++) {
float val ;
if (rect.contains(cv::Point(x, y)))
{
val = img_mask.at<float>(y, x);
}
else
{
val = -1;
}
if (val <= 0.5) continue;
img.at<cv::Vec3b>(y, x)[0] = img.at<cv::Vec3b>(y, x)[0] / 2 + bgr[0] / 2;
img.at<cv::Vec3b>(y, x)[1] = img.at<cv::Vec3b>(y, x)[1] / 2 + bgr[1] / 2;
img.at<cv::Vec3b>(y, x)[2] = img.at<cv::Vec3b>(y, x)[2] / 2 + bgr[2] / 2;
}
可以正常推理
参考:
https://blog.csdn.net/dusk_and_night/article/details/123315044