Kornia mix 增强的 bfloat16 支持与半精度 dtype 保持:MixUp / CutMix 实现解析
Kornia mix 增强的 bfloat16 支持与半精度 dtype 保持MixUp / CutMix 实现解析【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址: https://gitcode.com/gh_mirrors/ko/kornia本篇文章聚焦 Kornia 增强模块kornia.augmentation的一项近期修复为全部 mix 类增强MixAugmentationBaseV2 家族补齐 bfloat16 支持并让 RandomMixUpV2 与 RandomCutMixV2 在输入为 float16 / bfloat16 时保持输入精度、同时把标签安全提升为 float32。读完本文你将掌握 mix 增强家族的 dtype 处理约定、源码中的核心实现路径以及如何在训练管线中安全使用半精度 MixUp/CutMix。变更背景mix 增强家族与精度丢失问题Mix 类增强mix augmentation与几何增强不同——它不做仿射变换、没有变换矩阵、也不支持inverse()参见 mix 基类约定而是通过样本混合实现正则化当前仓库中属于该家族的有RandomMixUpV2整图线性混合实现RandomCutMixV2按 bbox 裁剪区域粘贴实现RandomJigsaw、RandomMosaic、RandomPatchMix、RandomTransplantation等其余 mix 算子在本次修复之前MixUp/CutMix 处理标签时会把标签强制转换为图像自身的 dtype。这在 float32/float64 输入下没有问题但一旦输入是半精度张量就会踩坑bfloat16尾数只有 8 位float16尾数也只有 11 位而分类任务中类别 id 往往大于 256标签被 cast 到半精度后大整数被截断例如类别 id257在 bfloat16 下会变成256、999会变成1000——这正是测试注释中明确指出的回归现象见 test_conventions_mix.py 中#4657issue 的记录。同时mix 类增强此前不接受 bfloat16 输入与 Kornia 对半精度AMP 训练的支持趋势脱节。changelog.d/4471.fixed.md记录的本项变更即包含两个动作为 mix 增强增加 bfloat16 支持以及在 MixUp/CutMix 中保持输入半精度 dtype、标签提升为 float32 以保证精确。变更一mix 增强基类统一接纳 bfloat16所有 mix 算子共享抽象基类MixAugmentationBaseV2kornia/augmentation/_2d/mix/base.py。dtype 白名单在transform_tensor中统一收口# kornia/augmentation/_2d/mix/base.py#L111-L120 def transform_tensor(self, input, *, shapeNone, match_channelTrue): _validate_input_dtype(input, accepted_dtypes[torch.bfloat16, torch.float16, torch.float32, torch.float64]) if shape is None: return _transform_input(input) return _transform_input_by_shape(input, reference_shapeshape, match_channelmatch_channel)要点白名单同时包含torch.bfloat16与torch.float16意味着RandomMixUpV2 / RandomCutMixV2 / RandomJigsaw / RandomMosaic 等全部 mix 算子都接受 bfloat16 输入该校验同样在**参数回放replay**路径中生效forward在params非空时仍会对输入执行_validate_input_dtypebase.py#L282-L291所以回放一个来自 float32 采样、却在 bfloat16 张量上重放的参数字典会直接抛出TypeError整数输入uint8、int64、bool依旧被拒绝测试test_convention_mix_rejects_integer_images与test_convention_mix_replay_rejects_an_unsupported_dtype_with_type_error覆盖了这一点test_conventions_mix.py、#L589-L597。基类会为每次前向在self._params中记录一个dtype字段其数值来自DType枚举的映射kornia/constants.pyclass DType(Enum, metaclass_KORNIA_EnumMeta): INT64 0 FLOAT16 1 FLOAT32 2 FLOAT64 3 BFLOAT16 4 # 与 torch.bfloat16 一一对应变更二MixUp 图像保持输入 dtype、标签提升为 float32RandomMixUpV2的图像混合在apply_transform中完成核心一行是# kornia/augmentation/_2d/mix/mixup.py#L127-L130 input_permute input.index_select(dim0, indexparams[mixup_pairs].to(input.device)) lam params[mixup_lambdas].view(-1, 1, 1, 1).expand_as(input).to(input.device, dtypeinput.dtype) return input * (1 - lam) input_permute * lam注意lam被显式to(dtypeinput.dtype)混合系数与混合结果都保持在输入的 bfloat16/float16 精度上图像分支不会再被悄悄提升为 float32 后又转回半精度。标签分支则不同。apply_transform_class/apply_non_transform_class使用统一的calc_dtype规则# kornia/augmentation/_2d/mix/mixup.py#L151-L152 image_dtype DType.to_torch(int(params[dtype].item())) calc_dtype image_dtype if image_dtype in (torch.float32, torch.float64) else torch.float32即float32/float64 输入 → 标签沿用图像 dtypefloat16/bfloat16 输入 → 标签一律提升为 float32。最终输出三列(B, 3)torch.stack([input, labels_permute, params[mixup_lambdas]], -1)三列分别为原始标签、配对标签、混合系数 lambda。提升为 float32 的原因在类 docstring 中有明确约定保证整数类别 id 最大到2 ** 24依然精确mixup.py#L78-L83。lambda 的采样逻辑由MixupGenerator负责——默认在[0.0, 1.0]上均匀采样并受_joint_range_check约束random_generator/_2d/mixup.py。变更三CutMix 的同一套 dtype 约定RandomCutMixV2遵循完全相同的约定cutmix.py#L73-L80图像分支apply_transform用 bbox 掩码做区域替换输入为半精度时全程保持在半精度cutmix.py#L186-L199标签分支输出形状为(num_mix, B, 3)每列同样是原始标签 / 配对标签 / lambda且半精度输入下标签提升为 float32cutmix.py#L137-L163lambda 由裁剪区域面积占比推导lam_val w * h / (width * height)use_correct_lambdaTrue时返回1 - lam_val与 CutMix 原论文一致默认False时返回lam_val并发出DeprecationWarningcutmix.py#L127-L135。测试验证精确性与 dtype 保持的回归防线该变更在 tests/augmentation/test_conventions_mix.py 中有系统性验证其中与本次修复最直接的是# tests/augmentation/test_conventions_mix.py#L538-L558 pytest.mark.parametrize(image_dtype, [torch.float16, torch.bfloat16]) pytest.mark.parametrize(p, [0.0, 1.0]) def test_convention_mix_labels_stay_exact_for_half_precision_images(self, image_dtype, p): # Fixed by #4661: labels used to be cast to the image dtype, so bfloat16 returned [256, 1000] here (#4657). image torch.rand(2, 1, 4, 4, dtypeimage_dtype) labels torch.tensor([257, 999]) ... assert output.dtype image_dtype and mixed.dtype torch.float32 assert mixed[..., 0].flatten().tolist() [257.0, 999.0]它同时断言三件事图像输出 dtype 与输入一致output.dtype image_dtype标签输出为 float32mixed.dtype torch.float32大类别 id 精确保留257.0、999.0不丢精度。此外回放replay路径也有配套测试test_convention_mix_forward_parameters_replay_with_class_4706验证forward_parameters()产出的字典不含dtype键forward从输入张量实时取 dtype因而在 float32 上采样、float64 上回放时标签会正确输出 float64而非沿用旧字典test_conventions_mix.py#L560-L597。实战用法与注意事项以下示例可直接运行展示 bfloat16 输入下的 dtype 保持行为import torch import kornia as K torch.manual_seed(1) input torch.rand(2, 1, 3, 3, dtypetorch.bfloat16) # 半精度图像 label torch.tensor([257, 999]) # 超过半精度表示范围的大类别 id mixup K.RandomMixUpV2(data_keys[input, class]) images, labels mixup(input, label) assert images.dtype torch.bfloat16 # 图像保持在 bfloat16 assert labels.dtype torch.float32 # 标签提升为 float32id 精确 print(labels) # 形如 tensor([[257., 999., 0.19], ...])CutMix 用法一致cutmix K.RandomCutMixV2(data_keys[input, class], use_correct_lambdaTrue) images, labels cutmix(input, label) # labels 形状为 (num_mix, B, 3)配合 mix 标签训练时损失计算按 docstring 中的约定写法mixup.py#L46-L58import torch.nn.functional as F def loss_mixup(y, logits): criterion F.cross_entropy loss_a criterion(logits, y[:, 0].long(), reductionnone) loss_b criterion(logits, y[:, 1].long(), reductionnone) return ((1 - y[:, 2]) * loss_a y[:, 2] * loss_b).mean()使用中的关键注意事项data_keys[input, class]是启用标签混合的前提标签必须是 1 维张量shape(B,)输出为浮点标签矩阵p是批次级门控每次调用只采样一次选中则整批混合未选中p0时图像原样返回、标签列重复原始标签两次且 lambda 为 0见 mixup.py#L78-L91 的 Convention 说明半精度输入下不要期望标签也是半精度——这是有意为之的精度保护标签保持 float32 不会破坏与图像 dtype 的配对使用整数张量输入仍会被拒绝混合前请先归一化到浮点域uint8图像需先除以 255 转换回放采样参数params时dtype 永远以当前输入张量为准不要依赖旧参数字典中记录的 dtype。小结changelog.d/4471.fixed.md记录的修复虽然只有一句话却在源码层面涉及三条关键链路MixAugmentationBaseV2.transform_tensor的 dtype 白名单bfloat16 纳入、MixUp/CutMix 标签分支的calc_dtype提升规则半精度 → float32、以及回放路径的输入实时取 dtype 逻辑。配合tests/augmentation/test_conventions_mix.py中针对257/999这类大类别 id 的回归测试Kornia 的 mix 增强现在可以在 AMPAutomatic Mixed Precision训练流程中安全使用图像保持半精度以节省显存标签提升为 float32 以保证分类精度。【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址: https://gitcode.com/gh_mirrors/ko/kornia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

