Referring Transformer: A One-step Approach toMulti-task Visual Grounding

Abstract

先前的REC或者RES任务都由于两阶段设置或者需要设计复杂的特定于任务的单阶段架构而性能有限。在本文中,我们提出了一个简单的一阶段多任务框架的Visual Grounding任务,具体来说,我们利用transformer,在视觉-语言编码器中融合视觉和语言信息,在解码器中,模型学习生成上下文化的语言查询,然后对这些查询进行解码并用于直接回归边界框并为相应的引用区域生成分割掩码。有了这个简单但高度情境化的模型,我们在REC和RES任务上的表现都大大超过了最先进的方法。 我们还表明,一个简单的预训练计划(在外部数据集上)进一步提高了性能。 大量的实验和研究表明,我们的模型从情境化信息和多任务训练中获益良多。

Introduction

多模态接地1任务(如短语定位,参考表达理解和分割)旨在将传统的目标检测和分割推广到图像中与自由形式语言表达相对应的区域(矩形或像素级)的定位。 这些任务已经成为视觉和机器学习中的核心问题,因为可以利用这些技术的应用范围很广,包括图像字幕、视觉问答、视觉推理等。

到目前为止,大多数多模态接地架构采用两阶段方法的形式,受到Faster RCNN和其他方法的启发,首先生成一组图像区域建议,然后通过考虑内容与查询短语的匹配程度,将其中一个或多个区域associate/ground到短语。还有一些方法利用预训练的多模态transformer(例如,ViLBERT)来微调grounding任务。 这样的模型还有一个额外的好处,就是能够从外部大量数据中学习复杂的跨模态特征表示。然而,所有这类两阶段方法的一个重要限制是它们无法将建议机制限定在查询短语本身,这从本质上限制了性能的上限。(两阶段方法的局限性在于它们在生成图像区域时没有考虑到查询短语的内容,导致第一阶段生成的候选区域可能并不理想。这种方法的缺点是,无法直接将查询短语与区域生成过程联系起来,限制了最终性能的提升。)

为了解决这些限制,最近引入了一些单阶段方法。 它们大多从Yolo及其变体中获得灵感,并依赖于更综合的视觉语言融合和密集的锚定机制来直接预测接地区域。 虽然这减轻了对提议阶段的需求,但它需要一些特别的锚定义,通常通过标记区域的聚类获得,并且还限制了上下文化基础决策的能力,因为每个查询短语都是独立有效地处理的。 最后,文献很少关注REC和RES任务之间的杠杆关系。

本文的贡献:

(1)提出了一种简单通用的基于一阶段transformer的参考表达式理解和分割体系结构。 该模型的核心是一种新颖的transformer解码器,它利用上下文化的短语查询,并能够直接将这些查询解码成相应的图像区域和片段,并受到上下文化图像嵌入的约束; (2)我们的方法在使用单个训练模型同时实现REC和RES方面是独一无二的(唯一能够做到这一点的方法是[36]); 表明这种多任务学习导致两项任务的改进; (3)与其他基于transformer的架构一样,我们表明预训练可以进一步提高性能,普通模型和预训练模型在这两个任务上的表现都明显优于最先进的模型(REC的refcoco数据集高达8.5%,RES为19.4%)。 我们还在详细的消融中彻底验证了我们的设计。

Related works

Referring Expression Comprehension (REC).REC专注于生成一个紧密包含语言查询的图像边界框。 先前的两阶

### 解决方案 `java.lang.IllegalStateException: No thread-bound request found` 的错误通常发生在尝试通过 `RequestContextHolder` 访问当前线程绑定的请求对象时,而该线程并未实际绑定到任何 HTTP 请求上下文中。这种问题常见于异步任务执行框架(如 XXL-JOB),因为这些框架中的任务可能运行在一个独立的线程池中,而不是由处理原始 HTTP 请求的主线程触发。 以下是针对此问题的具体解决方案: #### 方法一:手动传递 `HttpServletRequest` 和 `HttpServletResponse` 可以通过在启动任务时显式地将 `HttpServletRequest` 和 `HttpServletResponse` 对象作为参数传入任务方法,并在任务内部使用它们来替代依赖 `RequestContextHolder` 的方式[^1]。 ```java public void executeTask(HttpServletRequest request, HttpServletResponse response) { // 使用传递过来的 request 和 response 进行业务逻辑操作 } ``` 调用上述方法时需确保从主线程中提取并传递这两个对象给子线程的任务函数。 --- #### 方法二:自定义 `ServletRequestAttributes` 并绑定至目标线程 如果无法直接修改业务代码,则可以创建一个新的 `ServletRequestAttributes` 实例并将它绑定到执行任务的目标线程上。这种方式模拟了原本应该存在的请求上下文环境。 ```java import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; // 假设已有的 HttpServletRequest 和 HttpServletResponse 对象分别为 req 和 resp ServletRequestAttributes attributes = new ServletRequestAttributes(req); RequestContextHolder.setRequestAttributes(attributes); try { // 执行具体任务逻辑... } finally { RequestContextHolder.resetRequestAttributes(); } ``` 以上代码片段展示了如何临时设置以及清理线程局部变量存储区内的请求属性实例。 --- #### 方法三:升级或调整使用的 Spring 版本及相关组件版本 考虑到所提到的是基于较旧版 Spring(3.0.5),可能存在某些功能局限性或者已被废弃的功能接口设计缺陷等问题。因此建议尽可能迁移到更新稳定版本以获得更好的兼容性和性能表现的同时减少潜在风险[^2]。 例如,在更高版本里可以直接利用更完善的 API 来实现相同需求而不必绕过官方推荐路径去做额外定制化开发工作。 --- ### 注意事项 - 如果项目允许的话,优先考虑整体架构层面优化而非单纯修补单点异常情况。 - 当涉及多模块协作场景下务必确认各部分之间是否存在版本冲突现象以免引发更多不可预见状况发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值