关于人工智能:人工标注或成过去式SSA语义分割框架SSAengine自动类别标注引擎大幅提升细粒度语义标注效率

27次阅读

共计 5084 个字符,预计需要花费 13 分钟才能阅读完成。

举荐语

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/

正文完
 0