真空喷涂机品牌推荐:从工艺流程到设备选型多维度完整分析

真空喷涂机品牌推荐:从工艺流程到设备选型多维度完整分析

在水产饲料和宠物食品加工中,油脂、诱食剂及部分热敏性营养组分通常需要在膨化和烘干后添加。真空喷涂机在不同真空度情况下,使脂肪或脂溶性的维生素等液体原料渗透到颗粒内部,提高液体添加比例,满足动物能量要求。布勒围绕水产饲…

2026/9/24 16:01:08 阅读更多 →
QuantsPlaybook:100+券商金工研报复现的完整指南,三步跑通你的第一个因子

QuantsPlaybook:100+券商金工研报复现的完整指南,三步跑通你的第一个因子

QuantsPlaybook:100券商金工研报复现的完整指南,三步跑通你的第一个因子 【免费下载链接】QuantsPlaybook 量化研究-券商金工研报复现 项目地址: https://gitcode.com/GitHub_Trending/qu/QuantsPlaybook QuantsPlaybook 是一个用 Python 复现 10…

2026/9/24 16:01:08 阅读更多 →
Dopamine BarPlotter 可视化指南:用 matplotlib + pygame 绘制强化学习 Agent 行为分布柱状图

Dopamine BarPlotter 可视化指南:用 matplotlib + pygame 绘制强化学习 Agent 行为分布柱状图

