首页/新闻资讯/正文详情

Kornia 图像缩放掩码语义修复:Resize(antialias=True) 不再模糊标签掩码

发布时间:2026/9/24 14:03:50 来源:云帆数科 栏目:资讯中心
Kornia 图像缩放掩码语义修复:Resize(antialias=True) 不再模糊标签掩码
计算机视觉深度学习人工智能图像处理【免费下载链接】kornia 空间人工智能的几何计算机视觉库项目地址https://gitcode.com/kornia/kornia点击查看免费下载导读本文围绕 Kornia 变更日志条目 changelog.d/4540.fixed.md 展开Resize(antialiasTrue)在旧版本中会把抗锯齿滤波作用到掩码mask上导致离散的标签集被模糊稀释本次修复后抗锯齿默认只作用于图像掩码标签集被完整保留。读者将掌握掩码在Resize中的默认采样规则、如何在容器中通过extra_args[DataKey.MASK]显式开启软掩码滤波以及如何用测试用例验证这一行为。变更背景一个关于标签保真的 bug在 Kornia 的 2D 几何增强基类 GeometricAugmentationBase2D 的文档约定中明确记录了一条行为边界Masks are resampled with nearest neighbour whateverresamplethe augmentation uses for images, unlessresampleis passed explicitly totransform_masksorinverse_masks— which is whatextra_args[DataKey.MASK]does in a container. Antialiasing is disabled for masks by default, even when it is enabled for images.问题出在旧版Resize(antialiasTrue)当用户在容器中使用该增强时antialias标志会从图像的 flags 中透传到掩码处理路径掩码因此在缩放过程中被高斯预滤波downscaling 前滤波。对于语义分割掩码这类离散标签图这种滤波会产生介于两个标签之间的插值值破坏标签集的完整性后续阈值化处理还需要额外的恢复步骤。本次修复的核心行为Resize(antialiasTrue)不再对掩码启用抗锯齿掩码默认走最近邻nearest采样标签集被完整保留只有在用户显式传入antialiasTrue时软掩码soft mask如概率图、权重图才会被滤波。掩码默认采样规则nearest 关闭抗锯齿修复的具体实现在 kornia/augmentation/_2d/geometric/base.py 的transform_masks方法中def transform_masks( self, input: torch.Tensor, params: Dict[str, torch.Tensor], flags: Dict[str, Any], transform: Optional[torch.Tensor] None, **kwargs: Any, ) - torch.Tensor: # Nearest is the mask default, but an explicit resample wins, matching inverse_masks. if resample not in kwargs and resample in (self.flags if flags is None else flags): kwargs[resample] Resample.get(nearest) # Disable antialiasing by default for masks so discrete labels are preserved, # while allowing an explicit override for soft masks. if antialias not in kwargs and antialias in (self.flags if flags is None else flags): kwargs[antialias] False return super().transform_masks(input, params, flags, transformtransform, **kwargs)关键点resample 默认值只要调用方没有显式传入resample掩码一律使用Resample.NEAREST最近邻与图像使用的bilinear/bicubic无关antialias 默认值只要调用方没有显式传入antialias掩码路径强制antialiasFalse即使self.flags[antialias]为True也不透传显式覆盖优先调用方容器通过extra_args或直接调用transform_masks传入的resample与antialias会被保留这为软掩码场景留出了明确的显式通道双向一致inverse_masks同样遵循 nearest 默认保证逆变换不会引入新的标签污染。这里需要澄清一点Resize类本身kornia/augmentation/_2d/geometric/resize.py的apply_transform只负责把antialias传给底层kornia.geometry.transform.resize处理图像掩码走的是基类transform_masks路径因此本次修复位于基类层对Resize、LongestMaxSize、SmallestMaxSize等所有派生类统一生效。容器中的显式覆盖extra_args[DataKey.MASK]在AugmentationSequential等容器中使用时每个数据键的处理参数通过extra_args传入。该参数在 kornia/augmentation/container/augment.py 中定义其语义在文档字符串中有详细说明extra_args: a dict keyed bykornia.constants.DataKeythatreplacesthe default{DataKey.MASK: {resample: Resample.NEAREST, align_corners: None}}rather than merging into it, so an override that omits a key drops that keys default.这意味着两点使用前提按 DataKey 分键extra_args的键必须是kornia.constants.DataKey枚举成员。DataKey.MASK的定义位于 kornia/constants.pyMASK 1与INPUT 0、BBOX 2、KEYPOINTS 5等并列整体替换而非合并一旦你为DataKey.MASK传入了字典它会替换默认值{resample: Resample.NEAREST, align_corners: None}而不是与之合并。因此如果你的覆盖字典省略了resample掩码将不再有 nearest 默认会退化回图像重采样模式这点需要在写配置时特别注意。软掩码soft mask的显式滤波示例当掩码是软掩码如边界概率图、注意力权重图、连续的 alpha 图时标签保真不再是首要约束你希望掩码与图像一样经历双线性插值与抗锯齿滤波。此时需要在容器中显式开启import torch import kornia as K from kornia.augmentation import Resize from kornia.constants import DataKey, Resample aug K.AugmentationSequential( K.Resize((6, 8), antialiasTrue), data_keys[input, mask], extra_args{ DataKey.MASK: { resample: Resample.BILINEAR, align_corners: True, antialias: True, } }, ) image torch.rand(1, 3, 12, 16) soft_mask torch.rand(1, 1, 12, 16) # 连续的软掩码 out_image, out_mask aug(image, soft_mask)其中extra_args中resample、align_corners、antialias三个键会被透传到掩码的采样路径掩码将与图像保持一致的双线性 抗锯齿行为。直接调用 transform_masks如果不经过容器也可以直接调用增强实例的transform_masks方法效果等价from kornia.augmentation import Resize resize Resize((6, 8), antialiasTrue) # 需要先生成参数 params resize.forward_parameters(torch.empty(1, 3, 12, 16).shape) out_mask resize.transform_masks( soft_mask, params, resize.flags, antialiasTrue, resamplebilinear )行为对照离散掩码 vs 软掩码配置场景掩码采样方式标签集适用场景Resize(antialiasTrue)默认本次修复后nearest无抗锯齿完整保留语义分割标签、实例掩码、bool 掩码Resize(antialiasTrue)extra_args中resamplebilinear, antialiasTrue双线性 抗锯齿会产生插值中间值软掩码、概率图、注意力图Resize(antialiasFalse)默认参数即关闭nearest完整保留任何离散掩码值得注意的是即使掩码是浮点 dtype只要走默认路径Resize(antialiasTrue)也不会模糊它——修复前该行为与直觉相悖用户以为只有图像被滤波实际掩码标签也被稀释了。源码级佐证测试如何验证标签保真仓库测试 tests/augmentation/container/test_augmentation_sequential.py 对本次修复提供了两处直接验证。测试一antialiasTrue 不再破坏标签集test_resize_antialias_preserves_mask_labels_4479构造了一个棋盘格状掩码torch.float32、torch.int64、torch.bool三种 dtype 分别参数化without_antialias K.AugmentationSequential( K.Resize((6, 8), antialiasFalse), data_keys[input, mask], ) with_antialias K.AugmentationSequential( K.Resize((6, 8), antialiasTrue), data_keys[input, mask], ) expected_mask without_antialias(image, mask)[1] out_image, out_mask with_antialias(image, mask) assert out_mask.dtype mask_dtype assert torch.equal(out_mask, expected_mask) assert set(out_mask.unique().tolist()) set(mask.unique().tolist()) self.assert_close(out_image, expected_image)断言逻辑对应修复目标torch.equal(out_mask, expected_mask)antialiasTrue与antialiasFalse的掩码输出逐元素完全一致证明抗锯齿没有作用于掩码set(out_mask.unique()) set(mask.unique())输出标签集与输入标签集完全相同离散标签没有被稀释出中间值图像输出则与kornia.geometry.transform.resize(..., antialiasTrue)的独立结果保持一致证明图像路径的抗锯齿仍然生效。测试二显式 antialias 覆盖生效test_resize_mask_explicit_antialias_override_4479验证显式传入antialiasTrue时软掩码确实被滤波aug K.AugmentationSequential( K.Resize((6, 8), antialiasTrue), data_keys[input, mask], extra_args{ DataKey.MASK: { resample: Resample.BILINEAR, align_corners: True, antialias: True, } }, ) out_mask aug(image, mask)[1] expected resize(mask, (6, 8), bilinear, align_cornersTrue, antialiasTrue) without_antialias resize(mask, (6, 8), bilinear, align_cornersTrue, antialiasFalse) self.assert_close(out_mask, expected) assert not torch.equal(out_mask, without_antialias)输出与独立resize(mask, ..., antialiasTrue)结果一致且与antialiasFalse的版本不同——说明显式覆盖优先级高于默认禁用逻辑软掩码滤波通道是真实可用的。相关参考变更条目changelog.d/4540.fixed.md掩码默认采样与显式覆盖实现kornia/augmentation/_2d/geometric/base.pyResize及其派生类实现kornia/augmentation/_2d/geometric/resize.py容器extra_args语义kornia/augmentation/container/augment.pyDataKey枚举定义kornia/constants.py底层resize函数签名kornia/geometry/transform/affwarp.py行为验证测试tests/augmentation/container/test_augmentation_sequential.py赞分享计算机视觉深度学习人工智能图像处理【免费下载链接】kornia 空间人工智能的几何计算机视觉库项目地址https://gitcode.com/kornia/kornia点击查看免费下载相关推荐InQL与Burp Suite无缝集成提升API安全测试效率的7个技巧InQL与Burp Suite无缝集成提升API安全测试效率的7个技巧 InQL作为一款强大的开源Burp Suite扩展专为高级GraphQL测试设计通Kornia Boxes.to_mask 列表填充通道保持为空坐标变换后掩码语义的修复实践Kornia Boxes.to_mask 列表填充通道保持为空坐标变换后掩码语义的修复实践 Kornia 在 migration 024.fixed.md计算机视觉深度学习人工智能图像处理Kornia 修复 bbox_to_mask 半精度精度问题float16/bfloat16 大图掩码像素网格坍缩与 float32 网格方案Kornia 修复 bbox_to_mask 半精度精度问题float16/bfloat16 大图掩码像素网格坍缩与 float32 网格方案 导读 本文围绕计算机视觉深度学习人工智能图像处理上一篇《isd 项目安装与配置指南》下一篇Source Han Mono 字体项目安装与配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Doctrine ORM NamingStrategy 完全指南:自定义表名与列名生成规则
Doctrine ORM NamingStrategy 完全指南:自定义表名与列名生成规则

数据库ORM后端 【免费下载链接】orm Doctrine Object Relational Mapper (ORM) 项目地址: https://gitcode.com/gh_mirrors/or/orm 点击查看 免费下载 本指南围绕 Doctrine ORM 的命名策略(NamingStrategy)机制展开,讲解如何通过… · 2026/9/24 14:03:43

【Dv3Admin】传递数据实现查询功能
【Dv3Admin】传递数据实现查询功能

在开发管理后台或者数据展示系统时,常常需要根据用户选择的科目来查询与之相关的知识点层级。传统的做法可能需要手动编写大量的代码来管理状态和传递数据,但在使用 fast-crud 这样的工具库时可以利用其强大的钩子函数(hook)和配置能力,轻松地实现科目查询功能。 本文将介… · 2026/9/24 14:03:43

【Dv3Admin】实现自定义工作台弹窗
【Dv3Admin】实现自定义工作台弹窗

表格操作中常需要在标准的编辑、查看之外引入定制化功能。将这些功能以弹窗形式集成到操作列中,是高频的 UI 设计场景。 本文介绍如何基于 fast-crud 框架,通过扩展操作按钮实现“工作台”弹窗功能,并保持与原有表单弹窗机制的兼容共存。 文章目录 应用场景 实现方式 总结 … · 2026/9/24 14:03:43

YOLOv8与多模态大模型融合实战:从CLIP开放词汇检测到SAM实例分割再到三模态统一框架的完整落地指南
YOLOv8与多模态大模型融合实战:从CLIP开放词汇检测到SAM实例分割再到三模态统一框架的完整落地指南

🎪 摸鱼匠:个人主页 🎒 个人专栏:《YOLOv8 入门到精通:全栈实战》 🥇 没有好的理念,只有脚踏实地! 文章目录 一、YOLOv8与多模态大模型融合基础 1.1 多模态大模型时代的计算机视觉新范式 1.2 YOLOv8与CLIP的协同工作原理 1.3 YOLOv8与SAM的协同工作原理 二、YOLO… · 2026/9/24 16:03:52

Django实现xAdmin自定义布局管理编辑界面
Django实现xAdmin自定义布局管理编辑界面

Django 提供了强大的用户继承功能,便于扩展和定制用户模型。 Django xAdmin 提供了基本的用户管理功能,但默认的界面在视觉上较为简单。默认界面在视觉上并不美观,可能给用户管理带来不便。 可以看到,该界面虽然功能齐全,但视觉设计较为普通,可能无法满足某些项目的需求… · 2026/9/24 16:03:52

algorithm-base 实战解析:剑指 Offer 45 把数组排成最小的数与 LeetCode 179 最大数——自定义比较规则与三向切分排序
algorithm-base 实战解析:剑指 Offer 45 把数组排成最小的数与 LeetCode 179 最大数——自定义比较规则与三向切分排序

文档教程知识库 【免费下载链接】algorithm-base 一位酷爱做饭的程序员,立志用动画将算法说的通俗易懂。我的面试网站 www.chengxuchu.com 项目地址: https://gitcode.com/gh_mirrors/al/algorithm-base 点击查看 免费下载 本篇技术指南以 algorithm-ba… · 2026/9/24 16:03:46

从零跑通Ryujinx:4步在PC上启动你的第一份Switch游戏
从零跑通Ryujinx:4步在PC上启动你的第一份Switch游戏

从零跑通Ryujinx:4步在PC上启动你的第一份Switch游戏 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx NSP文件放进了目录,双击启动,窗口却一闪就没了… · 2026/9/24 16:03:46

出入口双目活体:照片、视频、面具分别防到哪一层
出入口双目活体:照片、视频、面具分别防到哪一层

能力边界与测试观察。不提供商务联系,不把活体写成已获某认证的结论。招标和样板点里,「双目活体」几乎是人脸门禁的默认词。工程上它回答的是攻击面,不是识别率:系统能否拒绝一张照片、一段屏幕回放、一副面具,同时仍… · 2026/9/24 16:03:39

BlockNote 开发者指南:从零搭建、目录架构到发布流程的完整实战手册
BlockNote 开发者指南:从零搭建、目录架构到发布流程的完整实战手册

前端富文本UI组件AI 应用 【免费下载链接】BlockNote A React Rich Text Editor thats block-based (Notion style) and extensible. Built on top of Prosemirror and Tiptap. 项目地址: https://gitcode.com/gh_mirrors/bl/BlockNote 点击查看 免费下载 本指南以… · 2026/9/24 16:03:27

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码