SparseInst

GitHub
618 75 较难 2 次阅读 1个月前MIT图像
AI 解读 由 AI 自动生成,仅供参考

SparseInst 是一款专为实时实例分割设计的高效开源框架,曾发表于计算机视觉顶会 CVPR 2022。它致力于解决传统目标检测算法在速度与精度之间难以兼顾的痛点,特别是在处理复杂场景下的物体识别与轮廓分割时,往往依赖繁琐的后处理步骤(如非极大值抑制 NMS),导致推理速度受限。

与其他依赖锚框或中心点的方法不同,SparseInst 创新性地提出了“实例激活图”(IAM)概念。这种方法能自适应地高亮显示物体中信息最丰富的区域,直接通过聚合特征完成识别与分割,无需任何排序或复杂的后处理操作。这种全卷积的设计不仅让架构更加简洁,还显著提升了部署便利性。实测数据显示,它在保持每秒 40 帧以上高速运行的同时,仍能取得优异的分割精度,实现了速度与性能的完美平衡。

此外,SparseInst 支持多种主流骨干网络,并提供了 FP16 加速、ONNX 模型导出以及 MindSpore 框架实现等实用功能,进一步降低了使用门槛。无论是从事自动驾驶、视频监控算法研发的工程师,还是希望探索前沿分割技术的学术研究人员,都能利用 SparseInst 快速构建高性能的视觉应用。

使用场景

某智慧物流园区的技术团队正在开发一套实时包裹分拣系统,需要摄像头在高速传送带上精准识别并分割重叠的快递包裹,以引导机械臂抓取。

没有 SparseInst 时

  • 延迟过高导致漏检:传统实例分割模型依赖非极大值抑制(NMS)和后处理排序,在包裹密集场景下计算耗时严重,无法满足每秒 30 帧以上的实时性要求。
  • 重叠目标识别困难:当多个包裹紧密堆叠时,基于锚框(Anchor)的方法难以区分边界,常出现掩码粘连或错误合并,导致分拣指令出错。
  • 部署复杂度大:现有方案结构复杂,对算力要求极高,难以在边缘计算设备或低成本工控机上流畅运行,增加了硬件成本。
  • 动态场景适应性差:传送带速度波动时,模型推理速度不稳定,容易造成画面卡顿或处理队列堆积。

使用 SparseInst 后

  • 实现真正实时推理:SparseInst 采用全卷积架构,彻底移除了 NMS 和排序步骤,在 608x 输入分辨率下即可达到 40 FPS,轻松跟上高速传送带节奏。
  • 精准分割重叠物体:通过稀疏实例激活图(IAM)自适应高亮关键区域,即使包裹紧密接触也能生成清晰独立的掩码,显著提升抓取成功率。
  • 轻量化易于部署:框架简洁高效,支持 FP16 加速和 ONNX 导出,推理速度再提升 30%,可平滑部署于各类边缘端设备,降低硬件门槛。
  • 稳定高效的吞吐量:无论包裹密度如何变化,SparseInst 均能保持稳定的推理延迟,确保分拣流水线连续无阻塞运行。

SparseInst 通过去除繁琐的后处理步骤并利用稀疏激活机制,在保持高精度的同时实现了极致的推理速度,完美解决了工业场景中实时实例分割的痛点。

运行环境要求

操作系统
  • Linux
GPU

需要 NVIDIA GPU (测试环境为 NVIDIA 2080Ti/RTX 3090),支持 FP16 加速,需安装对应版本的 CUDA (具体版本取决于 detectron2 和 PyTorch 的安装要求)

内存

未说明

依赖
notes该项目基于 detectron2 框架构建,安装前需先编译安装 detectron2 (推荐 v0.3 或已验证的 v0.6 版本)。支持多种骨干网络 (ResNet, CSPDarkNet, PVTv2)。提供 ONNX 导出脚本及 MindSpore 版本实现。推理速度测试基于单卡 NVIDIA 2080Ti,未使用 TensorRT 加速。
python未说明 (依赖 detectron2 环境,通常建议 Python 3.6+)
detectron2 (v0.3 或 v0.6)
torch
torchvision
opencv-python
pycocotools
timm (用于 PVT 等骨干网络)
SparseInst hero image

快速开始



Tianheng Cheng, Xinggang Wang, Shaoyu Chen, Wenqiang Zhang, Qian Zhang, Chang Huang, Zhaoxiang Zhang, Wenyu Liu
(: 通讯作者)

亮点



PWC

  • SparseInst提出了一种全新的目标表示方法——实例激活图(IAM),能够自适应地突出显示用于识别的目标信息区域。
  • SparseInst是一个简单、高效且完全基于卷积的框架,无需非极大值抑制(NMS)或排序操作,部署起来非常方便!
  • SparseInst在速度与精度之间取得了良好的平衡,例如,在输入分辨率为608×608时,可达到37.9 AP和40 FPS。

更新

本项目仍在积极开发中,请持续关注!

  • [2022-10-31]: 我们发布了使用CSP-DarkNet53主干网络的模型及权重。该主干网络具有很强的基准性能,在推理速度和精度方面都极具竞争力。

  • [2022-10-19]: 我们提供了基于MindSpore的实现与推理代码,MindSpore是一款优秀且高效的深度学习框架。感谢Ruiqi Wang的这一贡献!

  • [2022-8-9]: 我们提供了FLOPs计数器get_flops.py,用于计算SparseInst的FLOPs和参数量。此次更新还包括一些错误修复。

  • [2022-7-17]: 更快🚀:SparseInst现在支持以FP16格式进行训练和推理。使用FP16推理可将速度提升30%更稳健:为了提高数值稳定性,尤其是在导出为ONNX格式时,我们用Softmax替换了原来的Sigmoid + Norm更易用:我们提供了脚本,用于将SparseInst导出为ONNX模型。

  • [2022-4-29]: 我们修复了关于可视化demo.py常见问题,例如ValueError: GenericMask cannot handle ...

  • [2022-4-7]: 我们提供了用于图像可视化与推理的demo代码。此外,我们还为SparseInst增加了更多主干网络,包括ResNet-101CSPDarkNet以及PvTv2。我们仍在继续支持更多主干网络。

  • [2022-3-25]: 我们正式发布了SparseInst的代码和模型!

概述

SparseInst是一种概念新颖、高效且完全基于卷积的实时实例分割框架。 与传统的区域框或锚点(中心点)不同,SparseInst采用一组稀疏的实例激活图作为目标表示形式,用于突出显示每个前景目标的信息区域。 随后,它根据这些突出显示的区域聚合特征,从而获得实例级别的特征,用于识别和分割。 通过二部匹配机制,实例激活图以一对一的方式预测目标,从而避免了后处理中的非极大值抑制(NMS)。得益于这种简单而有效的实例激活图设计,SparseInst具有极快的推理速度,在COCO数据集上可达到40 FPS37.9 AP(NVIDIA 2080Ti),在速度和精度方面均显著优于同类方法。

模型

我们提供了两种版本的 SparseInst,即基础 IAM(3×3 卷积)和分组 IAM(简称 G-IAM),它们使用不同的主干网络。所有模型均在 MS-COCO train2017 数据集上进行训练。

快速模型

模型 主干网络 输入尺寸 数据增强 APval AP FPS 权重
SparseInst R-50 640 32.8 33.2 44.3 模型
SparseInst R-50-vd 640 34.1 34.5 42.6 模型
SparseInst (G-IAM) R-50 608 33.4 34.0 44.6 模型
SparseInst (G-IAM, Softmax) R-50 608 33.6 - 44.6 模型
SparseInst (G-IAM) R-50 608 34.2 34.7 44.6 模型
SparseInst (G-IAM) R-50-DCN 608 36.4 36.8 41.6 模型
SparseInst (G-IAM) R-50-vd 608 35.6 36.1 42.8 模型
SparseInst (G-IAM) R-50-vd-DCN 608 37.4 37.9 40.0 模型
SparseInst (G-IAM) R-50-vd-DCN 640 37.7 38.1 39.3 模型

使用其他主干网络的 SparseInst

模型 主干网络 输入尺寸 APval AP FPS 权重
SparseInst (G-IAM) CSPDarkNet 640 35.1 - - 模型

较大模型

模型 主干网络 输入尺寸 数据增强 APval AP FPS 权重
SparseInst (G-IAM) R-101 640 34.9 35.5 - 模型
SparseInst (G-IAM) R-101-DCN 640 36.4 36.9 - 模型

使用视觉Transformer的 SparseInst

模型 主干网络 输入尺寸 数据增强 APval AP FPS 权重
SparseInst (G-IAM) PVTv2-B1 640 35.3 36.0 33.5 (48.9) 模型
SparseInst (G-IAM) PVTv2-B2-li 640 37.2 38.2 26.5 模型

: 在 RTX 3090 上测量。

注:

  • 我们将继续添加更多模型,包括更高效的卷积网络、视觉Transformer以及用于高性能和高速度的大模型,请持续关注 😁!
  • 推理速度是在未指定情况下使用单块 NVIDIA 2080Ti 测量的。
  • 我们尚未采用 TensorRT 或其他工具来加速 SparseInst 的推理。不过,我们目前正在努力实现,并将尽快为 ONNX、TensorRT、MindSpore、Blade 等框架提供支持!
  • AP 表示在 MS-COCO test-dev2017 数据集上评估的 AP 值。
  • 输入表示输入图像的短边长度,例如 512×864 和 608×864,我们会保持输入图像的宽高比,且长边不超过 864。
  • 推理速度可能会因不同机器(如 2080 Ti)和不同版本的 detectron(我们主要使用 v0.3)而略有变化。如果变化较大,例如超过 5ms,请随时联系我们。
  • 对于 aug(数据增强),我们仅采用 detectron2 提供的简单随机裁剪(裁剪尺寸:[384, 600])。
  • 我们默认采用 weight decay=5e-2,这与原始论文略有不同。
  • [百度网盘上的权重]:我们也在百度网盘上提供了训练好的模型:分享链接(提取码:lkdo)。

安装与先决条件

本项目基于优秀的框架 detectron2 构建,因此您需要先安装 detectron2。更多详细信息请参阅 官方安装指南

更新: SparseInst 在 detectron2-v0.6 上运行良好。

注意: 此前,我们主要使用 detectron2 的 v0.3 版本来进行实验和评估。此外,我们也对最新版本 v0.6 进行了测试。如果您在更高版本的 detectron2 中发现任何错误或不兼容问题,请随时提交 issue!

安装 detectron2:

git clone https://github.com/facebookresearch/detectron2.git
# 如果切换到特定版本,例如 v0.3(推荐)或 v0.6
git checkout tags/v0.6
# 构建 detectron2
python setup.py build develop

开始使用

🔥 使用 FP16 的 SparseInst

使用 FP16 的 SparseInst 可以使推理速度提升 30%,并显著节省训练内存。下表提供了关于内存、推理速度和训练速度的一些对比。

FP16 训练内存(log) 训练内存(nvidia-smi 训练速度 推理速度
6.0G 10.5G 0.8690s/迭代 52.17 FPS
3.9G 6.8G 0.6949s/迭代 67.57 FPS

注:统计数据是在 NVIDIA 3090 上测量的。使用 FP16 后,我们的训练速度更快,并且可以增加批次大小以获得更好的性能。

  • 使用 FP16 进行训练:启用 FP16 非常简单,只需将 SOLVER.AMP.ENABLED=True 设置为真,或将此配置添加到配置文件中即可。
python tools/train_net.py --config-file configs/sparse_inst_r50_giam_fp16.yaml --num-gpus 8 SOLVER.AMP.ENABLED True
  • 使用 FP16 进行测试:通过添加 --fp16 来启用推理时的 FP16 模式。
python tools/test_net.py --config-file configs/sparse_inst_r50_giam_fp16.yaml --fp16 MODEL.WEIGHTS model_final.pth 

测试 SparseInst

在测试之前,您需要指定配置文件 <CONFIG> 和模型权重 <MODEL-PATH>》。此外,您还可以通过在配置文件或命令行中设置 INPUT.MIN_SIZE_TEST` 来更改输入尺寸。

  • [性能评估] 要获取评估结果,例如 COCO 数据集上的 mask AP,您可以运行以下命令:
python tools/train_net.py --config-file <CONFIG> --num-gpus <GPUS> --eval MODEL.WEIGHTS <MODEL-PATH>
# 示例:
python tools/train_net.py --config-file configs/sparse_inst_r50_giam.yaml --num-gpus 8 --eval MODEL.WEIGHTS sparse_inst_r50_giam_aug_2b7d68.pth
  • [推理速度] 要获取单个 GPU 设备上的推理速度(FPS),您可以运行以下命令:
python tools/test_net.py --config-file <CONFIG> MODEL.WEIGHTS <MODEL-PATH> INPUT.MIN_SIZE_TEST 512
# 示例:
python tools/test_net.py --config-file configs/sparse_inst_r50_giam.yaml MODEL.WEIGHTS sparse_inst_r50_giam_aug_2b7d68.pth INPUT.MIN_SIZE_TEST 512

注意:

  • tools/test_net.py 仅支持 1 个 GPU每批 1 张图像 来测量推理速度。
  • 推理时间包括 纯前向传播时间后处理时间。而评估过程、数据加载以及包装器(例如 ImageList)的预处理并不包含在内。
  • COCOMaskEvaluator 是基于 COCOEvaluator 修改而来,用于评估仅包含掩码的结果。

FLOPs 和参数

get_flops.py 基于 detectron2fvcore 构建。

python tools/get_flops.py --config-file <CONFIG> --tasks parameter flop

使用 SparseInst 可视化图像

要对您的图像进行推理或可视化分割结果,您可以运行以下命令:

python demo.py --config-file <CONFIG> --input <IMAGE-PATH> --output results --opts MODEL.WEIGHTS <MODEL-PATH>
# 示例
python demo.py --config-file configs/sparse_inst_r50_giam.yaml --input datasets/coco/val2017/* --output results --opt MODEL.WEIGHTS sparse_inst_r50_giam_aug_2b7d68.pth INPUT.MIN_SIZE_TEST 512
  • 此外,demo.py 还支持对视频(--video-input)和摄像头(--webcam)进行推理。对于视频推理,您可以参考 issue #9 以避免一些错误。
  • --opts 支持对配置文件的修改,例如 INPUT.MIN_SIZE_TEST 512
  • --input 可以是单张图片或一个包含多张图片的文件夹,例如 xxx/*
  • 如果未指定 --output,系统将弹出窗口显示每张图片的可视化结果。
  • 降低 confidence-threshold 会显示更多的实例,但也会增加误检率。

可视化结果(SparseInst-R50-GIAM)

训练 SparseInst

要在 COCO 数据集上使用 8 个 GPU 训练 SparseInst 模型,需要 8 个 GPU。如果您只有 4 个 GPU 或 GPU 内存有限,也不必担心,可以通过调整 SOLVER.IMS_PER_BATCH 来减少批次大小,或者降低输入尺寸。如果调整了批次大小,则学习率调度也应根据线性缩放规则进行相应调整。

python tools/train_net.py --config-file <CONFIG> --num-gpus 8 
# 示例
python tools/train_net.py --config-file configs/sparse_inst_r50vd_dcn_giam_aug.yaml --num-gpus 8

自定义训练 SparseInst

  1. 我们建议您将自定义数据集转换为 COCO 格式,这样就可以使用默认的数据集映射器和加载器。更多细节请参阅 detectron2 官方指南
  2. 您需要检查 NUM_CLASSESNUM_MASKS 是否需要根据您的场景或任务进行调整。
  3. 相应地修改配置。
  4. 完成上述步骤后,您就可以轻松地使用 train_net.py 训练 SparseInst。

致谢

SparseInst 基于 detectron2OneNetDETRtimm 构建,我们衷心感谢这些项目及其贡献者对社区的支持!

引用 SparseInst

如果您在研究或应用中发现 SparseInst 有用,请考虑为我们点个赞 🌟,并使用以下 BibTeX 条目引用 SparseInst。

@inproceedings{Cheng2022SparseInst,
  title     =   {用于实时实例分割的稀疏实例激活},
  author    =   {程天恒、王兴刚、陈绍宇、张文强、张倩、黄畅、张兆祥、刘文宇},
  booktitle =   {IEEE 计算机视觉与模式识别会议(CVPR)论文集},
  year      =   {2022}
}

许可证

SparseInst 采用 MIT 许可证 发布。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

tesseract

Tesseract 是一款历史悠久且备受推崇的开源光学字符识别(OCR)引擎,最初由惠普实验室开发,后由 Google 维护,目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据,有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题,是数字化归档和信息自动化的重要基础工具。 在技术层面,Tesseract 展现了强大的适应能力。从版本 4 开始,它引入了基于长短期记忆网络(LSTM)的神经网络 OCR 引擎,显著提升了行识别的准确率;同时,为了兼顾旧有需求,它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码,开箱即用即可识别超过 100 种语言,并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面,它灵活支持纯文本、hOCR、PDF、TSV 等多种格式,方便后续数据处理。 Tesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库(libtesseract),不包含图形用户界面(GUI),因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中

73.3k|★★☆☆☆|3天前
开发框架图像