首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >异常感知Anomaly-Aware YOLO:仅1%计算开销,实现红外弱小目标检出率飙升50%

异常感知Anomaly-Aware YOLO:仅1%计算开销,实现红外弱小目标检出率飙升50%

原创
作者头像
AI小怪兽
发布2026-01-14 08:58:34
发布2026-01-14 08:58:34
530
举报
文章被收录于专栏:毕业设计毕业设计YOLO大作战

🔍 核心方法创新

  1. 统计异常检验与目标检测的结合
    • 论文的核心创新在于将统计异常检测的概念融入YOLO框架。它将红外小目标检测问题,转化为在特征空间中寻找与背景模型显著偏离的统计异常点的问题。
    • 具体而言,该方法在YOLO的检测头中引入了统计假设检验。它将背景特征分布视为零假设(H₀),而小目标则表现为可以拒绝零假设的统计异常
  2. 异常感知检测头(AADH)的设计
    • 论文设计了Anomaly-Aware Detection Head (AADH) 来替代YOLO原有的检测头。
    • AADH在潜在特征空间中对背景特征进行指数分布建模。这基于最大熵原理 ,是所需假设最少的分布选择,符合背景特征聚集于零附近的特点。
    • 通过计算观测特征与背景模型的偏离程度,AADH生成一个新的、更具解释性的"物体性"分数。这个分数直接反映了目标是背景异常的可能性,能更有效地抑制背景杂波引起的误报。

博主简介

AI小怪兽 | 计算机视觉布道者 | 视觉检测领域创新者

深耕计算机视觉与深度学习领域,专注于视觉检测前沿技术的探索与突破。长期致力于YOLO系列算法的结构性创新、性能极限优化与工业级落地实践,旨在打通从学术研究到产业应用的最后一公里。

🚀 核心专长与技术创新

  • YOLO算法结构性创新:于CSDN平台原创发布《YOLOv13魔术师》、《YOLOv12魔术师》等全系列深度专栏。系统性提出并开源了多项原创自研模块,在模型轻量化设计、多维度注意力机制融合、特征金字塔重构等关键方向完成了一系列突破性实践,为行业提供了具备高参考价值的技术路径与完整解决方案。
  • 技术生态建设与知识传播:独立运营 “计算机视觉大作战” 公众号(粉丝1.6万),成功构建高质量的技术交流社群。致力于将复杂算法转化为通俗易懂的解读与可复现的工程代码,显著降低了计算机视觉的技术入门门槛。

🏆 行业影响力与商业实践

  • 荣获腾讯云年度影响力作者创作之星奖项,内容质量与专业性获行业权威平台认证。
  • 全网累计拥有 7万+ 垂直领域技术受众,专栏文章总阅读量突破百万,在目标检测领域形成了广泛的学术与工业影响力。
  • 具备丰富的企业级项目交付经验,曾为工业视觉检测、智慧城市安防等多个关键领域提供定制化的算法模型与解决方案,驱动业务智能化升级。

💡 未来方向与使命

秉持 “让每一行代码都有温度” 的技术理念,未来将持续聚焦于实时检测、语义分割及工业缺陷检测的商业化闭环等核心方向。愿与业界同仁协同创新,共同推动技术边界,以坚实的技术能力赋能实体经济与行业变革。

原理介绍

论文:https://arxiv.org/pdf/2510.04741

摘要:红外小目标检测(IRSTD)是国防应用中的一项挑战性任务,在复杂背景和微小目标尺寸的影响下,传统目标检测器通常会产生大量误报警。为克服这一局限性,我们提出了异常感知YOLO(AA-YOLO),该方法将统计异常检测测试集成到检测头中。通过将小目标视为背景中的异常模式,AA-YOLO能有效控制误报率。我们的方法不仅在多个IRSTD基准测试中取得了具有竞争力的性能,更在训练数据有限、存在噪声和领域偏移的场景下展现出卓越的鲁棒性。此外,由于仅修改了检测头,我们的设计具有高度通用性,已成功应用于包括轻量级模型在内的各种YOLO主干网络,在集成到实例分割YOLO时也展现出良好效果。这种多功能性使得AA-YOLO成为资源受限实际部署场景中的理想解决方案。

伪代码如下:

代码语言:txt
复制
# ============================================
# Anomaly-Aware YOLO: 轻量且鲁棒的红外小目标检测
# 核心思想:融合异常感知与轻量YOLO架构,针对红外小目标优化
# ============================================

