yolov5-7.0检测和实例分割的对比分析,yolov7与此类似

简介

本文主要对yolov5-7.0版本的实例分割和目标检测两个功能进行对比,以帮助大家理解和使用。对比部分主要包括onnx可视化图、配置参数、输出头的模块、train.py、loss.py等主要内容。

代码部分对比

配置参数对比

对比展示

在这里插入图片描述
Segment模块代码:

class Segment(Detect):
    # YOLOv5 Segment head for segmentation models
    def __init__(self, nc=80, anchors=(), nm=32, npr=256, ch=(), inplace=True):
        super().__init__(nc, anchors, ch, inplace)
        self.nm = nm  # number of masks
        self.npr = npr  # number of protos
        self.no = 5 + nc + self.nm  # number of outputs per anchor
        self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch)  # output conv
        self.proto = Proto(ch[0], self.npr, self.nm)  # protos
        self.detect = Detect.forward

    def forward(self, x):
        p = self.proto(x[0])
        x = self.detect(self, x)
        return (x, p) if self.training else (x[0], p) if self.export else (x[0], p, x[1])

Proto模块代码:

class Proto(nn.Module):
    # YOLOv5 mask Proto module for segmentation models
    def __init__(self, c1, c_=256, c2=32):  # ch_in, number of protos, number of masks
        super().__init__()
        self.cv1 = Conv(c1, c_, k=3)
        self.upsample = nn.Upsample(scale_factor=2, mode='nearest')
        self.cv2 = Conv(c_, c_, k=3)
        self.cv3 = Conv(c_, c2)

    def forward(self, x):
        return self.cv3(self.cv2(self.upsample(self.cv1(x))))

对比结果

由上述对比,实例分割部分的输出头用的是Segment模块,而检测用的是Detect模块。通过查看Segment模块模块代码可知,此模块由两部分构成,一部分是检测用的Detect,另外一部分是用于分割的Proto模块。可以看出,实例分割包含了目标检测部分。

train.py部分代码对比

对比展示

下图为实例分割训练部分
在这里插入图片描述
下图为仅有目标检测训练部分
在这里插入图片描述

对比结果

对比上面可知,在对输入的图像进行预测后,带有实例分割功能的算法计算损失时输入多了mask=mask.to(device).float()。
可知,输出的pred不仅包含坐标框、置信度、类别信息,还包含了mask信息,在计算损失时也将计算mask的损失。此部分与onnx可视化的输出参数相对应。

loss.py代码部分对比

对比展示

左边为带有实例分割算法的计算损失部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对比结果

通过上述部分对比可知,带有实例分割功能的算法在计算损失时,根据mask信息单独构建了一个模块用于计算mask损失,并在总体损失上加上了mask的损失,用于后面的参数更新。

onnx可视化图对比

由上面的配置文件和网络结构可知,实例分割和检测的区别在于输出部分,特征提取和特征融合部分是相同的,因此,下面将将截取输出部分的onnx可视化进行对比。

对比展示

下面的是检测模型的输出头部分。
在这里插入图片描述
下面是实例分割输出头部分。

在这里插入图片描述

对比结果

经过对比可知,实例分割的输出时多了一个分支,输出结果多了mask部分,相当于一个框多了32个数据,即由原来的85变为117。

总结

以上部分从配置文件开始,到torch中的部分代码,以至于最后的onnx可视化部分。通过简单明了的方式对检测和实例分割功能的实现进行了对比。所对比内容虽然不全,但基本包含很大部分,对理解好应用感觉还是可以的。

欢迎大家补充和沟通。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木彳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值