集智书童 | 用于时态动作检测的预测反馈 DETR !

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。

原文链接:用于时态动作检测的预测反馈 DETR !

视频中的时间动作检测(TAD)是现实世界中的一个基本且具有挑战性的任务。得益于 Transformer 的独特优势,各种基于DETR的方法已在TAD中得到应用。

然而,最近的研究发现,DETR中自注意力层中的注意力衰减导致了其性能下降。本文在之前研究的基础上,针对DETR基础TAD方法中的交叉注意力层注意力衰减问题进行新的探讨。

此外,作者的研究结果发现,交叉注意力与预测之间存在与预测不同的模式,这表明了一个短路现象。为了解决这个问题,作者提出了一种新的框架,即预测反馈DETR(Pred-DETR),该框架利用预测来恢复注意力衰减并使交叉注意力与预测对齐。

具体而言,作者从预测的相互关系中设计出了新的预测反馈目标。

因此,Pred-DETR在缓解衰减并实现各种具有挑战性的基准测试结果(包括THUMOS14、ActivityNet-v1.3、HACS和FineAction等基于DETR的方法的最新性能)方面取得了良好的效果。

1 Introduction

随着社会的进步,视频媒体的使用越来越广泛,因此,寻找未剪辑视频中所需特定片段的效率方法的需求也在迅速增长。Temporal Action Detection(TAD)是一个基本任务,旨在识别视频中的特定动作并确定它们的时间边界。TAD主要通过两阶段的方法得到了提高。然而,最近的研究越来越多地关注基于DETR的端到端方法。

DETR [10]是一种最初在目标检测领域提出的框架,也是第一个使用集合预测的端到端检测框架。DETR方法还扩展到了视频领域,并应用于TAD 。在TAD中,每个 Query 用于预测视频中的一个动作及其对应的时间间隔。为了实现这一点,采用二分匹配来将每个 Query 与GT动作及其在未剪辑视频中的时间间隔对齐。这种方法的一个显著优点是排除了传统的启发式方法,如非极大值抑制(NMS)。

尽管标准注意力(简称为原始-DETR)的DETR在与变形DETR[16]在目标检测方面可以兼容,但在TAD的原始-DETR(即使最近采用了DAB-DETR[16]这样的结构)甚至表现更差。最近,问题的根源被Self-DETR[16]确定为自注意力(SA)中的注意力衰竭问题,如图1(e)所示,其中所有解码器 Query 都聚焦在几个 Query 上。注意力衰竭是注意力模块跳过的现象,目的是防止模型退化为秩1矩阵。Self-DETR利用交叉注意力(CA)图来恢复塌陷的SA。

然而,他们的解决方案依赖于CA的健壮性,否则它可能是不最佳的。作者发现CA不是健壮的,而更为糟糕,如图1所示。该图显示了CA解码器 Query 关注于少数编码器特征((图1中的(a))),并在几乎所有的 Query 中显示相同的模式。这是一个特别关键的问题,因为CA对于该任务至关重要,因为它在 Query 和视频特征之间架起了桥梁。这使作者得出解决CA塌陷并开发另一种自我反馈方法的结论。

图1还插入了(b)中的局部化预测和(f)中相应的交互与统一(IoU)映射作为 Query 的自我关系。在图中,注意力图清楚地显示出不同的模式,与它们的预测和自我关系无关。通常,作者理解为注意力图表示了模型关注的重点,因此暗示了为什么会产生这些结果。

因此,这种现象类似于一个捷径,模型依赖简单的线索,而不是有意义的表现。尽管存在塌陷的注意力,但模型仍可以生成多样且合理的结果,尽管所有的 Query 都关注相同的背景区域

### DETR 目标检测实战教程 DETR (End-to-End Object Detection with Transformers) 是一种基于 Transformer 的端到端目标检测方法,它摒弃了传统的目标检测框架中的许多复杂组件(如 NMS 和锚框),通过直接预测一组边界框和类别标签来完成目标检测任务。以下是关于如何使用 DETR 进行目标检测的实际操作指南。 #### 安装依赖库 为了运行 DETR 模型,需要安装必要的 Python 库。可以按照以下命令安装所需的环境: ```bash pip install torch torchvision transformers ``` 如果需要 GPU 支持,则需确保 PyTorch 已正确配置 CUDA 版本[^3]。 #### 加载预训练模型 可以通过 Hugging Face 提供的 `transformers` 库加载 DETR 预训练模型。下面是一个简单的代码示例展示如何加载并初始化模型: ```python from transformers import DetrFeatureExtractor, DetrForObjectDetection import torch from PIL import Image import requests # 初始化特征提取器和模型 feature_extractor = DetrFeatureExtractor.from_pretrained("facebook/detr-resnet-50") model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50") # 下载测试图片 url = "http://images.cocodataset.org/val2017/000000039769.jpg" image = Image.open(requests.get(url, stream=True).raw) # 对输入图像进行预处理 inputs = feature_extractor(images=image, return_tensors="pt") # 前向传播获取输出 outputs = model(**inputs) ``` 上述代码展示了如何从 Facebook 提供的预训练权重中加载 DETR 模型,并对其进行推理。 #### 解析模型输出 DETR 输出的结果包括预测的边界框坐标以及对应的分类分数。解析这些结果的过程如下所示: ```python # 获取预测的 logits 和边界框 logits = outputs.logits # 形状为 [batch_size, num_queries, num_classes] bboxes = outputs.pred_boxes # 形状为 [batch_size, num_queries, 4] # 将结果转换为目标列表形式 target_sizes = torch.tensor([image.size[::-1]]) results = feature_extractor.post_process_object_detection(outputs, target_sizes=target_sizes)[0] for score, label, box in zip(results["scores"], results["labels"], results["boxes"]): if score > 0.9: # 只保留置信度大于 0.9 的预测结果 print(f"Detected {model.config.id2label[label.item()]} with confidence {score:.2f} at location {box.tolist()}") ``` 此部分代码解释了如何将原始输出转化为可读的形式,并筛选出高置信度的检测结果。 #### 训练自定义数据 对于特定应用场景下的目标检测需求,可能需要微调 DETR 模型以适应新的数据分布。这通常涉及以下几个方面的工作: 1. 准备标注好的 COCO 数据格式的数据; 2. 调整超参数设置,比如学习率、批量大小等; 3. 使用官方提供的脚本或工具包执行 Fine-tuning 流程。 具体实现细节可以根据实际项目情况调整,更多参考资料见链接[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值