# ----------------------------
# 1. 模型架构定义
# ----------------------------
class AnomalyAwareYOLO(nn.Module):
    def __init__(self, config):
        super().__init__()
        
        # 1.1 轻量化主干网络 (例如: CSPDarknet-Tiny, MobileNetV3)
        self.backbone = build_lightweight_backbone(config)
        
        # 1.2 多尺度特征金字塔 (Neck)
        # 使用FPN或PANet结构,融合浅层高分辨率特征和深层语义特征
        self.neck = build_fpn(config)
        
        # 1.3 异常感知模块 (核心创新)
        # 利用局部对比度、纹理差异等提取红外小目标的异常特征
        self.anomaly_module = AnomalyAwareModule(
            in_channels=config.neck_channels,
            attention_type='local_contrast',  # 局部对比度注意力
            use_channel_attention=True
        )
        
        # 1.4 检测头 (轻量化设计)
        self.detection_head = LightHead(
            in_channels=config.neck_channels,
            num_classes=config.num_classes,  # 通常为1(目标/背景)
            anchors=config.anchors  # 针对小目标优化的锚框尺寸
        )
        
        # 1.5 目标重加权模块 (可选)
        # 对小目标预测损失进行加权
        self.loss_reweight = LossReweighting()
    
    def forward(self, x):
        # 1. 特征提取
        features = self.backbone(x)  # 多尺度特征列表 [C3, C4, C5]
        
        # 2. 特征融合
        fused_features = self.neck(features)
        
        # 3. 异常感知增强
        # 增强小目标的局部对比度特征,抑制复杂背景
        enhanced_features = self.anomaly_module(fused_features)
        
        # 4. 检测预测
        predictions = self.detection_head(enhanced_features)
        
        return predictions

# ----------------------------
# 2. 异常感知模块
# ----------------------------
class AnomalyAwareModule(nn.Module):
    def __init__(self, in_channels, attention_type='local_contrast'):
        super().__init__()
        
        # 2.1 局部对比度计算
        # 通过局部邻域差分增强小目标
        self.local_contrast = LocalContrastLayer(kernel_size=3)
        
        # 2.2 通道注意力 (SE模块变体)
        self.channel_att = nn.Sequential(
            nn.AdaptiveAvgPool2d(1),
            nn.Conv2d(in_channels, in_channels // 4, 1),
            nn.ReLU(),
            nn.Conv2d(in_channels // 4, in_channels, 1),
            nn.Sigmoid()
        )
        
        # 2.3 空间注意力 (引导关注小目标区域)
        self.spatial_att = nn.Sequential(
            nn.Conv2d(in_channels, 1, kernel_size=3, padding=1),
            nn.Sigmoid()
        )
        
        # 2.4 可学习的温度参数 (用于异常评分)
        self.temperature = nn.Parameter(torch.ones(1) * 0.5)
    
    def forward(self, x):
        # 计算局部对比度特征图
        contrast_map = self.local_contrast(x)
        
        # 通道注意力加权
        channel_weight = self.channel_att(x)
        x_channel = x * channel_weight
        
        # 空间注意力加权 (结合对比度信息)
        spatial_input = torch.cat([x_channel, contrast_map], dim=1)
        spatial_weight = self.spatial_att(spatial_input)
        x_spatial = x_channel * spatial_weight
        
        # 异常评分 (用于后续损失计算)
        anomaly_score = self.compute_anomaly_score(
            contrast_map, 
            spatial_weight,
            temperature=self.temperature
        )
        
        return x_spatial, anomaly_score
    
    def compute_anomaly_score(self, contrast_map, spatial_weight, temperature):
        # 结合对比度和空间权重计算异常分数
        score = torch.sigmoid(
            (contrast_map.mean(dim=1, keepdim=True) + 
             spatial_weight) / (2 * temperature)
        )
        return score

# ----------------------------
# 3. 局部对比度层
# ----------------------------
class LocalContrastLayer(nn.Module):
    """计算局部对比度:目标像素与周围邻域的差异"""
    def __init__(self, kernel_size=3):
        super().__init__()
        self.kernel_size = kernel_size
        padding = kernel_size // 2
        self.avg_pool = nn.AvgPool2d(kernel_size, stride=1, padding=padding)
    
    def forward(self, x):
        # 局部均值
        local_mean = self.avg_pool(x)
        # 局部对比度 (绝对值差异)
        contrast = torch.abs(x - local_mean)
        return contrast

# ----------------------------
# 4. 损失函数 (针对小目标优化)
# ----------------------------
class AnomalyAwareLoss(nn.Module):
    def __init__(self, config):
        super().__init__()
        # 4.1 基础YOLO损失 (置信度、类别、框回归)
        self.base_loss = YOLOLoss(config)
        
        # 4.2 异常感知损失 (鼓励模型关注异常区域)
        self.anomaly_loss_weight = config.anomaly_loss_weight
        
        # 4.3 小目标重加权
        # 根据目标尺寸调整损失权重
        self.small_target_weight = config.small_target_weight
    
    def forward(self, predictions, targets, anomaly_scores):
        # 计算基础检测损失
        base_loss_dict = self.base_loss(predictions, targets)
        
        # 异常感知损失 (增强小目标区域的响应)
        anomaly_loss = self.compute_anomaly_loss(
            predictions, 
            targets, 
            anomaly_scores
        )
        
        # 小目标重加权
        reweighted_loss = self.reweight_by_target_size(
            base_loss_dict['box_loss'],
            targets
        )
        
        # 总损失
        total_loss = (
            base_loss_dict['cls_loss'] +
            reweighted_loss +
            base_loss_dict['obj_loss'] +
            self.anomaly_loss_weight * anomaly_loss
        )
        
        return total_loss
    
    def compute_anomaly_loss(self, predictions, targets, anomaly_scores):
        """鼓励模型在异常区域预测高置信度"""
        # 生成目标区域的二值掩码
        target_mask = generate_target_mask(targets, predictions.shape)
        
        # 对齐异常分数与预测
        aligned_scores = align_anomaly_scores(anomaly_scores, predictions)
        
        # 损失:异常区域应有高置信度预测
        loss = F.binary_cross_entropy(
            predictions[..., 4:5],  # 目标置信度
            target_mask * aligned_scores,
            reduction='mean'
        )
        return loss
    
    def reweight_by_target_size(self, box_loss, targets):
        """根据目标尺寸重新加权损失"""
        # 计算每个目标的面积
        target_areas = compute_target_areas(targets)
        
        # 小目标获得更高权重 (面积越小,权重越大)
        weights = torch.exp(-target_areas / self.small_target_weight)
        
        # 应用加权
        reweighted_loss = (box_loss * weights).mean()
        return reweighted_loss

# ----------------------------
# 5. 训练流程
# ----------------------------
def train_anomaly_aware_yolo(model, dataloader, config):
    optimizer = torch.optim.AdamW(model.parameters(), lr=config.lr)
    criterion = AnomalyAwareLoss(config)
    
    for epoch in range(config.epochs):
        for batch_idx, (images, targets) in enumerate(dataloader):
            # 前向传播 (返回预测和异常分数)
            predictions, anomaly_scores = model(images)
            
            # 计算损失
            loss = criterion(predictions, targets, anomaly_scores)
            
            # 反向传播
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            
            # 日志记录
            log_training_status(loss, anomaly_scores)
        
        # 每个epoch后评估
        if epoch % config.eval_interval == 0:
            evaluate_small_target_detection(model, val_loader)

# ----------------------------
# 6. 推理流程 (专注小目标)
# ----------------------------
def detect_infrared_small_targets(model, infrared_image):
    # 预处理 (归一化、调整尺寸)
    processed_img = preprocess_infrared(infrared_image)
    
    # 模型推理
    with torch.no_grad():
        predictions, anomaly_scores = model(processed_img)
    
    # 后处理 (针对小目标优化)
    # 1. 使用较低的置信度阈值 (小目标信号弱)
    # 2. 基于异常分数过滤误检
    # 3. 非极大值抑制 (NMS) 使用较小的IoU阈值
    
    detections = postprocess_for_small_targets(
        predictions,
        anomaly_scores,
        conf_thresh=0.1,  # 低阈值
        iou_thresh=0.3,   # 小IoU阈值
        anomaly_thresh=0.5
    )
    
    return detections, anomaly_scores

# ----------------------------
# 7. 辅助函数
# ----------------------------
def generate_target_mask(targets, pred_shape):
    """生成目标区域的二值掩码"""
    mask = torch.zeros(pred_shape[:3])
    for i, target in enumerate(targets):
        bbox = target['bbox']  # [x, y, w, h]
        # 将边界框转换为掩码
        mask[i, bbox[1]:bbox[3], bbox[0]:bbox[2]] = 1
    return mask

def compute_target_areas(targets):
    """计算目标面积 (用于损失重加权)"""
    areas = []
    for target in targets:
        w, h = target['bbox'][2], target['bbox'][3]
        areas.append(w * h)
    return torch.tensor(areas)

# ============================================
# 主要优点总结 (基于标题推断):
# 1. 轻量化 (Frugal): 使用轻量骨干网络和高效模块
# 2. 异常感知 (Anomaly-Aware): 专门增强小目标的局部异常特征
# 3. 红外小目标优化: 低对比度、小尺寸、复杂背景
# ============================================

1. 引言

红外小目标检测(IRSTD)是国防领域中一项极具挑战性却又至关重要的任务,其特点在于目标尺寸微小、背景复杂以及学习条件困难。为了应对这些挑战,基于深度学习的IRSTD方法被提出,并实现了最先进的性能。这些方法利用了诸如密集嵌套架构[1]或注意力机制[2, 3]等技术,以减轻小目标上的信息丢失并减少与背景元素的混淆。

然而,当前最先进的IRSTD方法因其对分割网络的依赖而面临局限性。一个主要问题是,其评估结果深受主观标注的影响,如图1所示。具体来说,标注者可能标注整个车辆,或者用高红外响应区域来突出最显著的部分,这会导致矛盾的训练信号。这些不一致性会显著影响训练过程和像素级评估指标。此外,基于分割的方法常常存在以下问题:i) 在二值化特征图时出现目标碎片;ii) 邻近问题,即两个相邻目标被错误检测为一个目标。这些问题影响了计数准确性,尤其是在民用安全等关键领域。

