Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching 论文精读

Matcher是一种无需训练的一次性语义分割框架,它结合DINOv2等通用特征提取模型和SAM无类别分割模型。通过双向匹配策略、鲁棒提示采样和实例级匹配,Matcher解决了基础模型在语义分割中的局限性,提高了在开放世界任务中的泛化能力。实验表明,Matcher在一次分割语义和对象部件任务中表现出色,甚至在未训练的视频对象分割任务中也能达到良好效果。

Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching

论文链接:[2305.13310] Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching (arxiv.org)

代码链接:aim-uofa/Matcher: Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching (github.com)[Code尚未开源]

1. 背景和动机

1.1 Integrating Foundation Models

在大规模数据集上预训练后,大语言模型(Large Language Model,LLMs),例如ChatGPT,革新了NLP领域,在一些zero-shot以及few-shot任务上,展现出了极强的迁移和泛化能力。

计算机视觉领域近期也出现了一些类似的基础模型:

类似于CLIP、ALIGN、DINOv2这类基础模型,虽然其在一些下游任务中表现出了较强的zero-shot迁移能力,但是其在下游任务中使用时,仍然需要配合任务特定的heads作为ImageEncoder来使用,这限制了其在真实世界中的泛化应用。

SAM本身是一个Class-Agnostic Segmenter,无法提取高级的语义信息,这也限制了其在真实开放图像理解中的应用。

本文指出,虽然这些基础模型独立使用还存在一定的有限性,但将其结合起来,可以取得协同增效效应,同时提升分割质量和在开放世界中的泛化能力。

目前已经有一些优秀的工作进行了相关尝试:

但这些工作中的各个模型仍然是独立运行的,一个模型的输出会直接作为另一个模型的输入,在模型运行过程中的累积误差无法被消除。因此,需要探索更为高效、合理的基础模型集成方案。

1.2 Matcher

基于以上发现,本文重新思考了不同视觉基础模型的集成策略。

作者指出,SAM其实用性受到两个方面的限制:

  • 缺乏语义信息
  • 分割结果以模棱两可的Mask呈现

为了解决这些问题,本文提出仅使用一个示例并且不进行任何训练的情况下,实现Segment Anything,即OneShot Segment Anything。

在实现OneShot Segment Anything时,本文考虑了两种特征多样性:

  • Semantic Diversity
    • Semantic Diversity包括实例级别和语义级别感知
    • 本文主要是通过一个All-purpose Feature Matching方案实现
  • Structural Diversity
    • Structural Diversity意味着多种语义粒度,从部分到整体,再到多个实例
    • 本文主要是通过Prompt-based SAM来实现

基于以上考虑,本文提出了Matcher,一个无需训练的OneShot Segment Anything框架,其结合了一个通用特征提取模型(例如DINOv2)和一个无类别分割模型(例如SAM)。

但是简单地结合DINOv2和SAM无法取得令人满意的效果,例如,模型倾向去生成匹配的异常值和假阳性的Mask预测。

为了解决以上问题,本文提出了以下策略:

  • Bidirectional Matchting Strategy:用于实现准确的图像间语义密集匹配
  • Robust Prompt Sampler:用于进行Mask Propose,提升Mask Proposals的多样性,同时抑制由于异常匹配点带来的假阳性Mask预测
  • Instance-Level Matching:用于选择高质量的masks
  • Controllable Masks Merging:通过控制Merged Mask的数量,Matcher可以生成可控的Mask输出。

2. 方法

2.1 Overview

image-20230604161710440

Matcher 是一个无需训练的框架,通过集成一个通用特征提取模型(例如 DINOv]、CLIP 和 MAE )和一个无类别分割模型(SAM),其可以实现OneShot Segment Anything。

对于一个给定的参考图像 x r x_r xr及其Mask m r m_r mr,Matcher可以在目标图像 x t x_t xt中分割具有相同语义信息的目标或者部位。

上图是Matcher的概览图,其主要包括三个部件:

  • Correspondence Matrix Extraction (CME)
  • Prompts Generation (PG)
  • Controllable Masks Generation (CMG)

其OneShot Segment Anything流程大致如下:

  1. 通过计算 x r x_r xr x t x_t xt图像特征之间的的相似度,来提取Correspondence Matrix
  2. 进行Patch-Level Matching (PLM) 获取匹配点,再采用Robust Prompt Sampler来采样部分质量高的匹配点,用于生成一些prompts(Point、Center以及Box)。
  3. 将上述prompts输入到SAM中,生成初始的Mask Proposals。
  4. 进行参考图像和Mask Proposals之间的Instance-Level Matching (ILM),以选取高质量的Masks
  5. 使用**Controllable Masks Merging (CMM)**完成最终的Mask的生成

2.2 Correspondence Matrix Extraction

Matcher使用一些开箱即用的Image Encoders去提取参考图像和目标图像的特征。

对于 x r x_r xr x t x_t xt,Image Encoder将会输出Patch-Level的features z r , z t ∈ R H × W × C z_r,z_t \in \mathbb{R}^{H \times W \times C} zr,ztRH×W×C

Matcher会通过计算两个特征Patch-wise的相似度来探索目标图像上参考Mask的最佳匹配区域。

Correspondence Matrix S ∈ R H W × H W \mathbf{S} \in \mathbb{R}^{HW \times HW} SRHW×HW定义如下:
( S ) i j = z r i ⋅ z t j ∥ z r i ∥ × ∥ z t j ∥ (\mathbf{S})_{i j}=\frac{\mathbf{z}_r^i \cdot \mathbf{z}_t^j}{\left\|\mathbf{z}_r^i\right\| \times\left\|\mathbf{z}_t^j\right\|} (S)ij=zri× z

