Kornia YUV422 转换中的色度平面形状校验:`yuv422_to_rgb` 如何用 `ShapeError` 取代裸 `RuntimeError`
计算机视觉人工智能深度学习图像处理【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址https://gitcode.com/gh_mirrors/ko/kornia点击查看免费下载导读本文围绕 Kornia 颜色空间转换模块中的一个具体修复展开在yuv422_to_rgb中新增对色度chroma平面高度的显式校验使得输入形状不匹配时抛出语义明确的ShapeError而不是在底层torch.cat处崩溃并抛出一个裸RuntimeError。通过本文你将理解 4:2:2 色度子采样对张量形状的精确约束、Kornia 异常体系的继承关系ShapeError为什么是抓不到的以及这一改动对调用方错误处理代码的潜在影响。背景4:2:2 子采样下的 YUV 平面形状约定Kornia 的 YUV 系列转换遵循 BT.470-5M/PAL 标准的取值其中yuv422_to_rgb接收两个独立的平面张量imagey亮度luma平面形状为(*, 1, H, W)imageuv色度chroma平面形状为(*, 2, H, W/2)。关键点在于4:2:2 只对宽度进行 1/2 子采样高度保持不变因此色度平面与亮度平面拥有相同的高度H。这一点与它的 4:2:0 孪生兄弟yuv420_to_rgb明显不同——后者要求色度平面在高度和宽度两个轴上都减半即(*, 2, H/2, W/2)。相关实现位于 kornia/color/yuv.py。在 Kornia 中这两个函数分别对应的模块封装是Yuv420ToRgb与Yuv422ToRgb见 kornia/color/yuv.py并统一通过kornia.color命名空间导出见 kornia/color/init.py。修复内容为yuv422_to_rgb补上高度校验本次变更对应 changelog 条目 changelog.d/migration-118.fixed.md的核心是校验yuv422_to_rgb中色度平面的高度。此前该函数的形状守卫只检查了宽度比例色度宽度必须为亮度宽度的一半却没有检查高度必须相等当用户传入一个高度不匹配的色度平面时代码会一路执行到torch.cat在那里以一条难以定位的裸RuntimeError结束。修复后的形状守卫位于 kornia/color/yuv.py完整逻辑为if ( len(imageuv.shape) 2 or len(imagey.shape) 2 or imagey.shape[-2] ! imageuv.shape[-2] or imagey.shape[-1] ! 2 * imageuv.shape[-1] ): raise ShapeError( fInput imageuv H must match the luma plane and W must be half its size. fGot {imagey.shape} and {imageuv.shape} )对照yuv420_to_rgb的守卫kornia/color/yuv.py可以看出两者的差异正是子采样约定的体现函数色度高度约束色度宽度约束yuv420_to_rgbimagey.shape[-2] 2 * imageuv.shape[-2]减半imagey.shape[-1] 2 * imageuv.shape[-1]减半yuv422_to_rgbimagey.shape[-2] imageuv.shape[-2]相等imagey.shape[-1] 2 * imageuv.shape[-1]减半在守卫通过之后函数才执行先上采样、再拼接的流程色度平面沿宽度方向repeat_interleave(2, dim-1)扩展为与亮度同宽随后与亮度平面在通道维拼接成 4:4:4 张量最后交给yuv_to_rgb见 kornia/color/yuv.py。为什么异常类型很重要ShapeError不属于RuntimeError这次修复不仅是提前报错还改变了错误的可捕获性。Kornia 的自定义异常体系定义在 kornia/core/exceptions.pyclass BaseError(Exception): Base exception class for all Kornia errors. class ShapeError(BaseError): Raised when tensor shape validation fails.也就是说异常继承链为ShapeError - BaseError - ExceptionBaseError直接继承自Exception并没有经过RuntimeError。因此任何在调用yuv422_to_rgb时用except RuntimeError来兜底畸形色度平面的代码在这项修复之后将不再能捕获到该错误因为现在抛出的是ShapeError。这是对调用方而言最重要的兼容性变化——如果你有这样的捕获逻辑需要改为捕获ShapeError或更宽泛的BaseError。行为不变性正常输入不受影响该修复刻意保持了向后兼容任何之前能正常工作的输入其行为都不会改变。原因在于旧代码中torch.cat本身就会拒绝所有高度不匹配的拼接——只是以一种晦涩的底层错误形式失败新守卫只是把这些失败提前、并转化为语义清晰的ShapeError。换句话说这是一次错误路径上的可观测变化error-path observable change而非功能行为变化。边界情况与遗留问题#4056变更说明中还记录了一个值得注意的边界行为宽度为零的色度平面。当色度平面宽度为 0 且高度也不匹配时新的高度校验子句会短路宽度除法直接抛出ShapeError但当宽度为 0 且高度恰好匹配时旧的宽度比例校验仍会执行除法imagey.shape[-1] ! 2 * imageuv.shape[-1]即W ! 2 * 0此时会抛出ZeroDivisionError。这一情况在本次变更中未被处理被明确标注为遗留问题#4056。测试套件中对此有专门钉住的用例在 tests/color/test_yuv.py 中imgy torch.ones(1, 4, 6)搭配imguv torch.ones(2, 4, 0)被断言抛出ShapeError而 tests/color/test_yuv.py 则验证了亮度/色度一致地为零尺寸的输入0 2 * 0通过守卫会返回空的 RGB 平面钉住了空输入进、空输出出的约定。完整校验链从KORNIA_CHECK_SHAPE到自定义守卫值得注意的是yuv422_to_rgb中的形状守卫是在KORNIA_CHECK_SHAPE基础之上的第二层检查。函数开头先对两个输入分别执行通道维规格校验kornia/color/yuv.pyKORNIA_CHECK_SHAPE(imagey, [*, 1, H, W]) KORNIA_CHECK_SHAPE(imageuv, [*, 2, H, W])KORNIA_CHECK_SHAPE定义于 kornia/core/check.py负责校验张量的秩与通道数例如亮度必须是单通道、色度必须是双通道而新增的守卫则进一步校验具体的空间尺寸关系高度相等、宽度减半。两者分工互补前者保证形状规格正确后者保证平面间相对尺寸正确。此外需要注意一个性能与可禁用性相关的细节KORNIA_CHECK_SHAPE可通过disable_checks()或KORNIA_CHECKS环境变量在 Python 模式下关闭见 kornia/core/check.py但自定义守卫中的显式raise ShapeError不受该开关控制——它总是执行。因此在关闭校验以追求极致性能的部署场景下平面间尺寸错误仍会被拦截并抛出ShapeError只是错误信息可能更晚暴露仍会在torch.cat处失败。结论从崩溃到契约这次修复将yuv422_to_rgb从让torch.cat用裸RuntimeError宣告失败提升为以ShapeError明确宣告形状契约违约。对使用者而言正确的姿势是始终保证色度平面高度等于亮度平面高度、宽度为其一半4:2:2 只子采样宽度错误处理优先捕获ShapeError或BaseError而非假设RuntimeError能兜住所有失败留意 #4056零宽度色度平面在高度匹配时仍会触发ZeroDivisionError可提前自行校验。相关代码与测试的入口为 kornia/color/yuv.py、kornia/core/exceptions.py 与 tests/color/test_yuv.py可作为深入阅读的起点。赞分享计算机视觉人工智能深度学习图像处理【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址https://gitcode.com/gh_mirrors/ko/kornia点击查看免费下载相关推荐Kornia pixel2cam 深度张量形状校验修复Bx1xHxW 规范与迁移指南Kornia pixel2cam 深度张量形状校验修复 Bx1xHxW 规范与迁移指南 pixel2cam 是 Kornia 中将像素坐标反投影到相机坐标系的计算机视觉深度学习人工智能图像处理Kornia 几何相机 API 加固pixel2cam 对 intrinsics_inv 完整 Bx4x4 形状校验解析Kornia 几何相机 API 加固pixel2cam 对 intrinsics_inv 完整 Bx4x4 形状校验解析 导读 本文围绕 Kornia 发布变计算机视觉深度学习人工智能图像处理CANN ops-cv Yuv444ToYuv422 算子详解YUV444 到 YUV422 色度子采样转换的实现与验证CANN ops cv Yuv444ToYuv422 算子详解YUV444 到 YUV422 色度子采样转换的实现与验证 导读 本文以 CANN ops cv算子库人工智能计算机视觉图像处理CANN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

