PaddleX
PaddleX copied to clipboard
PaddleX2.0.0RC3预测实例分割模型,无法读取Mask的问题
问题类型:模型部署
问题描述
运行predict函数,返回的内容如下,Mask参数内没有点云数据


这个结果是正常的,模型预测得到的是RLE格式的mask。可以通过pycocotools.mask.decode解码得到binary格式的mask。
这个结果是正常的,模型预测得到的是RLE格式的mask。可以通过
pycocotools.mask.decode解码得到binary格式的mask。 有没有具体的python例程啊?
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 你好,我在用你说的这个方式进行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

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 请问解决没有