OCNet.pytorch

GitHub
813 126 中等 1 次阅读 1周前MIT图像
AI 解读 由 AI 自动生成,仅供参考

OCNet.pytorch 是一个基于 PyTorch 框架实现的开源项目,专注于解决计算机视觉中的场景解析(语义分割)难题。它的核心目标是让 AI 在识别图像时,不仅能看清局部像素,还能理解物体与其周围环境的关系,从而显著提升分割的准确度。

传统方法往往难以处理复杂背景下的物体边界模糊问题,而 OCNet 通过引入独特的“对象上下文表示”(OCR)机制,有效聚合了同类物体的全局上下文信息。这一技术亮点使其在 Cityscapes、ADE20K、COCO-Stuff 等六大权威基准测试中屡创佳绩,甚至曾登顶 Cityscapes 排行榜首位。此外,该项目后续演进出的 openseg.pytorch 版本进一步支持了混合精度训练和分布式训练,大幅提升了效率与性能。

OCNet.pytorch 非常适合人工智能研究人员、算法工程师以及高校开发者使用。如果你正在从事自动驾驶环境感知、医疗影像分析或机器人视觉等相关领域的研究,需要复现前沿论文或构建高精度的语义分割模型,这套代码库提供了坚实的基线和丰富的预训练权重参考。虽然它主要面向具备深度学习基础的专业人士,但其开放的社区贡献和持续的更新维护,也为探索者提供了宝贵的学习资源。

使用场景

某自动驾驶团队正在开发城市道路感知系统,急需提升模型对复杂街景中车辆、行人及交通标志的像素级分割精度。

没有 OCNet.pytorch 时

  • 上下文理解缺失:传统分割网络难以捕捉物体间的全局依赖关系,常将远处的交通灯误识别为红色车辆,导致决策错误。
  • 边界模糊不清:在处理密集场景(如拥堵路口)时,相邻物体的边缘分割结果粘连严重,无法清晰区分行人和自行车轮廓。
  • 小目标漏检率高:对于画面中占比极小的路标或锥桶,模型往往直接忽略,造成感知盲区。
  • 调优成本高昂:为了弥补精度不足,工程师需花费大量时间手动设计后处理规则或堆叠更深的网络,训练收敛缓慢。

使用 OCNet.pytorch 后

  • 全局语境增强:利用对象上下文表示(OCR)模块,模型能准确理解“车在路上、人在人行道”的空间逻辑,大幅降低类别误判。
  • 边缘细节锐化:在 Cityscapes 等基准测试中验证的强大数据表征能力,使物体边界切割更加精准,有效分离紧邻目标。
  • 小目标感知提升:通过聚合多尺度上下文信息,显著提升了对远处小型交通设施的识别率,消除关键感知盲点。
  • 研发效率飞跃:直接复用其在多个榜单达到 SOTA 的预训练权重与架构,团队无需从零摸索,快速将 mIoU 指标提升至生产可用水平。

OCNet.pytorch 通过引入先进的对象上下文机制,从根本上解决了复杂场景下语义分割的歧义性问题,让自动驾驶感知系统看得更清、更准。

运行环境要求

操作系统
  • Linux
GPU
  • 必需 NVIDIA GPU
  • 测试环境为 4x NVIDIA P100
  • 若使用 TITAN X Pascal 或 TITAN 1080Ti,需修改代码参数
  • 要求 CUDA 8.0+
内存

未说明

依赖
notes开发环境基于 Ubuntu 16.04 和 GCC 5.4.0。代码主要在 PyTorch 0.4.1 版本上测试通过。如果使用显存较小的显卡(如 TITAN X Pascal 或 1080Ti),需要手动修改 base-oc 模块中的'sizes'参数以适应显存限制。
python3.6+
torch==0.4.1
torchvision
tensorboardX
pillow
tqdm
h5py
scikit-learn
cv2
OCNet.pytorch hero image

