PaddleX icon indicating copy to clipboard operation
PaddleX copied to clipboard

PaddleX2.0.0RC3预测实例分割模型,无法读取Mask的问题

Open CashBai opened this issue 4 years ago • 5 comments

问题类型:模型部署 问题描述
运行predict函数,返回的内容如下,Mask参数内没有点云数据

微信图片编辑_20210722091229

QQ图片20210722091140

CashBai avatar Jul 22 '21 01:07 CashBai

这个结果是正常的,模型预测得到的是RLE格式的mask。可以通过pycocotools.mask.decode解码得到binary格式的mask。

will-jl944 avatar Jul 22 '21 02:07 will-jl944

这个结果是正常的,模型预测得到的是RLE格式的mask。可以通过pycocotools.mask.decode解码得到binary格式的mask。 有没有具体的python例程啊?

CashBai avatar Jul 22 '21 07:07 CashBai

import numpy as np
import cv2
import pycocotools.mask as mask_utils
import paddlex as pdx


def rle2binary(mask):
    """
    Decode binary masks encoded via RLE.
    """
    return mask_util.decode(mask)


def binary2poly(mask):
    """
    Convert binary mask to polygon.
    """
    mask = np.ascontiguousarray(mask)
    contours, _ = cv2.findContours(
                mask.astype("uint8"), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
    polys = []
    for c in contours:
        polys.append(c.flatten().tolist())
    return polys


if __name__ == '__main__':
    model = pdx.load_model('path/to/model')
    result = model.predict('path/to/test_image')
    for det in result:
        det['binary_mask'] = rle2binary(det['mask'])
        det['polygon'] = binary2poly(det['binary_mask'])

调用rle2binary可以将预测结果中的RLE编码的mask转换为尺寸为[image_height, image_width]的binary mask,调用binary2poly可以得到目标物体轮廓的坐标点。使用方法如主函数中所示。

will-jl944 avatar Jul 22 '21 07:07 will-jl944

@will-jl944 你好,我在用你说的这个方式进行mask解码,获取坐标时报错如下异常。请问是什么问题呢?是mask数据格式变了吗?

paddlepaddle 2.3.0
paddlex 2.1.0
  File "C:\ProgramData\Miniconda3\envs\nutrition-paddle-ml\lib\site-packages\pycocotools\mask.py", line 91, in decode
    return _mask.decode([rleObjs])[:,:,0]
  File "pycocotools/_mask.pyx", line 146, in pycocotools._mask.decode
  File "pycocotools/_mask.pyx", line 128, in pycocotools._mask._frString
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

image

Mr-LiuDC avatar May 31 '22 11:05 Mr-LiuDC

  File "f:\AI.py", line 871, in draw_bbox_mask
    dt['binary_mask'] = mask_utils.decode(dt['mask'])
  File "D:\Anaconda3\envs\PaddleX\lib\site-packages\pycocotools\mask.py", line 91, in decode
    return _mask.decode([rleObjs])[:,:,0]
  File "pycocotools/_mask.pyx", line 146, in pycocotools._mask.decode
  File "pycocotools/_mask.pyx", line 128, in pycocotools._mask._frString
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

@will-jl944
大佬 我也是报错 是PaddleX的mask改变了吗 请问需要怎么解决

@Mr-LiuDC 请问解决没有

monkeycc avatar Sep 28 '22 07:09 monkeycc