诸如YOLO[4]之类的目标检测算法通过边界框回归显式定位目标,并具有更快的推理时间,从而有助于降低此风险。尽管从像素级标注转向目标级标注时,标注主观性的影响有所减小,但对于小目标而言,它仍然不可忽略。实际上,文献[5]强调,即使是微小的定位误差也会严重影响小目标的交并比指标,损害YOLO网络的训练和评估。近期的方法[6, 7]通过减少IoU损失对小目标的影响并提出替代损失函数来解决这些问题。这些方法虽然有效,但最先进的方法通常会导致复杂、针对特定任务的模型,这些模型可能无法很好地适应资源有限的现实场景。

在本文中,我们倡导一个互补的方向:将小型红外目标检测为相对于背景的统计异常。通过将小目标视为背景中出乎意料的模式,我们采用了一个统计假设检验框架,其中背景分布被建模为零假设。重要的是,该检验在潜在空间中进行,并且对背景结构的要求假设极少。我们依赖于一种基于最大熵原则[9]的实用指数建模,以推导出一个可解释的"物体性"分数,该分数能严格控制误报警。

与传统目标检测器不同,我们的方法显式地建模了潜在空间中小目标的意外性,从而能够同时实现 i) 有效的异常识别和 ii) 对误报警的显式控制。我们的方法在以下不同类型的低资源条件下均实现了强大的性能:

  • 数据低资源性:即使在仅使用10%的数据进行训练时,我们的方法在SIRST数据集[8]上仍能保持至少90%的完整性能。
  • 计算低资源性:即使使用更轻量的网络,我们的方法也与最先进技术具有竞争力,使其适合部署在资源受限的设备上。
  • 通用设计:我们的方法易于实现,仅需对检测头进行简单修改。这使得我们的方法具有高度的适应性和用户友好性。

基于这些原因,我们的异常感知YOLO(AA-YOLO) 对于计算和数据资源有限的实际应用场景而言,是一个引人注目的解决方案。我们的主要贡献可总结如下:

  1. 我们提出了一种简单而有效的YOLO检测头,称为异常感知检测头(AADH),它集成了统计异常检验以改进IRSTD。我们的方法提供了一种由异常信息驱动的物体性分数,该分数能根据经验抑制背景。
  2. 通过将我们的AADH模块添加到几个传统的YOLO主干网络(尤其是轻量级网络)中,我们缩小了与最先进方法之间的性能差距。值得注意的是,AA-YOLOv7t在著名的IRSTD基准测试中取得了最先进的结果,而其训练参数数量比EFLNet少了六倍。在将其集成到实例分割YOLO中时,它也给出了有希望的结果。
  3. AADH显著提高了在低资源设置、迁移学习、噪声数据推理和实际操作环境下的鲁棒性。
  4. 最后,我们的AADH通过将所有背景值约束为零,方便了检测阈值的选择。

2. 相关工作

2.1. IRSTD 方法

IRSTD的特殊性在于目标的尺寸极其微小且对比度低,这使得在复杂背景下检测它们变得尤为困难。研究人员已经开发了各种基于深度学习的策略,其性能超越了传统的IRSTD方法。这些方法主要分为两大类。

分割方法。 分割网络因其固有的提取细粒度特征的能力,在IRSTD方法中特别受欢迎。为了进一步增强小目标检测并减少与背景杂波的混淆,文献[10, 2, 3]在其骨干网络中引入了注意力机制。具体来说,RDIAN [11]集成了基于卷积的多向引导注意力机制,以增强深层中的小目标特征;而SCTransNet和DATransNet则依赖近年来的Transformer骨干网络来改善对全局场景的理解。深度神经网络的一个关键问题在于其池化层,这会减少小目标的信息量。为了缓解这个问题,文献[1]提出了DNANet,这是一种密集嵌套的U型骨干网络,在广泛使用的IRSTD基准测试中带来了出色的性能。其他方法试图通过引入替代损失函数来解决基于IoU的指标对于小目标的局限性。例如,MSHNet [12]提出了一种对位置和尺度敏感的损失函数,当与简单的U-Net架构结合时,能显著提升性能。

然而,这些方法对于二值化分割图时产生的碎片化问题并不鲁棒,这会扭曲目标计数。此外,它们也容易产生邻接错误,即两个相邻目标被错误地合并。这促使人们探索使用带有边界框回归的目标检测器来进行IRSTD。

