You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置默认YOLOv8模型仅识别指定的5类目标?

如何配置默认YOLOv8模型仅识别指定的5类目标?

嗨,这个需求其实挺常见的~用默认的YOLOv8m.pt预训练模型只检测你需要的5类目标,有两种实用方法,我给你一步步讲清楚:

方法一:推理阶段直接过滤检测结果(最简单,无需修改模型)

这种方法不用改动预训练模型本身,直接在推理的时候筛选出你需要的类别结果,上手最快。

首先确保你安装了ultralytics库(YOLOv8的官方实现),如果没装的话先执行:

pip install ultralytics

接下来写代码实现,假设你要检测的5类是person、car、dog、cat、bicycle,对应的COCO数据集类别ID是0、2、16、17、1(你需要根据自己的需求替换成目标类别的ID):

from ultralytics import YOLO

# 加载默认的yolov8m.pt预训练模型
model = YOLO('yolov8m.pt')

# 定义你要检测的目标类别ID列表
target_classes = [0, 2, 16, 17, 1]

# 方式1:推理时直接指定classes参数,模型只会输出这些类别的检测结果
results = model('your_image.jpg', classes=target_classes)

# 方式2:推理后手动过滤结果(适合需要灵活处理结果的场景)
# results = model('your_image.jpg')
# for result in results:
#     # 筛选出属于目标类别的检测框
#     filtered_boxes = result.boxes[result.boxes.cls.isin(target_classes)]
#     # 更新结果中的检测框为过滤后的内容
#     result.boxes = filtered_boxes
#     # 保存过滤后的结果图片
#     result.save(filename='filtered_result.jpg')

# 可视化检测结果
results[0].show()

小提示:如果你是检测视频或者实时摄像头流,只需要把'your_image.jpg'换成视频路径或者摄像头ID(比如0对应电脑默认摄像头)就行。

方法二:修改模型输出层并重导出(适合部署,追求更高效率)

如果你的场景需要部署模型(比如边缘设备),想要减少模型的计算量,那就可以修改模型的输出层,让它直接只输出你需要的5类结果,不用额外过滤。

步骤如下:

from ultralytics import YOLO

# 加载默认模型
model = YOLO('yolov8m.pt')

# 查看原模型的输出层(YOLOv8的输出层是最后一个Detect模块)
print(model.model[-1])

# 修改输出层的类别数量为5
model.model[-1].nc = 5
# 同步更新模型的类别名称列表,对应你要检测的5类
model.names = ['person', 'car', 'dog', 'cat', 'bicycle']

# 导出修改后的模型(可以选择pt、onnx等格式,按需选择)
model.export(format='onnx')  # 导出为ONNX格式适合部署到多数框架
# 或者导出为PyTorch格式:model.export(format='pt')

修改后的模型只会输出你指定的5类目标,推理时不需要再做过滤,效率更高。不过要注意,修改后的模型只能检测这5类,之后如果需要检测其他类别,得重新用原始的yolov8m.pt模型。

注意:一定要确认目标类别对应的COCO ID正确,你可以提前查COCO数据集的类别-ID对应表,避免搞错哦~

备注:内容来源于stack exchange,提问作者anbvy

火山引擎 最新活动