yolov8m-seg(上)详细的backbone和Segment结构(绝对干货)

发布时间:2026/7/21 14:17:40
yolov8m-seg(上)详细的backbone和Segment结构(绝对干货) 这里直接总结了为什么说yolov8-seg是实例分割因为yolov8-seg是以目标框为单位进行分割的一个目标框就是一个实例所以一个目标框中的mask点肯定属于一个实例。实例分割和语义分割不同之前的语义分割只是判断该像素点是mask还是背景但是对于分割出来的mask点哪些mask点属于实例A哪些mask点属于实例B呢语义分割时无法分清楚的。从下面的流程图中可以看出来yolov8-seg依旧做目标检测的任务不要以为你输入的label只是mask点在数据加载部分从mask点计算出mask所在的目标框是很容易的所以yolov8-seg的label是类别id号、目标框的4个位置坐标、然后是你所标注的mask点forward完之后网络的输出的三层特征是以输入3x384x640网络yolov8m-seg为例从下往上第一层960x12x20第二层384x24x40第三层192x48x80做目标检测生成了65个channel其中1个是类别64是4x16是要估计的x-16dim,y-16dim,w-16dim,h-16dim;做目标分割生成32个channel用于估计mask。注意三层特征合并到一起共预测了5040个目标框每个目标框预测了1个类别目标框的4个值以及32维的mask特征然后对这5040个目标框进行nms加上分数阈值的过滤可以得到1~2个目标框注意这32维的mask特征不是对分割点的直接预测而是一个系数proto模型使用192x48x80的特征学习了一个32x96x160的Proto特性在同一张图片上只生成一次 Proto特性共享每个预测框都有一个32维的系数不同实例的差异来自 这32维的mask_coeff每个预测框用这32维的系数乘以32x96x160的Proto特性得到该目标框对应的mask图但是这个mask图是96x160的网络内部会自动resize到输入图片的大小你使用的时候可以自动再resize到图片的原始大小Proto 生成“公共模板” Mask coeff 每个目标只需给“模板的配方” 合成 → 实例的最终 mask每个目标框对应一个mask图然后每个目标框的轮廓点是通过findContours 得到的轮廓点目录1overlap_mask训练参数2yolov8m-seg backbone结构图如下3检测neck结构图如下4分割neck结构图如下5Proto模型6后处理流程如下7创建输入结果8yolov8-seg分割数据输入格式正文1overlap_mask训练参数注意使用ultralytics工程在训练yolov8m-seg网络时有一个参数是overlap_maskoverlap_maskTrue时将对象掩码合并为单个掩码以进行训练即重叠区域只属于其中一个目标的不属于其他目标这个参数训练出来的模型会把重叠的两个目标一个目标是完整的另一个目标是非重叠区域。在ultralytics工程中通过debug的形式对yolov8m-seg测试一张图片的过程进行逐步查看画出以下网络结构图2yolov8m-seg backbone结构图如下3检测neck结构图如下decode_bboxes是将4x5040和anchor对应起来这里的1指的是1个类别64是用来预测目标框4分割neck结构图如下5Proto模型6后处理流程如下1、后处理的输入37x504032是掩码mask,4 是x1y1x2y21是1个类别分数该任务中只有一类有5040个目标。2、5040个框中取类别分数阈值的框。在我测试的一个图片例子中使用分数阈值过滤后剩余21个目标即37x21。3、获取这21个目标中分数最高的下标id .4)、将这21个目标分数从大到小排序通过目标框和目标框的分数进行nms选中了id12和id0的两个目标框5、获得这两个目标框的对应的37个数值。7创建输入结果图片的输入尺寸为:384x640一个框的maks是32维2个框是2x32之前计算的protos是32x96x160protosview成32x15360mask 2x32 32 x 15360 2x15360 view 2x96x160在第5步的后处理中得到的box框是 输入384x640图片上的32为mask 是在 之前计算的protos32x96x160 上的因此将384x640上的box缩小到96x160上现在mask大小是2x96x160有两个目标框只需要目标框内的mask有效其他都是false然后将mask 上采样为 2x384x640大小mask 中 大于0的为1小于0的为08yolov8-seg分割数据输入分割输入的txt第一位是类别id后面紧跟着mask的点x1,y1,x2,y2,x3,y3,x4,y4不需要输入分割对应的box的框ultralytics工程中会自动生成