在yolov5源码基础上修改,只识别一种类别

方法一(推荐)

在这里插入图片描述
如上图所示,在detect.py文件中,第73行为模型正向传播推理得到的结果,75行是模型正向传播后传入到函数non_max_suppression中,该函数为非极大值抑制函数,得到了我们最终想要的tensor数组,之后的处理为画图等操作。
如果想要调用官方给的模型文件进行推理,并且只得到一个类别,我们需要写一个函数,之后调用它即可。
函数如下:

def cls_filtration(prediction, classid):
    '''
    输入非极大值抑制后的结果,输入要过滤的类别名称
    输出过滤classname后的结果
    '''
    xc = prediction[0][..., 5] == classid
    for xi, x in enumerate(prediction):
        x = x[xc]

        if not x.shape[0]:
            continue
    x = [x]
    return x

该函数传入参数为prediction和classid,其中prediction为非极大值抑制后的tensor数组,实际上是一个列表,如下所示,这种格式的tensor数组

[tensor[[0,1,2,3,4,5],
		[0,1,2,3,4,5],
		...,
		[0,1,2,3,4,5]]
]

其中第6列为classid号,我们只需要判断它是否为我们想要过滤的classid即可。
不要忘了最后得到的结果再放进列表中,否则需要对源码进行修改。
如图所示,在该处调用写好的函数即可。其他不需要进行任何修改。
在这里插入图片描述
注:推荐使用该方法,因为我们得到的数组正是我们想要的数组,我们在后续的工作中很可能会用到该数组。当然也可以做一个修改,过滤出多种类别。

方法二

该方法比较简单,只需要在画图过程中,过滤即可
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述
不过我们不推荐这种,它只是在画图中把其他框过滤掉了,没有解决根本问题。

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值