yolov8的predict与yolov5准确率不一致

如图所示,在使用yolov8进行训练得模型进行推理时,我发现yolov8官方推理和我自己的推理结果不一致,排查后发现,yolov8与yolov5的推理程序也不一致

问题原因:

排查了一下图像预处理,两者一致,之后排查后处理,发现yolov5多出来了一个softmax操作,去除该操作后,推理结果一致。

解决方案:

1、去掉推理程序中的softmax处理

2、修改yolov8的classify部分,也就是head,路径如下

yolov8/ultralytics/nn/modules/head.py

代码中Classify部分

class Classify(nn.Module):
    """YOLOv8 classification head, i.e. x(b,c1,20,20) to x(b,c2)."""

    def __init__(self, c1, c2, k=1, s=1, p=None, g=1):
        """Initializes YOLOv8 classification head with specified input and output channels, kernel size, stride,
        padding, and groups.
        """
        super().__init__()
        c_ = 1280  # efficientnet_b0 size
        self.conv = Conv(c1, c_, k, s, p, g)
        self.pool = nn.AdaptiveAvgPool2d(1)  # to x(b,c_,1,1)
        self.drop = nn.Dropout(p=0.0, inplace=True)
        self.linear = nn.Linear(c_, c2)  # to x(b,c2)

    def forward(self, x):
        """Performs a forward pass of the YOLO model on input image data."""
        if isinstance(x, list):
            x = torch.cat(x, 1)
        x = self.linear(self.drop(self.pool(self.conv(x)).flatten(1)))
        return x    #修改后
        # return x if self.training else x.softmax(1)        #修改前

如代码所示,最后forward的return部分会在非train状态下,自动添加softmax,yolov5则没有该部分,直接像我代码一样返回x即可

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值