快速开始

OCNet:用于场景解析的对象上下文网络(PyTorch)

PWC

PWC

PWC

PWC

PWC

+ 我们的工作于2018年9月4日星期二提交至arXiv。
+ 同期的DANet工作于2018年9月9日星期日提交至arXiv。
+ 如果对您的相关研究讨论有所帮助,我们希望您能在引用中提及我们的工作。

新闻

  • 2021年2月14日 openseg.pytorch 支持 pytorch-1.7、混合精度和分布式训练。基于 PaddleClas 的 ImageNet 预训练权重,我们在 Cityscapes 验证集上达到 82.78%,在 PASCAL-Context 验证集上达到 59.62%(新的SOTA),在 COCO-Stuff 验证集上达到 45.20%(新的SOTA)。

  • 2020年7月15日 MMSegmentation 也支持我们的 OCR。我们进一步引入了一种 OCR+ 方法,通过可分离卷积和与 DeepLabv3+ 类似结构的解码器头来增强原始 OCR,从而在 Cityscapes 验证集上实现了强大的单尺度评估性能,达到 81.0%

  • 2020年7月9日 OCR(Spotlight)SegFix 已被 ECCV-2020 接受。值得注意的是,Nvidia 的研究人员通过将我们的 HRNet + OCR 与一种新的 层次化多尺度注意力机制 结合,在 Cityscapes 排行榜上创造了新的 SOTA 记录:85.4%

  • 2020年4月16日 我们已在 openseg.pytorch 中发布了 OCNet、OCR 和 SegFix 的部分检查点及日志文件。感谢您的耐心等待。

  • 2020年1月13日 用于复现 HRNet+OCR 的源代码已公开。

  • 2020年1月9日 “HRNet + OCR + SegFix” 以 mIoU 84.5% 的成绩位列 Cityscapes 排行榜第1名。

  • 2020年1月7日 “HRNet+OCR[Mapillary+Coarse]” 目前通过更好的 Mapillary 预训练,达到了 84.26% 的成绩。我们使用原始 Mapillary 训练数据对 HRNet+OCR 模型进行预训练,并在 Mapillary 验证集上取得了 50.8% 的表现。我们的训练设置如下:50万次迭代,批次大小为16,裁剪尺寸为1024x1024。我们认为,借鉴近期 Panoptic-DeepLab 的更高成本训练策略,我们的方法有望进一步提升性能。结合我们新颖的后处理机制,未来有望取得更高的效果。

  • 2019年11月28日 我们将在未来一周内发布所有 openseg.pytorch 代码,为社区提供一个强大的基准,该库支持我们所有的 OCNet 系列模型。此外,我们还在 HRNet-Semantic-Segmentation 代码库中提供了 OCR 的支持。

  • 2019年11月20日 我们更新了论文 OCR,这是我们以 第2名 成绩进入 Cityscapes 排行榜的方法。通过一种简单的新型后处理方案,我们能够达到 84.0% 的成绩。

  • 2019年7月31日 我们发布了论文 ISA,该方法非常易于使用和实现,同时比传统的基于自注意力的 OCNet 或 DANet 更加高效。

  • 2019年7月23日 我们以单模型的成绩在 Cityscapes 排行榜上获得了 第1名,相关结果将很快公布。

  • 2019年7月14日 我们基于单模型 HRNet48V2 + OCR [无任何技巧的训练],在 Cityscapes 排行榜上取得了 83.3116%+ 的成绩。更多细节将在我们的新代码库 openseg.pytorch 中分享。

  • 2019年5月27日 我们强烈建议您给我们的新代码库 openseg.pytorch 点个赞,因为我们的方法在所有6个基准测试中均达到 SOTA 水平,并且比之前的最佳方法高出1%~2%。

OCNet整体框架

请在此处查看更新后的论文 OCNet

欢迎您与朋友分享我们的工作。知乎分享

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

