人工标注或成过去式?SSA语义分割框架、SSA-engine自动类别标注引擎,大幅提升细粒度语义标注效率

news2024/10/5 14:08:39

推荐语

4月5日,Meta发布 Segment Anything 模型和 SA-1B 数据集,引发CV届“地震”,其凭借一己之力,成功改写了物体检测、数据标注、图像分割等任务的游戏规则。

复旦大学ZVG实验室团队基于此最新开源了SSA语义分割框架和SSA-engine自动注释引擎,可以为所有mask自动地生成细粒度语义标签,填补了SA-1B中缺乏的细粒度语义标注的空白,为构建大规模语义分割数据集打下基础,也可以用于多模态的特征对齐等研究。

最后,我们提供了包含SA-1B在内的多个数据集快速下载地址,欢迎大家关注与探索。

本文已授权,作者丨复旦大学ZVG实验室

Semantic Segment Anything 丨 复旦大学ZVG实验室

Repo: https://github.com/fudan-zvg/Semantic-Segment-Anything

Demo:https://replicate.com/cjwbw/semantic-segment-anything

SAM是一种强大的图像分割模型,SA-1B是目前为止最大的分割数据集。然而,SAM缺乏为每个mask预测语义类别的能力。为了弥补上述不足,我们提出了一个基于SAM的语义分割框架,不仅能准确地分割mask,还能预测每个mask的语义类别,称为Semantic Segment Anything (SSA)。

此外,我们的SSA可以作为一个自动化的稠密开放词汇标注引擎,称为Semantic segment anything labeling engine (SSA-engine),为SA-1B或任何其他数据集提供丰富的语义类别注释。该引擎显著减少了人工注释及相关成本的需求。

为什么我们需要SSA:

  1. SAM是一种高度可泛化的图像分割算法,可以提供精确的mask分割。SA-1B是迄今为止最大的图像分割数据集,提供了精细的mask分割注释。但是,SAM和SA-1B都没有为每个mask提供类别预测或注释。这使得研究人员难以直接使用强大的SAM算法来解决语义分割任务,或者利用SA-1B来训练自己的模型。

  2. 先进的close-set分割器,如Oneformer,open-set分割器,如CLIPSeg,以及image caption方法,如BLIP,可以提供丰富的语义注释。不过,它们的mask分割预测可能无法分割出像SAM那么精确和细腻的边界。

  3. 因此,通过将SAM和SA-1B的精细图像分割mask与这些先进模型提供的丰富语义类别标注相结合,我们可以生成具有更强泛化能力的语义分割模型,以及一个大规模语义分割的图像分割数据集。

SSA能做什么?

● SSA: 这是第一个利用SAM进行语义分割任务的开放框架。它支持用户将其现有的语义分割器与SAM无缝集成,无需重新训练或微调SAM的权重,从而实现更好的泛化和更精确的掩模边界。

● SSA-engine: SSA-engine为大规模的SA-1B数据集提供了密集的开放词汇类别注释。在手动审核和精细化之后,这些注释可以用于训练分割模型或细粒度的CLIP模型。

下面为大家详细介绍一下。

SSA:语义分割一切


在引入SAM之前,大多数语义分割应用场景已经有了自己的模型。这些模型可以为区域提供粗略的类别分类,但在边缘处模糊不清,缺乏精确的掩模。为了解决这个问题,我们提出一种利用SAM来增强原有模型性能的开放框架——SSA,即使用原始语义分割模型提供类别,同时利用强大的SAM提供掩模。

如果您已经在数据集上训练了一个语义分割模型,您不需要为了更精准的分割能力,重新训练一个基于SAM的新模型。相反,您可以继续使用旧模型作为语义分支(Semantic branch)。SAM强大的泛化和图像分割能力可以提高原有模型的性能。值得注意的是,SSA适用于原本的分割器预测的掩模边界不是非常精确的场景,如果原有模型的分割已经非常精确了,则SSA很难带来提升。

