【YOLOv8-Ultralytics】 【目标检测】【v8.3.235版本】 模型专用预测器代码predict.py解析

【YOLOv8-Ultralytics】 【目标检测】【v8.3.235版本】 模型专用预测器代码predict.py解析


文章目录


前言

代码路径:ultralytics\models\yolo\detect\predict.py

这段代码是 Ultralytics YOLO 框架中目标检测模型专用预测器 DetectionPredictor 的核心实现,继承自基础预测器 BasePredictor,专门适配 YOLO 目标检测的推理全流程。其核心作用是将模型输出的原始预测张量,通过「非极大值抑制(NMS)过滤冗余框→坐标缩放还原至原始图像尺寸→结构化封装为 Results 对象」的流程,转换为可直接用于可视化、保存、下游分析的检测结果,同时支持可选的目标特征提取能力,是 YOLO 检测模型推理阶段的核心组件。

YOLOv8-Ultralytics 系列文章目录


所需的库和模块

python 复制代码
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# 从ultralytics引擎预测器模块导入基础预测器基类(提供通用推理流程:数据加载、预处理、模型推理)
from ultralytics.engine.predictor import BasePredictor
# 从ultralytics引擎结果模块导入Results类(结构化封装推理结果)
from ultralytics.engine.results import Results
# 从ultralytics工具模块导入:非极大值抑制(NMS)、通用操作函数(框缩放、格式转换)
from ultralytics.utils import nms, ops

DetectionValidator 类

整体概览

项目 详情
类名 DetectionPredictor
父类 BasePredictor(Ultralytics 通用预测器,提供模型加载、图像预处理、推理执行等基础能力)
核心定位 YOLO 目标检测模型专用预测器,负责检测任务的预测后处理(NMS)、结果构造、目标特征提取、预测框缩放等核心逻辑
核心依赖模块 ultralytics.engine.predictor(基础预测器)、ultralytics.engine.results(结果封装)、ultralytics.utils.nms(非极大值抑制)、ultralytics.utils.ops(框缩放/格式转换)、torch(张量操作)
关键特性 1. 支持普通检测/旋转框检测(OBB)、类别无关NMS;2. 可选提取目标特征并绑定到结果对象;3. 自动适配批量/单张图像的结果构造;4. 预测框自动缩放到原始图像尺寸;5. 兼容end2end模型推理流程
典型使用流程 初始化预测器→加载模型→预处理输入图像→模型推理→NMS后处理→提取目标特征(可选)→构造Results结果对象→返回可视化/可解析的检测结果

1. DetectionPredictor 类属性说明表

属性名 类型 说明
args namespace 预测器配置参数命名空间(包含conf、iou、classes、max_det、agnostic_nms等NMS/推理参数)
model nn.Module 用于推理的YOLO检测模型实例
batch list 待处理的批次数据列表(包含图像路径、预处理后的图像张量、原始图像等)

2. DetectionPredictor 类方法说明表

方法名 功能说明
postprocess 对模型原始预测执行NMS后处理,转换为结构化Results对象(核心推理后处理)
get_obj_feats 从模型特征图中提取目标级特征(用于下游任务如特征匹配、检索)
construct_results 批量构建Results对象(遍历批次内所有样本)
construct_result 为单张图像构建Results对象(框坐标缩放、结构化封装)

预测后处理:postprocess