目标检测方法。 目标检测涉及检测图像中的感兴趣目标并使用边界框识别其位置。针对此任务已经提出了几种深度学习方法,包括流行的YOLO框架[4]。虽然YOLO检测器在各种应用中实现了出色的性能且推理时间短,但由于两个关键因素,它们在检测小目标时遇到困难:(1) 目标与背景样本之间的类别不平衡;(2) 对于小目标的边界框定位误差容忍度低,因为即使是微小的偏移也可能导致IoU大幅下降。为了解决这些问题,研究者引入了专门的损失函数[6]来增加少数样本的相对重要性。此外,文献[7]通过其尺度动态损失,提出减少小目标损失中IoU度量的权重。EFLNet [6] 的作者更进一步,如文献[13]所提议的,用归一化Wasserstein距离取代了基于IoU的损失。EFLNet在IRSTD基准测试上的表现尤其引人注目,它超越了基于分割的最先进方法,并为基于YOLO网络的IRSTD设立了新的性能标准。

值得注意的是,现有论文通常只部分解决了低资源性的各个方面。虽然已经提出了一些用于IRSTD的轻量级检测器[14, 15],但它们在低资源设置下的鲁棒性却很少被评估。本文旨在通过引入一种简单、资源高效且多功能的方法来弥补这些差距,该方法不仅在IRSTD上实现了最先进的性能,而且还展现了鲁棒性。

2.2. 异常检测

目标的小尺寸、缺乏结构性和稀缺性使其自然成为异常检测的候选对象。实际上,异常检测旨在识别偏离标准且仅有有限样本可用的罕见事件。根据文献[16],这些方法可分为四个主要类别:基于距离的方法(例如,隔离森林或k近邻)、基于重建的方法单分类方法概率方法。基于重建的方法将难以准确重建的输入检测为异常[17, 18]。单分类方法,例如Deep SVDD [19],仅使用正常样本进行训练,并学习围绕它们的紧凑表示或边界,将异常值标记为异常。概率方法则旨在对正常数据的概率密度函数进行建模,将似然度低的样本识别为异常。一个著名的例子是广泛用于高光谱异常检测的Reed-Xiaoli算法[20]。请注意,假设检验也属于这一类别。

尽管潜力巨大,但将异常检测集成到用于IRSTD的端到端监督学习框架中的工作仍然有限。例如,文献[21]将小目标视为红外背景中的"噪声",将检测问题重新定义为去噪任务。类似地,文献[22]使用VAEs以无监督方式对背景进行建模,然后将监督检测算法应用于得到的差异图像。尽管这些方法前景看好,但我们认为,在监督检测流程中显式地集成异常概念以指导特征提取,可以提高鲁棒性和准确性,尤其是在传统方法经常失效的具有挑战性的场景中。

3. 提出的方法

我们的目标是通过将一种基于异常的先验知识引入到YOLO型网络中,来改进小目标检测,尤其是在具有挑战性的条件下。为此,我们训练网络不是去估计目标与非目标数据点之间的决策边界(这是检测网络中的传统做法),而是去识别与背景模型的偏差。这是通过使用概率异常检测方法约束特征提取来实现的。将这种统计标准集成到YOLO网络的训练循环中,可确保在收敛后,只有目标会违反学习到的背景模型。

3.1. 统计异常检验的公式化

我们的贡献在于使用多个拒绝零假设 H₀ 的统计检验,重新估计YOLO检测头为每个边界框预测的物体性分数。为此,我们考虑来自维度为 H × W × C 的最终特征图的 N 个体素,其中 H、W 和 C 分别是特征图的高度、宽度和通道数。每个体素 vₖ ∈ R¹ˣ¹ˣᶜ 由一个 C 维随机变量 Xₖ = (Xₖ,₁, ..., Xₖ,ᶜ) 表示,其中 Xₖ,₁, ..., Xₖ,ᶜ 被假定为独立同分布。请注意,跨特征通道的独立同分布假设是一种简化,并不严格反映CNN学习到的依赖关系。然而,在我们的上下文中,此假设并非旨在描述特征激活的确切生成过程,而是为异常检测提供一个易于处理且可解释的零假设。

根据零假设 H₀(待拒绝),给定的体素属于背景类别。我们这里的重点是控制I类错误率,即当 H₀ 实际上为真时拒绝它的概率。当执行多重假设检验时,这可以表述为控制族错误率。设 θ ∈ R∗ 为拒绝阈值,F 为检验函数,μ 为一个度量。置信水平 α ∈ R∗ 下的 FWER 定义为: P_H₀ (∃k ∈ [1, N], F(μ(Xₖ)) < θ) < α. (1)

为了计算 FWER,我们将 F 定义为 p 值函数。给定一个观测值 xₖ,p 值表示为: F(μ(xₖ)) = P_H₀ (μ(Xₖ) ≥ μ(xₖ)). (2)

现在让我们聚焦于我们的问题,以明确定义 H₀ 和 F。首先,请注意我们的目标并非完美拟合背景体素的潜在分布,而是选择一个能够实现有效异常区分的、合理的零假设,这对于我们的操作目标来说已经足够。由于动态纹理,对红外背景分布进行建模可能具有挑战性。然而,我们的异常检验在潜在空间中进行,在该空间中,无论输入图像多么复杂,经过 ReLU 激活后,背景体素特征倾向于聚集在零附近。在这个潜在空间中,假设指数分布是充分合理的,因为它是具有固定均值的非负变量中最大熵的分布。因此,根据最大熵原理 [9],这使其成为偏差最小的选择,仅引入了已知的约束(此处为非负性和经验均值)。请注意,这一假设得到了实践验证,因为替代假设(例如高斯分布)会导致较差的检测性能(见第5节我们的消融研究),这表明指数假设更符合潜在特征的结构。

因此,我们将零假设 H₀ 定义为:假设每个体素遵循一个参数为 Λ = [λ₁, ..., λᶜ]ᵀ 的 C 维指数分布 E。

然后,可以考虑两种在指数假设下允许闭式分布的聚合度量 μ:

  1. μ₁(Xₖ) = min{Xₖ,₁, ..., Xₖ,ᶜ} – 在这种情况下,通道值的最小值遵循参数为 λ_μ₁ = Σᵢ₌₁ᶜ λᵢ 的指数分布。检验函数 F 简化为: F(μ₁(xₖ)) = e^(-λ_μ₁ · min{xₖ,₁, ..., xₖ,ᶜ}). (3) 在实践中,每个 λᵢ 被估计为特征图中第 i 个通道空间维度上平均激活值的倒数。
  2. μ₂(Xₖ) = Σᵢ₌₁ᶜ Xₖ,ᵢ – 假设所有 λᵢ 都等于 λ_μ₂,则该和遵循形状参数等于求和变量数 (C)、速率参数等于公共指数分布参数 λ_μ₂ 的埃尔朗分布,得出: F(μ₂(xₖ)) = Γ(C, λ_μ₂ Σᵢ₌₁ᶜ xₖ,ᵢ) / Γ(C), (4) 其中 Γ(·) 和 Γ(·,·) 分别是 Gamma 函数和上不完全 Gamma 函数。此处,λ_μ₂ 计算为特征图中所有体素平均激活值的倒数。

我们第5节详述的消融研究表明,度量 μ₂(敏感)优于 μ₁(保守)。这种优势可能源于 μ₁ 的一个关键局限性,它隐含地假设所有通道必须同时表现出类似目标的行为,即一旦一个通道表现出背景样的 xₖ,ᵢ 值,就没有通道 i 能表现出目标样的值。这种假设与跨通道提取多样化和互补特征的目标相冲突,可能会降低表示的总体判别力。因此,我们在本研究的剩余部分采用 μ₂。我们检验函数的形状显示在图2中。我们以显著性 [23] 的形式报告分数,即 -ln(F(μ(xₖ))),以增强可解释性。据我们所知,在这种检测设置中使用指数假设尚未被探索过。其关键优势在于能够明确地将背景激活推向零,从而简化现实条件下检测阈值的选择。

3.2. 在 YOLO 框架内的集成

架构概述。 整体架构如图3所示。输入图像首先由标准的 YOLO 网络(如 YOLOv7 或 YOLOv9)处理。为了确保我们方法的通用性,我们仅修改 YOLO 网络的检测头。具体来说,我们将物体性分数的预测与边界框坐标和类别分数的预测解耦。然后,我们使用我们的异常感知检测头(AADH)重新估计物体性分数,该检测头集成了提出的统计异常检验。此过程产生范围在 0 到 1 之间的新物体性分数,现在反映了相对于学习到的背景分布的异常概念。包括 AADH 在内的整个网络,使用均方误差(MSE)损失对物体性分数进行端到端训练。我们将得到的架构称为 AA-YOLO(异常感知 YOLO)。当指定使用的主干网络时,例如 YOLOv7,该网络被称为 AA-YOLOv7。

异常感知检测头。 如图3所示,AADH 由三个主要组件组成。首先,一个空间滤波块旨在捕获并聚集每个预测边界框中心体素周围的相关空间上下文。该块包括两个卷积核大小为 3×3 的卷积层,每个卷积层后接一个批量归一化层和 ReLU 激活。输出是一个 C 通道的特征图,随后该特征图进行统计检验 -ln(F_μ₂)(其中 F_μ₂ 由公式 (4) 给出)。函数 F_μ₂ 的行为(参见图2)突显了 C 的选择会影响 F 的锐度。我们的消融研究建议设置 C = 8 以获得最佳检测性能。

为了确保统计检验的输出分数落在 0 和 1 之间,我们采用了一个缩放且零中心化的 sigmoid 激活函数,由参数 α 参数化,它能有效处理输出分数的不对称性。该激活函数定义为 σ_α(x) = 2 / (1 + e^(-αx)) - 1。鉴于我们的统计检验产生的分数增长缓慢(几乎线性,如图2所示)并且对于目标达到特别高的值,较小的 α(低于 1)有助于拉伸 sigmoid 曲线,使其能更好地捕捉我们输出分数的细微差别。根据经验,我们在消融研究中发现,设置 α = 0.001 能带来最佳性能,因为它提供了敏感度和特异性之间的合适权衡。

4. 实验与结果

4.1. 实验设置

数据集。 为评估我们的方法,我们依赖两个广泛采用的红外小目标检测基准:SIRST 数据集 [8] 和 IRSTD-1k 数据集 [24]。SIRST 数据集是最早公开的真实图像红外小目标数据集之一,是文献中常用的参考。它包含 427 张分辨率为 256×256 像素的单光谱红外图像。为了在低资源学习设置中评估我们的方法,我们在 SIRST 数据集的一个包含 25 张图像(占数据集总量不到 10%)的子集上进行训练。为确保结果独立于训练集,我们随机选择了三个互不重叠的 25 张图像集合并报告这些集合的平均结果。除了 SIRST,我们还考虑了具有挑战性的 IRSTD-1k 数据集,这是一个最近发布的基准,提供了更大的 1000 张图像集合,分辨率更高,为 512×512 像素。两个数据集均按 60:20:20 的比例划分为训练集、验证集和测试集,我们分别使用 [8] 为 SIRST 和 [6] 为 IRSTD-1k 提供的划分。为满足 YOLO 网络的输入尺寸要求,所有图像均使用双三次插值上采样至 640×640。

基线模型。 我们使用多种不同尺寸的基于 YOLO 的架构来评估我们的方法,包括 YOLOv7 及其轻量版(如 YOLOv7-tiny 和 YOLOv9-tiny)。我们还将我们的方法与文献 [7] 提出的损失和模块相结合。我们通过将 AADH 集成到一个标准的实例分割网络(即 YOLOv5-seg)中,进一步探索了我们方法在检测任务之外的适用性。我们不仅将我们的方法与不带 AADH 的标准 YOLO 基线进行比较,还与先进的 SOTA 方法进行比较,包括基于分割的方法(如 DNANet [1], AGPCNet [10], SCTransNet [2], SIRST-5K [25], MSHNet [12], DATransNet [3])和基于 YOLO 的检测器(如 EFLNet [6] 和 YOLO+PConv+SD [7])。所有 YOLO 基线均使用 Nvidia V100 或 A100 GPU 从头开始训练 600 个周期,使用 SGD 优化器,批量大小为 16。所有方法的额外训练细节在附录 C 中报告。请注意,我们的比较主要集中在 SOTA 的基于深度学习的 IRSTD 方法,因为传统方法已被超越 [1]。

评估指标。 我们的评估依赖于标准的目标级指标,即 F1 分数和平均精度(AP),即精确率-召回率曲线下的面积。为确定真阳性,我们采用宽松标准:如果检测到的目标与真实标注的 IoU 至少为 5%,则被视为真阳性。使用此低阈值是为了避免在标注存在主观性时对结果造成不公,如第 1 节所述。我们还提供了 APs 指标,它计算非常小目标(即表面积小于 5×5 像素的目标)的 AP。我们额外报告了实例分割方法的 IoU,可与附录 A 中报告的 SOTA 分割 IoU 进行比较。最后,为了更深入地理解方法的敏感性和检测能力,我们在附录 A 中提供了它们的精确率、召回率和每图像误报警率。注意,对于分割方法,我们使用 [1] 提供的代码(采用形态学操作符)将预测的分割图转换为目标级预测。

4.2. 在两个 IRSTD 基准测试上的新 SOTA 结果

定量结果。 表 1 表明,我们的 AADH 模块在 SIRST 和 IRSTD-1k 数据集上,无论编码器类型、训练参数量(在表 4 中提供)或初始性能水平如何,都能持续改进(仅有个别例外)并统一各种 YOLO 基线的目标级性能。例如,我们最小的主干网络 YOLOv9t 在集成 AADH 后,在 SIRST 数据集上的 F1 分数提高了 2.9%,在 IRSTD-1k 数据集上的 APs 提高了 4.0%。与 SOTA 方法相比,我们的方法 i) 优于基于分割的方法,ii) 受益于 [7] 提出的方法,并且 iii) 与 EFLNet 具有竞争力。值得注意的是,我们性能最佳的配置 AA-YOLOv7t,在 IRSTD-1k 上的 APs 比 EFLNet 提高了 1.1%,同时训练参数少了六倍且设计精简。

最后但同样重要的是,AA-YOLOv5-seg 获得的结果尤其令人鼓舞,因为它在 SIRST 数据集上与 SOTA 分割方法表现相当,达到了相似的目标级和像素级指标。尽管它在 IRSTD-1k 的目标级指标上略逊于最佳分割方法,但在 IoU 方面显著优于它们(优势超过 4%,如表 2 所示)。值得注意的是,我们的 AADH 显著增强了 YOLOv5-seg 的像素级性能。这一改进可归因于 IRSTD 任务带来的挑战,YOLOv5-seg 难以同时学习分割和边界框回归。添加我们的统计检验模块有助于缓解这些挑战,从而显著促进训练过程,如在低资源设置中所见。这些发现表明,我们的方法有潜力通过结合目标级检测和细粒度像素级表示来改进 IRSTD 的实例分割方法,这为未来的研究指明了一个有希望的方向。