SSA包含两个分支,Mask BranchSemantic Branch,以及一个投票模块来决定每个mask的类别。

  1. Mask branch(蓝色)。SAM可以作为Mask branch提供一组有清晰边界的mask。

  2. Semantic branch(紫色)。这个分支为每个像素提供语义类别,它由一个语义分割器实现,用户可以自定义用户感兴趣的类别的分割器。这个分割器不需要具有非常精细的边界预测能力,但应该尽可能准确地对每个区域进行分类。

  3. Semantic Voting module(红色)。这个模块根据mask的位置裁剪出相应的像素类别。在这些像素类别中,像素数量排名第一的类别将被视为该mask的分类结果。

SSA-engine:自动化类别标注引擎


SSA-engine是一个自动化注释引擎,可以为SA-1B数据集或者任何一个数据集提供初始的语义标注。SSA-engine利用close-set分割模型来预测基础类别,并结合image caption模型来提供open-vocabulary的标注。得益于这样的设计,SSA-engine一方面可以为大多数样本提供令人满意的类别标注,另一方面,可以利用image caption方法提供更详细的语义类别标注。

SSA-engine填补了SA-1B缺乏的细粒度语义标注的空白,显著减少了人工类别标注需求。它有潜力成为训练大规模视觉感知模型和更细粒度CLIP模型的基础。

SSA-engine由三个组件组成

1. Close-set语义分割器(绿色)。它是两个分别在COCO和ADE20K数据集上训练close-set语义分割模型,用于分割图像并获取粗略的类别信息。预测的类别仅包括简单、基本的类别,以确保每个mask都获得相关的标签。

2. Open-vocabulary分类器(蓝色)。利用image caption模型来描述与每个mask对应的图像区域。然后提取名词或短语作为候选的open-vocabulary类别。这个过程提供了更多样化的类别标签。

3. 最终决策模块(橙色)。SSA-engine使用一个类别过滤器(即CLIP)从l来自Close-set语义分割器和Open-vocabulary分类器的类别列表中,过滤出最合理的top-k个预测。最后,Open-vocabulary Segmentor(即CLIPSeg)根据top-k类别和图像区域预测最适合的类别。

实验

1. 推理时间

我们在单个NVIDIA A6000 GPU上测试了模型的推理速度,结果如下表所示:

在被用于测试的200张图像中,平均每张图像包含了99.9个mask。

2. 显存开销

3. Close-set的语义分割结果

为了验证SSA架构的提升,我们选用了Huggiing face上的不同参数量和精度的Segformer模型(包括B0,B2和B5版本),作为一个mask预测没有那么准确的Seamntic branch。实验结果表明,在原本的语义分割模型(作为Semantic branch)的性能一般的情况下,SSA可以带来明显的准确度提升。

注意,本实验的Segformer的模型权重和代码均由NVIDIA公开,下载自Hugging face,而这些模型的mIoU略低于Github仓库中的实验结果。

4. Close-set的语义分割结果

我们验证了SSA在雾天语义分割数据集Foggy Driving上的性能。实验中,我们是用了OneFormer作为Semantic branch,其权重和代码来自于Hugging face。

实测效果

SSA的Close-set语义分割实测

1. Cityscapes

2. ADE20K

3. Foggy Driving

SSA-engine的Open-vocabulary标注实测

快速安装:

Semantic-Segment-Anything
conda env create -f environment.yaml
conda activate ssa
python -m spacy download en_core_web_sm# install segment-anythingcd ..
git clone git@github.com:facebookresearch/segment-anything.gitcd segment-anything; 
pip install -e .; cd ../Semantic-Segment-Anything

1. SSA的快速上手

1.1 数据准备

● 下载 ADE20K 或者 Cityscapes dataset,并在 data 文件夹解压.

● 下载SAM 的权重并放在 ckp 下.

wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pthcd ..

1.2 SSA模型推理
使用8卡GPU在ADE20K上推理SSA

python scripts/main_ssa.py --ckpt_path ./ckp/sam_vit_h_4b8939.pth --save_img --world_size 8 --dataset ade20k --data_dir data/ade20k/ADEChallengeData2016/images/validation/ --gt_path data/ade20k/ADEChallengeData2016/annotations/validation/ --out_dir output_ade20k_test

使用8卡GPU在Cityscapes上推理SSA‍

python scripts/main_ssa.py --ckpt_path ./ckp/sam_vit_h_4b8939.pth --save_img --world_size 8 --dataset cityscapes --data_dir data/cityscapes/leftImg8bit/val/ --gt_path data/cityscapes/gtFine/val/ --out_dir output_cityscapes

1.3 SSA验证
获取 ADE20K的验证结果

python evaluation.py --gt_path data/cityscapes/gtFine/val/ --result_path output_cityscapes/ --dataset cityscapes

获取 Cityscapes的验证结果

python evaluation.py --gt_path data/cityscapes/gtFine/val/ --result_path output_cityscapes/ --dataset cityscapes

2.SSA-engine的快速上手

● 下载SA-1B数据集并放在data路径下

● 运行SSA-engine对SA-1B进行自动类别标注

python scripts/main_ssa_engine.py --data_dir=data/examples --out_dir=output --world_size=8 --save_img

致谢

Segment Anything 提供 SA-1B 数据集。

HuggingFace 提供代码和预训练模型。
CLIPSeg、OneFormer、BLIP 和 CLIP提供强大的语义分割、图像说明和分类模型。

引用

如果您觉得我们的工作对您有帮助,请引用我们的仓库:

@misc{chen2023semantic,
    title = {Semantic Segment Anything},
    author = {Chen, Jiaqi and Yang, Zeyu and Zhang, Li},
    howpublished = {\url{https://github.com/fudan-zvg/Semantic-Segment-Anything}},
    year = {2023}
}

数据集快速下载链接

COCO 2017
https://opendatalab.com/COCO_2017

ADE20K
https://opendatalab.com/ADE20K_2016

CityScapes
https://opendatalab.com/CityScapes

Foggy Driving
https://people.ee.ethz.ch/~csakarid/SFSU_synthetic/

SA-1B
https://opendatalab.com/SA-1B

-END-

更多公开数据集,欢迎访问OpenDataLab官网查看与下载:https://opendatalab.org.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaEE初阶 — Servlet API 详解

文章目录 HttpServlet1 Servlet 的生命周期2 代码示例3 使用 postman 构造请求4 使用 ajax 构造请求 HttpServletRequest1 代码示例 前端如何给后端传参1 通过 GET 里的 query string 传参2 通过 POST 借助 form 表单传参3 通过 json 格式传参 HttpServletResponse1 代码示例1.…

ChatGPT会取代RPA?ta自己可不是这么说的!

先说一个AI热知识:ChatGPT 的推出在科技界引发了一场狂潮。 聊天机器人ChatGPT以及其背后的AI大模型GPT,在2023年引爆全球。GPT 全称为 Generative Pre-trained Transformer,是一种使用人工神经网络的深度学习技术,能够使机器像人…

Transformer and Self-attention

一谈到 NLP,大家都听说过 Transformer, Self-attention 这些词汇,以及 Attension is all you need 这篇论文。 大家可能多多少少看过这类博客,对这些概念有一些了解,什么 QKV呀, encoder, decod…

贪心-刷杂技的牛

题意 农民约翰的 N 头奶牛(编号为 1..N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。 奶牛们不是非常有创意,只提出了一个杂技表演: 叠罗汉,表演时,奶牛们站在彼此的身上,形成一…

Revit中如何绘制轴线?CAD图纸转轴网操作

一、如何用revit来制作这么一个简单的轴线呢? 01 、新建项目 绘制轴线,首先新建项目建筑样板 02 、轴线快捷键 绘制轴线的快捷键需要牢记,因为经常使用GR 03 、编辑轴线类型 当你画好第一条轴线,需要对轴线类型属性进行调节,一般…

基于vivado(语言Verilog)的FPGA学习(5)——跨时钟处理

基于vivado(语言Verilog)的FPGA学习(5)——跨时钟处理 1. 为什么要解决跨时钟处理问题 慢时钟到快时钟一般都不需要处理,关键需要解决从快时钟到慢时钟的问题,因为可能会漏信号或者失真,比如&…

基于HTML5智慧监所三维可视化安防管控系统

前言 物联网技术的发展使云计算技术得到了迅猛的发展及广泛的应用,智能体系的创建已经成为监狱发展的必然趋势。 智慧监狱的创建、智能化管理的推行是监狱管理的创新,也是监狱整体工作水平提升的具体体现。 建设背景 近年来,司法部不断加大…

jumpserver设置密码强度

1、点击系统设置 – 点击安全设置 2、设置密码强弱规则

【SVN】window SVN安装使用教程(服务器4.3.4版本/客户端1.11.0版本)

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

为什么建企业网站对企业来说非常重要?

随着互联网的飞速发展,建企业网站已经成为了企业重要的一部分。企业网站是企业与外界沟通的重要渠道,对于企业的品牌形象、市场推广和销售业绩都有着不可替代的作用。本文将从以下几个方面,阐述为什么建企业网站对企业来说非常重要&#xff0…

Spring5学习总结(五)Spring5的新特性Log4j2@Nullable注解支持函数式风格支持JUnit5

Spring5学习总结(五)Spring5的新特性/Log4j2/Nullable注解/支持函数式风格/支持JUnit5 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中删除 一、支持整合Log4j2 Spring 5.0 框架自带了…

【Java笔试强训】day26编程题

目录 编程题快到碗里来跳台阶问题 编程题 快到碗里来 import java.math.BigDecimal; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);while (sc.hasNext()) {BigDecimal n sc.nextBigDecimal();B…

【leetcode速通java版】04——哈希表

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:代码随想录leetcode速通训练营java版本 🌰 文章简介:哈希表理论,leetcodeT242,T3…

jekyll+GithubPage搭建一个免费的个人网站

文章目录 Jekyll环境搭建windows安装RUBY、gem、Jekyll用Jekyll搭建本地博客 用jekyll模板搭建githubpage Jekyll环境搭建 windows安装RUBY、gem、Jekyll 安装ruby RUBY安装包下载地址:https://rubyinstaller.org/downloads/,一路默认选项next即可。 最…

热闻丨ChatGPT会替代你我吗?让它写了封情书后,我得到答案

ChatGPT毕竟不是人 2023年的科技圈儿被ChatGPT占据,上线仅仅两个月,活跃用户就突破一亿。上知天文下知地理,ChatGPT以它的强大功能让许多人生出疑问:ChatGPT会替代你我吗? 记者挑选了一些尖锐问题进行询问&#xff0…

【碳达峰碳中和】高校用电智慧监管平台的构建

摘 要:介绍了当前高校用电存在的问题,进行了原因分析,由此提出建立高校用电智慧监管平台。对高校用电智慧监管平台的构架进行设计,运用物联网技术,实现各回路实时自主控制,并细化管理权限,实现…

【5天打卡】学习Lodash的第一天——初体验

大家好,最近,我在学习Lodash这个工具库。Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。一款优秀的 JavaScript 工具库,里面包含了大量的工具函数。适用于常见浏览器以及 Node.js 等。 所以我们一起来学习Lodash&#xff0c…

7. 堆的简单学习

7. 堆 7.1 堆的定义 堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组实现。 堆的特性: 它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最…

持续集成 在 Linux 上搭建 Jenkins,自动构建接口测试

本篇把从 0 开始搭建 Jenkins 的过程分享给大家,希望对小伙伴们有所帮助。 文章目录 在 Linux 上安装 Jenkins 在 Linux 上安装 Git 在 Linux 上安装 Python 在 Linux 上安装 Allure 配置 Jenkins jenkins 赋能 - 使用邮箱发送测试报告 jenkins 赋能 - 优化测试报告…

比ChatGPT更好用的Claude来了

比ChatGPT更好用的Claude来了,不需要魔法上网!!! claude官网 点击 add to slack slack跟discord有点类似,先要去slack注册账号 登录之后就添加创建一个工作区 添加 不过现在已经停止添加了,会出现App u…