在前面学习YOLOv8
的实例分割过程中,需要使用实例分割的数据集,其标签的标注格式如下:
实例分割勾勒轮廓
其中,第一个数字代表的是类别编号,后面的数据代表的是标注的坐标(转换到0-1
之间)每两个为一个坐标,即 (x,y)
如何讲坐标画出轮廓呢,使用OpenCV
中的cv.polylines
方法
画出的图像如下:
以上是我们自己勾勒出的实例分割轮廓,那么,在ultralytics
中,对于这些轮廓是如何处理的呢?
我们发现,在训练器加载过程中,首先会根据我们指定的数据集路径来读取相应的标注文件,可以看到,在这个labels属性中,数据集中图像的名称,目标类别,标注框以及分割的标签都成功的读取了。
事实上,分割所标注的坐标映射到图像上是这样的:
我们根据先前实例分割输入的标注分析,其输入的为mask模式,即如下图所示,mask为(4,160,160)
轮廓提取生成mask(错误方法)
开始时,博主想要直接读取标注文件然后画图,但却由于没有搞清填充图像的方法,所以像将坐标转换为线条,再通过腐蚀、阈值轮廓提取等方式来生成轮廓坐标,最后再进行填充,代码与效果图如下:
,
这里涉及到OpenCV
中的轮廓寻找与绘制问题,contours
为找到的轮廓坐标
但这种方法很明显是不行的,这个标注本不需要进行轮廓提取就可以直接使用,后来,通过观察轮廓坐标contours
格式,我们也可以直接读取数据来进行mask转换。
直接利用坐标填充mask
通过分析,可以采用如下方式来利用坐标生成对应的mask
,同时还可以将对应的类别给作为颜色区分
在这个过程中,即需将原本的轮廓坐标转换为mask
的形式,但这部分代码我并没有在ultralytics
中找到。