备注 – 表 2 中为 SOTA 分割方法呈现的结果可能与原始论文中报告的结果略有不同。这种差异源于我们的模型选择方法,该方法与原始研究不同。具体来说,我们基于验证集性能选择最佳模型,而原始论文通常在测试集上进行优化。通过将模型选择与测试集性能解耦,我们旨在确保评估过程的公平和无偏,从而避免对测试集的过拟合。

定性分析。 图 4 显示,与 YOLOv7t 和 EFLNet 相比,我们的方法产生了非常干净的物体性分数图,只有小目标的分数从接近零的背景中凸显出来。优化过程是达成此行为的关键,因为它使网络能够以如下方式调整特征表示:1) 目标与零假设 H₀ 充分区分,从而实现准确检测;2) 背景区域倾向于符合 H₀,从而减少误报警。这种通过端到端训练实现的对齐,正是我们的检验在操作上有效且鲁棒的原因:即使在低检测阈值下也能实现高精确率,如图 5 提供的精确率曲线所证实。关键的是,这使我们能够跨所有图像使用一个低的固定阈值,避免了根据图像内容或训练条件手动调整阈值的需要。与现有方法(例如标准 YOLO 经常需要调整阈值以防止误报警)相比,这是一个显著的操作优势,因为它使我们能够设定一个鲁棒的默认值,且误报警风险极低(因为我们的方法即使在低阈值下也表现出极少的误报警)。

4.3. 在挑战性条件下更强的鲁棒性

评估方法的鲁棒性对于确保其在实际应用(其中数据往往不完美、稀缺且不确定)中的可靠性、准确性和安全性至关重要。为了进一步评估 AA-YOLO 的优势,我们在各种挑战性条件下评估其鲁棒性。

少样本训练。 图 6a 展示了当比较方法仅在 SIRST 数据集的 10%(即 25 张图像)上训练时获得的结果。我们所有的 AA-YOLO 变体(用深橙色条表示)都实现了强大的性能,接近使用完整数据集获得的性能。这种在低资源设置下的鲁棒性源于我们明确使用背景信息来区分目标像素,这有助于补偿标注数据的缺乏。相比之下,DNANet 和 EFLNet 虽然表现相当不错,但未能匹配我们 AA-YOLO 变体的性能,而 YOLO 基线则表现更差。

在含噪数据上的推理。 为评估对噪声的鲁棒性,我们在测试集上添加了标准差 σ=0.1 的高斯噪声。如图 6b i) 所示,将 AADH 集成到 YOLO 基线中显著提高了它们对噪声输入的鲁棒性。此外,我们性能最佳的模型 AA-YOLOv7t 在 F1 分数上超过 EFLNet 超过 4 个百分点,展示了对噪声输入更优的鲁棒性。图 7 展示了一个在特别嘈杂数据上进行推理的示例,我们的方法没有产生误报警,突显了 AADH 在此背景下的鲁棒性。

迁移到另一个数据集。 我们还评估了检测器从 SIRST 数据集迁移到更具挑战性的 IRSTD-1k 数据集的可迁移性。图 6b ii) 显示我们的方法提升了几种 YOLO 基线的性能。例如,AADH 将 YOLOv7t 的性能提高了 12.5 个百分点,实现的 F1 分数仅比直接在 IRSTD-1k 数据集上训练获得的分数低 7.4 个百分点。

迁移到另一种模态。 最后,我们使用手机摄像头拍摄的图像(工作在 RGB 模态,因此代表了不同的传感场景)在真实操作环境中评估我们的算法。全分辨率图像呈现在附录 B 中;它们描绘了一个天空场景,前两张图像中可见一架无人机,后两张中没有。图 8 显示了 EFLNet 和我们最佳检测器 AA-YOLOv7t(均设定检测阈值为 0.1)产生的检测结果。我们的方法成功在前两张图像中检测到无人机,且没有误报警。相比之下,EFLNet 难以检测到无人机并产生了大量误报警。尽管对树木的误报警可能不关键,但在天空中的误报警(最后一张图像)突显了 EFLNet 幻觉出目标的倾向。这表明了在无目标场景上评估 IRSTD 算法的重要性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 博主简介
  • 原理介绍
  • 1. 引言
  • 2. 相关工作
    • 2.1. IRSTD 方法
    • 2.2. 异常检测
  • 3. 提出的方法
    • 3.1. 统计异常检验的公式化
    • 3.2. 在 YOLO 框架内的集成
  • 4. 实验与结果
    • 4.1. 实验设置
    • 4.2. 在两个 IRSTD 基准测试上的新 SOTA 结果
    • 4.3. 在挑战性条件下更强的鲁棒性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档