<think>好的,我现在需要帮助用户解决Spring Boot项目中静态图片资源无法访问的问题,同时他们还想了解mvc配置项的作用和正确用法,特别是关于路径匹配策略(ant_path_matcher)和日期格式配置(yyyy-MM-ddHH:mm:ss)。让我先理清楚用户的需求,然后结合他们提供的引用信息来构建解决方案。首先,用户之前的问题是关于静态图片资源无法访问,现在他们进一步询问了与mvc配置相关的内容。用户提供的引用中有提到配置spring.mvc.pathmatch.matching-strategy为ant_path_matcher,这可能与URL路径匹配有关。此外,用户提到的日期格式配置可能涉及到Jackson的日期序列化设置。接下来,我需要分析静态资源无法访问的可能原因。根据之前的回答,常见原因包括路径错误、拦截器问题、缓存等。现在用户可能已经尝试过这些解决方案但未成功,或者他们遇到了与MVC配置相关的问题。引用[1]和[2]提到配置ant_path_matcher,这可能是因为SpringBoot2.6之后默认使用PathPatternParser,而某些情况下可能需要切换回AntPathMatcher来解决路径匹配的问题,比如处理带有特殊字符的URL或与某些库不兼容的情况。另外,用户提到的日期格式配置,通常在Spring Boot中可以通过配置Jackson来设置全局日期格式,比如在application.yml中设置spring.jackson.date-format。这可以确保返回的JSON数据中的日期格式统一为yyyy-MM-ddHH:mm:ss。现在需要将这些信息整合起来,分步骤说明解决方案。首先处理静态资源访问的问题,可能需要检查路径配置、拦截器排除静态资源,以及是否正确配置了路径匹配策略。然后处理日期格式的配置,确保日期序列化正确。同时,用户可能还希望了解这些配置项的作用,比如ant_path_matcher和PathPatternParser的区别,以及日期格式配置的影响范围。 需要注意,用户提供的引用[3]中有一个yml配置示例,其中包含了mvc pathmatch的配置以及Nacos的相关设置,这可能意味着用户的项目可能涉及微服务或其他组件,但当前问题主要集中在静态资源和MVC配置上,所以应专注于这两个方面。 在编写步骤时,需要确保每个配置项的作用解释清楚,例如,ant_path_matcher的作用是改变路径匹配的策略,可能解决某些路由问题,从而影响静态资源的访问。同时,日期格式的配置需要应用到Jackson,可能需要同时设置日期格式和时区。最后,生成相关问题,需要考虑用户可能的后续问题,例如如何验证配置是否生效,如何处理更复杂的路径匹配,或者如何在特定环境下覆盖日期格式等。</think>### Spring Boot静态资源访问与MVC配置解决方案 --- #### 一、静态图片资源访问问题 ##### 1. 核心配置项说明 ```yaml spring: mvc: pathmatch: matching-strategy: ant_path_matcher # 路径匹配策略[^1][^2] web: resources: static-locations: classpath:/static/ # 静态资源目录(默认) ``` ##### 2. 分步解决方案 1. **验证基础配置** - 图片必须放在以下目录之一: ```text src/main/resources/static src/main/resources/public src/main/resources/resources src/main/resources/META-INF/resources ``` - 访问URL示例:`http://localhost:8080/images/photo.jpg`对应`static/images/photo.jpg` 2. **配置路径匹配策略** 在`application.yml`中添加: ```yaml spring: mvc: pathmatch: matching-strategy: ant_path_matcher # 解决Spring Boot 2.6+版本路径匹配问题[^1][^2] ``` - **作用**:切换为Ant风格路径匹配模式,解决新版本`PathPatternParser`导致的特殊字符处理问题 - **对比**: | 策略类型 | 支持语法 | 性能 | |----------------------|-------------------------|--------| | ANT_PATH_MATCHER | **/** 匹配多级路径 | 较低 | | PATH_PATTERN_PARSER | 仅支持单级{}匹配 | 较高 | 3. **排除拦截器干扰** ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()) .excludePathPatterns("/static/**"); // 排除静态资源路径 } } ``` --- #### 二、日期格式全局配置 ##### 1. Jackson配置方案 ```yaml spring: jackson: date-format: yyyy-MM-dd HH:mm:ss # 日期格式[^3] time-zone: GMT+8 # 时区配置 ``` ##### 2. 配置效果验证 - 实体类: ```java @Data public class User { private Date createTime; // 将自动应用yyyy-MM-dd HH:mm:ss格式 } ``` - 返回JSON示例: ```json { "createTime": "2023-08-20 14:30:45" } ``` --- #### 三、完整配置示例 ```yaml spring: mvc: pathmatch: matching-strategy: ant_path_matcher web: resources: static-locations: classpath:/custom-static/ jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 ``` --- #### 四、常见问题排查表 | 现象 | 检查点 | 解决方案 | |-----------------------|---------------------------------|-----------------------------------| | 404错误 | 1. 文件是否在静态资源目录<br>2. URL路径是否正确 | 检查`static-locations`配置[^2] | | 日期显示为时间戳 | Jackson日期格式配置 | 添加`date-format`配置[^3] | | 特殊字符路径无法匹配 | 路径匹配策略 | 切换为`ant_path_matcher`[^1] | | 时区显示错误 | `time-zone`配置 | 设置`GMT+8`等具体时区 | --- #### 五、数学表达示例(配置验证) 当验证路径匹配规则时,可使用离散数学中的集合概念描述匹配范围: $$ A = \{ x \in Path \mid x \text{ 符合 } /** \text{ 模式} \} $$ 表示所有符合Ant风格通配符的路径集合。 ---
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值