You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已训练YOLOv8检测模型,如何与其他CNN分类模型结合?

YOLOv8检测模型与独立分类模型的结合方案

方案一:串行推理(最易实现的基础方案)

这是最直接的落地方式,无需修改模型结构,仅通过推理流程串联两个模型:

  • 操作步骤:
    1. 用训练好的YOLOv8模型处理输入图像/视频帧,得到所有目标的边界框(bbox)、检测类别及置信度
    2. 从原图中按每个边界框裁剪目标区域,建议给边界框加5-10像素的padding,避免丢失目标边缘特征
    3. 将裁剪后的目标图像做预处理(匹配分类模型训练时的尺寸、归一化规则等),输入独立分类模型得到分类结果
    4. 把分类结果与YOLOv8的检测框信息整合,输出最终结果
  • 核心代码示例:
from ultralytics import YOLO
import torch
import cv2

# 加载预训练模型
detect_model = YOLO("your_trained_yolov8_model.pt")
classify_model = torch.load("your_classification_model.pt").eval()

# 预处理函数(需匹配分类模型训练时的设置)
def preprocess_cls_img(img, target_size=(224,224)):
    img = cv2.resize(img, target_size)
    img = img / 255.0
    img = torch.tensor(img).permute(2,0,1).unsqueeze(0).float()
    return img

# 处理单张图片
img = cv2.imread("input.jpg")
detections = detect_model(img)[0]

for det in detections.boxes:
    # 提取边界框坐标
    x1, y1, x2, y2 = det.xyxy[0].tolist()
    # 加padding并裁剪
    padding = 8
    x1 = max(0, int(x1 - padding))
    y1 = max(0, int(y1 - padding))
    x2 = min(img.shape[1], int(x2 + padding))
    y2 = min(img.shape[0], int(y2 + padding))
    target_img = img[y1:y2, x1:x2]
    
    # 分类推理
    with torch.no_grad():
        cls_input = preprocess_cls_img(target_img)
        cls_pred = classify_model(cls_input)
        cls_label = torch.argmax(cls_pred, dim=1).item()
    
    # 整合输出
    print(f"检测框坐标: ({x1},{y1},{x2},{y2}), 细分类结果: {cls_label}")

方案二:嵌入分类头(端到端联合训练)

如果想把两个模型整合为一个端到端模型,适合有联合标注数据集的场景:

  • 操作步骤:
    1. 保留YOLOv8的Backbone和Neck特征提取部分
    2. 在YOLOv8的检测头之外,新增一个分类分支,接收Neck输出的特征(或从Backbone某一层提取特征)
    3. 构建联合损失函数:总损失 = YOLOv8原生检测损失 + 分类交叉熵损失
    4. 用同时包含检测标注(bbox+粗分类)和细分类标注的数据集重新训练模型
  • 优势:训练完成后可直接输出检测框和分类结果,推理效率更高

方案三:指定类别后处理融合

如果分类模型仅针对YOLOv8检测出的特定类别做细分类(比如YOLOv8检测出"车辆",分类模型区分"轿车/SUV/卡车"):

  • 操作步骤:
    1. 先过滤YOLOv8的检测结果,只保留需要细分类的目标类别(比如类别ID=2)
    2. 对筛选后的目标执行方案一中的裁剪、预处理和分类推理
    3. 将细分类结果补充到原检测结果的类别字段中,替换原粗分类标签

关键注意事项

  • 确保分类模型的输入预处理规则(尺寸、归一化、色域转换)与训练时完全一致,否则会大幅降低分类精度
  • 处理视频时,建议用YOLOv8自带的track功能跟踪连续帧中的同一目标,避免重复裁剪分类,提升推理效率
  • 若裁剪后的目标尺寸与分类模型输入差异过大,可先按比例缩放或填充后再输入分类模型

内容的提问来源于stack exchange,提问作者arin1409

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:02:49