python 复制代码
def postprocess(self, preds, img, orig_imgs, **kwargs):
    """
    对模型原始预测执行后处理(NMS+结果结构化),返回结构化Results对象列表
    核心逻辑:NMS过滤冗余框→格式转换→特征提取(可选)→构建Results对象→附加特征(可选)

    参数:
        preds (torch.Tensor): 模型原始预测张量(维度:[B, N, 4+1+NC],4=框坐标,1=置信度,NC=类别数)
        img (torch.Tensor): 预处理后的输入图像张量(模型输入格式,已缩放/归一化)
        orig_imgs (torch.Tensor | list): 预处理前的原始图像(张量/列表格式,RGB/BGR需适配)
        **kwargs (Any): 额外关键字参数(预留扩展)

    返回:
        (list[Results]): 结构化推理结果列表,每个元素对应单张图像的检测结果(含框、类别、置信度等)

    示例:
        # >>> predictor = DetectionPredictor(overrides=dict(model="yolo11n.pt"))
        # >>> results = predictor.predict("path/to/image.jpg")
        # >>> processed_results = predictor.postprocess(preds, img, orig_imgs)
    """
    # 判断是否需要保存目标特征:检测是否存在_feats属性(模型推理时提取的特征图)
    save_feats = getattr(self, "_feats", None) is not None
    # 执行NMS后处理(过滤冗余检测框):
    # - conf: 置信度阈值(过滤低置信度框)
    # - iou: NMS的IoU阈值(合并重叠框)
    # - classes: 指定仅检测的类别(None则检测所有类别)
    # - agnostic_nms: 跨类别NMS(单类别/agnostic模式下启用)
    # - max_det: 单图最大检测框数量
    # - nc: 类别数(0表示自动识别,非detect任务时用模型类别数)
    # - end2end: 适配端到端模型的输出格式
    # - rotated: 适配旋转框检测(OBB任务)
    # - return_idxs=save_feats: 需要提取特征时返回目标索引(用于特征映射)
    preds = nms.non_max_suppression(
        preds,
        self.args.conf,
        self.args.iou,
        self.args.classes,
        self.args.agnostic_nms,
        max_det=self.args.max_det,
        nc=0 if self.args.task == "detect" else len(self.model.names),
        end2end=getattr(self.model, "end2end", False),
        rotated=self.args.task == "obb",
        return_idxs=save_feats,
    )

    # 格式转换:若原始图像是张量(非列表),转换为NumPy批次并反转通道(BGR→RGB,适配OpenCV格式)
    if not isinstance(orig_imgs, list):
        orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]

    # 特征提取:需要保存特征时,从特征图提取目标级特征
    if save_feats:
        # 提取目标特征(按NMS返回的索引映射)
        obj_feats = self.get_obj_feats(self._feats, preds[1])
        # 分离NMS结果(preds[0]为检测框,preds[1]为目标索引)
        preds = preds[0]

    # 批量构建结构化Results对象
    results = self.construct_results(preds, img, orig_imgs, **kwargs)

    # 特征附加:将提取的目标特征绑定到Results对象
    if save_feats:
        for r, f in zip(results, obj_feats):
            r.feats = f

    return results
项目 详情
函数名 postprocess
功能概述 对模型原始预测结果执行NMS过滤冗余框,适配原始图像尺寸,可选提取目标特征,最终构造Results结果列表
返回值 list[Results]:每个元素为单张图的检测结果对象(包含框、类别、置信度、特征等)
核心逻辑 1. 判断是否提取目标特征;2. 执行NMS过滤预测框;3. 转换原始图像格式(张量→列表);4. 提取目标特征(可选);5. 构造Results结果列表;6. 绑定目标特征到结果(可选)
设计亮点 1. 按需提取目标特征,不影响常规预测流程;2. 自动适配原始图像的张量/列表格式;3. 兼容多种NMS配置(旋转框、类别无关、end2end)
注意事项 1. 提取目标特征时需确保模型推理过程中保存了_feats特征图;2. 旋转框检测需设置self.args.task="obb",否则NMS逻辑不匹配
概念 含义 对应代码控制逻辑
单类别检测任务 整个检测任务仅需识别一种目标(如只检测"人"、只检测"汽车")。 self.args.single_cls = True
单标签预测(每框一类) 每个检测框仅预测一个类别(vs 多标签:一个框预测多个类别,如"人+背包") nms.non_max_suppressionmulti_label 参数