机器学习深度学习 【免费下载链接】dopamine Dopamine is a research framework for fast prototyping of reinforcement learning algorithms. 项目地址: https://gitcode.com/gh_mirrors/do/dopamine 点击查看 免费下载 导读 本文围绕 Dopamine 强化学习研究框…

2026/9/24 16:01:08 阅读更多 →

最新新闻

如何快速接入支付宝支付?alipay_sdk_cj仓颉原生SDK完全指南

如何快速接入支付宝支付?alipay_sdk_cj仓颉原生SDK完全指南

如何快速接入支付宝支付?alipay_sdk_cj仓颉原生SDK完全指南 【免费下载链接】alipay_sdk_cj AliPay Sdk for 仓颉 支付宝接口后端sdk,方便cangjie开发者快速接入支付宝的支付接口(目前只支持最广泛使用的商户直接接入模式,只支持最…

2026/9/24 16:36:43 阅读更多 →
Spring注解--@Async异步执行的方法

Spring注解--@Async异步执行的方法

原文网址:Spring注解--Async异步执行的方法-CSDN博客 简介 本文介绍Spring的Async的用法。Async是用来异步执行任务的。 基础代码 正常情况下,执行两个任务是这样的: Controller package com.knife.example.controller;import io.swagg…

2026/9/24 16:36:43 阅读更多 →
幂等,kafka,mysql,kafka,redis,linux,bean声明周期,spring启动,AQS,位运算模运算,sql取每个班级的前3名,各种文件流,nginx, aop,分库分表

幂等,kafka,mysql,kafka,redis,linux,bean声明周期,spring启动,AQS,位运算模运算,sql取每个班级的前3名,各种文件流,nginx, aop,分库分表

1,幂等 幂等在接口、消息队列 和防抖中都有见到,所以也是经常被问到的 最长用、也是最通用的方法就是给消息加个唯一标识,然后在消费端 加上业务判断,到缓存或者数据库中查询是否已经存在这个标识,存在说明已经消费过了,就跳过。否则就消费,并保存到缓存或数据库中。…

2026/9/24 16:36:43 阅读更多 →
16-U-Boot环境变量系统

16-U-Boot环境变量系统

文章目录 一、概述 二、形象比喻:办公室的白板和档案柜 三、环境变量工作流程 四、核心环境变量详解 4.1 启动控制类 4.2 内核加载地址类 4.3 bootargs -- 内核命令行参数 4.4 网络配置类 4.5 分区和启动路径类 五、环境变量操作命令 六、环境变量存储机制 6.1 RK3506 的存储配…

2026/9/24 16:36:43 阅读更多 →
Open-Meteo 免费天气预報 API:无需 API 密钥获取 16 天逐小时预报

Open-Meteo 免费天气预報 API:无需 API 密钥获取 16 天逐小时预报

Open-Meteo 免费天气预報 API:无需 API 密钥获取 16 天逐小时预报 【免费下载链接】open-meteo Free Weather Forecast API for non-commercial use 项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo 给应用加一个天气页面,或者做研…

2026/9/24 16:36:43 阅读更多 →
AI Agent 脚手架系统架构设计:基于 Spring AI + Google ADK 的三层架构与技术选型实践

AI Agent 脚手架系统架构设计:基于 Spring AI + Google ADK 的三层架构与技术选型实践

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、…

2026/9/24 16:35:42 阅读更多 →

日新闻

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

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

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

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →