fix the condition if masks are empty

pull/72/head
liang-zijian 2 years ago
parent 7d0f5173e7
commit d967ae6ae8
  1. 57
      csrc/jetson/segment/include/yolov8-seg.hpp
  2. 55
      csrc/segment/normal/include/yolov8-seg.hpp
  3. 56
      csrc/segment/simple/include/yolov8-seg.hpp

@ -428,36 +428,41 @@ void YOLOv8_seg::postprocess(std::vector<Object>& objs,
objs.push_back(obj); objs.push_back(obj);
cnt += 1; cnt += 1;
} }
if(masks.empty())
{
//masks is empty
}
else
{
cv::Mat matmulRes = (masks * protos).t();
cv::Mat maskMat = matmulRes.reshape(indices.size(), { seg_w, seg_h });
cv::Mat matmulRes = (masks * protos).t(); std::vector<cv::Mat> maskChannels;
cv::Mat maskMat = matmulRes.reshape(indices.size(), { seg_w, seg_h }); cv::split(maskMat, maskChannels);
int scale_dw = dw / input_w * seg_w;
std::vector<cv::Mat> maskChannels; int scale_dh = dh / input_h * seg_h;
cv::split(maskMat, maskChannels);
int scale_dw = dw / input_w * seg_w;
int scale_dh = dh / input_h * seg_h;
cv::Rect roi( cv::Rect roi(
scale_dw, scale_dw,
scale_dh, scale_dh,
seg_w - 2 * scale_dw, seg_w - 2 * scale_dw,
seg_h - 2 * scale_dh); seg_h - 2 * scale_dh);
for (int i = 0; i < indices.size(); i++) for (int i = 0; i < indices.size(); i++)
{ {
cv::Mat dest, mask; cv::Mat dest, mask;
cv::exp(-maskChannels[i], dest); cv::exp(-maskChannels[i], dest);
dest = 1.0 / (1.0 + dest); dest = 1.0 / (1.0 + dest);
dest = dest(roi); dest = dest(roi);
cv::resize( cv::resize(
dest, dest,
mask, mask,
cv::Size((int)width, (int)height), cv::Size((int)width, (int)height),
cv::INTER_LINEAR cv::INTER_LINEAR
); );
objs[i].boxMask = mask(objs[i].rect) > 0.5f; objs[i].boxMask = mask(objs[i].rect) > 0.5f;
}
} }
} }
void YOLOv8_seg::draw_objects(const cv::Mat& image, void YOLOv8_seg::draw_objects(const cv::Mat& image,

@ -459,33 +459,40 @@ void YOLOv8_seg::postprocess(std::vector<Object>& objs,
cnt += 1; cnt += 1;
} }
cv::Mat matmulRes = (masks * protos).t(); if(masks.empty())
cv::Mat maskMat = matmulRes.reshape(indices.size(), { seg_w, seg_h }); {
//masks is empty
}
else
{
cv::Mat matmulRes = (masks * protos).t();
cv::Mat maskMat = matmulRes.reshape(indices.size(), { seg_w, seg_h });
std::vector<cv::Mat> maskChannels; std::vector<cv::Mat> maskChannels;
cv::split(maskMat, maskChannels); cv::split(maskMat, maskChannels);
int scale_dw = dw / input_w * seg_w; int scale_dw = dw / input_w * seg_w;
int scale_dh = dh / input_h * seg_h; int scale_dh = dh / input_h * seg_h;
cv::Rect roi( cv::Rect roi(
scale_dw, scale_dw,
scale_dh, scale_dh,
seg_w - 2 * scale_dw, seg_w - 2 * scale_dw,
seg_h - 2 * scale_dh); seg_h - 2 * scale_dh);
for (int i = 0; i < indices.size(); i++) for (int i = 0; i < indices.size(); i++)
{ {
cv::Mat dest, mask; cv::Mat dest, mask;
cv::exp(-maskChannels[i], dest); cv::exp(-maskChannels[i], dest);
dest = 1.0 / (1.0 + dest); dest = 1.0 / (1.0 + dest);
dest = dest(roi); dest = dest(roi);
cv::resize( cv::resize(
dest, dest,
mask, mask,
cv::Size((int)width, (int)height), cv::Size((int)width, (int)height),
cv::INTER_LINEAR cv::INTER_LINEAR
); );
objs[i].boxMask = mask(objs[i].rect) > 0.5f; objs[i].boxMask = mask(objs[i].rect) > 0.5f;
}
} }
} }

@ -431,35 +431,41 @@ void YOLOv8_seg::postprocess(std::vector<Object>& objs,
cnt += 1; cnt += 1;
} }
cv::Mat matmulRes = (masks * protos).t(); if(masks.empty())
cv::Mat maskMat = matmulRes.reshape(indices.size(), { seg_w, seg_h }); {
//masks is empty
}
else
{
cv::Mat matmulRes = (masks * protos).t();
cv::Mat maskMat = matmulRes.reshape(indices.size(), { seg_w, seg_h });
std::vector<cv::Mat> maskChannels; std::vector<cv::Mat> maskChannels;
cv::split(maskMat, maskChannels); cv::split(maskMat, maskChannels);
int scale_dw = dw / input_w * seg_w; int scale_dw = dw / input_w * seg_w;
int scale_dh = dh / input_h * seg_h; int scale_dh = dh / input_h * seg_h;
cv::Rect roi( cv::Rect roi(
scale_dw, scale_dw,
scale_dh, scale_dh,
seg_w - 2 * scale_dw, seg_w - 2 * scale_dw,
seg_h - 2 * scale_dh); seg_h - 2 * scale_dh);
for (int i = 0; i < indices.size(); i++) for (int i = 0; i < indices.size(); i++)
{ {
cv::Mat dest, mask; cv::Mat dest, mask;
cv::exp(-maskChannels[i], dest); cv::exp(-maskChannels[i], dest);
dest = 1.0 / (1.0 + dest); dest = 1.0 / (1.0 + dest);
dest = dest(roi); dest = dest(roi);
cv::resize( cv::resize(
dest, dest,
mask, mask,
cv::Size((int)width, (int)height), cv::Size((int)width, (int)height),
cv::INTER_LINEAR cv::INTER_LINEAR
); );
objs[i].boxMask = mask(objs[i].rect) > 0.5f; objs[i].boxMask = mask(objs[i].rect) > 0.5f;
}
} }
} }
void YOLOv8_seg::draw_objects(const cv::Mat& image, void YOLOv8_seg::draw_objects(const cv::Mat& image,

Loading…
Cancel
Save