医学图像分割最小可行系统:U-Net/DeepLabV3+/nnUNet即插即用

医学图像分割最小可行系统:U-Net/DeepLabV3+/nnUNet即插即用

简介:本资源是一份面向计算机专业本科生的毕业设计或课程作业实践包,聚焦基于深度学习的医学图像语义分割任务,适用于AI医疗方向入门到进阶的学习与复现。项目融合深度学习建模、Python端训练部署与C端高性能推理优化,覆盖数据预处…

2026/9/23 14:47:07 阅读更多 →
EOSIO 代币转账实战:使用 cleos transfer 转移 eosio.token 合约代币

EOSIO 代币转账实战:使用 cleos transfer 转移 eosio.token 合约代币

区块链 【免费下载链接】eos An open source smart contract platform 项目地址: https://gitcode.com/gh_mirrors/eo/eos 点击查看 免费下载 本指南以 EOSIO 开源智能合约平台(本仓库 eo/eos)中 cleos 客户端的 transfer 子命令为核心&…

2026/9/23 14:46:06 阅读更多 →
PHPStan 错误码 offsetAccess.noDim 完全指南:理解并修复「空维度读取」问题

PHPStan 错误码 offsetAccess.noDim 完全指南:理解并修复「空维度读取」问题

开发工具代码质量静态分析 【免费下载链接】phpstan PHP Static Analysis Tool - discover bugs in your code without running it! 项目地址: https://gitcode.com/gh_mirrors/ph/phpstan 点击查看 免费下载 导读 offsetAccess.noDim 是 PHPStan 报告的一类数组偏…