根据配置自动切换 NMS 的类别处理逻辑,单类别任务强制开启类别无关 NMS 提升效率,多类别任务可手动开启只保留置信度最高的一个以减少重复检测,适配不同检测场景的需求。

模式 逻辑 适用场景
常规NMS(agnostic=False) 按类别分组,对每个类别单独执行NMS;不同类别间的框即使重叠度极高,也不会互相过滤 多类别目标边界清晰的场景(如人、自行车、汽车无重叠),避免误过滤不同类别的合法框
类别无关NMS(agnostic=True) 忽略类别信息,将所有框合并后执行一次NMS;只要框的IoU超过阈值,无论类别是否相同,只保留置信度最高的框 单类别检测、或多类别目标易混淆/重叠的场景(如汽车/卡车、猫/狗),减少重复检测

预测张量形状为 [B, N, 4 + 1 + nc],当 nc=0 时NMS 函数内部会自动从预测张量的维度推断类别数nc

目标特征提取:get_obj_feats

python 复制代码
def get_obj_feats(self, feat_maps, idxs):
    """
    从模型特征图中提取目标级特征(用于下游任务:特征匹配、检索、重识别等)
    核心逻辑:统一特征维度→拼接多尺度特征→按NMS索引提取目标特征

    参数:
        feat_maps (list[torch.Tensor]): 模型输出的多尺度特征图列表(如8x8、16x16、32x32)
        idxs (list[torch.Tensor]): 批次内每张图像的目标索引(NMS返回,映射特征图到检测目标)

    返回:
        (list[torch.Tensor]): 批次内每张图像的目标特征列表(空列表表示无检测目标)
    """
    # 延迟导入(避免推理时未使用特征提取的情况下加载冗余依赖)
    import torch

    # 找到所有特征图中最短的向量长度(统一特征维度,避免维度不匹配)
    s = min(x.shape[1] for x in feat_maps)
    # 多尺度特征拼接:
    # 1. permute(0,2,3,1): 特征图维度从[B,C,H,W]→[B,H,W,C](通道维度后置)
    # 2. reshape: 将通道维度拆分为[s, C/s],便于均值降维到统一长度s,[B,H,W,C]→[B,H*W,s,C/s]
    # 3. mean(dim=-1): 对拆分后的维度取均值,将所有特征向量统一为长度s,[B,H*W,s,C/s]→[B,H*W,s]
    # 4. cat(dim=1): 拼接多尺度特征(维度:[B, 总特征数, s]),总特征数即不同的尺度H*W的总数
    obj_feats = torch.cat(
        [x.permute(0, 2, 3, 1).reshape(x.shape[0], -1, s, x.shape[1] // s).mean(dim=-1) for x in feat_maps], dim=1
    )
    # 按索引提取每张图像的目标特征(无目标则返回空列表)
    return [feats[idx] if idx.shape[0] else [] for feats, idx in zip(obj_feats, idxs)]
项目 详情
函数名 get_obj_feats
功能概述 从模型输出的特征图中提取目标对应的特征向量,统一特征维度后按预测框索引筛选
返回值 `list[torch.Tensor
核心逻辑 1. 确定特征向量最短长度;2. 多尺度特征图维度统一+均值降维;3. 按索引提取单图目标特征
设计亮点 1. 自动适配多尺度特征图,统一特征维度;2. 无目标时优雅返回空列表,避免运行时错误;3. 均值降维保证特征长度一致,便于后续使用
注意事项 1. 特征图需为模型前向传播时保存的_feats属性,且维度需为[batch, channels, h, w];2. 索引idxs需与NMS返回的索引一一对应,否则特征提取错误

结果列表构造:construct_results

python 复制代码
def construct_results(self, preds, img, orig_imgs):
    """
    批量构建Results对象(遍历批次内所有图像,调用construct_result处理单张图像)

    参数:
        preds (list[torch.Tensor]): 批次内每张图像的NMS后检测结果(张量维度:[N,6],N=检测框数)
        img (torch.Tensor): 预处理后的批次图像张量(模型输入格式)
        orig_imgs (list[np.ndarray]): 批次内原始图像列表(NumPy格式)

    返回:
        (list[Results]): 批次内每张图像的结构化Results对象列表
    """
    return [
        self.construct_result(pred, img, orig_img, img_path)
        for pred, orig_img, img_path in zip(preds, orig_imgs, self.batch[0])
    ]
项目 详情
函数名 construct_results
功能概述 遍历批量预测结果,逐张图像调用construct_result构造单图Results对象,最终返回结果列表
返回值 list[Results]:批量图像的检测结果对象列表
核心逻辑 按批次维度遍历预测框、原始图像、图像路径,逐张构造Results对象
设计亮点 1. 简洁的列表推导式实现批量结果构造;2. 严格按批次顺序匹配,避免结果错位;3. 复用单图构造逻辑,降低代码冗余
注意事项 1. predsorig_imgsself.batch[0]的长度需一致,否则会触发维度不匹配错误;2. self.batch[0]需为图像路径列表,依赖BasePredictor的批量数据加载逻辑

单图结果构造:construct_result

python 复制代码
def construct_result(self, pred, img, orig_img, img_path):
    """
    为单张图像构建结构化Results对象(核心:框坐标缩放+结果封装)
    将模型输入尺寸的框坐标缩放到原始图像尺寸,确保坐标与原始图像匹配

    参数:
        pred (torch.Tensor): 单张图像的NMS后检测结果(维度:[N,6],6=xyxy+conf+cls)
        img (torch.Tensor): 预处理后的图像张量(模型输入格式)
        orig_img (np.ndarray): 原始图像(未预处理,NumPy格式)
        img_path (str): 原始图像文件路径(用于Results对象溯源)

    返回:
        (Results): 结构化Results对象,包含:
            - orig_img: 原始图像
            - path: 图像路径
            - names: 模型类别名映射
            - boxes: 缩放后的检测框(xyxy+conf+cls)
    """
    # 框坐标缩放:从模型输入尺寸→原始图像尺寸(消除预处理的缩放/填充影响)
    pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape)
    # 构建并返回Results对象(封装所有推理结果)
    return Results(orig_img, path=img_path, names=self.model.names, boxes=pred[:, :6])
项目 详情
函数名 construct_result
功能概述 将单图预测框缩放到原始图像尺寸,封装为Results对象(包含图像、路径、类别名、检测框)
返回值 Results:单图检测结果对象(包含原始图像、路径、类别名、缩放后的检测框)
核心逻辑 1. 预测框缩放(模型输入尺寸→原始图像尺寸);2. 封装为Results对象
设计亮点 1. 自动适配模型输入与原始图像的尺寸差异,保证预测框位置精准;2. 结果对象封装所有核心信息,便于后续可视化/解析
注意事项 1. pred的前4列必须为xyxy格式,否则缩放后框位置错误;2. orig_img需为RGB通道,否则可视化时颜色异常

完整代码

python 复制代码
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# 从ultralytics引擎预测器模块导入基础预测器基类(提供通用推理流程:数据加载、预处理、模型推理)
from ultralytics.engine.predictor import BasePredictor
# 从ultralytics引擎结果模块导入Results类(结构化封装推理结果)
from ultralytics.engine.results import Results
# 从ultralytics工具模块导入:非极大值抑制(NMS)、通用操作函数(框缩放、格式转换)
from ultralytics.utils import nms, ops


class DetectionPredictor(BasePredictor):
    """
    基于BasePredictor扩展的YOLO目标检测专用预测器类
    该预测器针对目标检测任务定制,处理YOLO模型推理的专属需求:
    包括原始预测的NMS后处理、预测结果结构化封装、目标特征提取、框坐标缩放(模型输入→原始图像)等核心流程

    属性:
        args (namespace): 预测器配置参数命名空间(包含conf、iou、classes、max_det、agnostic_nms等NMS/推理参数)
        model (nn.Module): 用于推理的YOLO检测模型实例
        batch (list): 待处理的批次数据列表(包含图像路径、预处理后的图像张量、原始图像等)

    方法:
        postprocess: 对模型原始预测执行NMS后处理,转换为结构化Results对象(核心推理后处理)
        get_obj_feats: 从模型特征图中提取目标级特征(用于下游任务如特征匹配、检索)
        construct_results: 批量构建Results对象(遍历批次内所有样本)
        construct_result: 为单张图像构建Results对象(框坐标缩放、结构化封装)

    示例:
        # >>> from ultralytics.utils import ASSETS
        # >>> from ultralytics.models.yolo.detect import DetectionPredictor
        # >>> args = dict(model="yolo11n.pt", source=ASSETS)
        # >>> predictor = DetectionPredictor(overrides=args)
        # >>> predictor.predict_cli()  # 命令行模式推理
        # >>> results = predictor.predict("path/to/image.jpg")  # 编程模式推理
    """

    def postprocess(self, preds, img, orig_imgs, **kwargs):
        """
        对模型原始预测执行后处理(NMS+结果结构化),返回结构化Results对象列表
        核心逻辑:NMS过滤冗余框→格式转换→特征提取(可选)→构建Results对象→附加特征(可选)

        参数:
            preds (torch.Tensor): 模型原始预测张量(维度:[B, N, 4+1+NC],4=框坐标,1=置信度,NC=类别数)
            img (torch.Tensor): 预处理后的输入图像张量(模型输入格式,已缩放/归一化)
            orig_imgs (torch.Tensor | list): 预处理前的原始图像(张量/列表格式,RGB/BGR需适配)
            **kwargs (Any): 额外关键字参数(预留扩展)

        返回:
            (list[Results]): 结构化推理结果列表,每个元素对应单张图像的检测结果(含框、类别、置信度等)

        示例:
            # >>> predictor = DetectionPredictor(overrides=dict(model="yolo11n.pt"))
            # >>> results = predictor.predict("path/to/image.jpg")
            # >>> processed_results = predictor.postprocess(preds, img, orig_imgs)
        """
        # 判断是否需要保存目标特征:检测是否存在_feats属性(模型推理时提取的特征图)
        save_feats = getattr(self, "_feats", None) is not None
        # 执行NMS后处理(过滤冗余检测框):
        # - conf: 置信度阈值(过滤低置信度框)
        # - iou: NMS的IoU阈值(合并重叠框)
        # - classes: 指定仅检测的类别(None则检测所有类别)
        # - agnostic_nms: 跨类别NMS(单类别/agnostic模式下启用)
        # - max_det: 单图最大检测框数量
        # - nc: 类别数(0表示自动识别,非detect任务时用模型类别数)
        # - end2end: 适配端到端模型的输出格式
        # - rotated: 适配旋转框检测(OBB任务)
        # - return_idxs=save_feats: 需要提取特征时返回目标索引(用于特征映射)
        preds = nms.non_max_suppression(
            preds,
            self.args.conf,
            self.args.iou,
            self.args.classes,
            self.args.agnostic_nms,
            max_det=self.args.max_det,
            nc=0 if self.args.task == "detect" else len(self.model.names),
            end2end=getattr(self.model, "end2end", False),
            rotated=self.args.task == "obb",
            return_idxs=save_feats,
        )

        # 格式转换:若原始图像是张量(非列表),转换为NumPy批次并反转通道(BGR→RGB,适配OpenCV格式)
        if not isinstance(orig_imgs, list):
            orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]

        # 特征提取:需要保存特征时,从特征图提取目标级特征
        if save_feats:
            # 提取目标特征(按NMS返回的索引映射)
            obj_feats = self.get_obj_feats(self._feats, preds[1])
            # 分离NMS结果(preds[0]为检测框,preds[1]为目标索引)
            preds = preds[0]

        # 批量构建结构化Results对象
        results = self.construct_results(preds, img, orig_imgs, **kwargs)

        # 特征附加:将提取的目标特征绑定到Results对象
        if save_feats:
            for r, f in zip(results, obj_feats):
                r.feats = f

        return results

    def get_obj_feats(self, feat_maps, idxs):
        """
        从模型特征图中提取目标级特征(用于下游任务:特征匹配、检索、重识别等)
        核心逻辑:统一特征维度→拼接多尺度特征→按NMS索引提取目标特征

        参数:
            feat_maps (list[torch.Tensor]): 模型输出的多尺度特征图列表(如8x8、16x16、32x32)
            idxs (list[torch.Tensor]): 批次内每张图像的目标索引(NMS返回,映射特征图到检测目标)

        返回:
            (list[torch.Tensor]): 批次内每张图像的目标特征列表(空列表表示无检测目标)
        """
        # 延迟导入(避免推理时未使用特征提取的情况下加载冗余依赖)
        import torch

        # 找到所有特征图中最短的向量长度(统一特征维度,避免维度不匹配)
        s = min(x.shape[1] for x in feat_maps)
        # 多尺度特征拼接:
        # 1. permute(0,2,3,1): 特征图维度从[B,C,H,W]→[B,H,W,C](通道维度后置)
        # 2. reshape: 将通道维度拆分为[s, C/s],便于均值降维到统一长度s,[B,H,W,C]→[B,H*W,s,C/s]
        # 3. mean(dim=-1): 对拆分后的维度取均值,将所有特征向量统一为长度s,[B,H*W,s,C/s]→[B,H*W,s]
        # 4. cat(dim=1): 拼接多尺度特征(维度:[B, 总特征数, s]),总特征数即不同的尺度H*W的总数
        obj_feats = torch.cat(
            [x.permute(0, 2, 3, 1).reshape(x.shape[0], -1, s, x.shape[1] // s).mean(dim=-1) for x in feat_maps], dim=1
        )
        # 按索引提取每张图像的目标特征(无目标则返回空列表)
        return [feats[idx] if idx.shape[0] else [] for feats, idx in zip(obj_feats, idxs)]

    def construct_results(self, preds, img, orig_imgs):
        """
        批量构建Results对象(遍历批次内所有图像,调用construct_result处理单张图像)

        参数:
            preds (list[torch.Tensor]): 批次内每张图像的NMS后检测结果(张量维度:[N,6],N=检测框数)
            img (torch.Tensor): 预处理后的批次图像张量(模型输入格式)
            orig_imgs (list[np.ndarray]): 批次内原始图像列表(NumPy格式)

        返回:
            (list[Results]): 批次内每张图像的结构化Results对象列表
        """
        return [
            self.construct_result(pred, img, orig_img, img_path)
            for pred, orig_img, img_path in zip(preds, orig_imgs, self.batch[0])
        ]

    def construct_result(self, pred, img, orig_img, img_path):
        """
        为单张图像构建结构化Results对象(核心:框坐标缩放+结果封装)
        将模型输入尺寸的框坐标缩放到原始图像尺寸,确保坐标与原始图像匹配

        参数:
            pred (torch.Tensor): 单张图像的NMS后检测结果(维度:[N,6],6=xyxy+conf+cls)
            img (torch.Tensor): 预处理后的图像张量(模型输入格式)
            orig_img (np.ndarray): 原始图像(未预处理,NumPy格式)
            img_path (str): 原始图像文件路径(用于Results对象溯源)

        返回:
            (Results): 结构化Results对象,包含:
                - orig_img: 原始图像
                - path: 图像路径
                - names: 模型类别名映射
                - boxes: 缩放后的检测框(xyxy+conf+cls)
        """
        # 框坐标缩放:从模型输入尺寸→原始图像尺寸(消除预处理的缩放/填充影响)
        pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape)
        # 构建并返回Results对象(封装所有推理结果)
        return Results(orig_img, path=img_path, names=self.model.names, boxes=pred[:, :6])

适配YOLO检测的核心特性

特性 实现方式
多场景NMS适配 postprocess中NMS支持普通检测/旋转框、类别无关、end2end模型、类别过滤
目标特征提取 get_obj_feats统一多尺度特征维度,按预测框索引提取目标特征并绑定到结果
预测框精准缩放 construct_result调用scale_boxes自动适配模型输入/原始图像尺寸差异
结果标准化封装 统一使用Results对象封装结果,包含图像、路径、类别名、检测框、特征等
批量/单图兼容 construct_results遍历批量数据,复用单图构造逻辑,保证批次一致性

工程化核心优化

优化点 实现方式
按需特征提取 通过save_feats标记控制特征提取流程,不影响常规预测性能
维度兼容处理 无目标时返回空列表,避免张量维度错误;自动转换原始图像的张量/列表格式
代码冗余减少 批量结果构造复用单图逻辑,NMS参数复用预测器配置,降低代码重复
通道顺序适配 原始图像张量转numpy时执行[...,::-1],保证RGB通道顺序匹配

扩展与易用性能力

扩展项 用途
预留kwargs参数 postprocess**kwargs为后续功能扩展(如自定义后处理)预留接口
特征绑定到结果 提取的目标特征绑定到Results.feats,支持下游任务(如特征匹配)
统一结果对象 Results对象提供可视化、保存、解析等通用方法,降低下游使用成本

关键注意事项

  1. 模型类型匹配 :需确保model为检测模型(如yolo11n.pt),若传入分类/分割模型,NMS后处理会因预测格式不匹配报错;
  2. 特征提取启用条件 :需在模型推理时保存_feats特征图(如自定义模型前向传播时赋值self._feats),否则get_obj_feats不会执行;
  3. 旋转框检测配置 :检测旋转框(OBB)时需设置args.task="obb",否则NMS会按普通框处理,导致旋转框过滤错误;
  4. 图像通道顺序:原始图像需为RGB通道,若输入为BGR(如OpenCV读取),需手动转换,否则可视化结果颜色异常;
  5. 批量结果一致性 :确保predsorig_imgsimg_path的长度一致,避免批量结果构造时出现索引错位;
  6. 置信度阈值调整:低置信度阈值(如0.001)会增加检测框数量,可能导致NMS耗时增加,需根据场景平衡召回率与速度。

总结

详细介绍了 Ultralytics 框架中继承自 BaseValidator 的 YOLO 目标检测专用预测器。

相关推荐
wfeqhfxz25887827 小时前
YOLOv10n-GoldYolo:多旋翼无人机目标检测与识别实战指南_1
yolo·目标检测·无人机
wfeqhfxz25887827 小时前
基于YOLOX-S的水下彩色球体目标检测与识别_8xb8-300e_coco
人工智能·目标检测·目标跟踪
Dingdangcat867 小时前
YOLO12-ADown改进算法:两轮车辆行驶环境中的多目标检测与识别_1
算法·目标检测·目标跟踪
Coding茶水间19 小时前
基于深度学习的反光衣检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
零小陈上(shouhou6668889)1 天前
YOLOv8+PyQt5车辆类型检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)
yolo
AI街潜水的八角1 天前
基于YOLOv12农作物检测系统1:农作物检测数据集说明(含下载链接)
yolo
ʜᴇɴʀʏ1 天前
论文阅读 SAM 3: Segment Anything with Concepts
论文阅读·人工智能·目标检测·计算机视觉·目标跟踪
AAD555888991 天前
农业机械检测与识别46基于YOLOv8-SPPF-LSKA的Supperseeder和拖拉机目标检测系统_1
yolo·目标检测·目标跟踪
夏天是冰红茶1 天前
小目标检测:LAM-YOLO详解
人工智能·yolo·目标检测