人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载本文围绕 PaddleSeg 仓库中 contrib/PanopticSeg 全景分割工具包所使用的标签编码协议展开。全景分割Panoptic Segmentation将语义分割semantic segmentation与实例分割instance segmentation统一到同一张标注图上每个像素不仅携带属于哪个类别的信息还携带属于该类别的第几个实例的信息。读懂这套pan_id编码协议是理解 PanopticSeg 数据预处理、模型后处理、可视化与 PQPanoptic Quality评测的前提。读完本文你将掌握pan_id的数学构成、thing/stuff/未知像素三类标签的编码规则、默认常量label_divisor的由来以及该协议在数据加载、后处理和评测链路中的真实调用方式。1. 协议总览一张图上每个像素的pan_id在 PanopticSeg 工具包中全景分割图无论是数据集提供的参考标签图还是模型推理输出的预测图的每个像素值都被称为pan_idpanoptic ID。协议规定假设共有c个类别最大实例个数为n则pan_id的取值范围为0到c * label_divisor n闭区间。也就是说pan_id不是简单的类别编号而是把类别维度与实例维度压缩进同一个整数。这一设计的核心收益是一张单通道整型图即可同时表达语义与实例信息无需为二者维护两张独立标签图同时任意一个pan_id都可以通过除法和取模运算唯一地还原出(cat_id, ins_id)二元组便于评测与可视化。2. 三种标签的编码规则2.1 thing 类别可数物体类对于 thing 类如人、车、动物等可以逐个计数的物体类别pan_id由类别 ID 与实例 ID 联合编码pan_id (cat_id 1) * label_divisor ins_id其中cat_id是类别 ID从0开始计数ins_id是实例 ID从1开始计数。注意两个细节类别部分带1偏移实例 ID 从1而不是0起步。这两点都是为了让编码结果严格避开未知标签的保留值0并让 stuff 类与 thing 类在数值空间上自然分层见下文。2.2 stuff 类不可数区域类对于 stuff 类如天空、地面、墙壁等背景区域不区分个体pan_id不再附加实例分量pan_id (cat_id 1) * label_divisor等价于ins_id 0的特例。stuff 像素的pan_id恰好落在其类别区间内的基准位置上即pan_id % label_divisor 0。这一性质被工具包直接利用来判定该标签是否属于 crowd / 未分实例区域见第 5 节的is_crowd。2.3 未知标签对于无法确定结果或未标注的像素pan_id统一取值为0。由于cat_id 1 1且 stuff 编码最小值为1 * label_divisor 10000在编码空间中是独立保留的不会与任何合法标签冲突。2.4 常量label_divisorlabel_divisor是一个预设常量用于在数值空间中划分类别段与实例段的宽度。协议规定其默认值为1000。以默认值为例cat_id 0的 thing 类第 1 个实例编码为1001cat_id 0的 stuff 类编码为1000而cat_id 1的 thing 类第 3 个实例编码为2003等等。可以直观理解为每个类别占用连续 1000 个 ID 号段其中(cat_id1)*1000为该类 stuff 基准其后的若干正整数为该类各实例。3. 源码中的编码与解码实现3.1encode.py协议的唯一权威实现协议的数学公式在 paddlepanseg/utils/encode.py 中被完整落地共 3 个函数_CAT_ID_OFFSET 1 def decode_pan_id(pan_id, label_divisor): return (pan_id // label_divisor) - _CAT_ID_OFFSET, pan_id % label_divisor def encode_pan_id(cat_id, label_divisor, ins_id0): return (cat_id _CAT_ID_OFFSET) * label_divisor ins_id def is_crowd(pan_id, label_divisor): return pan_id % label_divisor 0encode_pan_id(cat_id, label_divisor, ins_id0)与文档公式一一对应ins_id缺省为0即默认编码 stuff 标签decode_pan_id(pan_id, label_divisor)是编码的逆运算pan_id // label_divisor - 1得到cat_idpan_id % label_divisor得到ins_idstuff 时为0is_crowd(pan_id, label_divisor)利用ins_id 0的性质判定该 ID 是否属于未分实例的 crowd/stuff 区域。源码文件头部的注释TODO: Make the encoding system object-oriented and configurable.也提示我们目前这套编码以模块级函数形式存在工具包仍以label_divisor作为唯一可调参数。3.2 从 COCO 标注到三张标签图DecodeLabels数据预处理阶段是编码协议最核心的消费方。在 paddlepanseg/transforms/transforms.py 的DecodeLabels中工具包把 COCO 风格的 JSON 标注segments_info其中id为原始标注 ID、category_id为原始类别 ID、iscrowd标记是否属于拥挤区域重编码为统一的pan_idclass DecodeLabels(object): def __init__(self, label_divisor, ignore_index): self.label_divisor label_divisor self.ignore_index ignore_index def __call__(self, data): raw_label data[label] segments_info data[ann] thing_ids set(data[thing_ids]) ins_label np.zeros_like(raw_label, dtypeint64) sem_label np.full_like(raw_label, self.ignore_index, dtypeint64) pan_label np.zeros_like(raw_label, dtypeint64) ins_id 0 class_id_tracker Counter() for seg in segments_info: id_ seg[id] mask (raw_label id_) cat_id seg[category_id] sem_label[mask] cat_id if cat_id in thing_ids: if seg[iscrowd] 0: # Do not include crowded instances in ins_label ins_id 1 ins_label[mask] ins_id # Re-encode pan_id using cat_id and tracked class instance id class_id_tracker[cat_id] 1 pan_id encode_pan_id( cat_id, self.label_divisor, ins_idclass_id_tracker[cat_id]) pan_label[mask] pan_id else: pan_id encode_pan_id(cat_id, self.label_divisor) pan_label[mask] pan_id seg[id] pan_id ...该实现透露了三个重要的工程细节实例 ID 按类别分别计数class_id_tracker以cat_id为键分别计数因此每个类别的实例都从 1 开始编号而非全局连续编号——这与第 2 节公式中ins_id是该类别内的实例 ID的语义严格一致crowd 区域只参与 pan 编码iscrowd 1的区域不写入ins_label但仍会通过class_id_tracker占用一个实例计数并生成对应的pan_id一图三用同一份标注被展开为ins_label纯实例图、sem_label纯语义图背景像素填ignore_index255和pan_labelpan_id全景图训练与评测阶段按需取用。4. 配置层面的串联label_divisor从 YAML 到运行时label_divisor不仅在数据侧生效还贯穿后处理器与评测器因此它在配置文件中被统一声明并通过 YAML 锚点anchor共享。以 Mask2Former COCO 配置 configs/mask2former/mask2former_resnet50_os16_coco_1024x1024_bs4_370k.yml 为例num_classes: num_classes 133 ignore_index: ignore_index 255 label_divisor: label_divisor 1000 ... train_dataset: type: COCO ... label_divisor: *label_divisor num_classes: *num_classes ignore_index: *ignore_index val_dataset: ... - type: DecodeLabels label_divisor: *label_divisor ignore_index: *ignore_index ...同一套label_divisor 1000锚点被train_dataset、val_dataset以及后处理器postprocessor多处复用保证数据编码、模型输出重编码与评测三方使用完全一致的除数。Panoptic DeepLab 的 Cityscapes 配置 configs/panoptic_deeplab/panoptic_deeplab_resnet50_os32_cityscapes_1025x513_bs8_90k.yml 同样遵循这一模式。从源码看label_divisor有多级默认值兜底机制配置解析层paddlepanseg/cvlibs/config.py 中_set_attr_if_not_exists(pp_cfg, label_divisor, 1000)未配置时写入默认值1000数据集层paddlepanseg/datasets/base_dataset.py 中PanopticDataset定义类常量LABEL_DIVISOR 1000构造参数label_divisorNone时自动回退到该类常量后处理器层Postprocessor基类与PanopticDeepLabPostprocessor、MaskFormerPostprocessor的构造参数均带label_divisor1000默认值。因此即便用户完全不写该字段协议也能以默认值1000正常工作而 COCO、Cityscapes 等数据集的类别数均远小于 1000默认除数在工程上是安全的。5. 编码协议在后处理与评测中的应用5.1 PanopticDeepLab 后处理重编码预测结果模型输出的原始张量并不是pan_id图需要后处理器按同一协议重新编码。在 paddlepanseg/postprocessors/panoptic_deeplab_pp.py 的_merge_semantic_and_instance中thing 实例先经中心点检测、像素分组得到实例图再对每个实例的掩码在其语义类内做多数投票majority voting确定class_id并通过class_id_tracker按类计实例随后调用encode_pan_id(class_id, self.label_divisor, ins_idnew_ins_id)写入pan_segstuff 区域则要求语义预测一致且面积不小于stuff_area默认 2048 像素直接调用encode_pan_id(class_id, self.label_divisor)即ins_id0写入。由此预测全景图与参考标签共用同一套数值空间评测时可以直接逐像素比对。5.2 PQ 评测从pan_id还原cat_idPanoptic QualityPQ评测需要把预测的每个pan_id映射回类别。在 paddlepanseg/utils/evaluation/pan_seg_evaluator.py 中labels, labels_cnt np.unique(pred, return_countsTrue) for label, label_cnt in zip(labels, labels_cnt): if label VOID: # id0 stands for area to be ignored continue cat_id, _ decode_pan_id(label, self.label_divisor) ...未知像素pan_id 0在评测时被直接跳过其余每个pan_id都通过decode_pan_id还原出cat_id并组装预测标注字典随后与 GT 标注做匹配与混淆矩阵统计。同理实例分割评测器 paddlepanseg/utils/evaluation/ins_seg_evaluator.py 也通过decode_pan_id(i, self.label_divisor)解析类别并用is_crowd(i, self.label_divisor)跳过未分实例的区域。5.3 可视化按类取色 按实例抖动编码协议同样服务于可视化。在 paddlepanseg/utils/visualize.py 的visualize_panoptic中逐一遍历图中唯一的pan_id通过decode_pan_id(lab, label_divisor)得到(cat_id, ins_id)基础色取自类别的 colormap当ins_id 0时在基础色附近做随机抖动生成该实例专属颜色从而让同一类别下的不同实例在视觉上可区分。这正是单通道pan_id图能支撑完整彩色全景可视化的原因。6. 数值示例与自检为便于理解下面用label_divisor 1000给出几个具体编码场景cat_idins_idpan_id 计算pan_idthing 类第 1 个实例01(01)×1000 11001thing 类第 2 个实例02(01)×1000 21002thing 类第 1 个实例11(11)×1000 12001stuff 类20(21)×1000 03000未知 / 未标注———0反向验证pan_id 2001时decode_pan_id(2001, 1000)得到(2001 // 1000 - 1, 2001 % 1000) (1, 1)与编码输入一致而pan_id 3000时is_crowd(3000, 1000)返回True符合 stuff 语义。7. 协议要点小结单图双语义pan_id一张单通道图同时编码语义类别与实例序号pan_id (cat_id 1) * label_divisor ins_idthing 与 stuff 分层thing 使用ins_id 1stuff 退化为ins_id 0二者在数值上不重叠且均可由% label_divisor快速区分0号保留pan_id 0专用于未知/未标注像素评测时按 VOID 忽略label_divisor默认 1000在配置、数据集、后处理器与评测器四层均有默认值兜底可通过 YAML 锚点全局统一定制全链路一致数据加载DecodeLabels、模型后处理encode_pan_id重编码、PQ 评测decode_pan_id还原与可视化decode_pan_id取色共用 utils/encode.py 中的同一套编解码函数确保训练、推理与评估的数值口径完全统一。如需进一步了解该协议在完整数据流程中的位置可继续阅读 quick_start_en.md、full_features_en.md 与 dev_guide_en.md或直接对照 mask2former 配置 与 panoptic_deeplab 配置 验证各环节的label_divisor取值。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐零代码搞定图像分割数据集PaddleSeg数据生成工具全攻略零代码搞定图像分割数据集PaddleSeg数据生成工具全攻略 图像分割模型训练中高质量标注数据短缺是最棘手的问题。标注一张语义分割图像平均需要30分钟专业人工智能计算机视觉预训练SRS 实时媒体服务器全景指南协议、转封装、编解码与部署实践SRS 实时媒体服务器全景指南协议、转封装、编解码与部署实践 SRSSimple Realtime Server是一个 简单、高性能、AI 驱动的实时媒体音视频后端直播Transformers 中的 SegFormerMiT 编码器与全 MLP 解码器的语义分割实践指南Transformers 中的 SegFormerMiT 编码器与全 MLP 解码器的语义分割实践指南 本文围绕 Transformers 官方模型文档 Se人工智能深度学习机器学习预训练微调NLP计算机视觉语音多模态上一篇AidokuiOS终极免费漫画阅读神器下一篇WinPmemWindows内存取证的终极完整指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Atlas 300V推理加速卡部署YOLO实战:从NPU选型到性能调优 前一阵有个朋友问我:Atlas 300V 24G到底是运算加速卡吗?他接了个工业质检项目,检测方案已经定了YOLO,但GPU预算一直谈不下来,正好有人推荐了Atlas系列。这个问题问得特别典型,因为很多人听到“加速卡”三个… · 2026/9/25 7:21:29
GitHub Codex登录失败?用TOTP认证器绕过短信限制 1. 项目概述:Codex登录困境的本质与真实解法Codex不是某个神秘黑箱,它本质上是GitHub官方推出的、深度集成在GitHub.com网页环境中的AI编程助手,和VS Code里的Copilot插件同源但部署形态不同——它不提供独立App,也不开放独立API密… · 2026/9/25 7:21:23
Agent技能库实战:从Prompt膨胀到按需调用 做Agent开发快两年了,我最大的体会是:Agent能不能真正落地,很多时候不取决于模型多聪明,而取决于你给它准备的“技能”靠不靠谱。今天想聊的这个项目agent-skills,就是一套把Agent能力拆成可复用技能、按需注册与调用的… · 2026/9/25 7:21:23
iOS原生CLI编程助手:本地运行CodeLlama的实践与架构 1. 这不是“把Claude塞进手机”,而是重构AI编程助手的终端形态我把 Claude Code 装进了手机,然后把它开源了——这句话乍听像极了某款App上架通知,但实际远比这复杂得多。它既不是调用官方API封装个壳子,也不是简单移植网页版到iO… · 2026/9/25 7:56:54
Dart SDK Front-End Builder 机制深度解析:源码与 dill 的统一程序元素构造抽象 编程语言编译器语言运行时标准库开发工具 【免费下载链接】sdk The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more. 项目地址: https://gitcode.com/gh_mirrors/sdk1/sdk 点击查看 免费下载 本文以 Dart SDK 前端编译器… · 2026/9/25 7:56:54
快马前端生成器:零基础入门的可视化代码教学工具 1. 快马不是“快码”,而是新手前端真正的第一块跳板我带过不少零基础转行的学员,前年有个刚毕业的文科生,连<div>和<span>都分不清,硬是靠快马生成的登录页,三个月后拿下某电商公司的前端实习岗。他没写过… · 2026/9/25 7:56:54
PHP连接Redis全攻略:扩展安装、哨兵集群与避坑实践 不少做PHP的朋友第一次接触Redis,都是从“装个扩展,然后new Redis()”开始的。但等到真正要上生产环境、要搭集群、要处理高并发下的连接异常时,才会发现Redis的客户端世界远比想象中复杂。这一篇实战实录,我专门把Redis扩展的几种… · 2026/9/25 7:56:48
iOS音视频开发核心:AVFoundation底层原理与实战 1. 这不是“又一个视频播放教程”,而是 iOS 视频开发的底层通关地图AVFoundation 是 iOS/macOS 上处理音视频最核心、最底层的框架,它不像 UIKit 那样“开箱即用”,也不像第三方库那样封装友好。它更像是一套精密的工业级工具箱——螺丝刀、游… · 2026/9/25 7:56:42
Simple Allow Copy:一键解锁网页复制限制的Chrome插件实战指南 你有没有遇到过这种情况:想从某个网页上复制一段文字,结果右键菜单被禁用;鼠标选中文字后,一按CtrlC,弹窗提示“该内容受版权保护”;或者更气人的是——复制倒是能复制,但粘贴出来后面自动跟了一… · 2026/9/25 7:56:42
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37