最好的解决方案是使用 RLE(游程编码)掩模定义带孔的形状。
在Matterport Mask R-CNN实现中,所有多边形分割都转换为RLE,然后转换为掩模。查看 coco.py 中的 annToMask() 和 annToRLE()。使用多边形的原因是它们在 json 中存储效率更高,并且会缩小注释文件的大小。如果您无法使用实心多边形定义形状,则可能会遇到更大的 RLE,除非您想在 COCO 中制作自己的自定义注释并修改神经网络以自行将这些多边形孔转换为 RLE。
请注意,如果您使用的神经网络仅查找边界框,则这是不必要的,因为无论如何它都无法返回孔。
我还构建了 this 导出器用于实例分割,从掩码到 COCO JSON 注释格式,同时保留对象中的孔。有了这个导出器,您将能够获得带有漏洞的注释,从而帮助网络更好地学习。