@article{YuanW18,
  title={Ocnet: 用于场景解析的对象上下文网络},
  author={袁宇辉、王井东},
  booktitle={arXiv预印本 arXiv:1809.00916},
  year={2018}
}

@article{HuangYGZCW19,
  title={用于语义分割的交错稀疏自注意力},
  author={黄朗、袁宇辉、郭建元、张超、陈锡林、王井东},
  booktitle={arXiv预印本 arXiv:1907.12273},
  year={2019}
}

@article{YuanCW20,
  title={用于语义分割的对象上下文表示},
  author={袁宇辉、陈锡林、王井东},
  booktitle={ECCV},
  year={2020}
}

@article{YuanXCW20,
  title={SegFix:面向分割的模型无关边界精修},
  author={袁宇辉、谢静怡、陈锡林、王井东},
  booktitle={ECCV},
  year={2020}
}

引言

上下文对于各种计算机视觉任务至关重要。最先进的场景解析方法已经充分利用了图像级别定义的上下文信息。这种上下文包含了属于不同类别的物体的混合信息。

根据每个像素的标签被定义为其所属物体的类别这一事实,我们提出了对象上下文,它考虑的是属于同一类别的物体。任意像素P的对象上下文表示为与P属于同一类别的所有像素特征的聚合。由于预先估计所有属于同一类别的物体是不现实的,我们采用自注意力机制,通过学习像素级相似度图来近似这些物体。

我们进一步提出了金字塔对象上下文和空洞空间金字塔对象上下文,以捕捉多尺度的上下文信息。基于对象上下文,我们引入了OCNet,并证明OCNet在Cityscapes基准和ADE20K基准上均达到了最先进的性能。

学习到的对象上下文可视化

使用OCNet学习到的对象上下文

实验结果

我们的所有实现都基于PyTorch,OCNet在Cityscapes和ADE20K等多个基准上无需任何额外技巧即可达到具有竞争力的性能。

目前仅使用精细标注数据集训练的OCNet在Cityscapes测试集上的性能如下:

(修复多尺度测试的bug)

方法 会议 主干网络 mIoU(%)
RefineNet CVPR2017 ResNet-101 73.6
SAC ICCV2017 ResNet-101 78.1
PSPNet CVPR2017 ResNet-101 78.4
DUC-HDC WACV2018 ResNet-101 77.6
AAF ECCV2018 ResNet-101 77.1
BiSeNet ECCV2018 ResNet-101 78.9
PSANet ECCV2018 ResNet-101 80.1
DFN CVPR2018 ResNet-101 79.3
DSSPN CVPR2018 ResNet-101 77.8
DenseASPP CVPR2018 DenseNet-161 80.6
OCNet - ResNet-101 81.7
Fast-OCNet - ResNet-101 82.1

OCNet在ADE20K验证集上的当前性能如下:

方法 会议 主干网络 mIoU(%)
RefineNet CVPR2017 ResNet-152 40.70
PSPNet CVPR2017 ResNet-101 43.29
SAC ICCV2017 ResNet-101 44.30
PSANet ECCV2018 ResNet-101 43.77
EncNet CVPR2018 ResNet-101 44.65
OCNet - ResNet-101 45.45

OCNet在LIP验证集上的当前性能如下。我们简单地将CE2P框架中的PSP模块替换为ASP-OC模块。

方法 会议 主干网络 验证集mIoU(%)
Attention+SSL CVPR2017 ResNet-101 44.73
SS-NAN CVPR2017 ResNet-101 47.92
MMAN ECCV2018 ResNet-101 46.81
MuLA ECCV2018 ResNet-101 49.30
JPPNet PAMI2018 ResNet-101 51.37
CE2P AAAI2019 ResNet-101 53.10
OCNet - ResNet-101 54.72

环境