2026/9/23 14:46:05 阅读更多 →

最新新闻

templ ADR 0001 解析:如何在文本行内书写 `@Component()` 组件表达式

templ ADR 0001 解析:如何在文本行内书写 `@Component()` 组件表达式

开发工具代码生成后端 【免费下载链接】templ A language for writing HTML user interfaces in Go. 项目地址: https://gitcode.com/gh_mirrors/te/templ 点击查看 免费下载 符号在 templ 模板语言中用于调用组件表达式(templ element expression&…

2026/9/24 17:00:11 阅读更多 →
刷题笔记:

刷题笔记:

标准刷题结构:public class Main{ public static void main(String[] args){ } }输入:import java.util.Scanner; public class Main{ public class void main(String[] args){ Scanner sc new Scanner(String.in); } }格式化输出:printf(&…

2026/9/24 17:00:11 阅读更多 →
Jackett 跨平台部署 3 步跑通 BT Tracker 聚合

Jackett 跨平台部署 3 步跑通 BT Tracker 聚合

Jackett 跨平台部署 3 步跑通 BT Tracker 聚合 Jackett 把多个 BT Tracker 的搜索结果统一成 Torznab API,让 Sonarr、Radarr 等客户端免适配直接调用。想在 Windows、macOS、Linux 上部署?这篇教程按场景给最短安装路径,并覆盖启动验证、后…

2026/9/24 17:00:11 阅读更多 →
Quick 共享示例(Shared Examples)与 Behavior:用共享断言消除测试样板代码

Quick 共享示例(Shared Examples)与 Behavior:用共享断言消除测试样板代码

Quick 共享示例(Shared Examples)与 Behavior:用共享断言消除测试样板代码 【免费下载链接】Quick The Swift (and Objective-C) testing framework. 项目地址: https://gitcode.com/gh_mirrors/qu/Quick 在 Swift/Objective-C 测试中…

2026/9/24 17:00:11 阅读更多 →
Humanizer InDate.Nine 全面解析:用 DateOnly 表达 9 天/9 周/9 个月/9 年后的日期

Humanizer InDate.Nine 全面解析:用 DateOnly 表达 9 天/9 周/9 个月/9 年后的日期

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 导读 …

2026/9/24 17:00:10 阅读更多 →
gsd-core 配置读取修复解析:`config-get --default true` 如何消除 Nyquist 校验开关的 stderr 噪音与空变量回退

gsd-core 配置读取修复解析:`config-get --default true` 如何消除 Nyquist 校验开关的 stderr 噪音与空变量回退

gsd-core 配置读取修复解析:config-get --default true 如何消除 Nyquist 校验开关的 stderr 噪音与空变量回退 【免费下载链接】gsd-core Git. Ship. Done - Core 项目地址: https://gitcode.com/gh_mirrors/ge/gsd-core 本文以 gsd-core 仓库中归档变更集 .…

2026/9/24 16:59:10 阅读更多 →

日新闻

基于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 阅读更多 →