yolov5 检测一类物体

本文介绍了如何直接修改Yolov5官方框架的代码来实现仅检测一类物体,例如人。首先从GitHub下载源代码,配置环境,然后在detect.py中修改weights和source参数进行测试。接着通过添加条件判断,只打印和显示检测到人为类别的结果,从而达到只显示一类物体的效果。这种方法虽然简单,但实时性较差,因为模型实际仍对所有80类进行检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用yolov5官方框架检测一类物体

yolov5的官方框架可较好的对共80种类进行目标检测,本文介绍一种直接修改源代码来只检测一类物体的方法以及通用的方法(利用数据集训练自己的权重)。

一、直接修改源代码
1.在GitHub上下载官方代码。https://github.com/ultralytics/yolov5。

2.对环境进行配置,安装requirements.txt进行配置,可以在pychram的terminal键入
pip install -r requirements.txt
会自动进行环境配置,使用yolov5大多数出现的问题都是因为环境配置不正确。

3.利用官方权重测试。

parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
parser.add_argument('--source', type=str, default='data/images', help='source')  # file/folder, 0 for webcam**

主要对detect.py中的weights和source进行修改,这里weights选择四个官方权重中的yolov5s.pt,source即测试数据的来源。当无附加命令时,使用default中的参数。

4.测试结果:
在这里插入图片描述
输出结果在runs的detect中。可以看到官方权重可以检测人、领带等物体。

# number of classes
nc: 80

# class names
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
         'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
         'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
         'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
         'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
         'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
         'hair drier', 'toothbrush' ]

yolov5默认权重共可检测以上80种类。

五、代码修改。(以只检测人为例。)
将detect.py中98行开始修改为如下代码,加入了一个判断语句。即检测物体为人时才打印结果,其他类不打印。

# Print results
                for c in det[:, -1].unique():
                    if names[int(c)] == 'person':
                      n = (det[:, -1] == c).sum()  # detections per class
                      s += f'{n} {names[int(c)]}s, '  # add to string
                    else:
                        continue

106行开始修改为如下代码。

# Write results
    for *xyxy, conf, cls in reversed(det):
        if save_img or view_img:  # Add bbox to image
            if names[int(cls)] == 'person':
               label = f'{names[int(cls)]} {conf:.2f}'
               plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)
                    else:
                        continue

效果测试:
在这里插入图片描述

至此完成只检测一类物品的任务。
总结:这是一种讨巧的方法,实际上模型仍然对80种类进行了检测,只是没有显示和打印出结果。相较于自己训练的单个类的模型,这种方法在实时性上比较差。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值