代码是在Ubuntu 16.04系统上使用gcc5.4.0、Python 3.6+和CUDA8.0+开发的。需要NVIDIA GPU。代码使用4块NVIDIA P100 GPU进行测试。所有Cityscapes上的实验均在PyTorch 0.4.1上进行。

如果您只能访问TITAX Pascal / TITAN-1080Ti GPU,建议您修改base-oc中的参数size

self.context = nn.Sequential(
            nn.Conv2d(2048, 512, kernel_size=3, stride=1, padding=1),
            InPlaceABNSync(512),
            BaseOC_Module(in_channels=512, out_channels=512, key_channels=256, value_channels=256, 
            dropout=0.05, sizes=([2]))
            )

快速入门

要求

torch=0.4.1
torchvision
tensorboardX
pillow
tqdm
h5py
scikit-learn
cv2

只需使用pip install torch torchvision安装官方PyTorch即可。

我们主要基于官方PyTorch 0.4.1测试所有结果。

训练/验证/测试OCNet(Cityscapes)

为了方便起见,我们将训练、验证和测试集成在一个脚本中。运行此脚本即可获得所有结果。

sh run_asp_oc.sh

预计在验证集上可达到约79.5的mIoU,在测试集上可达到约78.3的mIoU(单尺度)。

也建议尝试run_base_oc.sh,该脚本同样可以在验证集上达到约79.3的mIoU,在测试集上达到约78.1的mIoU(单尺度)。

为进一步提升性能,可以采用CriterionOhemDSN_single,设置如下:

USE_OHEM=True
OHEMTHRES=0.7
OHEMKEEP=100000

这样预计在验证集上可达到约80.4的mIoU,在测试集上可达到约79.0的mIoU(单尺度)。

要达到测试集上的81.2,需先用训练集和验证集共同训练模型8万次(多尺度+翻转情况下测试集可达约80.5),然后再用固定学习率(1e-4)对该模型进行10万次微调。我们相应地采用了在线困难样本挖掘方法。

数据准备

对于Cityscapes数据集,请从Cityscapes官网下载数据集。将所有图像解压到“./OCNet/dataset/cityscapes”路径下。确保文件夹“./OCNet/dataset/cityscapes”内的目录结构如下:

|-- README
|-- get_cs_extra.sh
|-- gtCoarse
|   |-- README
|   |-- license.txt
|   |-- train
|   |-- train_extra
|   `-- val
|-- gtFine
|   |-- README
|   |-- license.txt
|   |-- test
|   |-- train
|   `-- val
|-- leftImg8bit
|   |-- README
|   |-- license.txt
|   |-- test
|   |-- train
|   |-- train_extra
|   `-- val
|-- license.txt
`-- tree.txt

预训练模型

请将预训练模型放在“./OCNet/pretrained_model”文件夹下。

ImageNet预训练ResNet-101

包含环境的Docker镜像

rainbowsecret/pytorch04:20180719

其他问题(验证集与测试集之间的性能差距)

我们发现train类别的mIoU有时不稳定。例如,我们运行代码5次,其中有一次train类别的mIoU为0.42,而另外4次则为0.75。

此外,验证集和测试集的准确率之间也存在一些差异。例如,如果两次运行base-oc方法,可能会分别在验证集上得到79.3和79.8的mIoU,而在测试集上则分别为78.55和77.69。因此,如果您希望在测试集上取得良好性能,我建议您多次运行我们的方法;尽管如此,由于训练/验证集与测试集之间的分布差异,我们的方法在验证集上表现得相当稳健。

致谢

本项目基于Zilong Huang提供的复现版Deeplabv3、PSPNet(PyTorch)构建,相关代码的版权仍归Zilong Huang所有。

感谢第三方库

InplaceABN

Non-local_pytorch.

Pytorch-Deeplab

PyTorch-Encoding

semantic-segmentation-pytorch

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

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

162.1k|★★★☆☆|1周前
开发框架图像Agent

ComfyUI

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

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

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|1周前
语言模型图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|1周前
开发框架图像Agent